Files
wasmtime/cranelift/filetests/filetests/runtests/i128-load-store.clif
2021-10-11 17:44:21 +02:00

107 lines
3.7 KiB
Plaintext

test run
set enable_llvm_abi_extensions=true
target x86_64
target aarch64
function %i128_stack_store_load(i128) -> b1 {
ss0 = explicit_slot 16
block0(v0: i128):
stack_store.i128 v0, ss0
v1 = stack_load.i128 ss0
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load(0) == true
; run: %i128_stack_store_load(-1) == true
; run: %i128_stack_store_load(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == true
; run: %i128_stack_store_load(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == true
; run: %i128_stack_store_load(0xFEDCBA98_76543210_01234567_89ABCDEF) == true
; run: %i128_stack_store_load(0xA00A00A0_0A00A00A_06060606_06060606) == true
; run: %i128_stack_store_load(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == true
function %i128_stack_store_load_inst_offset(i128) -> b1 {
ss0 = explicit_slot 16
ss1 = explicit_slot 16
ss2 = explicit_slot 16
block0(v0: i128):
stack_store.i128 v0, ss1+16
v1 = stack_load.i128 ss1+16
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load_inst_offset(0) == true
; run: %i128_stack_store_load_inst_offset(-1) == true
; run: %i128_stack_store_load_inst_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == true
; run: %i128_stack_store_load_inst_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == true
; run: %i128_stack_store_load_inst_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == true
; run: %i128_stack_store_load_inst_offset(0xA00A00A0_0A00A00A_06060606_06060606) == true
; run: %i128_stack_store_load_inst_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == true
; Some arches (aarch64) try to encode the offset into the load/store instructions
; test that we spill if the offset is too large and doesn't fit in the instruction
function %i128_stack_store_load_big_offset(i128) -> b1 {
ss0 = explicit_slot 100000
ss1 = explicit_slot 8
block0(v0: i128):
stack_store.i128 v0, ss0
v1 = stack_load.i128 ss0
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load_big_offset(0) == true
; run: %i128_stack_store_load_big_offset(-1) == true
; run: %i128_stack_store_load_big_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == true
; run: %i128_stack_store_load_big_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == true
; run: %i128_stack_store_load_big_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == true
; run: %i128_stack_store_load_big_offset(0xA00A00A0_0A00A00A_06060606_06060606) == true
; run: %i128_stack_store_load_big_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == true
function %i128_store_load(i128) -> b1 {
ss0 = explicit_slot 16
block0(v0: i128):
v1 = stack_addr.i64 ss0
store.i128 v0, v1
v2 = load.i128 v1
v3 = icmp.i128 eq v0, v2
return v3
}
; run: %i128_store_load(0) == true
; run: %i128_store_load(-1) == true
; run: %i128_store_load(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == true
; run: %i128_store_load(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == true
; run: %i128_store_load(0xFEDCBA98_76543210_01234567_89ABCDEF) == true
; run: %i128_store_load(0xA00A00A0_0A00A00A_06060606_06060606) == true
; run: %i128_store_load(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == true
function %i128_store_load_offset(i128) -> b1 {
ss0 = explicit_slot 32
block0(v0: i128):
v1 = stack_addr.i64 ss0
store.i128 v0, v1+16
v2 = load.i128 v1+16
v3 = icmp.i128 eq v0, v2
return v3
}
; run: %i128_store_load_offset(0) == true
; run: %i128_store_load_offset(-1) == true
; run: %i128_store_load_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == true
; run: %i128_store_load_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == true
; run: %i128_store_load_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == true
; run: %i128_store_load_offset(0xA00A00A0_0A00A00A_06060606_06060606) == true
; run: %i128_store_load_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == true