Skip to content

Commit 6c75e6c

Browse files
committed
cranelift: Update i128 tests to use i128 values in functions
1 parent 6e97c86 commit 6c75e6c

23 files changed

+1191
-1433
lines changed
Lines changed: 46 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,57 @@
11
test interpret
22
test run
3+
set enable_llvm_abi_extensions=true
34
target aarch64
4-
; target s390x TODO: Not yet implemented on s390x
55
target x86_64 machinst
66

7-
; TODO: Cleanup these tests when we have native support for i128 immediates in CLIF's parser
8-
9-
function %add_i128(i64, i64, i64, i64) -> i64, i64 {
10-
block0(v0: i64,v1: i64,v2: i64,v3: i64):
11-
v4 = iconcat v0, v1
12-
v5 = iconcat v2, v3
13-
14-
v6 = iadd v4, v5
15-
16-
v7, v8 = isplit v6
17-
return v7, v8
7+
function %add_i128(i128, i128) -> i128 {
8+
block0(v0: i128,v1: i128):
9+
v2 = iadd v0, v1
10+
return v2
1811
}
19-
; run: %add_i128(0, 0, 0, 0) == [0, 0]
20-
; run: %add_i128(0, -1, -1, 0) == [-1, -1]
21-
; run: %add_i128(1, 0, 0, 0) == [1, 0]
22-
; run: %add_i128(1, 0, 1, 0) == [2, 0]
23-
; run: %add_i128(1, 0, -1, -1) == [0, 0]
24-
; run: %add_i128(-1, 0, 1, 0) == [0, 1]
25-
26-
; run: %add_i128(0x01234567_89ABCDEF, 0x01234567_89ABCDEF, 0xFEDCBA98_76543210, 0xFEDCBA98_76543210) == [-1, -1]
27-
; run: %add_i128(0x06060606_06060606, 0xA00A00A0_0A00A00A, 0x30303030_30303030, 0x0BB0BB0B_B0BB0BB0) == [0x36363636_36363636, 0xABBABBAB_BABBABBA]
28-
; run: %add_i128(0xC0FFEEEE_C0FFEEEE, 0xC0FFEEEE_C0FFEEEE, 0x1DCB1111_1DCB1111, 0x1DCB1111_1DCB1111) == [0xDECAFFFF_DECAFFFF, 0xDECAFFFF_DECAFFFF]
29-
30-
function %sub_i128(i64, i64, i64, i64) -> i64, i64 {
31-
block0(v0: i64,v1: i64,v2: i64,v3: i64):
32-
v4 = iconcat v0, v1
33-
v5 = iconcat v2, v3
34-
35-
v6 = isub v4, v5
36-
37-
v7, v8 = isplit v6
38-
return v7, v8
12+
; run: %add_i128(0, 0) == 0
13+
; run: %add_i128(1, 0) == 1
14+
; run: %add_i128(1, 1) == 2
15+
; run: %add_i128(1, -1) == 0
16+
; run: %add_i128(0xFFFFFFFF_FFFFFFFF_00000000_00000000, 0x00000000_00000000_FFFFFFFF_FFFFFFFF) == -1
17+
; run: %add_i128(0x00000000_00000000_FFFFFFFF_FFFFFFFF, 1) == 0x00000000_00000001_00000000_00000000
18+
19+
; run: %add_i128(0x01234567_89ABCDEF_01234567_89ABCDEF, 0xFEDCBA98_76543210_FEDCBA98_76543210) == -1
20+
; run: %add_i128(0x06060606_06060606_A00A00A0_0A00A00A, 0x30303030_30303030_0BB0BB0B_B0BB0BB0) == 0x36363636_36363636_ABBABBAB_BABBABBA
21+
; run: %add_i128(0xC0FFEEEE_C0FFEEEE_C0FFEEEE_C0FFEEEE, 0x1DCB1111_1DCB1111_1DCB1111_1DCB1111) == 0xDECAFFFF_DECAFFFF_DECAFFFF_DECAFFFF
22+
23+
24+
function %sub_i128(i128, i128) -> i128 {
25+
block0(v0: i128,v1: i128):
26+
v2 = isub v0, v1
27+
return v2
3928
}
40-
; run: %sub_i128(0, 0, 0, 0) == [0, 0]
41-
; run: %sub_i128(1, 0, 1, 0) == [0, 0]
42-
; run: %sub_i128(1, 0, 0, 0) == [1, 0]
43-
; run: %sub_i128(0, 0, 1, 0) == [-1, -1]
44-
; run: %sub_i128(0, 0, -1, -1) == [1, 0]
45-
46-
; run: %sub_i128(-1, -1, 0xFEDCBA98_76543210, 0xFEDCBA98_76543210) == [0x01234567_89ABCDEF, 0x01234567_89ABCDEF]
47-
; run: %sub_i128(0x36363636_36363636, 0xABBABBAB_BABBABBA, 0x30303030_30303030, 0x0BB0BB0B_B0BB0BB0) == [0x06060606_06060606, 0xA00A00A0_0A00A00A]
48-
; run: %sub_i128(0xDECAFFFF_DECAFFFF, 0xDECAFFFF_DECAFFFF, 0x1DCB1111_1DCB1111, 0x1DCB1111_1DCB1111) == [0xC0FFEEEE_C0FFEEEE, 0xC0FFEEEE_C0FFEEEE]
29+
; run: %sub_i128(0, 0) == 0
30+
; run: %sub_i128(1, 1) == 0
31+
; run: %sub_i128(1, 0) == 1
32+
; run: %sub_i128(0, 1) == -1
33+
; run: %sub_i128(0, -1) == 1
4934

35+
; run: %sub_i128(-1, 0xFEDCBA98_76543210_FEDCBA98_76543210) == 0x01234567_89ABCDEF_01234567_89ABCDEF
36+
; run: %sub_i128(0x36363636_36363636_ABBABBAB_BABBABBA, 0x30303030_30303030_0BB0BB0B_B0BB0BB0) == 0x06060606_06060606_A00A00A0_0A00A00A
37+
; run: %sub_i128(0xDECAFFFF_DECAFFFF_DECAFFFF_DECAFFFF, 0x1DCB1111_1DCB1111_1DCB1111_1DCB1111) == 0xC0FFEEEE_C0FFEEEE_C0FFEEEE_C0FFEEEE
5038

51-
function %mul_i128(i64, i64, i64, i64) -> i64, i64 {
52-
block0(v0: i64,v1: i64,v2: i64,v3: i64):
53-
v4 = iconcat v0, v1
54-
v5 = iconcat v2, v3
5539

56-
v6 = imul v4, v5
57-
58-
v7, v8 = isplit v6
59-
return v7, v8
40+
function %mul_i128(i128, i128) -> i128 {
41+
block0(v0: i128,v1: i128):
42+
v2 = imul v0, v1
43+
return v2
6044
}
61-
; run: %mul_i128(0, 0, 0, 0) == [0, 0]
62-
; run: %mul_i128(1, 0, 1, 0) == [1, 0]
63-
; run: %mul_i128(1, 0, 0, 0) == [0, 0]
64-
; run: %mul_i128(0, 0, 1, 0) == [0, 0]
65-
; run: %mul_i128(2, 0, 1, 0) == [2, 0]
66-
; run: %mul_i128(2, 0, 2, 0) == [4, 0]
67-
; run: %mul_i128(1, 0, -1, -1) == [-1, -1]
68-
; run: %mul_i128(2, 0, -1, -1) == [-2, -1]
69-
70-
; run: %mul_i128(0x01010101_01010101, 0x01010101_01010101, 13, 0) == [0x0D0D0D0D_0D0D0D0D, 0x0D0D0D0D_0D0D0D0D]
71-
; run: %mul_i128(13, 0, 0x01010101_01010101, 0x01010101_01010101) == [0x0D0D0D0D_0D0D0D0D, 0x0D0D0D0D_0D0D0D0D]
72-
; run: %mul_i128(0x00000000_01234567, 0x89ABCDEF_00000000, 0x00000000_FEDCBA98, 0x76543210_00000000) == [0x0121FA00_23E20B28, 0xE2946058_00000000]
73-
; run: %mul_i128(0xC0FFEEEE_C0FFEEEE, 0xC0FFEEEE_C0FFEEEE, 0xDECAFFFF_DECAFFFF, 0xDECAFFFF_DECAFFFF) == [0xDB6B1E48_19BA1112, 0x5ECD38B5_9D1C2B7E]
74-
; run: %mul_i128(0xC0FFEEEE_C0FFEEEE, 0xC0FFEEEE_C0FFEEEE, 0xDECAFFFF_DECAFFFF, 0xDECAFFFF_DECAFFFF) == [0xDB6B1E48_19BA1112, 0x5ECD38B5_9D1C2B7E]
45+
; run: %mul_i128(0, 0) == 0
46+
; run: %mul_i128(1, 1) == 1
47+
; run: %mul_i128(1, 0) == 0
48+
; run: %mul_i128(0, 1) == 0
49+
; run: %mul_i128(2, 1) == 2
50+
; run: %mul_i128(2, 2) == 4
51+
; run: %mul_i128(1, -1) == -1
52+
; run: %mul_i128(2, -1) == -2
53+
54+
; run: %mul_i128(0x01010101_01010101_01010101_01010101, 13) == 0x0D0D0D0D_0D0D0D0D_0D0D0D0D_0D0D0D0D
55+
; run: %mul_i128(13, 0x01010101_01010101_01010101_01010101) == 0x0D0D0D0D_0D0D0D0D_0D0D0D0D_0D0D0D0D
56+
; run: %mul_i128(0x00000000_01234567_89ABCDEF_00000000, 0x00000000_FEDCBA98_76543210_00000000) == 0x2236D88F_E5618CF0_00000000_00000000
57+
; run: %mul_i128(0xC0FFEEEE_C0FFEEEE_C0FFEEEE_C0FFEEEE, 0xDECAFFFF_DECAFFFF_DECAFFFF_DECAFFFF) == 0x5ECD38B5_9D1C2B7E_DB6B1E48_19BA1112
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
test run
2+
target aarch64
3+
4+
function %band_not_i128(i128, i128) -> i128 {
5+
block0(v0: i128, v1: i128):
6+
v2 = band_not v0, v1
7+
return v2
8+
}
9+
; run: %band_not_i128(0, 0) == 0
10+
; run: %band_not_i128(-1, 0) == -1
11+
; run: %band_not_i128(-1, -1) == 0
12+
; run: %band_not_i128(-1, 0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 0x00000000_00000000_FFFFFFFF_FFFFFFFF
13+
; run: %band_not_i128(0xFEDCBA98_76543210_01234567_89ABCDEF, 0x01234567_89ABCDEF_FEDCBA98_76543210) == 0xFEDCBA98_76543210_01234567_89ABCDEF
14+
; run: %band_not_i128(0xFEEEFFFF_FEEEFFFF_F1FFFEFE_F1FFFEFE, 0x20240000_20240000_31001010_31001010) == 0xDECAFFFF_DECAFFFF_C0FFEEEE_C0FFEEEE
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
test run
2+
set enable_llvm_abi_extensions=true
23
target aarch64
34
target x86_64 machinst
45

5-
function %bint_b8_i128() -> i64, i64 {
6+
function %bint_b8_i128() -> i128 {
67
block0:
78
v0 = bconst.b8 true
89
v1 = bint.i128 v0
9-
v2, v3 = isplit.i128 v1
10-
return v2, v3
10+
return v1
1111
}
12-
; run: %bint_b8_i128() == [1, 0]
12+
; run: %bint_b8_i128() == 1

cranelift/filetests/filetests/runtests/i128-bitops-cls.clif

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,48 @@
11
test run
2+
set enable_llvm_abi_extensions=true
23
target aarch64
3-
; target s390x TODO: Not yet implemented on s390x
44
target x86_64 machinst
55

6-
function %ctz_i128(i64, i64) -> i64 {
7-
block0(v0: i64, v1: i64):
8-
v2 = iconcat v0, v1
9-
10-
v3 = ctz v2
11-
12-
v4, v5 = isplit v3
13-
v6 = iadd v4, v5
14-
return v6
6+
function %ctz_i128(i128) -> i128 {
7+
block0(v0: i128):
8+
v1 = ctz v0
9+
return v1
1510
}
16-
; run: %ctz_i128(0x00000000_00000000, 0x00000000_00000000) == 128
17-
; run: %ctz_i128(0xFFFFFFFF_FFFFFFFF, 0x00000000_00000000) == 0
18-
; run: %ctz_i128(0x00000000_00000000, 0xFFFFFFFF_FFFFFFFF) == 64
19-
; run: %ctz_i128(0xFFFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == 0
20-
; run: %ctz_i128(0xFFFFFFFF_00000000, 0xF0000000_00000000) == 32
21-
; run: %ctz_i128(0xF0000000_00000000, 0xFF000000_00000000) == 60
22-
; run: %ctz_i128(0x00000001_00000000, 0x00000000_00000000) == 32
23-
; run: %ctz_i128(0x00000000_00000000, 0x00000001_00000000) == 96
24-
; run: %ctz_i128(0x00000000_00010000, 0x00000001_00000000) == 16
25-
; run: %ctz_i128(0x00000000_00010000, 0x00000000_00000000) == 16
26-
27-
function %clz_i128(i64, i64) -> i64 {
28-
block0(v0: i64, v1: i64):
29-
v2 = iconcat v0, v1
30-
31-
v3 = clz v2
32-
33-
v4, v5 = isplit v3
34-
v6 = iadd v4, v5
35-
return v6
11+
; run: %ctz_i128(0x00000000_00000000_00000000_00000000) == 128
12+
; run: %ctz_i128(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 0
13+
; run: %ctz_i128(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 64
14+
; run: %ctz_i128(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
15+
; run: %ctz_i128(0xF0000000_00000000_FFFFFFFF_00000000) == 32
16+
; run: %ctz_i128(0xFF000000_00000000_F0000000_00000000) == 60
17+
; run: %ctz_i128(0x00000000_00000000_00000001_00000000) == 32
18+
; run: %ctz_i128(0x00000001_00000000_00000000_00000000) == 96
19+
; run: %ctz_i128(0x00000001_00000000_00000000_00010000) == 16
20+
; run: %ctz_i128(0x00000000_00000000_00000000_00010000) == 16
21+
22+
function %clz_i128(i128) -> i128 {
23+
block0(v0: i128):
24+
v1 = clz v0
25+
return v1
3626
}
37-
; run: %clz_i128(0x00000000_00000000, 0x00000000_00000000) == 128
38-
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF, 0x00000000_00000000) == 64
39-
; run: %clz_i128(0x00000000_00000000, 0xFFFFFFFF_FFFFFFFF) == 0
40-
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == 0
41-
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF, 0x40000000_00000000) == 1
42-
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF, 0x20000000_00000000) == 2
43-
; run: %clz_i128(0x00000000_00000000, 0x00000000_80000000) == 32
44-
; run: %clz_i128(0x00000000_00000000, 0x00000001_00000000) == 31
45-
; run: %clz_i128(0x00000000_00010000, 0x00000001_00000000) == 31
46-
; run: %clz_i128(0x00000000_00010000, 0x00000000_00000000) == 111
47-
48-
function %popcnt_i128(i64, i64) -> i64 {
49-
block0(v0: i64, v1: i64):
50-
v2 = iconcat v0, v1
51-
52-
v3 = popcnt v2
53-
54-
v4, v5 = isplit v3
55-
v6 = iadd v4, v5
56-
return v6
27+
; run: %clz_i128(0x00000000_00000000_00000000_00000000) == 128
28+
; run: %clz_i128(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 64
29+
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 0
30+
; run: %clz_i128(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
31+
; run: %clz_i128(0x40000000_00000000_FFFFFFFF_FFFFFFFF) == 1
32+
; run: %clz_i128(0x20000000_00000000_FFFFFFFF_FFFFFFFF) == 2
33+
; run: %clz_i128(0x00000000_80000000_00000000_00000000) == 32
34+
; run: %clz_i128(0x00000001_00000000_00000000_00000000) == 31
35+
; run: %clz_i128(0x00000001_00000000_00000000_00010000) == 31
36+
; run: %clz_i128(0x00000000_00000000_00000000_00010000) == 111
37+
38+
function %popcnt_i128(i128) -> i128 {
39+
block0(v0: i128):
40+
v1 = popcnt v0
41+
return v1
5742
}
58-
; run: %popcnt_i128(0x00000000_00000000, 0x00000000_00000000) == 0
59-
; run: %popcnt_i128(0xFFFFFFFF_FFFFFFFF, 0x00000000_00000000) == 64
60-
; run: %popcnt_i128(0x00000000_00000000, 0xFFFFFFFF_FFFFFFFF) == 64
61-
; run: %popcnt_i128(0xFFFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF) == 128
62-
; run: %popcnt_i128(0x55555555_55555555, 0x55555555_55555555) == 64
63-
; run: %popcnt_i128(0xC0FFEEEE_DECAFFFF, 0xDECAFFFF_C0FFEEEE) == 96
43+
; run: %popcnt_i128(0x00000000_00000000_00000000_00000000) == 0
44+
; run: %popcnt_i128(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 64
45+
; run: %popcnt_i128(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 64
46+
; run: %popcnt_i128(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 128
47+
; run: %popcnt_i128(0x55555555_55555555_55555555_55555555) == 64
48+
; run: %popcnt_i128(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 96

0 commit comments

Comments
 (0)