Skip to content

Commit f5838e4

Browse files
[AArch64] add a target guard to FMV test (#133)
The FMV test uses FMV feature names (e.g. flagm2) which are not available to -march and therefore arguably should not be available to the target attribute. This change adds a way to specify the string for the target attribute independently from the FMV feature. This is necessary for 2cf1439 (#94279) which had to be reverted because it caused this test to fail.
1 parent 47a7503 commit f5838e4

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

SingleSource/UnitTests/AArch64/acle-fmv-features.c

+29-29
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ static bool safe_try_feature(bool (*try_feature)(void));
1515
static bool any_fails = false;
1616

1717
#if __HAVE_FUNCTION_MULTI_VERSIONING
18-
#define CHECK(X, BODY) \
19-
__attribute__((target(#X))) \
18+
#define CHECK(X, TARGET_GUARD, BODY) \
19+
__attribute__((target(#TARGET_GUARD))) \
2020
static bool try_##X(void) { \
2121
do \
2222
BODY \
@@ -48,84 +48,84 @@ static bool any_fails = false;
4848
}
4949
#endif
5050

51-
CHECK(flagm, {
51+
CHECK(flagm, flagm, {
5252
asm volatile (
5353
"cfinv" "\n"
5454
"cfinv" "\n"
5555
);
5656
})
57-
CHECK(flagm2, {
57+
CHECK(flagm2, arch=armv8.5-a, {
5858
asm volatile (
5959
"axflag" "\n"
6060
"xaflag" "\n"
6161
);
6262
})
63-
CHECK(dotprod, {
63+
CHECK(dotprod, dotprod, {
6464
asm volatile (
6565
"udot v0.4S,v1.16B,v2.16B"
6666
: : : "v0"
6767
);
6868
})
69-
CHECK(sha3, {
69+
CHECK(sha3, sha3, {
7070
asm volatile (
7171
"fmov d0, #0" "\n"
7272
"fmov d1, #0" "\n"
7373
"eor3 v0.16b, v0.16b, v0.16b, v0.16b" "\n"
7474
: : : "v0"
7575
);
7676
})
77-
CHECK(rdm, {
77+
CHECK(rdm, rdm, {
7878
asm volatile (
7979
"sqrdmlah s0, s1, s2"
8080
: : : "s0"
8181
);
8282
})
83-
CHECK(lse, {
83+
CHECK(lse, lse, {
8484
uint64_t pointee = 0;
8585
asm volatile (
8686
"swp xzr, xzr, [%[pointee]]"
8787
: : [pointee]"r"(&pointee)
8888
);
8989
})
90-
CHECK(sha2, {
90+
CHECK(sha2, sha2, {
9191
asm volatile (
9292
"fmov d0, #0" "\n"
9393
"fmov d1, #0" "\n"
9494
"sha256h q0, q0, v0.4s" "\n"
9595
: : : "v0"
9696
);
9797
})
98-
CHECK(sha1, {
98+
CHECK(sha1, sha1, {
9999
asm volatile (
100100
"fmov s0, #0" "\n"
101101
// FIXME: sha1h is under +sha2 in clang, and +sha1 doesn't exist yet.
102102
".inst 0x5e280800" "\n" // sha1h s0, s0
103103
: : : "v0"
104104
);
105105
})
106-
CHECK(aes, {
106+
CHECK(aes, aes, {
107107
asm volatile (
108108
"fmov d0, #0" "\n"
109109
"fmov d1, #0" "\n"
110110
"aesd v0.16B, v0.16B" "\n"
111111
: : : "v0"
112112
);
113113
})
114-
CHECK(pmull, {
114+
CHECK(pmull, aes, {
115115
asm volatile (
116116
"fmov d0, #0" "\n"
117117
"pmull v0.1q, v0.1d, v0.1d" "\n"
118118
: : : "v0"
119119
);
120120
})
121-
CHECK(rcpc, {
121+
CHECK(rcpc, rcpc, {
122122
int x;
123123
asm volatile (
124124
"ldaprb w0, [%0]"
125125
: : "r" (&x) : "w0"
126126
);
127127
})
128-
CHECK(rcpc2, {
128+
CHECK(rcpc2, rcpc2, {
129129
int x;
130130
asm volatile (
131131
"mov x1, %0" "\n"
@@ -134,66 +134,66 @@ CHECK(rcpc2, {
134134
: : "r" (&x) : "w0"
135135
);
136136
})
137-
CHECK(fcma, {
137+
CHECK(fcma, fcma, {
138138
asm volatile (
139139
"fmov d0, #0" "\n"
140140
"fcadd v0.2s, v0.2s, v0.2s, #90" "\n"
141141
: : : "v0"
142142
);
143143
})
144-
CHECK(jscvt, {
144+
CHECK(jscvt, jscvt, {
145145
asm volatile (
146146
"fmov d0, #0" "\n"
147147
"fjcvtzs w1, d0" "\n"
148148
: : : "w1", "d0"
149149
);
150150
})
151-
CHECK(dpb, {
151+
CHECK(dpb, arch=armv8.2-a, {
152152
int x;
153153
asm volatile (
154154
"dc cvap, %0"
155155
: : "r" (&x)
156156
);
157157
})
158-
CHECK(dpb2, {
158+
CHECK(dpb2, arch=armv8.5-a, {
159159
int x;
160160
asm volatile (
161161
"dc cvadp, %0"
162162
: : "r" (&x)
163163
);
164164
})
165-
CHECK(bf16, {
165+
CHECK(bf16, bf16, {
166166
asm volatile (
167167
"bfdot v0.4S,v1.8H,v2.8H"
168168
: : : "v0"
169169
);
170170
})
171-
CHECK(i8mm, {
171+
CHECK(i8mm, i8mm, {
172172
asm volatile (
173173
"sudot v0.4S,v1.16B,v2.4B[0]"
174174
: : : "v0"
175175
);
176176
})
177-
CHECK(dit, {
177+
CHECK(dit, dit, {
178178
asm volatile (
179179
"msr DIT, x0"
180180
: : : "x0"
181181
);
182182
})
183-
CHECK(fp16, {
183+
CHECK(fp16, fp16, {
184184
asm volatile (
185185
"fmov h0, #0"
186186
: : : "v0"
187187
);
188188
})
189-
CHECK(ssbs2, {
189+
CHECK(ssbs2, ssbs, {
190190
asm volatile (
191191
"mrs x0, SSBS" "\n"
192192
"msr SSBS, x0" "\n"
193193
: : : "x0"
194194
);
195195
})
196-
CHECK(bti, {
196+
CHECK(bti, bti, {
197197
// The only test for this requires reading a register that is only
198198
// accessible to EL1.
199199
#ifdef __linux__
@@ -214,28 +214,28 @@ CHECK(bti, {
214214
// TODO: implement me on your platform to fix this test!
215215
#endif
216216
})
217-
CHECK(simd, {
217+
CHECK(simd, simd, {
218218
asm volatile (
219219
"mov v0.B[0], w0"
220220
: : :
221221
);
222222
})
223-
CHECK(fp, {
223+
CHECK(fp, fp, {
224224
asm volatile (
225225
"fmov s0, #0"
226226
: : : "v0"
227227
);
228228
})
229-
CHECK(crc, {
229+
CHECK(crc, crc, {
230230
asm volatile ( "crc32b wzr, wzr, wzr");
231231
})
232-
CHECK(sme, {
232+
CHECK(sme, sme, {
233233
asm volatile (
234234
"rdsvl x0, #1"
235235
: : : "x0"
236236
);
237237
})
238-
CHECK(sme2, {
238+
CHECK(sme2, sme2, {
239239
asm volatile (
240240
"smstart za" "\n"
241241
"zero { zt0 }" "\n"

0 commit comments

Comments
 (0)