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

Rename i8x16.any_true to v128.any_true and remove other variants #426

Merged
merged 1 commit into from
Jan 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 1 addition & 3 deletions interpreter/binary/decode.ml
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ let simd_prefix s =
| 0x52l -> v128_bitselect
| 0x60l -> i8x16_abs
| 0x61l -> i8x16_neg
| 0x62l -> i8x16_any_true
| 0x62l -> v128_any_true
| 0x63l -> i8x16_all_true
| 0x64l -> i8x16_bitmask
| 0x6bl -> i8x16_shl
Expand All @@ -327,7 +327,6 @@ let simd_prefix s =
| 0x7bl -> i8x16_avgr_u
| 0x80l -> i16x8_abs
| 0x81l -> i16x8_neg
| 0x82l -> i16x8_any_true
| 0x83l -> i16x8_all_true
| 0x84l -> i16x8_bitmask
| 0x85l -> i16x8_narrow_i32x4_s
Expand All @@ -353,7 +352,6 @@ let simd_prefix s =
| 0x9bl -> i16x8_avgr_u
| 0xa0l -> i32x4_abs
| 0xa1l -> i32x4_neg
| 0xa2l -> i32x4_any_true
| 0xa3l -> i32x4_all_true
| 0xa4l -> i32x4_bitmask
| 0xa7l -> i32x4_widen_low_i16x8_s
Expand Down
4 changes: 1 addition & 3 deletions interpreter/binary/encode.ml
Original file line number Diff line number Diff line change
Expand Up @@ -252,11 +252,9 @@ let encode m =
| Test (I64 I64Op.Eqz) -> op 0x50
| Test (F32 _) -> assert false
| Test (F64 _) -> assert false
| Test (V128 V128Op.(I8x16 AnyTrue)) -> simd_op 0x62l
| Test (V128 V128Op.(V128 AnyTrue)) -> simd_op 0x62l
| Test (V128 V128Op.(I8x16 AllTrue)) -> simd_op 0x63l
| Test (V128 V128Op.(I16x8 AnyTrue)) -> simd_op 0x82l
| Test (V128 V128Op.(I16x8 AllTrue)) -> simd_op 0x83l
| Test (V128 V128Op.(I32x4 AnyTrue)) -> simd_op 0xa2l
| Test (V128 V128Op.(I32x4 AllTrue)) -> simd_op 0xa3l
| Test (V128 _) -> assert false

Expand Down
4 changes: 1 addition & 3 deletions interpreter/exec/eval_simd.ml
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,9 @@ module SimdOp (SXX : Simd.S) (Value : ValueType with type t = SXX.t) = struct

let testop (op : testop) =
let f = match op with
| I8x16 AnyTrue -> SXX.I8x16.any_true
| V128 AnyTrue -> SXX.I8x16.any_true
| I8x16 AllTrue -> SXX.I8x16.all_true
| I16x8 AnyTrue -> SXX.I16x8.any_true
| I16x8 AllTrue -> SXX.I16x8.all_true
| I32x4 AnyTrue -> SXX.I32x4.any_true
| I32x4 AllTrue -> SXX.I32x4.all_true
| _ -> assert false
in fun v -> f (of_value 1 v)
Expand Down
4 changes: 1 addition & 3 deletions interpreter/syntax/operators.ml
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ let v128_andnot = Binary (V128 V128Op.(V128 AndNot))
let v128_or = Binary (V128 V128Op.(V128 Or))
let v128_xor = Binary (V128 V128Op.(V128 Xor))
let v128_bitselect = SimdTernary (V128Op.Bitselect)
let v128_any_true = Test (V128 V128Op.(V128 AnyTrue))

