* riscv64: Remove unused code * riscv64: Group extend rules * riscv64: Remove more unused rules * riscv64: Cleanup existing extension rules * riscv64: Move the existing Extend rules to ISLE * riscv64: Use `sext.w` when extending * riscv64: Remove duplicate extend tests * riscv64: Use `zbb` instructions when extending values * riscv64: Use `zbkb` extensions when zero extending * riscv64: Enable additional tests for extend i128 * riscv64: Fix formatting for `Inst::Extend` * riscv64: Reverse register for pack * riscv64: Misc Cleanups * riscv64: Cleanup extend rules
88 lines
2.5 KiB
Plaintext
88 lines
2.5 KiB
Plaintext
test interpret
|
|
test run
|
|
set enable_llvm_abi_extensions=true
|
|
target aarch64
|
|
target s390x
|
|
target x86_64
|
|
target riscv64
|
|
target riscv64 has_zbb
|
|
target riscv64 has_zbkb
|
|
|
|
function %i128_uextend_i64(i64) -> i128 {
|
|
block0(v0: i64):
|
|
v1 = uextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_uextend_i64(0) == 0
|
|
; run: %i128_uextend_i64(-1) == 0x00000000_00000000_ffffffff_ffffffff
|
|
; run: %i128_uextend_i64(0xffff_ffff_eeee_0000) == 0x00000000_00000000_ffff_ffff_eeee_0000
|
|
|
|
function %i128_sextend_i64(i64) -> i128 {
|
|
block0(v0: i64):
|
|
v1 = sextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_sextend_i64(0) == 0
|
|
; run: %i128_sextend_i64(-1) == -1
|
|
; run: %i128_sextend_i64(0x7fff_ffff_ffff_ffff) == 0x00000000_00000000_7fffffffffffffff
|
|
; run: %i128_sextend_i64(0xffff_ffff_eeee_0000) == 0xffffffff_ffffffff_ffffffff_eeee0000
|
|
|
|
function %i128_uextend_i32(i32) -> i128 {
|
|
block0(v0: i32):
|
|
v1 = uextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_uextend_i32(0) == 0
|
|
; run: %i128_uextend_i32(-1) == 0x00000000_00000000_00000000_ffffffff
|
|
; run: %i128_uextend_i32(0xffff_eeee) == 0x00000000_00000000_00000000_ffffeeee
|
|
|
|
function %i128_sextend_i32(i32) -> i128 {
|
|
block0(v0: i32):
|
|
v1 = sextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_sextend_i32(0) == 0
|
|
; run: %i128_sextend_i32(-1) == -1
|
|
; run: %i128_sextend_i32(0x7fff_ffff) == 0x00000000_00000000_00000000_7fffffff
|
|
; run: %i128_sextend_i32(0xffff_eeee) == 0xffffffff_ffffffff_ffffffff_ffff_eeee
|
|
|
|
|
|
function %i128_uextend_i16(i16) -> i128 {
|
|
block0(v0: i16):
|
|
v1 = uextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_uextend_i16(0) == 0
|
|
; run: %i128_uextend_i16(-1) == 0x00000000_00000000_00000000_0000ffff
|
|
; run: %i128_uextend_i16(0xffee) == 0x00000000_00000000_00000000_0000ffee
|
|
|
|
function %i128_sextend_i16(i16) -> i128 {
|
|
block0(v0: i16):
|
|
v1 = sextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_sextend_i16(0) == 0
|
|
; run: %i128_sextend_i16(-1) == -1
|
|
; run: %i128_sextend_i16(0x7fff) == 0x00000000_00000000_00000000_00007fff
|
|
; run: %i128_sextend_i16(0xffee) == 0xffffffff_ffffffff_ffffffff_ffffffee
|
|
|
|
|
|
function %i128_uextend_i8(i8) -> i128 {
|
|
block0(v0: i8):
|
|
v1 = uextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_uextend_i8(0) == 0
|
|
; run: %i128_uextend_i8(-1) == 0x00000000_00000000_00000000_000000ff
|
|
; run: %i128_uextend_i8(0xfe) == 0x00000000_00000000_00000000_000000fe
|
|
|
|
function %i128_sextend_i8(i8) -> i128 {
|
|
block0(v0: i8):
|
|
v1 = sextend.i128 v0
|
|
return v1
|
|
}
|
|
; run: %i128_sextend_i8(0) == 0
|
|
; run: %i128_sextend_i8(-1) == -1
|
|
; run: %i128_sextend_i8(0x7f) == 0x00000000_00000000_00000000_0000007f
|
|
; run: %i128_sextend_i8(0xfe) == 0xffffffff_ffffffff_ffffffff_fffffffe
|