Improve Math#sign (#72)

This commit is contained in:
Max Graey 2018-04-12 20:26:50 +03:00 committed by Daniel Wirtz
parent 2002e32c9c
commit 1cea3c6f08
5 changed files with 40 additions and 50 deletions

View File

@ -1042,7 +1042,8 @@ export namespace NativeMath {
@inline @inline
export function sign(x: f64): f64 { export function sign(x: f64): f64 {
return x > 0 ? 1 : x < 0 ? -1 : x; // return x > 0 ? 1 : x < 0 ? -1 : x;
return builtin_abs<f64>(x) > 0 ? builtin_copysign<f64>(1, x) : x;
} }
export function sin(x: f64): f64 { // TODO export function sin(x: f64): f64 { // TODO
@ -2096,7 +2097,8 @@ export namespace NativeMathf {
@inline @inline
export function sign(x: f32): f32 { export function sign(x: f32): f32 {
return x > 0 ? 1 : x < 0 ? -1 : x; // return x > 0 ? 1 : x < 0 ? -1 : x;
return builtin_abs<f32>(x) > 0 ? builtin_copysign<f32>(1, x) : x;
} }
export function sin(x: f32): f32 { // TODO export function sin(x: f32): f32 { // TODO

View File

@ -5719,19 +5719,17 @@
(func $std/libm/sign (; 50 ;) (type $FF) (param $0 f64) (result f64) (func $std/libm/sign (; 50 ;) (type $FF) (param $0 f64) (result f64)
(local $1 f64) (local $1 f64)
(select (select
(f64.copysign
(f64.const 1) (f64.const 1)
(select
(f64.const -1)
(tee_local $1 (tee_local $1
(get_local $0) (get_local $0)
) )
(f64.lt )
(get_local $1) (get_local $1)
(f64.const 0)
)
)
(f64.gt (f64.gt
(f64.abs
(get_local $1) (get_local $1)
)
(f64.const 0) (f64.const 0)
) )
) )

View File

@ -6839,18 +6839,16 @@
(br $~lib/math/NativeMath.sign|inlined.0 (br $~lib/math/NativeMath.sign|inlined.0
(if (result f64) (if (result f64)
(f64.gt (f64.gt
(f64.abs
(get_local $1) (get_local $1)
)
(f64.const 0) (f64.const 0)
) )
(f64.copysign
(f64.const 1) (f64.const 1)
(if (result f64)
(f64.lt
(get_local $1)
(f64.const 0)
)
(f64.const -1)
(get_local $1) (get_local $1)
) )
(get_local $1)
) )
) )
) )

View File

@ -12474,19 +12474,17 @@
(tee_local $4 (tee_local $4
(call $std/math/check<f64> (call $std/math/check<f64>
(select (select
(f64.copysign
(f64.const 1) (f64.const 1)
(select
(f64.const -1)
(tee_local $5 (tee_local $5
(get_local $0) (get_local $0)
) )
(f64.lt )
(get_local $5) (get_local $5)
(f64.const 0)
)
)
(f64.gt (f64.gt
(f64.abs
(get_local $5) (get_local $5)
)
(f64.const 0) (f64.const 0)
) )
) )
@ -12518,19 +12516,17 @@
(local $4 f32) (local $4 f32)
(call $std/math/check<f32> (call $std/math/check<f32>
(select (select
(f32.copysign
(f32.const 1) (f32.const 1)
(select
(f32.const -1)
(tee_local $4 (tee_local $4
(get_local $0) (get_local $0)
) )
(f32.lt )
(get_local $4) (get_local $4)
(f32.const 0)
)
)
(f32.gt (f32.gt
(f32.abs
(get_local $4) (get_local $4)
)
(f32.const 0) (f32.const 0)
) )
) )

View File

@ -14859,18 +14859,16 @@
(br $~lib/math/NativeMath.sign|inlined.0 (br $~lib/math/NativeMath.sign|inlined.0
(if (result f64) (if (result f64)
(f64.gt (f64.gt
(f64.abs
(get_local $4) (get_local $4)
)
(f64.const 0) (f64.const 0)
) )
(f64.copysign
(f64.const 1) (f64.const 1)
(if (result f64)
(f64.lt
(get_local $4)
(f64.const 0)
)
(f64.const -1)
(get_local $4) (get_local $4)
) )
(get_local $4)
) )
) )
) )
@ -14912,18 +14910,16 @@
(br $~lib/math/NativeMathf.sign|inlined.0 (br $~lib/math/NativeMathf.sign|inlined.0
(if (result f32) (if (result f32)
(f32.gt (f32.gt
(f32.abs
(get_local $4) (get_local $4)
)
(f32.const 0) (f32.const 0)
) )
(f32.copysign
(f32.const 1) (f32.const 1)
(if (result f32)
(f32.lt
(get_local $4)
(f32.const 0)
)
(f32.const -1)
(get_local $4) (get_local $4)
) )
(get_local $4)
) )
) )
) )