cranelift: Remove of/nof overflow flags from icmp (#4879)
* cranelift: Remove of/nof overflow flags from icmp Neither Wasmtime nor cg-clif use these flags under any circumstances. From discussion on #3060 I see it's long been unclear what purpose these flags served. Fixes #3060, fixes #4406, and fixes #4875... by deleting all the code that could have been buggy. This changes the cranelift-fuzzgen input format by removing some IntCC options, so I've gone ahead and enabled I128 icmp tests at the same time. Since only the of/nof cases were failing before, I expect these to work. * Restore trapif tests It's still useful to validate that iadd_ifcout's iflags result can be forwarded correctly to trapif, and for that purpose it doesn't really matter what condition code is checked.
This commit is contained in:
@@ -149,36 +149,6 @@ block0(v0: i128, v1: i128):
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_of_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; sbcs x11, x1, x3
|
||||
; eor x13, x1, x3
|
||||
; eor x11, x1, x11
|
||||
; ands xzr, x13, x11
|
||||
; cset x0, lt
|
||||
; ret
|
||||
|
||||
function %icmp_nof_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; sbcs x11, x1, x3
|
||||
; eor x13, x1, x3
|
||||
; eor x11, x1, x11
|
||||
; ands xzr, x13, x11
|
||||
; cset x0, ge
|
||||
; ret
|
||||
|
||||
function %f(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2 = ifcmp v0, v1
|
||||
@@ -502,49 +472,3 @@ block1:
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_of(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
br_icmp of v0, v1, block1
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
return
|
||||
}
|
||||
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; sbcs x9, x1, x3
|
||||
; eor x11, x1, x3
|
||||
; eor x9, x1, x9
|
||||
; ands xzr, x11, x9
|
||||
; b.lt label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_nof(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
br_icmp nof v0, v1, block1
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
return
|
||||
}
|
||||
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; sbcs x9, x1, x3
|
||||
; eor x11, x1, x3
|
||||
; eor x9, x1, x9
|
||||
; ands xzr, x11, x9
|
||||
; b.ge label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
|
||||
@@ -12,11 +12,11 @@ block0:
|
||||
function %trap_iadd_ifcout(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2, v3 = iadd_ifcout v0, v1
|
||||
trapif of v3, user0
|
||||
trapif ult v3, user0
|
||||
return
|
||||
}
|
||||
|
||||
; block0:
|
||||
; b.vc 8 ; udf
|
||||
; b.hs 8 ; udf
|
||||
; ret
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ block0:
|
||||
function %trap_iadd_ifcout(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2, v3 = iadd_ifcout v0, v1
|
||||
trapif of v3, user0
|
||||
trapif ult v3, user0
|
||||
return
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ block0(v0: i64, v1: i64):
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; addq %rdi, %rsi, %rdi
|
||||
; jno ; ud2 user0 ;
|
||||
; jnb ; ud2 user0 ;
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
@@ -1,217 +0,0 @@
|
||||
test interpret
|
||||
test run
|
||||
target aarch64
|
||||
target x86_64
|
||||
|
||||
; TODO: Merge this with the main br_icmp file when s390x supports overflows.
|
||||
; See: https://github.com/bytecodealliance/wasmtime/issues/3060
|
||||
|
||||
function %bricmp_of_i64(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
br_icmp.i64 of v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_of_i64(0, 0) == false
|
||||
; run: %bricmp_of_i64(0, 1) == false
|
||||
; run: %bricmp_of_i64(1, 0) == false
|
||||
; run: %bricmp_of_i64(0, -1) == false
|
||||
; run: %bricmp_of_i64(0x80000000_00000000, 0x80000000_00000000) == false
|
||||
; run: %bricmp_of_i64(0x7FFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %bricmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF) == false
|
||||
; run: %bricmp_of_i64(0xFFFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %bricmp_of_i64(0x80000000_00000000, 1) == true
|
||||
; run: %bricmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000000) == true
|
||||
; run: %bricmp_of_i64(0x80000000_00000000, 0x7FFFFFFF_FFFFFFFF) == true
|
||||
; run: %bricmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == true
|
||||
|
||||
function %bricmp_of_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
br_icmp.i32 of v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_of_i32(0, 0) == false
|
||||
; run: %bricmp_of_i32(0, 1) == false
|
||||
; run: %bricmp_of_i32(1, 0) == false
|
||||
; run: %bricmp_of_i32(0, -1) == false
|
||||
; run: %bricmp_of_i32(0x80000000, 0x80000000) == false
|
||||
; run: %bricmp_of_i32(0x7FFFFFFF, 1) == false
|
||||
; run: %bricmp_of_i32(0x7FFFFFFF, 0x7FFFFFFF) == false
|
||||
; run: %bricmp_of_i32(0xFFFFFFFF, 1) == false
|
||||
; run: %bricmp_of_i32(0x80000000, 1) == true
|
||||
; run: %bricmp_of_i32(0x7FFFFFFF, 0x80000000) == true
|
||||
; run: %bricmp_of_i32(0x80000000, 0x7FFFFFFF) == true
|
||||
; run: %bricmp_of_i32(0x7FFFFFFF, 0xFFFFFFFF) == true
|
||||
|
||||
function %bricmp_of_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
br_icmp.i16 of v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_of_i16(0, 0) == false
|
||||
; run: %bricmp_of_i16(0, 1) == false
|
||||
; run: %bricmp_of_i16(1, 0) == false
|
||||
; run: %bricmp_of_i16(0, -1) == false
|
||||
; run: %bricmp_of_i16(0x8000, 0x8000) == false
|
||||
; run: %bricmp_of_i16(0x7FFF, 1) == false
|
||||
; run: %bricmp_of_i16(0x7FFF, 0x7FFF) == false
|
||||
; run: %bricmp_of_i16(0xFFFF, 1) == false
|
||||
; run: %bricmp_of_i16(0x8000, 1) == true
|
||||
; run: %bricmp_of_i16(0x7FFF, 0x8000) == true
|
||||
; run: %bricmp_of_i16(0x8000, 0x7FFF) == true
|
||||
; run: %bricmp_of_i16(0x7FFF, 0xFFFF) == true
|
||||
|
||||
function %bricmp_of_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
br_icmp.i8 of v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_of_i8(0, 0) == false
|
||||
; run: %bricmp_of_i8(0, 1) == false
|
||||
; run: %bricmp_of_i8(1, 0) == false
|
||||
; run: %bricmp_of_i8(0, -1) == false
|
||||
; run: %bricmp_of_i8(0x80, 0x80) == false
|
||||
; run: %bricmp_of_i8(0x7F, 1) == false
|
||||
; run: %bricmp_of_i8(0x7F, 0x7F) == false
|
||||
; run: %bricmp_of_i8(0xFF, 1) == false
|
||||
; run: %bricmp_of_i8(0x80, 1) == true
|
||||
; run: %bricmp_of_i8(0x7F, 0x80) == true
|
||||
; run: %bricmp_of_i8(0x80, 0x7F) == true
|
||||
; run: %bricmp_of_i8(0x7F, 0xFF) == true
|
||||
|
||||
|
||||
|
||||
function %bricmp_nof_i64(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
br_icmp.i64 nof v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_nof_i64(0, 0) == true
|
||||
; run: %bricmp_nof_i64(0, 1) == true
|
||||
; run: %bricmp_nof_i64(1, 0) == true
|
||||
; run: %bricmp_nof_i64(0, -1) == true
|
||||
; run: %bricmp_nof_i64(0x80000000_00000000, 0x80000000_00000000) == true
|
||||
; run: %bricmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %bricmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF) == true
|
||||
; run: %bricmp_nof_i64(0xFFFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %bricmp_nof_i64(0x80000000_00000000, 1) == false
|
||||
; run: %bricmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000000) == false
|
||||
; run: %bricmp_nof_i64(0x80000000_00000000, 0x7FFFFFFF_FFFFFFFF) == false
|
||||
; run: %bricmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == false
|
||||
|
||||
function %bricmp_nof_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
br_icmp.i32 nof v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_nof_i32(0, 0) == true
|
||||
; run: %bricmp_nof_i32(0, 1) == true
|
||||
; run: %bricmp_nof_i32(1, 0) == true
|
||||
; run: %bricmp_nof_i32(0, -1) == true
|
||||
; run: %bricmp_nof_i32(0x80000000, 0x80000000) == true
|
||||
; run: %bricmp_nof_i32(0x7FFFFFFF, 1) == true
|
||||
; run: %bricmp_nof_i32(0x7FFFFFFF, 0x7FFFFFFF) == true
|
||||
; run: %bricmp_nof_i32(0xFFFFFFFF, 1) == true
|
||||
; run: %bricmp_nof_i32(0x80000000, 1) == false
|
||||
; run: %bricmp_nof_i32(0x7FFFFFFF, 0x80000000) == false
|
||||
; run: %bricmp_nof_i32(0x80000000, 0x7FFFFFFF) == false
|
||||
; run: %bricmp_nof_i32(0x7FFFFFFF, 0xFFFFFFFF) == false
|
||||
|
||||
function %bricmp_nof_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
br_icmp.i16 nof v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_nof_i16(0, 0) == true
|
||||
; run: %bricmp_nof_i16(0, 1) == true
|
||||
; run: %bricmp_nof_i16(1, 0) == true
|
||||
; run: %bricmp_nof_i16(0, -1) == true
|
||||
; run: %bricmp_nof_i16(0x8000, 0x8000) == true
|
||||
; run: %bricmp_nof_i16(0x7FFF, 1) == true
|
||||
; run: %bricmp_nof_i16(0x7FFF, 0x7FFF) == true
|
||||
; run: %bricmp_nof_i16(0xFFFF, 1) == true
|
||||
; run: %bricmp_nof_i16(0x8000, 1) == false
|
||||
; run: %bricmp_nof_i16(0x7FFF, 0x8000) == false
|
||||
; run: %bricmp_nof_i16(0x8000, 0x7FFF) == false
|
||||
; run: %bricmp_nof_i16(0x7FFF, 0xFFFF) == false
|
||||
|
||||
function %bricmp_nof_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
br_icmp.i8 nof v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %bricmp_nof_i8(0, 0) == true
|
||||
; run: %bricmp_nof_i8(0, 1) == true
|
||||
; run: %bricmp_nof_i8(1, 0) == true
|
||||
; run: %bricmp_nof_i8(0, -1) == true
|
||||
; run: %bricmp_nof_i8(0x80, 0x80) == true
|
||||
; run: %bricmp_nof_i8(0x7F, 1) == true
|
||||
; run: %bricmp_nof_i8(0x7F, 0x7F) == true
|
||||
; run: %bricmp_nof_i8(0xFF, 1) == true
|
||||
; run: %bricmp_nof_i8(0x80, 1) == false
|
||||
; run: %bricmp_nof_i8(0x7F, 0x80) == false
|
||||
; run: %bricmp_nof_i8(0x80, 0x7F) == false
|
||||
; run: %bricmp_nof_i8(0x7F, 0xFF) == false
|
||||
@@ -1,61 +0,0 @@
|
||||
test run
|
||||
target aarch64
|
||||
|
||||
; TODO: Merge this with the main i128-bricmp file when s390x supports overflows.
|
||||
; See: https://github.com/bytecodealliance/wasmtime/issues/3060
|
||||
|
||||
function %i128_bricmp_of(i128, i128) -> b1 {
|
||||
block0(v0: i128,v1: i128):
|
||||
br_icmp.i128 of v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %i128_bricmp_of(0, 0) == false
|
||||
; run: %i128_bricmp_of(0, 1) == false
|
||||
; run: %i128_bricmp_of(0, -1) == false
|
||||
; run: %i128_bricmp_of(-1, -1) == false
|
||||
; run: %i128_bricmp_of(0x80000000_00000000_00000000_00000000, 0) == false
|
||||
; run: %i128_bricmp_of(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0) == false
|
||||
; run: %i128_bricmp_of(1, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == false
|
||||
; run: %i128_bricmp_of(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %i128_bricmp_of(0x80000000_00000000_00000000_00000000, 1) == true
|
||||
; run: %i128_bricmp_of(1, 0x80000000_00000000_00000000_00000000) == true
|
||||
; run: %i128_bricmp_of(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000000) == true
|
||||
; run: %i128_bricmp_of(0x80000000_00000000_00000000_00000000, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == true
|
||||
; run: %i128_bricmp_of(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000000) == false
|
||||
; run: %i128_bricmp_of(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000001) == false
|
||||
|
||||
function %i128_bricmp_nof(i128, i128) -> b1 {
|
||||
block0(v0: i128,v1: i128):
|
||||
br_icmp.i128 nof v0, v1, block2
|
||||
jump block1
|
||||
|
||||
block1:
|
||||
v2 = bconst.b1 false
|
||||
return v2
|
||||
|
||||
block2:
|
||||
v3 = bconst.b1 true
|
||||
return v3
|
||||
}
|
||||
; run: %i128_bricmp_nof(0, 0) == true
|
||||
; run: %i128_bricmp_nof(0, 1) == true
|
||||
; run: %i128_bricmp_nof(0, -1) == true
|
||||
; run: %i128_bricmp_nof(-1, -1) == true
|
||||
; run: %i128_bricmp_nof(0x80000000_00000000_00000000_00000000, 0) == true
|
||||
; run: %i128_bricmp_nof(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0) == true
|
||||
; run: %i128_bricmp_nof(1, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == true
|
||||
; run: %i128_bricmp_nof(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %i128_bricmp_nof(0x80000000_00000000_00000000_00000000, 1) == false
|
||||
; run: %i128_bricmp_nof(1, 0x80000000_00000000_00000000_00000000) == false
|
||||
; run: %i128_bricmp_nof(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000000) == false
|
||||
; run: %i128_bricmp_nof(0x80000000_00000000_00000000_00000000, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == false
|
||||
; run: %i128_bricmp_nof(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000000) == true
|
||||
; run: %i128_bricmp_nof(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000001) == true
|
||||
@@ -1,43 +0,0 @@
|
||||
test interpret
|
||||
test run
|
||||
target aarch64
|
||||
|
||||
function %icmp_of_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
v2 = icmp.i128 of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_of_i128(0, 0) == false
|
||||
; run: %icmp_of_i128(0, 1) == false
|
||||
; run: %icmp_of_i128(0, -1) == false
|
||||
; run: %icmp_of_i128(-1, -1) == false
|
||||
; run: %icmp_of_i128(0x80000000_00000000_00000000_00000000, 0) == false
|
||||
; run: %icmp_of_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0) == false
|
||||
; run: %icmp_of_i128(1, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == false
|
||||
; run: %icmp_of_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %icmp_of_i128(0x80000000_00000000_00000000_00000000, 1) == true
|
||||
; run: %icmp_of_i128(1, 0x80000000_00000000_00000000_00000000) == true
|
||||
; run: %icmp_of_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000000) == true
|
||||
; run: %icmp_of_i128(0x80000000_00000000_00000000_00000000, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == true
|
||||
; run: %icmp_of_i128(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000000) == false
|
||||
; run: %icmp_of_i128(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000001) == false
|
||||
|
||||
function %icmp_nof_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
v2 = icmp.i128 nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_nof_i128(0, 0) == true
|
||||
; run: %icmp_nof_i128(0, 1) == true
|
||||
; run: %icmp_nof_i128(0, -1) == true
|
||||
; run: %icmp_nof_i128(-1, -1) == true
|
||||
; run: %icmp_nof_i128(0x80000000_00000000_00000000_00000000, 0) == true
|
||||
; run: %icmp_nof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0) == true
|
||||
; run: %icmp_nof_i128(1, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == true
|
||||
; run: %icmp_nof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %icmp_nof_i128(0x80000000_00000000_00000000_00000000, 1) == false
|
||||
; run: %icmp_nof_i128(1, 0x80000000_00000000_00000000_00000000) == false
|
||||
; run: %icmp_nof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000000) == false
|
||||
; run: %icmp_nof_i128(0x80000000_00000000_00000000_00000000, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == false
|
||||
; run: %icmp_nof_i128(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000000) == true
|
||||
; run: %icmp_nof_i128(0x4FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x30000000_00000000_00000000_00000001) == true
|
||||
@@ -1,75 +0,0 @@
|
||||
test interpret
|
||||
test run
|
||||
target x86_64
|
||||
|
||||
function %icmp_nof_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_nof_i8(0, 0) == true
|
||||
; run: %icmp_nof_i8(0, 1) == true
|
||||
; run: %icmp_nof_i8(1, 0) == true
|
||||
; run: %icmp_nof_i8(0, -1) == true
|
||||
; run: %icmp_nof_i8(0x80, 0x80) == true
|
||||
; run: %icmp_nof_i8(0x7F, 1) == true
|
||||
; run: %icmp_nof_i8(0x7F, 0x7F) == true
|
||||
; run: %icmp_nof_i8(0xFF, 1) == true
|
||||
; run: %icmp_nof_i8(0x80, 1) == false
|
||||
; run: %icmp_nof_i8(0x7F, 0x80) == false
|
||||
; run: %icmp_nof_i8(0x80, 0x7F) == false
|
||||
; run: %icmp_nof_i8(0x7F, 0xFF) == false
|
||||
|
||||
function %icmp_nof_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_nof_i16(0, 0) == true
|
||||
; run: %icmp_nof_i16(0, 1) == true
|
||||
; run: %icmp_nof_i16(1, 0) == true
|
||||
; run: %icmp_nof_i16(0, -1) == true
|
||||
; run: %icmp_nof_i16(0x8000, 0x8000) == true
|
||||
; run: %icmp_nof_i16(0x7FFF, 1) == true
|
||||
; run: %icmp_nof_i16(0x7FFF, 0x7FFF) == true
|
||||
; run: %icmp_nof_i16(0xFFFF, 1) == true
|
||||
; run: %icmp_nof_i16(0x8000, 1) == false
|
||||
; run: %icmp_nof_i16(0x7FFF, 0x8000) == false
|
||||
; run: %icmp_nof_i16(0x8000, 0x7FFF) == false
|
||||
; run: %icmp_nof_i16(0x7FFF, 0xFFFF) == false
|
||||
|
||||
function %icmp_nof_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_nof_i32(0, 0) == true
|
||||
; run: %icmp_nof_i32(0, 1) == true
|
||||
; run: %icmp_nof_i32(1, 0) == true
|
||||
; run: %icmp_nof_i32(0, -1) == true
|
||||
; run: %icmp_nof_i32(0x80000000, 0x80000000) == true
|
||||
; run: %icmp_nof_i32(0x7FFFFFFF, 1) == true
|
||||
; run: %icmp_nof_i32(0x7FFFFFFF, 0x7FFFFFFF) == true
|
||||
; run: %icmp_nof_i32(0xFFFFFFFF, 1) == true
|
||||
; run: %icmp_nof_i32(0x80000000, 1) == false
|
||||
; run: %icmp_nof_i32(0x7FFFFFFF, 0x80000000) == false
|
||||
; run: %icmp_nof_i32(0x80000000, 0x7FFFFFFF) == false
|
||||
; run: %icmp_nof_i32(0x7FFFFFFF, 0xFFFFFFFF) == false
|
||||
|
||||
function %icmp_nof_i64(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_nof_i64(0, 0) == true
|
||||
; run: %icmp_nof_i64(0, 1) == true
|
||||
; run: %icmp_nof_i64(1, 0) == true
|
||||
; run: %icmp_nof_i64(0, -1) == true
|
||||
; run: %icmp_nof_i64(0x80000000_00000000, 0x80000000_00000000) == true
|
||||
; run: %icmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %icmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF) == true
|
||||
; run: %icmp_nof_i64(0xFFFFFFFF_FFFFFFFF, 1) == true
|
||||
; run: %icmp_nof_i64(0x80000000_00000000, 1) == false
|
||||
; run: %icmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000000) == false
|
||||
; run: %icmp_nof_i64(0x80000000_00000000, 0x7FFFFFFF_FFFFFFFF) == false
|
||||
; run: %icmp_nof_i64(0x7FFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == false
|
||||
@@ -1,75 +0,0 @@
|
||||
test interpret
|
||||
test run
|
||||
target x86_64
|
||||
|
||||
function %icmp_of_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_of_i8(0, 0) == false
|
||||
; run: %icmp_of_i8(0, 1) == false
|
||||
; run: %icmp_of_i8(1, 0) == false
|
||||
; run: %icmp_of_i8(0, -1) == false
|
||||
; run: %icmp_of_i8(0x80, 0x80) == false
|
||||
; run: %icmp_of_i8(0x7F, 1) == false
|
||||
; run: %icmp_of_i8(0x7F, 0x7F) == false
|
||||
; run: %icmp_of_i8(0xFF, 1) == false
|
||||
; run: %icmp_of_i8(0x80, 1) == true
|
||||
; run: %icmp_of_i8(0x7F, 0x80) == true
|
||||
; run: %icmp_of_i8(0x80, 0x7F) == true
|
||||
; run: %icmp_of_i8(0x7F, 0xFF) == true
|
||||
|
||||
function %icmp_of_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_of_i16(0, 0) == false
|
||||
; run: %icmp_of_i16(0, 1) == false
|
||||
; run: %icmp_of_i16(1, 0) == false
|
||||
; run: %icmp_of_i16(0, -1) == false
|
||||
; run: %icmp_of_i16(0x8000, 0x8000) == false
|
||||
; run: %icmp_of_i16(0x7FFF, 1) == false
|
||||
; run: %icmp_of_i16(0x7FFF, 0x7FFF) == false
|
||||
; run: %icmp_of_i16(0xFFFF, 1) == false
|
||||
; run: %icmp_of_i16(0x8000, 1) == true
|
||||
; run: %icmp_of_i16(0x7FFF, 0x8000) == true
|
||||
; run: %icmp_of_i16(0x8000, 0x7FFF) == true
|
||||
; run: %icmp_of_i16(0x7FFF, 0xFFFF) == true
|
||||
|
||||
function %icmp_of_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_of_i32(0, 0) == false
|
||||
; run: %icmp_of_i32(0, 1) == false
|
||||
; run: %icmp_of_i32(1, 0) == false
|
||||
; run: %icmp_of_i32(0, -1) == false
|
||||
; run: %icmp_of_i32(0x80000000, 0x80000000) == false
|
||||
; run: %icmp_of_i32(0x7FFFFFFF, 1) == false
|
||||
; run: %icmp_of_i32(0x7FFFFFFF, 0x7FFFFFFF) == false
|
||||
; run: %icmp_of_i32(0xFFFFFFFF, 1) == false
|
||||
; run: %icmp_of_i32(0x80000000, 1) == true
|
||||
; run: %icmp_of_i32(0x7FFFFFFF, 0x80000000) == true
|
||||
; run: %icmp_of_i32(0x80000000, 0x7FFFFFFF) == true
|
||||
; run: %icmp_of_i32(0x7FFFFFFF, 0xFFFFFFFF) == true
|
||||
|
||||
function %icmp_of_i64(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %icmp_of_i64(0, 0) == false
|
||||
; run: %icmp_of_i64(0, 1) == false
|
||||
; run: %icmp_of_i64(1, 0) == false
|
||||
; run: %icmp_of_i64(0, -1) == false
|
||||
; run: %icmp_of_i64(0x80000000_00000000, 0x80000000_00000000) == false
|
||||
; run: %icmp_of_i64(0x7FFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %icmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF) == false
|
||||
; run: %icmp_of_i64(0xFFFFFFFF_FFFFFFFF, 1) == false
|
||||
; run: %icmp_of_i64(0x80000000_00000000, 1) == true
|
||||
; run: %icmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000000) == true
|
||||
; run: %icmp_of_i64(0x80000000_00000000, 0x7FFFFFFF_FFFFFFFF) == true
|
||||
; run: %icmp_of_i64(0x7FFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == true
|
||||
@@ -1,45 +0,0 @@
|
||||
test interpret
|
||||
|
||||
function %simd_icmp_nof_i8(i8x16, i8x16) -> b8x16 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_nof_i8([0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0], [0 1 0 0xFF 0 0 0 0 0 0 0 0 0 0 0 0]) == [true true true true true true true true true true true true true true true true]
|
||||
; run: %simd_icmp_nof_i8([0x80 0x7F 0x7F 0xFF 0 0 0 0 0 0 0 0 0 0 0 0], [0x80 0x01 0x7F 0x01 0 0 0 0 0 0 0 0 0 0 0 0]) == [true true true true true true true true true true true true true true true true]
|
||||
; run: %simd_icmp_nof_i8([0x80 0x7F 0x80 0x7F 0 0 0 0 0 0 0 0 0 0 0 0], [0x01 0x80 0x7F 0xFF 0 0 0 0 0 0 0 0 0 0 0 0]) == [false false false false true true true true true true true true true true true true]
|
||||
; run: %simd_icmp_nof_i8([0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F], [0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF]) == [false false false false false false false false false false false false false false false false]
|
||||
|
||||
|
||||
function %simd_icmp_nof_i16(i16x8, i16x8) -> b16x8 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_nof_i16([0 0 1 0 0 0 0 0], [0 1 0 0xFFFF 0 0 0 0]) == [true true true true true true true true]
|
||||
; run: %simd_icmp_nof_i16([0x8000 0x7FFF 0x7FFF 0xFFFF 0 0 0 0], [0x8000 0x0001 0x7FFF 0x0001 0 0 0 0]) == [true true true true true true true true]
|
||||
; run: %simd_icmp_nof_i16([0x8000 0x7FFF 0x8000 0x7FFF 0 0 0 0], [0x0001 0x8000 0x7FFF 0xFFFF 0 0 0 0]) == [false false false false true true true true]
|
||||
; run: %simd_icmp_nof_i16([0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF], [0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF]) == [false false false false false false false false]
|
||||
|
||||
|
||||
function %simd_icmp_nof_i32(i32x4, i32x4) -> b32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_nof_i32([0 0 1 0], [0 1 0 0xFFFFFFFF]) == [true true true true]
|
||||
; run: %simd_icmp_nof_i32([0x80000000 0x7FFFFFFF 0x7FFFFFFF 0xFFFFFFFF], [0x80000000 0x00000001 0x7FFFFFFF 0x00000001]) == [true true true true]
|
||||
; run: %simd_icmp_nof_i32([0x80000000 0x7FFFFFFF 0x80000000 0x7FFFFFFF], [0x00000001 0x80000000 0x7FFFFFFF 0xFFFFFFFF]) == [false false false false]
|
||||
; run: %simd_icmp_nof_i32([0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF], [0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF]) == [false false false false]
|
||||
|
||||
function %simd_icmp_nof_i64(i64x2, i64x2) -> b64x2 {
|
||||
block0(v0: i64x2, v1: i64x2):
|
||||
v2 = icmp nof v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_nof_i64([0 0], [0 1]) == [true true]
|
||||
; run: %simd_icmp_nof_i64([1 0], [0 0xFFFFFFFF_FFFFFFFF]) == [true true]
|
||||
; run: %simd_icmp_nof_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x80000000_00000000 0x00000000_00000001]) == [true true]
|
||||
; run: %simd_icmp_nof_i64([0x7FFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF], [0x7FFFFFFF_FFFFFFFF 0x00000000_00000001]) == [true true]
|
||||
; run: %simd_icmp_nof_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x01 0x80000000_00000000]) == [false false]
|
||||
; run: %simd_icmp_nof_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x7FFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF]) == [false false]
|
||||
@@ -1,45 +0,0 @@
|
||||
test interpret
|
||||
|
||||
function %simd_icmp_of_i8(i8x16, i8x16) -> b8x16 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_of_i8([0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0], [0 1 0 0xFF 0 0 0 0 0 0 0 0 0 0 0 0]) == [false false false false false false false false false false false false false false false false]
|
||||
; run: %simd_icmp_of_i8([0x80 0x7F 0x7F 0xFF 0 0 0 0 0 0 0 0 0 0 0 0], [0x80 0x01 0x7F 0x01 0 0 0 0 0 0 0 0 0 0 0 0]) == [false false false false false false false false false false false false false false false false]
|
||||
; run: %simd_icmp_of_i8([0x80 0x7F 0x80 0x7F 0 0 0 0 0 0 0 0 0 0 0 0], [0x01 0x80 0x7F 0xFF 0 0 0 0 0 0 0 0 0 0 0 0]) == [true true true true false false false false false false false false false false false false]
|
||||
; run: %simd_icmp_of_i8([0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F], [0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF]) == [true true true true true true true true true true true true true true true true]
|
||||
|
||||
|
||||
function %simd_icmp_of_i16(i16x8, i16x8) -> b16x8 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_of_i16([0 0 1 0 0 0 0 0], [0 1 0 0xFFFF 0 0 0 0]) == [false false false false false false false false]
|
||||
; run: %simd_icmp_of_i16([0x8000 0x7FFF 0x7FFF 0xFFFF 0 0 0 0], [0x8000 0x0001 0x7FFF 0x0001 0 0 0 0]) == [false false false false false false false false]
|
||||
; run: %simd_icmp_of_i16([0x8000 0x7FFF 0x8000 0x7FFF 0 0 0 0], [0x0001 0x8000 0x7FFF 0xFFFF 0 0 0 0]) == [true true true true false false false false]
|
||||
; run: %simd_icmp_of_i16([0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF 0x7FFF], [0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF 0xFFFF]) == [true true true true true true true true]
|
||||
|
||||
|
||||
function %simd_icmp_of_i32(i32x4, i32x4) -> b32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_of_i32([0 0 1 0], [0 1 0 0xFFFFFFFF]) == [false false false false]
|
||||
; run: %simd_icmp_of_i32([0x80000000 0x7FFFFFFF 0x7FFFFFFF 0xFFFFFFFF], [0x80000000 0x00000001 0x7FFFFFFF 0x00000001]) == [false false false false]
|
||||
; run: %simd_icmp_of_i32([0x80000000 0x7FFFFFFF 0x80000000 0x7FFFFFFF], [0x00000001 0x80000000 0x7FFFFFFF 0xFFFFFFFF]) == [true true true true]
|
||||
; run: %simd_icmp_of_i32([0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF], [0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF]) == [true true true true]
|
||||
|
||||
function %simd_icmp_of_i64(i64x2, i64x2) -> b64x2 {
|
||||
block0(v0: i64x2, v1: i64x2):
|
||||
v2 = icmp of v0, v1
|
||||
return v2
|
||||
}
|
||||
; run: %simd_icmp_of_i64([0 0], [0 1]) == [false false]
|
||||
; run: %simd_icmp_of_i64([1 0], [0 0xFFFFFFFF_FFFFFFFF]) == [false false]
|
||||
; run: %simd_icmp_of_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x80000000_00000000 0x00000000_00000001]) == [false false]
|
||||
; run: %simd_icmp_of_i64([0x7FFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF], [0x7FFFFFFF_FFFFFFFF 0x00000000_00000001]) == [false false]
|
||||
; run: %simd_icmp_of_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x01 0x80000000_00000000]) == [true true]
|
||||
; run: %simd_icmp_of_i64([0x80000000_00000000 0x7FFFFFFF_FFFFFFFF], [0x7FFFFFFF_FFFFFFFF 0xFFFFFFFF_FFFFFFFF]) == [true true]
|
||||
Reference in New Issue
Block a user