* add `{u,s}{add,sub,mul}_overflow` with interpreter
* add `{u,s}{add,sub,mul}_overflow` for x64
* add `{u,s}{add,sub,mul}_overflow` for aarch64
* 128bit filetests for `{u,s}{add,sub,mul}_overflow`
* `{u,s}{add,sub,mul}_overflow` emit tests for x64
* `{u,s}{add,sub,mul}_overflow` emit tests for aarch64
* Initial review changes
* add `with_flags_extended` helper
* add `with_flags_chained` helper
77 lines
3.2 KiB
Plaintext
77 lines
3.2 KiB
Plaintext
test interpret
|
|
test run
|
|
set enable_llvm_abi_extensions=true
|
|
target x86_64
|
|
target aarch64
|
|
|
|
function %uaddof_i128(i128, i128) -> i128, i8 {
|
|
block0(v0: i128,v1: i128):
|
|
v2, v3 = uadd_overflow v0, v1
|
|
return v2, v3
|
|
}
|
|
; run: %uaddof_i128(0, 0) == [0, 0]
|
|
; run: %uaddof_i128(1, 0) == [1, 0]
|
|
; run: %uaddof_i128(1, 1) == [2, 0]
|
|
; run: %uaddof_i128(1, -1) == [0, 1]
|
|
; run: %uaddof_i128(0xFFFFFFFF_FFFFFFFF_00000000_00000000, 0x00000000_00000000_FFFFFFFF_FFFFFFFF) == [-1, 0]
|
|
; run: %uaddof_i128(0x00000000_00000000_FFFFFFFF_FFFFFFFF, 1) == [0x1_00000000_00000000, 0]
|
|
; run: %uaddof_i128(-1, 1) == [0, 1]
|
|
; run: %uaddof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == [-2, 0]
|
|
; run: %uaddof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000000) == [-1, 0]
|
|
; run: %uaddof_i128(0x7FFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x80000000_00000000_00000000_00000001) == [0, 1]
|
|
; run: %uaddof_i128(0x01234567_89ABCDEF_01234567_89ABCDEF, 0xFEDCBA98_76543210_FEDCBA98_76543210) == [-1, 0]
|
|
; run: %uaddof_i128(0x06060606_06060606_A00A00A0_0A00A00A, 0x30303030_30303030_0BB0BB0B_B0BB0BB0) == [0x36363636_36363636_ABBABBAB_BABBABBA, 0]
|
|
; run: %uaddof_i128(0xC0FFEEEE_C0FFEEEE_C0FFEEEE_C0FFEEEE, 0x1DCB1111_1DCB1111_1DCB1111_1DCB1111) == [0xDECAFFFF_DECAFFFF_DECAFFFF_DECAFFFF, 0]
|
|
|
|
function %uaddof_i64(i64, i64) -> i64, i8 {
|
|
block0(v0: i64,v1: i64):
|
|
v2, v3 = uadd_overflow v0, v1
|
|
return v2, v3
|
|
}
|
|
; run: %uaddof_i64(0, 0) == [0, 0]
|
|
; run: %uaddof_i64(0, 1) == [1, 0]
|
|
; run: %uaddof_i64(-1, 0) == [-1, 0]
|
|
; run: %uaddof_i64(-1, 1) == [0, 1]
|
|
; run: %uaddof_i64(0x7FFFFFFF_FFFFFFFF, 0x7FFFFFFF_FFFFFFFF) == [-2, 0]
|
|
; run: %uaddof_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000000) == [-1, 0]
|
|
; run: %uaddof_i64(0x7FFFFFFF_FFFFFFFF, 0x80000000_00000001) == [0, 1]
|
|
; run: %uaddof_i64(0x01234567_89ABCDEF, 0xFEDCBA98_76543210) == [-1, 0]
|
|
; run: %uaddof_i64(0x01234567_89ABCDEF, 0xFEDCBA98_76543220) == [0xF, 1]
|
|
; run: %uaddof_i64(0xA00A00A0_0A00A00A, 0x0BB0BB0B_B0BB0BB0) == [0xABBABBAB_BABBABBA, 0]
|
|
; run: %uaddof_i64(0xC0FFEEEE_C0FFEEEE, 0x1DCB1111_1DCB1111) == [0xDECAFFFF_DECAFFFF, 0]
|
|
|
|
function %uaddof_i8(i8, i8) -> i8, i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2, v3 = uadd_overflow v0, v1
|
|
return v2, v3
|
|
}
|
|
; run: %uaddof_i8(0, 1) == [1, 0]
|
|
; run: %uaddof_i8(100, 27) == [127, 0]
|
|
; run: %uaddof_i8(100, -20) == [80, 1]
|
|
; run: %uaddof_i8(100, 28) == [-128, 0]
|
|
; run: %uaddof_i8(-128, -128) == [0, 1]
|
|
; run: %uaddof_i8(127, 1) == [0x80, 0]
|
|
|
|
function %uaddof_i16(i16, i16) -> i16, i8 {
|
|
block0(v0: i16, v1: i16):
|
|
v2, v3 = uadd_overflow v0, v1
|
|
return v2, v3
|
|
}
|
|
; run: %uaddof_i16(0, 1) == [1, 0]
|
|
; run: %uaddof_i16(100, 27) == [127, 0]
|
|
; run: %uaddof_i16(100, 28) == [128, 0]
|
|
; run: %uaddof_i16(32000, 767) == [32767, 0]
|
|
; run: %uaddof_i16(32000, 768) == [-32768, 0]
|
|
; run: %uaddof_i16(65000, 535) == [65535, 0]
|
|
; run: %uaddof_i16(65000, 536) == [0, 1]
|
|
|
|
function %uaddof_i32(i32, i32) -> i32, i8 {
|
|
block0(v0: i32, v1: i32):
|
|
v2, v3 = uadd_overflow v0, v1
|
|
return v2, v3
|
|
}
|
|
; run: %uaddof_i32(0, 1) == [1, 0]
|
|
; run: %uaddof_i32(100, 27) == [127, 0]
|
|
; run: %uaddof_i32(100, 28) == [128, 0]
|
|
; run: %uaddof_i32(3000000000, 1294967295) == [-1, 0]
|
|
; run: %uaddof_i32(3000000000, 1294967296) == [0, 1] |