Remove the boolean types from cranelift, and the associated instructions breduce, bextend, bconst, and bint. Standardize on using 1/0 for the return value from instructions that produce scalar boolean results, and -1/0 for boolean vector elements. Fixes #3205 Co-authored-by: Afonso Bordado <afonso360@users.noreply.github.com> Co-authored-by: Ulrich Weigand <ulrich.weigand@de.ibm.com> Co-authored-by: Chris Fallin <chris@cfallin.org>
53 lines
1.3 KiB
Plaintext
53 lines
1.3 KiB
Plaintext
test run
|
|
set enable_simd
|
|
target aarch64
|
|
target s390x
|
|
target x86_64 skylake
|
|
|
|
|
|
function %ushr_i8x16(i8x16, i32) -> i8x16 {
|
|
block0(v0: i8x16, v1: i32):
|
|
v2 = ushr v0, v1
|
|
return v2
|
|
}
|
|
; run: %ushr_i8x16([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15], 1) == [0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7]
|
|
; run: %ushr_i8x16([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15], 9) == [0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7]
|
|
|
|
function %ushr_i16x8(i16x8, i32) -> i16x8 {
|
|
block0(v0: i16x8, v1: i32):
|
|
v2 = ushr v0, v1
|
|
return v2
|
|
}
|
|
; run: %ushr_i16x8([0 1 2 3 4 5 6 7], 1) == [0 0 1 1 2 2 3 3]
|
|
; run: %ushr_i16x8([0 1 2 3 4 5 6 7], 17) == [0 0 1 1 2 2 3 3]
|
|
; run: %ushr_i16x8([1 2 4 -8 0 0 0 0], 1) == [0 1 2 32764 0 0 0 0]
|
|
|
|
function %ushr_i32x4(i32x4, i32) -> i32x4 {
|
|
block0(v0: i32x4, v1: i32):
|
|
v2 = ushr v0, v1
|
|
return v2
|
|
}
|
|
; run: %ushr_i32x4([1 2 4 8], 1) == [0 1 2 4]
|
|
; run: %ushr_i32x4([1 2 4 8], 33) == [0 1 2 4]
|
|
|
|
function %ushr_i64x2(i64x2, i32) -> i64x2 {
|
|
block0(v0: i64x2, v1: i32):
|
|
v2 = ushr v0, v1
|
|
return v2
|
|
}
|
|
; run: %ushr_i64x2([1 2], 1) == [0 1]
|
|
; run: %ushr_i64x2([1 2], 65) == [0 1]
|
|
|
|
|
|
function %sshr_imm_i16x8() -> i8 {
|
|
block0:
|
|
v1 = vconst.i16x8 [1 2 4 -8 0 0 0 0]
|
|
v2 = ushr_imm v1, 1
|
|
|
|
v3 = vconst.i16x8 [0 1 2 32764 0 0 0 0] ; -4 with MSB unset == 32764
|
|
v4 = icmp eq v2, v3
|
|
v5 = vall_true v4
|
|
return v5
|
|
}
|
|
; run
|