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

@ -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)