Skip to content

Commit e44600f

Browse files
authored
[X86][CFE] Support EGPR in GCCRegNames. (#91323)
1 parent 23ae482 commit e44600f

File tree

2 files changed

+139
-1
lines changed

2 files changed

+139
-1
lines changed

clang/lib/Basic/Targets/X86.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ static const char *const GCCRegNames[] = {
6464
"dr0", "dr1", "dr2", "dr3", "dr6", "dr7",
6565
"bnd0", "bnd1", "bnd2", "bnd3",
6666
"tmm0", "tmm1", "tmm2", "tmm3", "tmm4", "tmm5", "tmm6", "tmm7",
67+
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
68+
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
6769
};
6870

6971
const TargetInfo::AddlRegName AddlRegNames[] = {
@@ -83,8 +85,23 @@ const TargetInfo::AddlRegName AddlRegNames[] = {
8385
{{"r13d", "r13w", "r13b"}, 43},
8486
{{"r14d", "r14w", "r14b"}, 44},
8587
{{"r15d", "r15w", "r15b"}, 45},
88+
{{"r16d", "r16w", "r16b"}, 165},
89+
{{"r17d", "r17w", "r17b"}, 166},
90+
{{"r18d", "r18w", "r18b"}, 167},
91+
{{"r19d", "r19w", "r19b"}, 168},
92+
{{"r20d", "r20w", "r20b"}, 169},
93+
{{"r21d", "r21w", "r21b"}, 170},
94+
{{"r22d", "r22w", "r22b"}, 171},
95+
{{"r23d", "r23w", "r23b"}, 172},
96+
{{"r24d", "r24w", "r24b"}, 173},
97+
{{"r25d", "r25w", "r25b"}, 174},
98+
{{"r26d", "r26w", "r26b"}, 175},
99+
{{"r27d", "r27w", "r27b"}, 176},
100+
{{"r28d", "r28w", "r28b"}, 177},
101+
{{"r29d", "r29w", "r29b"}, 178},
102+
{{"r30d", "r30w", "r30b"}, 179},
103+
{{"r31d", "r31w", "r31b"}, 180},
86104
};
87-
88105
} // namespace targets
89106
} // namespace clang
90107

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O2 %s -o - | FileCheck %s
2+
3+
// CHECK-LABEL: @test_r15
4+
// CHECK: call void asm sideeffect "", "{r15},~{dirflag},~{fpsr},~{flags}"(i32 undef)
5+
void test_r15() {
6+
register int a asm ("r15");
7+
asm ("" :: "r" (a));
8+
}
9+
10+
// CHECK-LABEL: @test_r16
11+
// CHECK: call void asm sideeffect "", "{r16},~{dirflag},~{fpsr},~{flags}"(i32 undef)
12+
void test_r16() {
13+
register int a asm ("r16");
14+
asm ("" :: "r" (a));
15+
}
16+
17+
// CHECK-LABEL: @test_r17
18+
// CHECK: call void asm sideeffect "", "{r17},~{dirflag},~{fpsr},~{flags}"(i32 undef)
19+
void test_r17() {
20+
register int a asm ("r17");
21+
asm ("" :: "r" (a));
22+
}
23+
24+
// CHECK-LABEL: @test_r18
25+
// CHECK: call void asm sideeffect "", "{r18},~{dirflag},~{fpsr},~{flags}"(i32 undef)
26+
void test_r18() {
27+
register int a asm ("r18");
28+
asm ("" :: "r" (a));
29+
}
30+
31+
// CHECK-LABEL: @test_r19
32+
// CHECK: call void asm sideeffect "", "{r19},~{dirflag},~{fpsr},~{flags}"(i32 undef)
33+
void test_r19() {
34+
register int a asm ("r19");
35+
asm ("" :: "r" (a));
36+
}
37+
38+
// CHECK-LABEL: @test_r20
39+
// CHECK: call void asm sideeffect "", "{r20},~{dirflag},~{fpsr},~{flags}"(i32 undef)
40+
void test_r20() {
41+
register int a asm ("r20");
42+
asm ("" :: "r" (a));
43+
}
44+
45+
// CHECK-LABEL: @test_r21
46+
// CHECK: call void asm sideeffect "", "{r21},~{dirflag},~{fpsr},~{flags}"(i32 undef)
47+
void test_r21() {
48+
register int a asm ("r21");
49+
asm ("" :: "r" (a));
50+
}
51+
52+
// CHECK-LABEL: @test_r22
53+
// CHECK: call void asm sideeffect "", "{r22},~{dirflag},~{fpsr},~{flags}"(i32 undef)
54+
void test_r22() {
55+
register int a asm ("r22");
56+
asm ("" :: "r" (a));
57+
}
58+
59+
// CHECK-LABEL: @test_r23
60+
// CHECK: call void asm sideeffect "", "{r23},~{dirflag},~{fpsr},~{flags}"(i32 undef)
61+
void test_r23() {
62+
register int a asm ("r23");
63+
asm ("" :: "r" (a));
64+
}
65+
66+
// CHECK-LABEL: @test_r24
67+
// CHECK: call void asm sideeffect "", "{r24},~{dirflag},~{fpsr},~{flags}"(i32 undef)
68+
void test_r24() {
69+
register int a asm ("r24");
70+
asm ("" :: "r" (a));
71+
}
72+
73+
// CHECK-LABEL: @test_r25
74+
// CHECK: call void asm sideeffect "", "{r25},~{dirflag},~{fpsr},~{flags}"(i32 undef)
75+
void test_r25() {
76+
register int a asm ("r25");
77+
asm ("" :: "r" (a));
78+
}
79+
80+
// CHECK-LABEL: @test_r26
81+
// CHECK: call void asm sideeffect "", "{r26},~{dirflag},~{fpsr},~{flags}"(i32 undef)
82+
void test_r26() {
83+
register int a asm ("r26");
84+
asm ("" :: "r" (a));
85+
}
86+
87+
// CHECK-LABEL: @test_r27
88+
// CHECK: call void asm sideeffect "", "{r27},~{dirflag},~{fpsr},~{flags}"(i32 undef)
89+
void test_r27() {
90+
register int a asm ("r27");
91+
asm ("" :: "r" (a));
92+
}
93+
94+
// CHECK-LABEL: @test_r28
95+
// CHECK: call void asm sideeffect "", "{r28},~{dirflag},~{fpsr},~{flags}"(i32 undef)
96+
void test_r28() {
97+
register int a asm ("r28");
98+
asm ("" :: "r" (a));
99+
}
100+
101+
// CHECK-LABEL: @test_r29
102+
// CHECK: call void asm sideeffect "", "{r29},~{dirflag},~{fpsr},~{flags}"(i32 undef)
103+
void test_r29() {
104+
register int a asm ("r29");
105+
asm ("" :: "r" (a));
106+
}
107+
108+
// CHECK-LABEL: @test_r30
109+
// CHECK: call void asm sideeffect "", "{r30},~{dirflag},~{fpsr},~{flags}"(i32 undef)
110+
void test_r30() {
111+
register int a asm ("r30");
112+
asm ("" :: "r" (a));
113+
}
114+
115+
// CHECK-LABEL: @test_r31
116+
// CHECK: call void asm sideeffect "", "{r31},~{dirflag},~{fpsr},~{flags}"(i32 undef)
117+
void test_r31() {
118+
register int a asm ("r31");
119+
asm ("" :: "r" (a));
120+
}
121+

0 commit comments

Comments
 (0)