1 /* Verify that the TST insn is used to extract a zero extended
2    single bit into the T bit (for a following conditional branch) and into
3    a GP register.  */
4 /* { dg-do compile }  */
5 /* { dg-options "-O2" }  */
6 /* { dg-final { scan-assembler-not "exts|extu|sha|shld|subc|xor" } }  */
7 
8 /* { dg-final { scan-assembler-times "tst" 61 { target { ! sh2a } } } }  */
9 /* { dg-final { scan-assembler-times "tst\t#1," 1 { target { ! sh2a } } } }  */
10 /* { dg-final { scan-assembler-times "tst\t#2" 2 { target { ! sh2a } } } }  */
11 /* { dg-final { scan-assembler-times "tst\t#4" 2 { target { ! sh2a } } } }  */
12 /* { dg-final { scan-assembler-times "tst\t#8" 2 { target { ! sh2a } } } }  */
13 /* { dg-final { scan-assembler-times "tst\t#16" 2 { target { ! sh2a } } } }  */
14 /* { dg-final { scan-assembler-times "tst\t#32" 2 { target { ! sh2a } } } }  */
15 /* { dg-final { scan-assembler-times "tst\t#64" 2 { target { ! sh2a } } } }  */
16 /* { dg-final { scan-assembler-times "tst\t#128" 2 { target { ! sh2a } } } }  */
17 
18 /* { dg-final { scan-assembler-times "tst" 54 { target { sh2a } } } }  */
19 /* { dg-final { scan-assembler-times "tst\t#1," 1 { target { sh2a } } } }  */
20 /* { dg-final { scan-assembler-times "tst\t#2" 1 { target { sh2a } } } }  */
21 /* { dg-final { scan-assembler-times "tst\t#4" 1 { target { sh2a } } } }  */
22 /* { dg-final { scan-assembler-times "tst\t#8" 1 { target { sh2a } } } }  */
23 /* { dg-final { scan-assembler-times "tst\t#16" 1 { target { sh2a } } } }  */
24 /* { dg-final { scan-assembler-times "tst\t#32" 1 { target { sh2a } } } }  */
25 /* { dg-final { scan-assembler-times "tst\t#64" 1 { target { sh2a } } } }  */
26 /* { dg-final { scan-assembler-times "tst\t#128" 1 { target { sh2a } } } }  */
27 /* { dg-final { scan-assembler-times "bld\t#1," 1 { target { sh2a } } } }  */
28 /* { dg-final { scan-assembler-times "bld\t#2" 1 { target { sh2a } } } }  */
29 /* { dg-final { scan-assembler-times "bld\t#3" 1 { target { sh2a } } } }  */
30 /* { dg-final { scan-assembler-times "bld\t#4" 1 { target { sh2a } } } }  */
31 /* { dg-final { scan-assembler-times "bld\t#5" 1 { target { sh2a } } } }  */
32 /* { dg-final { scan-assembler-times "bld\t#6" 1 { target { sh2a } } } }  */
33 /* { dg-final { scan-assembler-times "bld\t#7" 1 { target { sh2a } } } }  */
34 
35 /* { dg-final { scan-assembler-times "and\t#1" 1 } }  */
36 /* { dg-final { scan-assembler-times "cmp/pz" 1 } }  */
37 /* { dg-final { scan-assembler-times "shll" 1 } }  */
38 
39 typedef struct
40 {
41   unsigned int b31 : 1;
42   unsigned int b30 : 1;
43   unsigned int b29 : 1;
44   unsigned int b28 : 1;
45   unsigned int b27 : 1;
46   unsigned int b26 : 1;
47   unsigned int b25 : 1;
48   unsigned int b24 : 1;
49   unsigned int b23 : 1;
50   unsigned int b22 : 1;
51   unsigned int b21 : 1;
52   unsigned int b20 : 1;
53   unsigned int b19 : 1;
54   unsigned int b18 : 1;
55   unsigned int b17 : 1;
56   unsigned int b16 : 1;
57   unsigned int b15 : 1;
58   unsigned int b14 : 1;
59   unsigned int b13 : 1;
60   unsigned int b12 : 1;
61   unsigned int b11 : 1;
62   unsigned int b10 : 1;
63   unsigned int b9 : 1;
64   unsigned int b8 : 1;
65   unsigned int b7 : 1;
66   unsigned int b6 : 1;
67   unsigned int b5 : 1;
68   unsigned int b4 : 1;
69   unsigned int b3 : 1;
70   unsigned int b2 : 1;
71   unsigned int b1 : 1;
72   unsigned int b0 : 1;
73 } S;
74 
75 #define make_funcs(bitpos)\
76   unsigned int test_b##bitpos##_0 (S s)\
77   {\
78     return s.b##bitpos;\
79   }\
80   unsigned int test_b##bitpos##_1 (S s)\
81   {\
82     return !s.b##bitpos;\
83   }\
84 
85 make_funcs (0)
86 make_funcs (1)
87 make_funcs (2)
88 make_funcs (3)
89 make_funcs (4)
90 make_funcs (5)
91 make_funcs (6)
92 make_funcs (7)
93 make_funcs (8)
94 make_funcs (9)
95 make_funcs (10)
96 make_funcs (11)
97 make_funcs (12)
98 make_funcs (13)
99 make_funcs (14)
100 make_funcs (15)
101 make_funcs (16)
102 make_funcs (17)
103 make_funcs (18)
104 make_funcs (19)
105 make_funcs (20)
106 make_funcs (21)
107 make_funcs (22)
108 make_funcs (23)
109 make_funcs (24)
110 make_funcs (25)
111 make_funcs (26)
112 make_funcs (27)
113 make_funcs (28)
114 make_funcs (29)
115 make_funcs (30)
116 make_funcs (31)
117