PR target/80969 - Fix ICE with -mabi=ms -mavx512f, reduce wasted space when realignin...
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / asm-flag-6.c
blob458587ec9dc2f0dc6f2e8617f2e2ca4a3648d531
1 /* Executable testcase for 'output flags.' */
2 /* { dg-do run } */
4 char TestC ()
6 char r;
8 __asm__ ("stc" : "=@ccc"(r));
9 if (r)
11 __asm__ ("clc" : "=@ccnc"(r));
12 if (r)
13 return 1;
15 return 0;
18 char TestE ()
20 char r;
22 /* 1 equals 1. */
23 __asm__ ("cmp $1, %1" : "=@cce"(r) : "r" (1));
24 if (r)
26 /* 1 not equals 2. */
27 __asm__ ("cmp $2, %1" : "=@ccne"(r) : "r" (1));
28 if (r)
29 return 1;
31 return 0;
34 char TestZ ()
36 char r;
38 /* 1 equals 1. */
39 __asm__ ("cmp $1, %1" : "=@ccz"(r) : "r" (1));
40 if (r)
42 /* 1 not equals 2. */
43 __asm__ ("cmp $2, %1" : "=@ccnz"(r) : "r" (1));
44 if (r)
45 return 1;
47 return 0;
50 char TestA ()
52 char r;
54 /* 1 a 0. */
55 __asm__ ("cmp $0, %1" : "=@cca"(r) : "r" (1));
56 if (r)
58 /* 1 na 2. */
59 __asm__ ("cmp $2, %1" : "=@ccna"(r) : "r" (1));
60 if (r)
62 /* 1 na 1. */
63 __asm__ ("cmp $1, %1" : "=@ccna"(r) : "r" (1));
64 if (r)
65 return 1;
68 return 0;
71 char TestAE ()
73 char r;
75 /* 1 ae 0. */
76 __asm__ ("cmp $0, %1" : "=@ccae"(r) : "r" (1));
77 if (r)
79 /* 1 nae 2. */
80 __asm__ ("cmp $2, %1" : "=@ccnae"(r) : "r" (1));
81 if (r)
83 /* 1 ae 1. */
84 __asm__ ("cmp $1, %1" : "=@ccae"(r) : "r" (1));
85 if (r)
86 return 1;
89 return 0;
92 char TestB ()
94 char r;
96 /* 1 b 2. */
97 __asm__ ("cmp $2, %1" : "=@ccb"(r) : "r" (1));
98 if (r)
100 /* 1 nb 0. */
101 __asm__ ("cmp $0, %1" : "=@ccnb"(r) : "r" (1));
102 if (r)
104 /* 1 nb 1. */
105 __asm__ ("cmp $1, %1" : "=@ccnb"(r) : "r" (1));
106 if (r)
107 return 1;
110 return 0;
113 char TestBE ()
115 char r;
117 /* 1 be 2. */
118 __asm__ ("cmp $2, %1" : "=@ccbe"(r) : "r" (1));
119 if (r)
121 /* 1 nbe 0. */
122 __asm__ ("cmp $0, %1" : "=@ccnbe"(r) : "r" (1));
123 if (r)
125 /* 1 be 1. */
126 __asm__ ("cmp $1, %1" : "=@ccbe"(r) : "r" (1));
127 if (r)
128 return 1;
131 return 0;
134 char TestG ()
136 char r;
138 /* 1 g 0. */
139 __asm__ ("cmp $0, %1" : "=@ccg"(r) : "r" (1));
140 if (r)
142 /* 1 ng 2. */
143 __asm__ ("cmp $2, %1" : "=@ccng"(r) : "r" (1));
144 if (r)
146 /* 1 ng 1. */
147 __asm__ ("cmp $1, %1" : "=@ccng"(r) : "r" (1));
148 if (r)
149 return 1;
152 return 0;
155 char TestGE ()
157 char r;
159 /* 1 ge 0. */
160 __asm__ ("cmp $0, %1" : "=@ccge"(r) : "r" (1));
161 if (r)
163 /* 1 nge 2. */
164 __asm__ ("cmp $2, %1" : "=@ccnge"(r) : "r" (1));
165 if (r)
167 /* 1 ge 1. */
168 __asm__ ("cmp $1, %1" : "=@ccge"(r) : "r" (1));
169 if (r)
170 return 1;
173 return 0;
176 char TestL ()
178 char r;
180 /* 1 l 2. */
181 __asm__ ("cmp $2, %1" : "=@ccl"(r) : "r" (1));
182 if (r)
184 /* 1 nl 0. */
185 __asm__ ("cmp $0, %1" : "=@ccnl"(r) : "r" (1));
186 if (r)
188 /* 1 nl 1. */
189 __asm__ ("cmp $1, %1" : "=@ccnl"(r) : "r" (1));
190 if (r)
191 return 1;
194 return 0;
197 char TestLE ()
199 char r;
201 /* 1 le 2. */
202 __asm__ ("cmp $2, %1" : "=@ccle"(r) : "r" (1));
203 if (r)
205 /* 1 nle 0. */
206 __asm__ ("cmp $0, %1" : "=@ccnle"(r) : "r" (1));
207 if (r)
209 /* 1 le 1. */
210 __asm__ ("cmp $1, %1" : "=@ccle"(r) : "r" (1));
211 if (r)
212 return 1;
215 return 0;
218 char TestO ()
220 char r;
221 unsigned char res = 128;
223 /* overflow. */
224 __asm__ ("addb $128, %1" : "=@cco"(r), "+r"(res));
225 if (r)
227 /* not overflow. */
228 __asm__ ("addb $1, %1" : "=@ccno"(r), "+r"(res));
229 if (r)
230 return 1;
232 return 0;
235 char TestP ()
237 char r, res = 1;
239 /* even # bits. */
240 __asm__ ("addb $2, %1" : "=@ccp"(r), "+r"(res));
241 if (r)
243 /* odd # bits. */
244 __asm__ ("addb $1, %1" : "=@ccnp"(r), "+r"(res));
245 if (r)
246 return 1;
248 return 0;
251 char TestS ()
253 char r, res = 1;
255 /* sign bit set. */
256 __asm__ ("addb $128, %1" : "=@ccs"(r), "+r"(res));
257 if (r)
259 /* sign bit not set. */
260 __asm__ ("subb $128, %1" : "=@ccns"(r), "+r"(res));
261 if (r)
262 return 1;
264 return 0;
267 /* dg-do treats exit code of 0 as success. */
268 int main ()
270 if (TestC () && TestE () && TestZ () && TestA ()
271 && TestAE () && TestB () && TestBE () && TestG ()
272 && TestGE () && TestL () && TestLE () && TestO ()
273 && TestP () && TestS ())
274 return 0;
275 __builtin_abort ();