1 /* Test for #pragma assembly extension generations. */
2 /* { dg-do compile } */
3 /* { dg-require-effective-target arm_arch_v8a_ok } */
4 /* { dg-add-options arm_arch_v8a } */
5 /* { dg-additional-options "-std=gnu99" } */
6
7 #include <stdint.h>
8
9 extern uint32_t bar();
10
11 #pragma GCC push_options
12 #pragma GCC target("arch=armv8-a+crc")
13 uint32_t crc32cw(uint32_t crc, uint32_t val)
14 {
15 uint32_t res;
16 asm("crc32cw %0, %1, %2" : "=r"(res) : "r"(crc), "r"(val));
17 return res;
18 }
19 #pragma GCC pop_options
20
21 uint32_t restored ()
22 {
23 return bar();
24 }
25
26 /* { dg-final { scan-assembler-times {\.arch\s+armv8-a} 3 } } */
27 /* { dg-final { scan-assembler-times {\.arch_extension\s+crc} 1 } } */
28