summaryrefslogtreecommitdiff
path: root/test/spec/conversions.wast
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2018-12-04 10:30:35 -0800
committerGitHub <noreply@github.com>2018-12-04 10:30:35 -0800
commitbebbeb54f177bdc2cfdff71d6a256a35f2f2057b (patch)
tree80609eb177ddab4edae30323d42152e9ab59ba9b /test/spec/conversions.wast
parentb4badb815ec844e438a05d501eafb6bb99383bc6 (diff)
downloadbinaryen-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.wast172
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))