let i8x16_swizzle = Binary (V128 V128Op.(I8x16 Swizzle))
let i8x16_shuffle imms = Binary (V128 V128Op.(I8x16 (Shuffle imms)))
Expand All @@ -271,7 +272,6 @@ let i8x16_gt_u = Binary (V128 V128Op.(I8x16 GtU))
let i8x16_ge_s = Binary (V128 V128Op.(I8x16 GeS))
let i8x16_ge_u = Binary (V128 V128Op.(I8x16 GeU))
let i8x16_neg = Unary (V128 V128Op.(I8x16 Neg))
let i8x16_any_true = Test (V128 V128Op.(I8x16 AnyTrue))
let i8x16_bitmask = SimdBitmask Simd.I8x16
let i8x16_all_true = Test (V128 V128Op.(I8x16 AllTrue))
let i8x16_narrow_i16x8_s = Binary (V128 V128Op.(I8x16 NarrowS))
Expand Down Expand Up @@ -311,7 +311,6 @@ let i16x8_gt_u = Binary (V128 V128Op.(I16x8 GtU))
let i16x8_ge_s = Binary (V128 V128Op.(I16x8 GeS))
let i16x8_ge_u = Binary (V128 V128Op.(I16x8 GeU))
let i16x8_neg = Unary (V128 V128Op.(I16x8 Neg))
let i16x8_any_true = Test (V128 V128Op.(I16x8 AnyTrue))
let i16x8_bitmask = SimdBitmask Simd.I16x8
let i16x8_all_true = Test (V128 V128Op.(I16x8 AllTrue))
let i16x8_narrow_i32x4_s = Binary (V128 V128Op.(I16x8 NarrowS))
Expand Down Expand Up @@ -348,7 +347,6 @@ let i32x4_ge_s = Binary (V128 V128Op.(I32x4 GeS))
let i32x4_ge_u = Binary (V128 V128Op.(I32x4 GeU))
let i32x4_abs = Unary (V128 V128Op.(I32x4 Abs))
let i32x4_neg = Unary (V128 V128Op.(I32x4 Neg))
let i32x4_any_true = Test (V128 V128Op.(I32x4 AnyTrue))
let i32x4_bitmask = SimdBitmask Simd.I32x4
let i32x4_all_true = Test (V128 V128Op.(I32x4 AllTrue))
let i32x4_widen_low_i16x8_s = Unary (V128 V128Op.(I32x4 WidenLowS))
Expand Down
4 changes: 1 addition & 3 deletions interpreter/text/arrange.ml
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,10 @@ struct
open Ast.SimdOp

let testop xx = function
| I8x16 AnyTrue -> "i8x16.any_true"
| I8x16 AllTrue -> "i8x16.all_true"
| I16x8 AnyTrue -> "i16x8.any_true"
| I16x8 AllTrue -> "i16x8.all_true"
| I32x4 AnyTrue -> "i32x4.any_true"
| I32x4 AllTrue -> "i32x4.all_true"
| V128 AnyTrue -> "v128.any_true"
| _ -> assert false

let relop xx = assert false
Expand Down
4 changes: 1 addition & 3 deletions interpreter/text/lexer.mll
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@ rule token = parse
| vxxx".or" { UNARY v128_or }
| vxxx".xor" { UNARY v128_xor }
| vxxx".bitselect" { TERNARY v128_bitselect }
| vxxx".any_true" { UNARY (v128_any_true) }
| (simd_shape as s)".neg"
{ UNARY (simdop s i8x16_neg i16x8_neg i32x4_neg i64x2_neg f32x4_neg f64x2_neg) }
| (simd_float_shape as s)".sqrt" { UNARY (simd_float_op s f32x4_sqrt f64x2_sqrt) }
Expand Down Expand Up @@ -525,9 +526,6 @@ rule token = parse
| (simd_shape as s)".abs"
{ only ["i8x16"; "i16x8"; "i32x4"; "f32x4"; "f64x2"] s lexbuf;
UNARY (simdop s i8x16_abs i16x8_abs i32x4_abs unreachable f32x4_abs f64x2_abs) }
| (simd_int_shape as s)".any_true"
{ only ["i8x16"; "i16x8"; "i32x4"] s lexbuf;
UNARY (simd_int_op s i8x16_any_true i16x8_any_true i32x4_any_true unreachable) }
| (simd_int_shape as s)".all_true"
{ only ["i8x16"; "i16x8"; "i32x4"] s lexbuf;
UNARY (simd_int_op s i8x16_all_true i16x8_all_true i32x4_all_true unreachable) }
Expand Down
90 changes: 45 additions & 45 deletions test/core/simd/simd_boolean.wast
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
;; Test all the boolean operators on major boundary values and all special values.

