@@ -15,8 +15,8 @@ static bool safe_try_feature(bool (*try_feature)(void));
1515static 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