Move some numeric builtins to stdlib; Minor refactoring

This commit is contained in:
dcodeIO
2018-04-17 02:50:38 +02:00
parent 6d0b5d92c2
commit 4929fca363
26 changed files with 1987 additions and 1746 deletions

View File

@ -1,5 +1,6 @@
(module
(type $FF (func (param f64) (result f64)))
(type $Fi (func (param f64) (result i32)))
(type $FFF (func (param f64 f64) (result f64)))
(type $FiF (func (param f64 i32) (result f64)))
(type $Ff (func (param f64) (result f32)))
@ -1306,7 +1307,18 @@
(get_local $0)
)
)
(func $~lib/math/NativeMath.atan (; 12 ;) (type $FF) (param $0 f64) (result f64)
(func $isNaN<f64> (; 12 ;) (type $Fi) (param $0 f64) (result i32)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
)
)
(func $~lib/math/NativeMath.atan (; 13 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 f64)
(local $3 i32)
@ -1338,14 +1350,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -1669,12 +1675,12 @@
(get_local $4)
)
)
(func $std/libm/atan (; 13 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/atan (; 14 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.atan
(get_local $0)
)
)
(func $~lib/math/NativeMath.atanh (; 14 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.atanh (; 15 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i64)
(local $3 i64)
@ -1771,12 +1777,12 @@
)
)
)
(func $std/libm/atanh (; 15 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/atanh (; 16 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.atanh
(get_local $0)
)
)
(func $~lib/math/NativeMath.atan2 (; 16 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.atan2 (; 17 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1788,25 +1794,13 @@
(i32.and
(if (result i32)
(tee_local $2
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
)
(get_local $2)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
)
(i32.const 1)
@ -2123,13 +2117,13 @@
)
)
)
(func $std/libm/atan2 (; 17 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/atan2 (; 18 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(call $~lib/math/NativeMath.atan2
(get_local $0)
(get_local $1)
)
)
(func $~lib/math/NativeMath.cbrt (; 18 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cbrt (; 19 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 f64)
(local $3 i32)
@ -2312,17 +2306,17 @@
)
)
)
(func $std/libm/cbrt (; 19 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cbrt (; 20 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.cbrt
(get_local $0)
)
)
(func $std/libm/ceil (; 20 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/ceil (; 21 ;) (type $FF) (param $0 f64) (result f64)
(f64.ceil
(get_local $0)
)
)
(func $std/libm/clz32 (; 21 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/clz32 (; 22 ;) (type $FF) (param $0 f64) (result f64)
(f64.convert_s/i32
(i32.clz
(i32.trunc_s/f64
@ -2331,15 +2325,15 @@
)
)
)
(func $~lib/math/NativeMath.cos (; 22 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cos (; 23 ;) (type $FF) (param $0 f64) (result f64)
(unreachable)
)
(func $std/libm/cos (; 23 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cos (; 24 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.cos
(get_local $0)
)
)
(func $~lib/math/NativeMath.expm1 (; 24 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.expm1 (; 25 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 i32)
(local $3 f64)
@ -2378,14 +2372,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -2785,7 +2773,7 @@
)
)
)
(func $~lib/math/NativeMath.scalbn (; 25 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(func $~lib/math/NativeMath.scalbn (; 26 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(local $2 f64)
(set_local $2
(get_local $0)
@ -2899,7 +2887,7 @@
)
)
)
(func $~lib/math/NativeMath.exp (; 26 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.exp (; 27 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -2932,14 +2920,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -3109,7 +3091,7 @@
(get_local $2)
)
)
(func $~lib/math/expo2 (; 27 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/expo2 (; 28 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(f64.mul
(f64.mul
@ -3126,7 +3108,7 @@
(get_local $1)
)
)
(func $~lib/math/NativeMath.cosh (; 28 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cosh (; 29 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i32)
(local $2 i64)
(set_local $0
@ -3213,32 +3195,32 @@
(get_local $0)
)
)
(func $std/libm/cosh (; 29 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cosh (; 30 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.cosh
(get_local $0)
)
)
(func $std/libm/exp (; 30 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/exp (; 31 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.exp
(get_local $0)
)
)
(func $std/libm/expm1 (; 31 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/expm1 (; 32 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.expm1
(get_local $0)
)
)
(func $std/libm/floor (; 32 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/floor (; 33 ;) (type $FF) (param $0 f64) (result f64)
(f64.floor
(get_local $0)
)
)
(func $std/libm/fround (; 33 ;) (type $Ff) (param $0 f64) (result f32)
(func $std/libm/fround (; 34 ;) (type $Ff) (param $0 f64) (result f32)
(f32.demote/f64
(get_local $0)
)
)
(func $~lib/math/NativeMath.hypot (; 34 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.hypot (; 35 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 f64)
(local $3 f64)
(local $4 i64)
@ -3507,13 +3489,13 @@
)
)
)
(func $std/libm/hypot (; 35 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/hypot (; 36 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(call $~lib/math/NativeMath.hypot
(get_local $0)
(get_local $1)
)
)
(func $~lib/math/NativeMath.imul (; 36 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.imul (; 37 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(f64.convert_s/i32
(i32.mul
(i32.trunc_s/f64
@ -3525,18 +3507,18 @@
)
)
)
(func $std/libm/imul (; 37 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/imul (; 38 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(call $~lib/math/NativeMath.imul
(get_local $0)
(get_local $1)
)
)
(func $std/libm/log (; 38 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log (; 39 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.log
(get_local $0)
)
)
(func $~lib/math/NativeMath.log10 (; 39 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.log10 (; 40 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 i32)
(local $3 i32)
@ -3854,17 +3836,17 @@
(get_local $0)
)
)
(func $std/libm/log10 (; 40 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log10 (; 41 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.log10
(get_local $0)
)
)
(func $std/libm/log1p (; 41 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log1p (; 42 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.log1p
(get_local $0)
)
)
(func $~lib/math/NativeMath.log2 (; 42 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.log2 (; 43 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 i32)
(local $3 f64)
@ -4170,24 +4152,24 @@
(get_local $1)
)
)
(func $std/libm/log2 (; 43 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log2 (; 44 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.log2
(get_local $0)
)
)
(func $std/libm/max (; 44 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/max (; 45 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(f64.max
(get_local $0)
(get_local $1)
)
)
(func $std/libm/min (; 45 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/min (; 46 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(f64.min
(get_local $0)
(get_local $1)
)
)
(func $~lib/math/NativeMath.pow (; 46 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.pow (; 47 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 f64)
(local $3 f64)
(local $4 i32)
@ -5586,13 +5568,13 @@
(f64.const 1.e+300)
)
)
(func $std/libm/pow (; 47 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/pow (; 48 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(call $~lib/math/NativeMath.pow
(get_local $0)
(get_local $1)
)
)
(func $~lib/math/NativeMath.round (; 48 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.round (; 49 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 i64)
(local $3 i32)
@ -5725,12 +5707,12 @@
)
)
)
(func $std/libm/round (; 49 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/round (; 50 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.round
(get_local $0)
)
)
(func $std/libm/sign (; 50 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sign (; 51 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(select
(f64.copysign
@ -5748,7 +5730,7 @@
)
)
)
(func $~lib/math/NativeMath.sinh (; 51 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.sinh (; 52 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(local $2 f64)
(local $3 i64)
@ -5867,17 +5849,17 @@
)
)
)
(func $std/libm/sinh (; 52 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sinh (; 53 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.sinh
(get_local $0)
)
)
(func $std/libm/sqrt (; 53 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sqrt (; 54 ;) (type $FF) (param $0 f64) (result f64)
(f64.sqrt
(get_local $0)
)
)
(func $~lib/math/NativeMath.tanh (; 54 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.tanh (; 55 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 i32)
@ -6000,12 +5982,12 @@
(get_local $3)
)
)
(func $std/libm/tanh (; 55 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/tanh (; 56 ;) (type $FF) (param $0 f64) (result f64)
(call $~lib/math/NativeMath.tanh
(get_local $0)
)
)
(func $std/libm/trunc (; 56 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/trunc (; 57 ;) (type $FF) (param $0 f64) (result f64)
(f64.trunc
(get_local $0)
)

View File

@ -2,8 +2,9 @@
(type $F (func (result f64)))
(type $FF (func (param f64) (result f64)))
(type $f (func (result f32)))
(type $FFF (func (param f64 f64) (result f64)))
(type $Fi (func (param f64) (result i32)))
(type $i (func (result i32)))
(type $FFF (func (param f64 f64) (result f64)))
(type $FiF (func (param f64 i32) (result f64)))
(type $Ff (func (param f64) (result f32)))
(global $std/libm/E f64 (f64.const 2.718281828459045))
@ -14,6 +15,7 @@
(global $std/libm/PI f64 (f64.const 3.141592653589793))
(global $std/libm/SQRT1_2 f64 (f64.const 0.7071067811865476))
(global $std/libm/SQRT2 f64 (f64.const 1.4142135623730951))
(global $NaN f64 (f64.const nan:0x8000000000000))
(global $HEAP_BASE i32 (i32.const 4))
(memory $0 1)
(export "E" (global $std/libm/E))
@ -1553,7 +1555,26 @@
)
)
)
(func $~lib/math/NativeMath.atan (; 12 ;) (type $FF) (param $0 f64) (result f64)
(func $isNaN<f64> (; 12 ;) (type $Fi) (param $0 f64) (result i32)
(return
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.shr_u
(i64.const -1)
(i64.const 1)
)
)
(i64.shl
(i64.const 2047)
(i64.const 52)
)
)
)
)
(func $~lib/math/NativeMath.atan (; 13 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i32)
(local $2 i32)
(local $3 f64)
@ -1593,14 +1614,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -1970,14 +1985,14 @@
)
)
)
(func $std/libm/atan (; 13 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/atan (; 14 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.atan
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.atanh (; 14 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.atanh (; 15 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i64)
(local $3 i64)
@ -2087,14 +2102,14 @@
)
)
)
(func $std/libm/atanh (; 15 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/atanh (; 16 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.atanh
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.atan2 (; 16 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.atan2 (; 17 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i32)
(local $3 i64)
(local $4 i32)
@ -2108,25 +2123,13 @@
(i32.and
(if (result i32)
(tee_local $2
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
)
(get_local $2)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
)
(i32.const 1)
@ -2586,7 +2589,7 @@
(f64.const 0)
)
)
(func $std/libm/atan2 (; 17 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/atan2 (; 18 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(call $~lib/math/NativeMath.atan2
(get_local $0)
@ -2594,7 +2597,7 @@
)
)
)
(func $~lib/math/NativeMath.cbrt (; 18 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cbrt (; 19 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 f64)
@ -2813,14 +2816,14 @@
(get_local $3)
)
)
(func $std/libm/cbrt (; 19 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cbrt (; 20 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.cbrt
(get_local $0)
)
)
)
(func $std/libm/ceil (; 20 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/ceil (; 21 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.ceil|inlined.0 (result f64)
@ -2835,7 +2838,7 @@
)
)
)
(func $std/libm/clz32 (; 21 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/clz32 (; 22 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.clz32|inlined.0 (result f64)
@ -2854,20 +2857,20 @@
)
)
)
(func $~lib/math/NativeMath.cos (; 22 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cos (; 23 ;) (type $FF) (param $0 f64) (result f64)
(unreachable)
(return
(f64.const 0)
)
)
(func $std/libm/cos (; 23 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cos (; 24 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.cos
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.expm1 (; 24 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.expm1 (; 25 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 i32)
@ -2920,14 +2923,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -3364,7 +3361,7 @@
(get_local $14)
)
)
(func $~lib/math/NativeMath.scalbn (; 25 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(func $~lib/math/NativeMath.scalbn (; 26 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(local $2 f64)
(nop)
(set_local $2
@ -3485,7 +3482,7 @@
)
)
)
(func $~lib/math/NativeMath.exp (; 26 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.exp (; 27 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i32)
(local $2 i32)
(local $3 f64)
@ -3524,14 +3521,8 @@
)
(block
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
(return
(get_local $0)
@ -3724,7 +3715,7 @@
)
)
)
(func $~lib/math/expo2 (; 27 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/expo2 (; 28 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(nop)
(set_local $1
@ -3761,7 +3752,7 @@
)
)
)
(func $~lib/math/NativeMath.cosh (; 28 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.cosh (; 29 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 f64)
@ -3870,28 +3861,28 @@
(get_local $3)
)
)
(func $std/libm/cosh (; 29 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/cosh (; 30 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.cosh
(get_local $0)
)
)
)
(func $std/libm/exp (; 30 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/exp (; 31 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.exp
(get_local $0)
)
)
)
(func $std/libm/expm1 (; 31 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/expm1 (; 32 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.expm1
(get_local $0)
)
)
)
(func $std/libm/floor (; 32 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/floor (; 33 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.floor|inlined.0 (result f64)
@ -3906,7 +3897,7 @@
)
)
)
(func $std/libm/fround (; 33 ;) (type $Ff) (param $0 f64) (result f32)
(func $std/libm/fround (; 34 ;) (type $Ff) (param $0 f64) (result f32)
(local $1 f64)
(return
(block $~lib/math/NativeMath.fround|inlined.0 (result f32)
@ -3921,7 +3912,7 @@
)
)
)
(func $~lib/math/NativeMath.hypot (; 34 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.hypot (; 35 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i64)
(local $3 i64)
(local $4 i64)
@ -4222,7 +4213,7 @@
)
)
)
(func $std/libm/hypot (; 35 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/hypot (; 36 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(call $~lib/math/NativeMath.hypot
(get_local $0)
@ -4230,7 +4221,7 @@
)
)
)
(func $~lib/math/NativeMath.imul (; 36 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.imul (; 37 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(f64.convert_s/i32
(i32.mul
@ -4244,7 +4235,7 @@
)
)
)
(func $std/libm/imul (; 37 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/imul (; 38 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(call $~lib/math/NativeMath.imul
(get_local $0)
@ -4252,14 +4243,14 @@
)
)
)
(func $std/libm/log (; 38 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log (; 39 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.log
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.log10 (; 39 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.log10 (; 40 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 i32)
@ -4648,21 +4639,21 @@
)
)
)
(func $std/libm/log10 (; 40 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log10 (; 41 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.log10
(get_local $0)
)
)
)
(func $std/libm/log1p (; 41 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log1p (; 42 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.log1p
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.log2 (; 42 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.log2 (; 43 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 i32)
@ -5038,14 +5029,14 @@
)
)
)
(func $std/libm/log2 (; 43 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/log2 (; 44 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.log2
(get_local $0)
)
)
)
(func $std/libm/max (; 44 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/max (; 45 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 f64)
(local $3 f64)
(return
@ -5065,7 +5056,7 @@
)
)
)
(func $std/libm/min (; 45 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/min (; 46 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 f64)
(local $3 f64)
(return
@ -5085,7 +5076,7 @@
)
)
)
(func $~lib/math/NativeMath.pow (; 46 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $~lib/math/NativeMath.pow (; 47 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i64)
(local $3 i32)
(local $4 i32)
@ -6664,7 +6655,7 @@
)
)
)
(func $std/libm/pow (; 47 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $std/libm/pow (; 48 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(call $~lib/math/NativeMath.pow
(get_local $0)
@ -6672,7 +6663,7 @@
)
)
)
(func $~lib/math/NativeMath.round (; 48 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.round (; 49 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 f64)
@ -6834,14 +6825,14 @@
(get_local $3)
)
)
(func $std/libm/round (; 49 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/round (; 50 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.round
(get_local $0)
)
)
)
(func $std/libm/sign (; 50 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sign (; 51 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.sign|inlined.0 (result f64)
@ -6866,20 +6857,20 @@
)
)
)
(func $~lib/math/NativeMath.sin (; 51 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.sin (; 52 ;) (type $FF) (param $0 f64) (result f64)
(unreachable)
(return
(f64.const 0)
)
)
(func $std/libm/sin (; 52 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sin (; 53 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.sin
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.sinh (; 53 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.sinh (; 54 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 f64)
(local $3 f64)
@ -7014,14 +7005,14 @@
(get_local $5)
)
)
(func $std/libm/sinh (; 54 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sinh (; 55 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.sinh
(get_local $0)
)
)
)
(func $std/libm/sqrt (; 55 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/sqrt (; 56 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.sqrt|inlined.0 (result f64)
@ -7036,20 +7027,20 @@
)
)
)
(func $~lib/math/NativeMath.tan (; 56 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.tan (; 57 ;) (type $FF) (param $0 f64) (result f64)
(unreachable)
(return
(f64.const 0)
)
)
(func $std/libm/tan (; 57 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/tan (; 58 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.tan
(get_local $0)
)
)
)
(func $~lib/math/NativeMath.tanh (; 58 ;) (type $FF) (param $0 f64) (result f64)
(func $~lib/math/NativeMath.tanh (; 59 ;) (type $FF) (param $0 f64) (result f64)
(local $1 i64)
(local $2 i32)
(local $3 i32)
@ -7195,14 +7186,14 @@
)
)
)
(func $std/libm/tanh (; 59 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/tanh (; 60 ;) (type $FF) (param $0 f64) (result f64)
(return
(call $~lib/math/NativeMath.tanh
(get_local $0)
)
)
)
(func $std/libm/trunc (; 60 ;) (type $FF) (param $0 f64) (result f64)
(func $std/libm/trunc (; 61 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64)
(return
(block $~lib/math/NativeMath.trunc|inlined.0 (result f64)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,12 @@
(module
(type $FFFi (func (param f64 f64 f64) (result i32)))
(type $FFF (func (param f64 f64) (result f64)))
(type $Fi (func (param f64) (result i32)))
(type $FFi (func (param f64 f64) (result i32)))
(type $iiiiv (func (param i32 i32 i32 i32)))
(type $fffi (func (param f32 f32 f32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $fi (func (param f32) (result i32)))
(type $ffi (func (param f32 f32) (result i32)))
(type $v (func))
(import "JSOp" "mod" (func $std/mod/JSOp.mod (param f64 f64) (result f64)))
@ -13,7 +15,18 @@
(data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s")
(export "memory" (memory $0))
(start $start)
(func $~lib/math/NativeMath.mod (; 2 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $isNaN<f64> (; 2 ;) (type $Fi) (param $0 f64) (result i32)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
)
)
(func $~lib/math/NativeMath.mod (; 3 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i64)
(local $3 i32)
(local $4 i64)
@ -67,14 +80,8 @@
)
)
(get_local $7)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
)
(i32.const 1)
@ -387,26 +394,14 @@
(get_local $0)
)
)
(func $std/mod/check<f64> (; 3 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
(func $std/mod/check<f64> (; 4 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
(return
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
)
)
@ -433,7 +428,7 @@
(get_local $1)
)
)
(func $std/mod/test_fmod (; 4 ;) (type $FFFi) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
(func $std/mod/test_fmod (; 5 ;) (type $FFFi) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
(local $3 i32)
(i32.and
(if (result i32)
@ -464,7 +459,20 @@
(i32.const 1)
)
)
(func $~lib/math/NativeMathf.mod (; 5 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(func $isNaN<f32> (; 6 ;) (type $fi) (param $0 f32) (result i32)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(f64.promote/f32
(get_local $0)
)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
)
)
(func $~lib/math/NativeMathf.mod (; 7 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -513,14 +521,8 @@
)
)
(get_local $3)
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $1)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $1)
)
)
(i32.const 1)
@ -818,26 +820,14 @@
(get_local $0)
)
)
(func $std/mod/check<f32> (; 6 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
(func $std/mod/check<f32> (; 8 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
(if
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $1)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $1)
)
(return
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $0)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $0)
)
)
)
@ -864,7 +854,7 @@
(get_local $1)
)
)
(func $std/mod/test_fmodf (; 7 ;) (type $fffi) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
(func $std/mod/test_fmodf (; 9 ;) (type $fffi) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
(call $std/mod/check<f32>
(call $~lib/math/NativeMathf.mod
(get_local $0)
@ -873,7 +863,7 @@
(get_local $2)
)
)
(func $start (; 8 ;) (type $v)
(func $start (; 10 ;) (type $v)
(if
(i32.eqz
(call $std/mod/test_fmod

View File

@ -1,22 +1,46 @@
(module
(type $FFFi (func (param f64 f64 f64) (result i32)))
(type $FFF (func (param f64 f64) (result f64)))
(type $FFi (func (param f64 f64) (result i32)))
(type $Fi (func (param f64) (result i32)))
(type $i (func (result i32)))
(type $FFi (func (param f64 f64) (result i32)))
(type $iiiiv (func (param i32 i32 i32 i32)))
(type $F (func (result f64)))
(type $fffi (func (param f32 f32 f32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $fi (func (param f32) (result i32)))
(type $ffi (func (param f32 f32) (result i32)))
(type $v (func))
(import "JSOp" "mod" (func $std/mod/JSOp.mod (param f64 f64) (result f64)))
(import "env" "abort" (func $abort (param i32 i32 i32 i32)))
(global $std/mod/js i32 (i32.const 1))
(global $NaN f64 (f64.const nan:0x8000000000000))
(global $Infinity f64 (f64.const inf))
(global $HEAP_BASE i32 (i32.const 28))
(memory $0 1)
(data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s\00")
(export "memory" (memory $0))
(start $start)
(func $~lib/math/NativeMath.mod (; 2 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(func $isNaN<f64> (; 2 ;) (type $Fi) (param $0 f64) (result i32)
(return
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.shr_u
(i64.const -1)
(i64.const 1)
)
)
(i64.shl
(i64.const 2047)
(i64.const 52)
)
)
)
)
(func $~lib/math/NativeMath.mod (; 3 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(local $2 i64)
(local $3 i64)
(local $4 i32)
@ -80,14 +104,8 @@
)
)
(get_local $7)
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
)
(i32.const 1)
@ -473,26 +491,14 @@
)
)
)
(func $std/mod/check<f64> (; 3 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
(func $std/mod/check<f64> (; 4 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
(if
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $1)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $1)
)
(return
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(get_local $0)
)
(i64.const 9223372036854775807)
)
(i64.const 9218868437227405312)
(call $isNaN<f64>
(get_local $0)
)
)
)
@ -523,7 +529,7 @@
)
)
)
(func $std/mod/test_fmod (; 4 ;) (type $FFFi) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
(func $std/mod/test_fmod (; 5 ;) (type $FFFi) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
(local $3 i32)
(return
(i32.and
@ -558,7 +564,28 @@
)
)
)
(func $~lib/math/NativeMathf.mod (; 5 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(func $isNaN<f32> (; 6 ;) (type $fi) (param $0 f32) (result i32)
(return
(i64.gt_u
(i64.and
(i64.reinterpret/f64
(f64.promote/f32
(get_local $0)
)
)
(i64.shr_u
(i64.const -1)
(i64.const 1)
)
)
(i64.shl
(i64.const 2047)
(i64.const 52)
)
)
)
)
(func $~lib/math/NativeMathf.mod (; 7 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -616,14 +643,8 @@
)
)
(get_local $7)
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $1)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $1)
)
)
(i32.const 1)
@ -996,26 +1017,14 @@
)
)
)
(func $std/mod/check<f32> (; 6 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
(func $std/mod/check<f32> (; 8 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
(if
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $1)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $1)
)
(return
(i32.gt_u
(i32.and
(i32.reinterpret/f32
(get_local $0)
)
(i32.const 2147483647)
)
(i32.const 2139095040)
(call $isNaN<f32>
(get_local $0)
)
)
)
@ -1046,7 +1055,7 @@
)
)
)
(func $std/mod/test_fmodf (; 7 ;) (type $fffi) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
(func $std/mod/test_fmodf (; 9 ;) (type $fffi) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
(return
(call $std/mod/check<f32>
(call $~lib/math/NativeMathf.mod
@ -1057,7 +1066,7 @@
)
)
)
(func $start (; 8 ;) (type $v)
(func $start (; 10 ;) (type $v)
(if
(i32.eqz
(call $std/mod/test_fmod

View File

@ -32,6 +32,7 @@
(global $std/operator-overloading/f (mut i32) (i32.const 0))
(global $std/operator-overloading/p1 (mut i32) (i32.const 0))
(global $std/operator-overloading/p2 (mut i32) (i32.const 0))
(global $NaN f64 (f64.const nan:0x8000000000000))
(global $std/operator-overloading/p (mut i32) (i32.const 0))
(global $std/operator-overloading/n1 (mut i32) (i32.const 0))
(global $std/operator-overloading/n2 (mut i32) (i32.const 0))

View File

@ -4,6 +4,7 @@
(type $iii (func (param i32 i32) (result i32)))
(type $iiii (func (param i32 i32 i32) (result i32)))
(type $iiF (func (param i32 i32) (result f64)))
(type $F (func (result f64)))
(type $iF (func (param i32) (result f64)))
(type $ii (func (param i32) (result i32)))
(type $iiiv (func (param i32 i32 i32)))
@ -20,6 +21,7 @@
(global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4))
(global $argumentCount (mut i32) (i32.const 0))
(global $~lib/internal/string/MAX_LENGTH i32 (i32.const 536870910))
(global $NaN f64 (f64.const nan:0x8000000000000))
(global $~lib/internal/string/CharCode.PLUS i32 (i32.const 43))
(global $~lib/internal/string/CharCode.MINUS i32 (i32.const 45))
(global $~lib/internal/string/CharCode.DOT i32 (i32.const 46))