diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2018-12-04 10:30:35 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-04 10:30:35 -0800 |
commit | bebbeb54f177bdc2cfdff71d6a256a35f2f2057b (patch) | |
tree | 80609eb177ddab4edae30323d42152e9ab59ba9b /test/spec/conversions.wast | |
parent | b4badb815ec844e438a05d501eafb6bb99383bc6 (diff) | |
download | binaryen-bebbeb54f177bdc2cfdff71d6a256a35f2f2057b.tar.gz binaryen-bebbeb54f177bdc2cfdff71d6a256a35f2f2057b.tar.bz2 binaryen-bebbeb54f177bdc2cfdff71d6a256a35f2f2057b.zip |
Implement nontrapping float-to-int instructions (#1780)
Diffstat (limited to 'test/spec/conversions.wast')
-rw-r--r-- | test/spec/conversions.wast | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/test/spec/conversions.wast b/test/spec/conversions.wast index 17036a75f..21f058897 100644 --- a/test/spec/conversions.wast +++ b/test/spec/conversions.wast @@ -10,6 +10,14 @@ (func (export "i64.trunc_u_f32") (param $x f32) (result i64) (i64.trunc_u/f32 (get_local $x))) (func (export "i64.trunc_s_f64") (param $x f64) (result i64) (i64.trunc_s/f64 (get_local $x))) (func (export "i64.trunc_u_f64") (param $x f64) (result i64) (i64.trunc_u/f64 (get_local $x))) + (func (export "i32.trunc_s_sat_f32") (param $x f32) (result i32) (i32.trunc_s:sat/f32 (get_local $x))) + (func (export "i32.trunc_u_sat_f32") (param $x f32) (result i32) (i32.trunc_u:sat/f32 (get_local $x))) + (func (export "i32.trunc_s_sat_f64") (param $x f64) (result i32) (i32.trunc_s:sat/f64 (get_local $x))) + (func (export "i32.trunc_u_sat_f64") (param $x f64) (result i32) (i32.trunc_u:sat/f64 (get_local $x))) + (func (export "i64.trunc_s_sat_f32") (param $x f32) (result i64) (i64.trunc_s:sat/f32 (get_local $x))) + (func (export "i64.trunc_u_sat_f32") (param $x f32) (result i64) (i64.trunc_u:sat/f32 (get_local $x))) + (func (export "i64.trunc_s_sat_f64") (param $x f64) (result i64) (i64.trunc_s:sat/f64 (get_local $x))) + (func (export "i64.trunc_u_sat_f64") (param $x f64) (result i64) (i64.trunc_u:sat/f64 (get_local $x))) (func (export "f32.convert_s_i32") (param $x i32) (result f32) (f32.convert_s/i32 (get_local $x))) (func (export "f32.convert_s_i64") (param $x i64) (result f32) (f32.convert_s/i64 (get_local $x))) (func (export "f64.convert_s_i32") (param $x i32) (result f64) (f64.convert_s/i32 (get_local $x))) @@ -217,6 +225,170 @@ (assert_trap (invoke "i64.trunc_u_f64" (f64.const -infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -1.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -0x1.19999ap+0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -1.5)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -1.9)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -2.0)) (i32.const -2)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 2147483520.0)) (i32.const 2147483520)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -2147483648.0)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const 2147483648.0)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -2147483904.0)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const infinity)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const -infinity)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f32" (f32.const nan)) (i32.const 0)) + +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 1.9)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 2.0)) (i32.const 2)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 4294967040.0)) (i32.const -256)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -0x1.ccccccp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -0x1.fffffep-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const 4294967296.0)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -1.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const infinity)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const -infinity)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f32" (f32.const nan)) (i32.const 0)) + +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -1.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -1.5)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -1.9)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -2.0)) (i32.const -2)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 2147483647.0)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -2147483648.0)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const 2147483648.0)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -2147483649.0)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const infinity)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const -infinity)) (i32.const -2147483648)) +(assert_return (invoke "i32.trunc_s_sat_f64" (f64.const nan)) (i32.const 0)) + +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1.9)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 2.0)) (i32.const 2)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 4294967295.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1e8)) (i32.const 100000000)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 4294967296.0)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -1.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1e16)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 1e30)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const 9223372036854775808)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const infinity)) (i32.const 4294967295)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const -infinity)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_sat_f64" (f64.const nan)) (i32.const 0)) + +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -0x1.19999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const 9223372036854775808.0)) (i64.const 9223372036854775807)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -9223373136366403584.0)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const infinity)) (i64.const 9223372036854775807)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const -infinity)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f32" (f32.const nan)) (i64.const 0)) + +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 4294967296)) (i64.const 4294967296)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -0x1.ccccccp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -0x1.fffffep-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const 18446744073709551616.0)) (i64.const 18446744073709551615)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -1.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const infinity)) (i64.const 18446744073709551615)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const -infinity)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f32" (f32.const nan)) (i64.const 0)) + +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const 9223372036854775808.0)) (i64.const 9223372036854775807)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -9223372036854777856.0)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const infinity)) (i64.const 9223372036854775807)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const -infinity)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_s_sat_f64" (f64.const nan)) (i64.const 0)) + +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 4294967295)) (i64.const 0xffffffff)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 4294967296)) (i64.const 0x100000000)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 18446744073709549568.0)) (i64.const -2048)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 1e8)) (i64.const 100000000)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 1e16)) (i64.const 10000000000000000)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const 18446744073709551616.0)) (i64.const 18446744073709551615)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -1.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const infinity)) (i64.const 18446744073709551615)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const -infinity)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_sat_f64" (f64.const nan)) (i64.const 0)) + (assert_return (invoke "f32.convert_s_i32" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const 0)) (f32.const 0.0)) |