@@ -15,8 +15,8 @@ static bool safe_try_feature(bool (*try_feature)(void));
15
15
static bool any_fails = false;
16
16
17
17
#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 ))) \
20
20
static bool try_##X(void) { \
21
21
do \
22
22
BODY \
@@ -48,84 +48,84 @@ static bool any_fails = false;
48
48
}
49
49
#endif
50
50
51
- CHECK (flagm , {
51
+ CHECK (flagm , flagm , {
52
52
asm volatile (
53
53
"cfinv" "\n"
54
54
"cfinv" "\n"
55
55
);
56
56
})
57
- CHECK (flagm2 , {
57
+ CHECK (flagm2 , arch = armv8 . 5 - a , {
58
58
asm volatile (
59
59
"axflag" "\n"
60
60
"xaflag" "\n"
61
61
);
62
62
})
63
- CHECK (dotprod , {
63
+ CHECK (dotprod , dotprod , {
64
64
asm volatile (
65
65
"udot v0.4S,v1.16B,v2.16B"
66
66
: : : "v0"
67
67
);
68
68
})
69
- CHECK (sha3 , {
69
+ CHECK (sha3 , sha3 , {
70
70
asm volatile (
71
71
"fmov d0, #0" "\n"
72
72
"fmov d1, #0" "\n"
73
73
"eor3 v0.16b, v0.16b, v0.16b, v0.16b" "\n"
74
74
: : : "v0"
75
75
);
76
76
})
77
- CHECK (rdm , {
77
+ CHECK (rdm , rdm , {
78
78
asm volatile (
79
79
"sqrdmlah s0, s1, s2"
80
80
: : : "s0"
81
81
);
82
82
})
83
- CHECK (lse , {
83
+ CHECK (lse , lse , {
84
84
uint64_t pointee = 0 ;
85
85
asm volatile (
86
86
"swp xzr, xzr, [%[pointee]]"
87
87
: : [pointee ]"r" (& pointee )
88
88
);
89
89
})
90
- CHECK (sha2 , {
90
+ CHECK (sha2 , sha2 , {
91
91
asm volatile (
92
92
"fmov d0, #0" "\n"
93
93
"fmov d1, #0" "\n"
94
94
"sha256h q0, q0, v0.4s" "\n"
95
95
: : : "v0"
96
96
);
97
97
})
98
- CHECK (sha1 , {
98
+ CHECK (sha1 , sha1 , {
99
99
asm volatile (
100
100
"fmov s0, #0" "\n"
101
101
// FIXME: sha1h is under +sha2 in clang, and +sha1 doesn't exist yet.
102
102
".inst 0x5e280800" "\n" // sha1h s0, s0
103
103
: : : "v0"
104
104
);
105
105
})
106
- CHECK (aes , {
106
+ CHECK (aes , aes , {
107
107
asm volatile (
108
108
"fmov d0, #0" "\n"
109
109
"fmov d1, #0" "\n"
110
110
"aesd v0.16B, v0.16B" "\n"
111
111
: : : "v0"
112
112
);
113
113
})
114
- CHECK (pmull , {
114
+ CHECK (pmull , aes , {
115
115
asm volatile (
116
116
"fmov d0, #0" "\n"
117
117
"pmull v0.1q, v0.1d, v0.1d" "\n"
118
118
: : : "v0"
119
119
);
120
120
})
121
- CHECK (rcpc , {
121
+ CHECK (rcpc , rcpc , {
122
122
int x ;
123
123
asm volatile (
124
124
"ldaprb w0, [%0]"
125
125
: : "r" (& x ) : "w0"
126
126
);
127
127
})
128
- CHECK (rcpc2 , {
128
+ CHECK (rcpc2 , rcpc2 , {
129
129
int x ;
130
130
asm volatile (
131
131
"mov x1, %0" "\n"
@@ -134,66 +134,66 @@ CHECK(rcpc2, {
134
134
: : "r" (& x ) : "w0"
135
135
);
136
136
})
137
- CHECK (fcma , {
137
+ CHECK (fcma , fcma , {
138
138
asm volatile (
139
139
"fmov d0, #0" "\n"
140
140
"fcadd v0.2s, v0.2s, v0.2s, #90" "\n"
141
141
: : : "v0"
142
142
);
143
143
})
144
- CHECK (jscvt , {
144
+ CHECK (jscvt , jscvt , {
145
145
asm volatile (
146
146
"fmov d0, #0" "\n"
147
147
"fjcvtzs w1, d0" "\n"
148
148
: : : "w1" , "d0"
149
149
);
150
150
})
151
- CHECK (dpb , {
151
+ CHECK (dpb , arch = armv8 . 2 - a , {
152
152
int x ;
153
153
asm volatile (
154
154
"dc cvap, %0"
155
155
: : "r" (& x )
156
156
);
157
157
})
158
- CHECK (dpb2 , {
158
+ CHECK (dpb2 , arch = armv8 . 5 - a , {
159
159
int x ;
160
160
asm volatile (
161
161
"dc cvadp, %0"
162
162
: : "r" (& x )
163
163
);
164
164
})
165
- CHECK (bf16 , {
165
+ CHECK (bf16 , bf16 , {
166
166
asm volatile (
167
167
"bfdot v0.4S,v1.8H,v2.8H"
168
168
: : : "v0"
169
169
);
170
170
})
171
- CHECK (i8mm , {
171
+ CHECK (i8mm , i8mm , {
172
172
asm volatile (
173
173
"sudot v0.4S,v1.16B,v2.4B[0]"
174
174
: : : "v0"
175
175
);
176
176
})
177
- CHECK (dit , {
177
+ CHECK (dit , dit , {
178
178
asm volatile (
179
179
"msr DIT, x0"
180
180
: : : "x0"
181
181
);
182
182
})
183
- CHECK (fp16 , {
183
+ CHECK (fp16 , fp16 , {
184
184
asm volatile (
185
185
"fmov h0, #0"
186
186
: : : "v0"
187
187
);
188
188
})
189
- CHECK (ssbs2 , {
189
+ CHECK (ssbs2 , ssbs , {
190
190
asm volatile (
191
191
"mrs x0, SSBS" "\n"
192
192
"msr SSBS, x0" "\n"
193
193
: : : "x0"
194
194
);
195
195
})
196
- CHECK (bti , {
196
+ CHECK (bti , bti , {
197
197
// The only test for this requires reading a register that is only
198
198
// accessible to EL1.
199
199
#ifdef __linux__
@@ -214,28 +214,28 @@ CHECK(bti, {
214
214
// TODO: implement me on your platform to fix this test!
215
215
#endif
216
216
})
217
- CHECK (simd , {
217
+ CHECK (simd , simd , {
218
218
asm volatile (
219
219
"mov v0.B[0], w0"
220
220
: : :
221
221
);
222
222
})
223
- CHECK (fp , {
223
+ CHECK (fp , fp , {
224
224
asm volatile (
225
225
"fmov s0, #0"
226
226
: : : "v0"
227
227
);
228
228
})
229
- CHECK (crc , {
229
+ CHECK (crc , crc , {
230
230
asm volatile ( "crc32b wzr, wzr, wzr" );
231
231
})
232
- CHECK (sme , {
232
+ CHECK (sme , sme , {
233
233
asm volatile (
234
234
"rdsvl x0, #1"
235
235
: : : "x0"
236
236
);
237
237
})
238
- CHECK (sme2 , {
238
+ CHECK (sme2 , sme2 , {
239
239
asm volatile (
240
240
"smstart za" "\n"
241
241
"zero { zt0 }" "\n"
0 commit comments