OpenMP: Check additional restrictions on context selector properties
[official-gcc.git] / gcc / testsuite / gcc.target / arm / asm-flag-6.c
blobd862db4e106301952a5707df0965703d9e76bce6
1 /* Executable testcase for 'output flags.' */
2 /* { dg-do run } */
3 /* { dg-skip-if "" { arm_thumb1 } } */
5 int test_bits (long nzcv)
7 long n, z, c, v;
9 __asm__ ("msr APSR_nzcvq, %[in]"
10 : "=@ccmi"(n), "=@cceq"(z), "=@cccs"(c), "=@ccvs"(v)
11 : [in] "r"(nzcv << 28));
13 return n * 8 + z * 4 + c * 2 + v == nzcv;
16 int test_cmps (long x, long y)
18 long gt, lt, ge, le;
20 __asm__ ("cmp %[x], %[y]"
21 : "=@ccgt"(gt), "=@cclt"(lt), "=@ccge"(ge), "=@ccle"(le)
22 : [x] "r"(x), [y] "r"(y));
24 return (gt == (x > y)
25 && lt == (x < y)
26 && ge == (x >= y)
27 && le == (x <= y));
30 int test_cmpu (unsigned long x, unsigned long y)
32 long gt, lt, ge, le;
34 __asm__ ("cmp %[x], %[y]"
35 : "=@cchi"(gt), "=@cclo"(lt), "=@cchs"(ge), "=@ccls"(le)
36 : [x] "r"(x), [y] "r"(y));
38 return (gt == (x > y)
39 && lt == (x < y)
40 && ge == (x >= y)
41 && le == (x <= y));
44 int main ()
46 long i, j;
48 for (i = 0; i < 16; ++i)
49 if (!test_bits (i))
50 __builtin_abort ();
52 for (i = -1; i <= 1; ++i)
53 for (j = -1; j <= 1; ++j)
54 if (!test_cmps (i, j))
55 __builtin_abort ();
57 for (i = 0; i <= 2; ++i)
58 for (j = 0; j <= 2; ++j)
59 if (!test_cmpu (i, j))
60 __builtin_abort ();
62 return 0;