With this change we now reuse tests across multiple arches. Duplicate tests were merged into the same file where possible. Some legacy x86 tests were left in separate files due to incompatibilities with the rest of the test suite.
61 lines
2.6 KiB
Plaintext
61 lines
2.6 KiB
Plaintext
test run
|
|
; target aarch64 TODO: Not yet implemented on aarch64
|
|
; target s390x TODO: Not yet implemented on s390x
|
|
target x86_64 machinst
|
|
|
|
function %rotl(i64, i64, i8) -> i64, i64 {
|
|
block0(v0: i64, v1: i64, v2: i8):
|
|
v3 = iconcat v0, v1
|
|
v4 = rotl.i128 v3, v2
|
|
v5, v6 = isplit v4
|
|
return v5, v6
|
|
}
|
|
; run: %rotl(0x01010101_01010101, 0x01010101_01010101, 9) == [0x02020202_02020202, 0x02020202_02020202]
|
|
; run: %rotl(0x01010101_01010101, 0x01010101_01010101, 73) == [0x02020202_02020202, 0x02020202_02020202]
|
|
; run: %rotl(0x01010101_01010101, 0x02020202_02020202, 0) == [0x01010101_01010101, 0x02020202_02020202]
|
|
; run: %rotl(0x01010101_01010101, 0x03030303_03030303, 128) == [0x01010101_01010101, 0x03030303_03030303]
|
|
|
|
function %rotr(i64, i64, i8) -> i64, i64 {
|
|
block0(v0: i64, v1: i64, v2: i8):
|
|
v3 = iconcat v0, v1
|
|
v4 = rotr.i128 v3, v2
|
|
v5, v6 = isplit v4
|
|
return v5, v6
|
|
}
|
|
; run: %rotr(0x01010101_01010101, 0x01010101_01010101, 9) == [0x80808080_80808080, 0x80808080_80808080]
|
|
; run: %rotr(0x01010101_01010101, 0x01010101_01010101, 73) == [0x80808080_80808080, 0x80808080_80808080]
|
|
; run: %rotr(0x01010101_01010101, 0x02020202_02020202, 0) == [0x01010101_01010101, 0x02020202_02020202]
|
|
; run: %rotr(0x01010101_01010101, 0x03030303_03030303, 128) == [0x01010101_01010101, 0x03030303_03030303]
|
|
|
|
function %rotl_amt_i128(i64, i64, i8) -> i64, i64 {
|
|
block0(v0: i64, v1: i64, v2: i8):
|
|
v3 = uextend.i64 v2
|
|
v4 = iconcat v3, v3
|
|
|
|
v5 = iconcat v0, v1
|
|
|
|
v6 = rotl.i128 v5, v4
|
|
v7, v8 = isplit v6
|
|
return v7, v8
|
|
}
|
|
; run: %rotl_amt_i128(0x01010101_01010101, 0x01010101_01010101, 9) == [0x02020202_02020202, 0x02020202_02020202]
|
|
; run: %rotl_amt_i128(0x01010101_01010101, 0x01010101_01010101, 73) == [0x02020202_02020202, 0x02020202_02020202]
|
|
; run: %rotl_amt_i128(0x01010101_01010101, 0x02020202_02020202, 0) == [0x01010101_01010101, 0x02020202_02020202]
|
|
; run: %rotl_amt_i128(0x01010101_01010101, 0x03030303_03030303, 128) == [0x01010101_01010101, 0x03030303_03030303]
|
|
|
|
function %rotr_amt_i128(i64, i64, i8) -> i64, i64 {
|
|
block0(v0: i64, v1: i64, v2: i8):
|
|
v3 = uextend.i64 v2
|
|
v4 = iconcat v3, v3
|
|
|
|
v5 = iconcat v0, v1
|
|
|
|
v6 = rotr.i128 v5, v4
|
|
v7, v8 = isplit v6
|
|
return v7, v8
|
|
}
|
|
; run: %rotr_amt_i128(0x01010101_01010101, 0x01010101_01010101, 9) == [0x80808080_80808080, 0x80808080_80808080]
|
|
; run: %rotr_amt_i128(0x01010101_01010101, 0x01010101_01010101, 73) == [0x80808080_80808080, 0x80808080_80808080]
|
|
; run: %rotr_amt_i128(0x01010101_01010101, 0x02020202_02020202, 0) == [0x01010101_01010101, 0x02020202_02020202]
|
|
; run: %rotr_amt_i128(0x01010101_01010101, 0x03030303_03030303, 128) == [0x01010101_01010101, 0x03030303_03030303]
|