1 /* Functional tests for the "target" attribute and pragma.  */
2 
3 /* { dg-do compile } */
4 /* { dg-require-effective-target target_attribute } */
5 /* { dg-options "-mno-small-exec" } */
6 
7 extern void foo(void);
8 
9 #pragma GCC target("small-exec")
p1(void)10 int p1(void)
11 {
12   foo();
13   return 1;
14 }
15 #pragma GCC reset_options
16 
17 #pragma GCC target("no-small-exec")
p0(void)18 int p0(void)
19 {
20   foo();
21   foo();
22   return 2;
23 }
24 #pragma GCC reset_options
25 
26 __attribute__ ((target("small-exec")))
a1(void)27 int a1(void)
28 {
29   foo();
30   foo();
31   foo();
32   foo();
33   return 4;
34 }
35 
36 __attribute__ ((target("no-small-exec")))
a0(void)37 int a0(void)
38 {
39   foo();
40   foo();
41   foo();
42   foo();
43   foo();
44   foo();
45   foo();
46   foo();
47   return 8;
48 }
49 
50 /* { dg-final { scan-assembler-times "\tbras\t" 5 } } */
51