Implement vany_true and vall_true instructions in interpreter (#3304)
* cranelift: Implement ZeroExtend for a bunch of types in interpreter
* cranelift: Implement VConst on interpreter
* cranelift: Implement VallTrue on interpreter
* cranelift: Implement VanyTrue on interpreter
* cranelift: Mark `v{all,any}_true` tests as machinst only
* cranelift: Disable `vany_true` tests on aarch64
The `b64x2` case produces an illegal instruction. See #3305
This commit is contained in:
69
cranelift/filetests/filetests/runtests/simd-valltrue.clif
Normal file
69
cranelift/filetests/filetests/runtests/simd-valltrue.clif
Normal file
@@ -0,0 +1,69 @@
|
||||
test interpret
|
||||
test run
|
||||
target aarch64
|
||||
target x86_64 machinst
|
||||
|
||||
; TODO: Refactor this once we support simd bools in the trampoline
|
||||
|
||||
function %vall_true_b8x16() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b8x16 [false false false false false false false false false false false false false false false false]
|
||||
v1 = vall_true v0
|
||||
|
||||
v2 = vconst.b8x16 [true false false false false false false false false false false false false false false false]
|
||||
v3 = vall_true v2
|
||||
|
||||
v4 = vconst.b8x16 [true true true true true true true true true true true true true true true true]
|
||||
v5 = vall_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vall_true_b8x16() == [false, false, true]
|
||||
|
||||
|
||||
function %vall_true_b16x8() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b16x8 [false false false false false false false false]
|
||||
v1 = vall_true v0
|
||||
|
||||
v2 = vconst.b16x8 [true false false false false false false false]
|
||||
v3 = vall_true v2
|
||||
|
||||
v4 = vconst.b16x8 [true true true true true true true true]
|
||||
v5 = vall_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vall_true_b16x8() == [false, false, true]
|
||||
|
||||
|
||||
function %vall_true_b32x4() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b32x4 [false false false false]
|
||||
v1 = vall_true v0
|
||||
|
||||
v2 = vconst.b32x4 [true false false false]
|
||||
v3 = vall_true v2
|
||||
|
||||
v4 = vconst.b32x4 [true true true true]
|
||||
v5 = vall_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vall_true_b32x4() == [false, false, true]
|
||||
|
||||
|
||||
function %vall_true_b64x2() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b64x2 [false false]
|
||||
v1 = vall_true v0
|
||||
|
||||
v2 = vconst.b64x2 [true false]
|
||||
v3 = vall_true v2
|
||||
|
||||
v4 = vconst.b64x2 [true true]
|
||||
v5 = vall_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vall_true_b64x2() == [false, false, true]
|
||||
69
cranelift/filetests/filetests/runtests/simd-vanytrue.clif
Normal file
69
cranelift/filetests/filetests/runtests/simd-vanytrue.clif
Normal file
@@ -0,0 +1,69 @@
|
||||
test interpret
|
||||
test run
|
||||
target x86_64 machinst
|
||||
; TODO: The AArch64 backend is producing an illegal instruction for b64x2. See: #3304
|
||||
|
||||
; TODO: Refactor this once we support simd bools in the trampoline
|
||||
|
||||
function %vany_true_b8x16() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b8x16 [false false false false false false false false false false false false false false false false]
|
||||
v1 = vany_true v0
|
||||
|
||||
v2 = vconst.b8x16 [true false false false false false false false false false false false false false false false]
|
||||
v3 = vany_true v2
|
||||
|
||||
v4 = vconst.b8x16 [true true true true true true true true true true true true true true true true]
|
||||
v5 = vany_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vany_true_b8x16() == [false, true, true]
|
||||
|
||||
|
||||
function %vany_true_b16x8() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b16x8 [false false false false false false false false]
|
||||
v1 = vany_true v0
|
||||
|
||||
v2 = vconst.b16x8 [true false false false false false false false]
|
||||
v3 = vany_true v2
|
||||
|
||||
v4 = vconst.b16x8 [true true true true true true true true]
|
||||
v5 = vany_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vany_true_b16x8() == [false, true, true]
|
||||
|
||||
|
||||
function %vany_true_b32x4() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b32x4 [false false false false]
|
||||
v1 = vany_true v0
|
||||
|
||||
v2 = vconst.b32x4 [true false false false]
|
||||
v3 = vany_true v2
|
||||
|
||||
v4 = vconst.b32x4 [true true true true]
|
||||
v5 = vany_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vany_true_b32x4() == [false, true, true]
|
||||
|
||||
|
||||
function %vany_true_b64x2() -> b1, b1, b1 {
|
||||
block0:
|
||||
v0 = vconst.b64x2 [false false]
|
||||
v1 = vany_true v0
|
||||
|
||||
v2 = vconst.b64x2 [true false]
|
||||
v3 = vany_true v2
|
||||
|
||||
v4 = vconst.b64x2 [true true]
|
||||
v5 = vany_true v4
|
||||
|
||||
return v1, v3, v5
|
||||
}
|
||||
; run: %vany_true_b64x2() == [false, true, true]
|
||||
Reference in New Issue
Block a user