unlike some implementations, these functions perform the equivalent of
gcc's -ffloat-store on the result before returning. this is necessary
to raise underflow/overflow/inexact exceptions, perform the correct
rounding with denormals, etc.
--- /dev/null
+# see scalbn.s
--- /dev/null
+# see scalbnf.s
--- /dev/null
+# see scalbnl.s
--- /dev/null
+# see scalbn.s
--- /dev/null
+# see scalbnf.s
--- /dev/null
+# see scalbnl.s
--- /dev/null
+.global ldexp
+.type ldexp,@function
+ldexp:
+ nop
+
+.global scalbln
+.type scalbln,@function
+scalbln:
+ nop
+
+.global scalbn
+.type scalbn,@function
+scalbn:
+ fildl 12(%esp)
+ fldl 4(%esp)
+ fscale
+ fstp %st(1)
+ fstpl 4(%esp)
+ fldl 4(%esp)
+ ret
--- /dev/null
+.global ldexpf
+.type ldexpf,@function
+ldexpf:
+ nop
+
+.global scalblnf
+.type scalblnf,@function
+scalblnf:
+ nop
+
+.global scalbnf
+.type scalbnf,@function
+scalbnf:
+ fildl 8(%esp)
+ flds 4(%esp)
+ fscale
+ fstp %st(1)
+ fstps 4(%esp)
+ flds 4(%esp)
+ ret
--- /dev/null
+.global ldexpl
+.type ldexpl,@function
+ldexpl:
+ nop
+
+.global scalblnl
+.type scalblnl,@function
+scalblnl:
+ nop
+
+.global scalbnl
+.type scalbnl,@function
+scalbnl:
+ fildl 16(%esp)
+ fldt 4(%esp)
+ fscale
+ fstp %st(1)
+ ret