Skip to content
This repository was archived by the owner on Dec 22, 2021. It is now read-only.

Commit 4c442ce

Browse files
committed
[interpreter] Add i64x2.all_true
This was merged in #415.
1 parent 77b3177 commit 4c442ce

File tree

7 files changed

+26
-2
lines changed

7 files changed

+26
-2
lines changed

interpreter/binary/decode.ml

+1
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ let simd_prefix s =
427427
| 0xccl -> i64x2_shr_s
428428
| 0xcdl -> i64x2_shr_u
429429
| 0xcel -> i64x2_add
430+
| 0xcfl -> i64x2_all_true
430431
| 0xd0l -> i64x2_ne
431432
| 0xd1l -> i64x2_sub
432433
| 0xd2l -> i64x2_extmul_low_i32x4_s

interpreter/binary/encode.ml

+1
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ let encode m =
274274
| Test (V128 V128Op.(I8x16 AllTrue)) -> simd_op 0x63l
275275
| Test (V128 V128Op.(I16x8 AllTrue)) -> simd_op 0x83l
276276
| Test (V128 V128Op.(I32x4 AllTrue)) -> simd_op 0xa3l
277+
| Test (V128 V128Op.(I64x2 AllTrue)) -> simd_op 0xcfl
277278
| Test (V128 _) -> assert false
278279

279280
| Compare (I32 I32Op.Eq) -> op 0x46

interpreter/exec/eval_simd.ml

+1
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ module SimdOp (SXX : Simd.S) (Value : ValueType with type t = SXX.t) = struct
192192
| I8x16 AllTrue -> SXX.I8x16.all_true
193193
| I16x8 AllTrue -> SXX.I16x8.all_true
194194
| I32x4 AllTrue -> SXX.I32x4.all_true
195+
| I64x2 AllTrue -> SXX.I64x2.all_true
195196
| _ -> assert false
196197
in fun v -> f (of_value 1 v)
197198

interpreter/syntax/operators.ml

+1
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ let i64x2_ge_s = Binary (V128 V128Op.(I64x2 GeS))
413413
let i64x2_abs = Unary (V128 V128Op.(I64x2 Abs))
414414
let i64x2_neg = Unary (V128 V128Op.(I64x2 Neg))
415415
let i64x2_bitmask = SimdBitmask Simd.I64x2
416+
let i64x2_all_true = Test (V128 V128Op.(I64x2 AllTrue))
416417
let i64x2_add = Binary (V128 V128Op.(I64x2 Add))
417418
let i64x2_sub = Binary (V128 V128Op.(I64x2 Sub))
418419
let i64x2_mul = Binary (V128 V128Op.(I64x2 Mul))

interpreter/text/arrange.ml

+1
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ struct
194194
| I8x16 AllTrue -> "i8x16.all_true"
195195
| I16x8 AllTrue -> "i16x8.all_true"
196196
| I32x4 AllTrue -> "i32x4.all_true"
197+
| I64x2 AllTrue -> "i64x2.all_true"
197198
| V128 AnyTrue -> "v128.any_true"
198199
| _ -> assert false
199200

interpreter/text/lexer.mll

+1-2
Original file line numberDiff line numberDiff line change
@@ -538,8 +538,7 @@ rule token = parse
538538
| "i8x16.popcnt"
539539
{ UNARY i8x16_popcnt }
540540
| (simd_int_shape as s)".all_true"
541-
{ only ["i8x16"; "i16x8"; "i32x4"] s lexbuf;
542-
UNARY (simd_int_op s i8x16_all_true i16x8_all_true i32x4_all_true unreachable) }
541+
{ UNARY (simd_int_op s i8x16_all_true i16x8_all_true i32x4_all_true i64x2_all_true) }
543542
| (simd_int_shape as s)".bitmask"
544543
{ UNARY (simd_int_op s i8x16_bitmask i16x8_bitmask i32x4_bitmask i64x2_bitmask) }
545544
| (simd_int_shape as s)".shl"

test/core/simd/simd_boolean.wast

+20
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
(func (export "i32x4.all_true") (param $0 v128) (result i32) (i32x4.all_true (local.get $0)))
1414
(func (export "i32x4.bitmask") (param $0 v128) (result i32) (i32x4.bitmask (local.get $0)))
1515

16+
(func (export "i64x2.all_true") (param $0 v128) (result i32) (i64x2.all_true (local.get $0)))
1617
(func (export "i64x2.bitmask") (param $0 v128) (result i32) (i64x2.bitmask (local.get $0)))
1718
)
1819

@@ -158,6 +159,25 @@
158159
(assert_return (invoke "i32x4.bitmask" (v128.const i32x4 -1 0 1 0xF))
159160
(i32.const 0x00000001))
160161

162+
;; i64x2
163+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0 0))
164+
(i32.const 0))
165+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0 1))
166+
(i32.const 0))
167+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 0))
168+
(i32.const 0))
169+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 1))
170+
(i32.const 1))
171+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 -1 0))
172+
(i32.const 0))
173+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0x00 0x00))
174+
(i32.const 0))
175+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0xFF 0xFF))
176+
(i32.const 1))
177+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0xAB 0xAB))
178+
(i32.const 1))
179+
(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0x55 0x55))
180+
(i32.const 1))
161181
(assert_return (invoke "i64x2.bitmask" (v128.const i64x2 0xFFFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF))
162182
(i32.const 0x00000003))
163183
(assert_return (invoke "i64x2.bitmask" (v128.const i64x2 -1 0xF))

0 commit comments

Comments
 (0)