(module
(func (export "i8x16.any_true") (param $0 v128) (result i32) (i8x16.any_true (local.get $0)))
(func (export "i8x16.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0)))
(func (export "i8x16.all_true") (param $0 v128) (result i32) (i8x16.all_true (local.get $0)))
(func (export "i8x16.bitmask") (param $0 v128) (result i32) (i8x16.bitmask (local.get $0)))

(func (export "i16x8.any_true") (param $0 v128) (result i32) (i16x8.any_true (local.get $0)))
(func (export "i16x8.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0)))
(func (export "i16x8.all_true") (param $0 v128) (result i32) (i16x8.all_true (local.get $0)))
(func (export "i16x8.bitmask") (param $0 v128) (result i32) (i16x8.bitmask (local.get $0)))

(func (export "i32x4.any_true") (param $0 v128) (result i32) (i32x4.any_true (local.get $0)))
(func (export "i32x4.any_true") (param $0 v128) (result i32) (v128.any_true (local.get $0)))
(func (export "i32x4.all_true") (param $0 v128) (result i32) (i32x4.all_true (local.get $0)))
(func (export "i32x4.bitmask") (param $0 v128) (result i32) (i32x4.bitmask (local.get $0)))
)
Expand Down Expand Up @@ -161,19 +161,19 @@
(module (memory 1)
;; as if condition
(func (export "i8x16_any_true_as_if_cond") (param v128) (result i32)
(if (result i32) (i8x16.any_true (local.get 0))
(if (result i32) (v128.any_true (local.get 0))
(then (i32.const 1))
(else (i32.const 0))
)
)
(func (export "i16x8_any_true_as_if_cond") (param v128) (result i32)
(if (result i32) (i16x8.any_true (local.get 0))
(if (result i32) (v128.any_true (local.get 0))
(then (i32.const 1))
(else (i32.const 0))
)
)
(func (export "i32x4_any_true_as_if_cond") (param v128) (result i32)
(if (result i32) (i32x4.any_true (local.get 0))
(if (result i32) (v128.any_true (local.get 0))
(then (i32.const 1))
(else (i32.const 0))
)
Expand All @@ -198,13 +198,13 @@
)
;; any_true as select condition
(func (export "i8x16_any_true_as_select_cond") (param v128) (result i32)
(select (i32.const 1) (i32.const 0) (i8x16.any_true (local.get 0)))
(select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0)))
)
(func (export "i16x8_any_true_as_select_cond") (param v128) (result i32)
(select (i32.const 1) (i32.const 0) (i16x8.any_true (local.get 0)))
(select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0)))
)
(func (export "i32x4_any_true_as_select_cond") (param v128) (result i32)
(select (i32.const 1) (i32.const 0) (i32x4.any_true (local.get 0)))
(select (i32.const 1) (i32.const 0) (v128.any_true (local.get 0)))
)
;; all_true as select condition
(func (export "i8x16_all_true_as_select_cond") (param v128) (result i32)
Expand All @@ -222,7 +222,7 @@
(local.set $1 (i32.const 2))
(block
(local.set $1 (i32.const 1))
(br_if 0 (i8x16.any_true (local.get $0)))
(br_if 0 (v128.any_true (local.get $0)))
(local.set $1 (i32.const 0))
)
(local.get $1)
Expand All @@ -232,7 +232,7 @@
(local.set $1 (i32.const 2))
(block
(local.set $1 (i32.const 1))
(br_if 0 (i16x8.any_true (local.get $0)))
(br_if 0 (v128.any_true (local.get $0)))
(local.set $1 (i32.const 0))
)
(local.get $1)
Expand All @@ -242,7 +242,7 @@
(local.set $1 (i32.const 2))
(block
(local.set $1 (i32.const 1))
(br_if 0 (i32x4.any_true (local.get $0)))
(br_if 0 (v128.any_true (local.get $0)))
(local.set $1 (i32.const 0))
)
(local.get $1)
Expand Down Expand Up @@ -280,33 +280,33 @@
)
;; any_true as i32.and operand
(func (export "i8x16_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.and (i8x16.any_true (local.get $0)) (i8x16.any_true (local.get $1)))
(i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i16x8_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.and (i16x8.any_true (local.get $0)) (i16x8.any_true (local.get $1)))
(i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i32x4_any_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.and (i32x4.any_true (local.get $0)) (i32x4.any_true (local.get $1)))
(i32.and (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
;; any_true as i32.or operand
(func (export "i8x16_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.or (i8x16.any_true (local.get $0)) (i8x16.any_true (local.get $1)))
(i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i16x8_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.or (i16x8.any_true (local.get $0)) (i16x8.any_true (local.get $1)))
(i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i32x4_any_true_as_i32.or_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.or (i32x4.any_true (local.get $0)) (i32x4.any_true (local.get $1)))
(i32.or (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
;; any_true as i32.xor operand
(func (export "i8x16_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.xor (i8x16.any_true (local.get $0)) (i8x16.any_true (local.get $1)))
(i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i16x8_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.xor (i16x8.any_true (local.get $0)) (i16x8.any_true (local.get $1)))
(i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
(func (export "i32x4_any_true_as_i32.xor_operand") (param $0 v128) (param $1 v128) (result i32)
(i32.xor (i32x4.any_true (local.get $0)) (i32x4.any_true (local.get $1)))
(i32.xor (v128.any_true (local.get $0)) (v128.any_true (local.get $1)))
)
;; all_true as i32.and operand
(func (export "i8x16_all_true_as_i32.and_operand") (param $0 v128) (param $1 v128) (result i32)
Expand Down Expand Up @@ -340,53 +340,53 @@
)
;; any_true with v128.not
(func (export "i8x16_any_true_with_v128.not") (param $0 v128) (result i32)
(i8x16.any_true (v128.not (local.get $0)))
(v128.any_true (v128.not (local.get $0)))
)
(func (export "i16x8_any_true_with_v128.not") (param $0 v128) (result i32)
(i16x8.any_true (v128.not (local.get $0)))
(v128.any_true (v128.not (local.get $0)))
)
(func (export "i32x4_any_true_with_v128.not") (param $0 v128) (result i32)
(i32x4.any_true (v128.not (local.get $0)))
(v128.any_true (v128.not (local.get $0)))
)
;; any_true with v128.and
(func (export "i8x16_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32)
(i8x16.any_true (v128.and (local.get $0) (local.get $1)))
(v128.any_true (v128.and (local.get $0) (local.get $1)))
)
(func (export "i16x8_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32)
(i16x8.any_true (v128.and (local.get $0) (local.get $1)))
(v128.any_true (v128.and (local.get $0) (local.get $1)))
)
(func (export "i32x4_any_true_with_v128.and") (param $0 v128) (param $1 v128) (result i32)
(i32x4.any_true (v128.and (local.get $0) (local.get $1)))
(v128.any_true (v128.and (local.get $0) (local.get $1)))
)
;; any_true with v128.or
(func (export "i8x16_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32)
(i8x16.any_true (v128.or (local.get $0) (local.get $1)))
(v128.any_true (v128.or (local.get $0) (local.get $1)))
)
(func (export "i16x8_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32)
(i16x8.any_true (v128.or (local.get $0) (local.get $1)))
(v128.any_true (v128.or (local.get $0) (local.get $1)))
)
(func (export "i32x4_any_true_with_v128.or") (param $0 v128) (param $1 v128) (result i32)
(i32x4.any_true (v128.or (local.get $0) (local.get $1)))
(v128.any_true (v128.or (local.get $0) (local.get $1)))
)
;; any_true with v128.xor
(func (export "i8x16_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32)
(i8x16.any_true (v128.xor (local.get $0) (local.get $1)))
(v128.any_true (v128.xor (local.get $0) (local.get $1)))
)
(func (export "i16x8_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32)
(i16x8.any_true (v128.xor (local.get $0) (local.get $1)))
(v128.any_true (v128.xor (local.get $0) (local.get $1)))
)
(func (export "i32x4_any_true_with_v128.xor") (param $0 v128) (param $1 v128) (result i32)
(i32x4.any_true (v128.xor (local.get $0) (local.get $1)))
(v128.any_true (v128.xor (local.get $0) (local.get $1)))
)
;; any_true with v128.bitselect
(func (export "i8x16_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32)
(i8x16.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
(v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
)
(func (export "i16x8_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32)
(i16x8.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
(v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
)
(func (export "i32x4_any_true_with_v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result i32)
(i32x4.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
(v128.any_true (v128.bitselect (local.get $0) (local.get $1) (local.get $2)))
)
;; all_true with v128.not
(func (export "i8x16_all_true_with_v128.not") (param $0 v128) (result i32)
Expand Down Expand Up @@ -965,11 +965,11 @@

;; Type check

(assert_invalid (module (func (result i32) (i8x16.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (i8x16.all_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (i16x8.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (i16x8.all_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (i32x4.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (v128.any_true (i32.const 0)))) "type mismatch")
(assert_invalid (module (func (result i32) (i32x4.all_true (i32.const 0)))) "type mismatch")

;; Unknown operators
Expand All @@ -983,8 +983,8 @@

(assert_invalid
(module
(func $i8x16.any_true-arg-empty (result v128)
(i8x16.any_true)
(func $v128.any_true-arg-empty (result v128)
(v128.any_true)
)
)
"type mismatch"
Expand All @@ -999,8 +999,8 @@
)
(assert_invalid
(module
(func $i16x8.any_true-arg-empty (result v128)
(i16x8.any_true)
(func $v128.any_true-arg-empty (result v128)
(v128.any_true)
)
)
"type mismatch"
Expand All @@ -1015,8 +1015,8 @@
)
(assert_invalid
(module
(func $i32x4.any_true-arg-empty (result v128)
(i32x4.any_true)
(func $v128.any_true-arg-empty (result v128)
(v128.any_true)
)
)
"type mismatch"
Expand Down
10 changes: 5 additions & 5 deletions test/core/simd/simd_lane.wast
Original file line number Diff line number Diff line change
Expand Up @@ -733,18 +733,18 @@

;; Boolean horizontal reductions
(func (export "as-i8x16_any_true-operand") (param v128 i32) (result i32)
(i8x16.any_true (i8x16.replace_lane 0 (local.get 0) (local.get 1))))
(v128.any_true (i8x16.replace_lane 0 (local.get 0) (local.get 1))))
(func (export "as-i16x8_any_true-operand") (param v128 i32) (result i32)
(i16x8.any_true (i16x8.replace_lane 0 (local.get 0) (local.get 1))))
(v128.any_true (i16x8.replace_lane 0 (local.get 0) (local.get 1))))
(func (export "as-i32x4_any_true-operand1") (param v128 i32) (result i32)
(i32x4.any_true (i32x4.replace_lane 0 (local.get 0) (local.get 1))))
(v128.any_true (i32x4.replace_lane 0 (local.get 0) (local.get 1))))
(func (export "as-i32x4_any_true-operand2") (param v128 i64) (result i32)
(i32x4.any_true (i64x2.replace_lane 0 (local.get 0) (local.get 1))))
(v128.any_true (i64x2.replace_lane 0 (local.get 0) (local.get 1))))

(func (export "swizzle-as-i8x16_all_true-operands") (param v128 v128) (result i32)
(i8x16.all_true (i8x16.swizzle (local.get 0) (local.get 1))))
(func (export "shuffle-as-i8x16_any_true-operands") (param v128 v128) (result i32)
(i8x16.any_true (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get 0) (local.get 1))))
(v128.any_true (i8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (local.get 0) (local.get 1))))
)

(assert_return (invoke "as-i8x16_splat-operand" (v128.const i8x16 0xff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1))
Expand Down