1 /* { dg-do compile } */
2 /* { dg-options "-O2 -march=armv8-a+crypto" } */
4 /* Test that pragma option pushing and popping works.
5 Also that CPP predefines redefinitions on #pragma works. */
7 #pragma GCC push_options
8 #pragma GCC target ("arch=armv8-a+nofp+nosimd")
9 #ifdef __ARM_FEATURE_FMA
10 #error "__ARM_FEATURE_FMA is defined but should not be!"
14 #error "__ARM_FP is defined but should not be!"
17 #pragma GCC push_options
18 #pragma GCC target ("arch=armv8-a+fp+nosimd")
20 #error "__ARM_FP is not defined but should be!"
24 #error "__ARM_NEON is defined but should not be!"
27 #pragma GCC push_options
28 #pragma GCC target ("arch=armv8-a+fp+simd")
31 #error "__ARM_NEON is not defined but should be!"
34 #ifdef __ARM_FEATURE_CRYPTO
35 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
38 #pragma GCC push_options
39 #pragma GCC target ("arch=armv8-a+fp+simd+crypto")
41 #ifndef __ARM_FEATURE_CRYPTO
42 #error "__ARM_FEATURE_CRYPTO is not defined but should be!"
45 #pragma GCC pop_options
48 #error "__ARM_NEON is not defined but should be!"
51 #ifdef __ARM_FEATURE_CRYPTO
52 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
56 #pragma GCC pop_options
59 #error "__ARM_FP is not defined but should be!"
63 #error "__ARM_NEON is defined but should not be!"
66 #pragma GCC pop_options
69 #error "__ARM_FP is defined but should not be!"
73 #error "__ARM_NEON is defined but should not be!"
76 /* And again, but using cpu=. */
78 #pragma GCC push_options
79 #pragma GCC target ("cpu=cortex-a53+nofp+nosimd")
80 #ifdef __ARM_FEATURE_FMA
81 #error "__ARM_FEATURE_FMA is defined but should not be!"
85 #error "__ARM_FP is defined but should not be!"
88 #pragma GCC push_options
89 #pragma GCC target ("cpu=cortex-a53+fp+nosimd")
91 #error "__ARM_FP is not defined but should be!"
95 #error "__ARM_NEON is defined but should not be!"
98 #pragma GCC push_options
99 #pragma GCC target ("cpu=cortex-a53+fp+simd+nocrypto")
102 #error "__ARM_NEON is not defined but should be!"
105 #ifdef __ARM_FEATURE_CRYPTO
106 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
109 #pragma GCC push_options
110 #pragma GCC target ("cpu=cortex-a53+fp+simd+crypto")
112 #ifndef __ARM_FEATURE_CRYPTO
113 #error "__ARM_FEATURE_CRYPTO is not defined but should be!"
117 #pragma GCC pop_options
120 #error "__ARM_NEON is not defined but should be!"
123 #ifdef __ARM_FEATURE_CRYPTO
124 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
128 #pragma GCC pop_options
131 #error "__ARM_FP is not defined but should be!"
135 #error "__ARM_NEON is defined but should not be!"
138 #pragma GCC pop_options
141 #error "__ARM_FP is defined but should not be!"
145 #error "__ARM_NEON is defined but should not be!"
148 /* And again, but using just the ISA extensions. */
150 #pragma GCC push_options
151 #pragma GCC target ("+nofp")
152 #ifdef __ARM_FEATURE_FMA
153 #error "__ARM_FEATURE_FMA is defined but should not be!"
157 #error "__ARM_FP is defined but should not be!"
160 #pragma GCC push_options
161 #pragma GCC target ("+fp+nosimd")
163 #error "__ARM_FP is not defined but should be!"
167 #error "__ARM_NEON is defined but should not be!"
170 #pragma GCC push_options
171 #pragma GCC target ("+fp+simd+nocrypto")
174 #error "__ARM_NEON is not defined but should be!"
177 #ifdef __ARM_FEATURE_CRYPTO
178 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
181 #pragma GCC push_options
182 #pragma GCC target ("+fp+simd+crypto")
184 #ifndef __ARM_FEATURE_CRYPTO
185 #error "__ARM_FEATURE_CRYPTO is not defined but should be!"
188 #pragma GCC pop_options
191 #error "__ARM_NEON is not defined but should be!"
194 #ifdef __ARM_FEATURE_CRYPTO
195 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
199 #pragma GCC pop_options
202 #error "__ARM_FP is not defined but should be!"
206 #error "__ARM_NEON is defined but should not be!"
209 #pragma GCC pop_options
212 #error "__ARM_FP is defined but should not be!"
216 #error "__ARM_NEON is defined but should not be!"
219 /* Make sure that general-regs-only works too. */
220 #pragma GCC push_options
221 #pragma GCC target ("general-regs-only")
222 #ifdef __ARM_FEATURE_FMA
223 #error "__ARM_FEATURE_FMA is defined but should not be!"
227 #error "__ARM_FP is defined but should not be!"
231 #error "__ARM_NEON is defined but should not be!"
234 #ifdef __ARM_FEATURE_CRYPTO
235 #error "__ARM_FEATURE_CRYPTO is defined but should not be!"
238 #pragma GCC pop_options
240 /* Also check that crc re-defines work. */
241 #pragma GCC target ("+nocrc")
242 #ifdef __ARM_FEATURE_CRC32
243 #error "__ARM_FEATURE_CRC32 is defined but should not be!"
246 #pragma GCC target ("+crc")
247 #ifndef __ARM_FEATURE_CRC32
248 #error "__ARM_FEATURE_CRC32 is not defined but should be!"