|
| 1 | +(module |
| 2 | + |
| 3 | + ;; i64.extend_s/i32 |
| 4 | + (func $i64_extend_s_i32 (param $x i32) (result i64) (i64.extend_s/i32 (get_local $x))) |
| 5 | + (export "$i64_extend_s_i32" $i64_extend_s_i32) |
| 6 | + |
| 7 | + ;; i64.extend_u/i32 |
| 8 | + (func $i64_extend_u_i32 (param $x i32) (result i64) (i64.extend_u/i32 (get_local $x))) |
| 9 | + (export "$i64_extend_u_i32" $i64_extend_u_i32) |
| 10 | + |
| 11 | + ;; i32.wrap/i64 |
| 12 | + (func $i32_wrap_i64 (param $x i64) (result i32) (i32.wrap/i64 (get_local $x))) |
| 13 | + (export "$i32_wrap_i64" $i32_wrap_i64) |
| 14 | + |
| 15 | + ;; i32.trunc_s/f32 |
| 16 | + (func $i32_trunc_s_f32 (param $x f32) (result i32) (i32.trunc_s/f32 (get_local $x))) |
| 17 | + (export "$i32_trunc_s_f32" $i32_trunc_s_f32) |
| 18 | + |
| 19 | + ;; i32.trunc_u/f32 |
| 20 | + (func $i32_trunc_u_f32 (param $x f32) (result i32) (i32.trunc_u/f32 (get_local $x))) |
| 21 | + (export "$i32_trunc_u_f32" $i32_trunc_u_f32) |
| 22 | + |
| 23 | + ;; i64.trunc_s/f32 |
| 24 | + (func $i64_trunc_s_f32 (param $x f32) (result i64) (i64.trunc_s/f32 (get_local $x))) |
| 25 | + (export "$i64_trunc_s_f32" $i64_trunc_s_f32) |
| 26 | + |
| 27 | + ;; i64.trunc_u/f32 |
| 28 | + (func $i64_trunc_u_f32 (param $x f32) (result i64) (i64.trunc_u/f32 (get_local $x))) |
| 29 | + (export "$i64_trunc_u_f32" $i64_trunc_u_f32) |
| 30 | +) |
| 31 | + |
| 32 | +;; i64.extend_s/i32 |
| 33 | +(assert_eq (invoke "$i64_extend_s_i32" (i32.const 0)) (i64.const 0)) |
| 34 | +(assert_eq (invoke "$i64_extend_s_i32" (i32.const 10000)) (i64.const 10000)) |
| 35 | +(assert_eq (invoke "$i64_extend_s_i32" (i32.const -10000)) (i64.const -10000)) |
| 36 | + |
| 37 | +;; i64.extend_u/i32 |
| 38 | +(assert_eq (invoke "$i64_extend_u_i32" (i32.const 0)) (i64.const 0)) |
| 39 | +(assert_eq (invoke "$i64_extend_u_i32" (i32.const 10000)) (i64.const 10000)) |
| 40 | +(assert_eq (invoke "$i64_extend_u_i32" (i32.const -10000)) (i64.const 4294957296)) ;; ffff ffff ffff d8f0 |
| 41 | + |
| 42 | +;; i32.wrap/i64 |
| 43 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -1)) (i32.const -1)) |
| 44 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -100000)) (i32.const -100000)) |
| 45 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -2147483648)) (i32.const -2147483648)) ;; ffff ffff 8000 0000 |
| 46 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -2147483649)) (i32.const 2147483647)) ;; ffff ffff 7fff ffff |
| 47 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -4294967296)) (i32.const 0)) ;; ffff ffff 0000 0000 |
| 48 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -4294967297)) (i32.const -1)) ;; ffff fffe ffff ffff |
| 49 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const -4294967295)) (i32.const 1)) ;; ffff ffff 0000 0001 |
| 50 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const 0)) (i32.const 0)) |
| 51 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const 1311768467463790320)) (i32.const -1698898192)) ;; 1234 5678 9abc def0 |
| 52 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const 4294967295)) (i32.const -1)) ;; 0000 0000 ffff ffff |
| 53 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const 4294967296)) (i32.const 0)) ;; 0000 0001 0000 0000 |
| 54 | +(assert_eq (invoke "$i32_wrap_i64" (i64.const 4294967297)) (i32.const 1)) ;; 0000 0001 0000 0001 |
| 55 | + |
| 56 | +;; i32.trunc_s/f32 |
| 57 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const 1.0)) (i32.const 1)) |
| 58 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const 1.1)) (i32.const 1)) |
| 59 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const 1.5)) (i32.const 1)) |
| 60 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const -1.0)) (i32.const -1)) |
| 61 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const -1.1)) (i32.const -1)) |
| 62 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const -1.5)) (i32.const -1)) |
| 63 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const -1.9)) (i32.const -1)) |
| 64 | +(assert_eq (invoke "$i32_trunc_s_f32" (f32.const -2.0)) (i32.const -2)) |
| 65 | + |
| 66 | +;; i32.trunc_u/f32 |
| 67 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 1.0)) (i32.const 1)) |
| 68 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 1.1)) (i32.const 1)) |
| 69 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 1.5)) (i32.const 1)) |
| 70 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 1.9)) (i32.const 1)) |
| 71 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 2.0)) (i32.const 2)) |
| 72 | +(assert_eq (invoke "$i32_trunc_u_f32" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 |
| 73 | + |
| 74 | +;; i64.trunc_s/f32 |
| 75 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const 1.0)) (i64.const 1)) |
| 76 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const 1.1)) (i64.const 1)) |
| 77 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const 1.5)) (i64.const 1)) |
| 78 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -1.0)) (i64.const -1)) |
| 79 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -1.1)) (i64.const -1)) |
| 80 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -1.5)) (i64.const -1)) |
| 81 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -1.9)) (i64.const -1)) |
| 82 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -2.0)) (i64.const -2)) |
| 83 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 |
| 84 | +(assert_eq (invoke "$i64_trunc_s_f32" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 |
| 85 | + |
| 86 | +;; i64.trunc_u/f32 |
| 87 | +(assert_eq (invoke "$i64_trunc_u_f32" (f32.const 1.0)) (i64.const 1)) |
| 88 | +(assert_eq (invoke "$i64_trunc_u_f32" (f32.const 1.1)) (i64.const 1)) |
| 89 | +(assert_eq (invoke "$i64_trunc_u_f32" (f32.const 1.5)) (i64.const 1)) |
| 90 | +(assert_eq (invoke "$i64_trunc_u_f32" (f32.const 4294967296)) (i64.const 4294967296)) |
| 91 | + |
| 92 | +(; |
| 93 | + todo: |
| 94 | + fxx.convert_s/ixx |
| 95 | + fxx.convert_u/ixx |
| 96 | + f64.promote/f32 |
| 97 | + f32.demote/f64 |
| 98 | + f32.reinterpret/i32 |
| 99 | + f64.reinterpret/i64 |
| 100 | + i32.reinterpret/f32 |
| 101 | + i64.reinterpret/f64 |
| 102 | +;) |
0 commit comments