libgomp: Document 'GOMP_teams4'
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / combine_bfxil.c
blobc3b5fc5880064f3f16cb4a2fb8648cef35e1f43b
1 /* { dg-do run } */
2 /* { dg-options "-O2 --save-temps" } */
4 extern void abort (void);
6 unsigned long long
7 combine_zero_extended_int (unsigned int a, unsigned int b)
9 /* { dg-final { scan-assembler-not "uxtw\\t" } } */
10 return (a & 0xffff0000ll) | (b & 0x0000ffffll);
13 unsigned long long
14 combine_balanced (unsigned long long a, unsigned long long b)
16 return (a & 0xffffffff00000000ll) | (b & 0x00000000ffffffffll);
19 unsigned long long
20 combine_minimal (unsigned long long a, unsigned long long b)
22 return (a & 0xfffffffffffffffell) | (b & 0x0000000000000001ll);
25 unsigned long long
26 combine_unbalanced (unsigned long long a, unsigned long long b)
28 return (a & 0xffffffffff000000ll) | (b & 0x0000000000ffffffll);
31 unsigned int
32 combine_balanced_int (unsigned int a, unsigned int b)
34 return (a & 0xffff0000ll) | (b & 0x0000ffffll);
37 unsigned int
38 combine_unbalanced_int (unsigned int a, unsigned int b)
40 return (a & 0xffffff00ll) | (b & 0x000000ffll);
43 unsigned long long c, d;
45 __attribute__ ((noinline)) void
46 foo (unsigned long long a, unsigned long long b)
48 c = combine_minimal (a, b);
49 d = combine_minimal (b, a);
52 __attribute__ ((noinline)) void
53 foo2 (unsigned long long a, unsigned long long b)
55 c = combine_balanced (a, b);
56 d = combine_balanced (b, a);
59 __attribute__ ((noinline)) void
60 foo3 (unsigned long long a, unsigned long long b)
62 c = combine_unbalanced (a, b);
63 d = combine_unbalanced (b, a);
66 unsigned int ic, id;
68 void
69 foo4 (unsigned int a, unsigned int b)
71 ic = combine_balanced_int (a, b);
72 id = combine_balanced_int (b, a);
75 void
76 foo5 (unsigned int a, unsigned int b)
78 ic = combine_unbalanced_int (a, b);
79 id = combine_unbalanced_int (b, a);
82 void
83 foo6 (unsigned int a, unsigned int b)
85 c = combine_zero_extended_int(a, b);
86 d = combine_zero_extended_int(b, a);
89 int
90 main (void)
92 unsigned long long a = 0x0123456789ABCDEF, b = 0xFEDCBA9876543210;
93 foo3 (a, b);
94 if (c != 0x0123456789543210) abort ();
95 if (d != 0xfedcba9876abcdef) abort ();
96 foo2 (a, b);
97 if (c != 0x0123456776543210) abort ();
98 if (d != 0xfedcba9889abcdef) abort ();
99 foo (a, b);
100 if (c != 0x0123456789abcdee) abort ();
101 if (d != 0xfedcba9876543211) abort ();
103 unsigned int a2 = 0x01234567, b2 = 0xFEDCBA98;
104 foo4 (a2, b2);
105 if (ic != 0x0123ba98) abort ();
106 if (id != 0xfedc4567) abort ();
107 foo5 (a2, b2);
108 if (ic != 0x01234598) abort ();
109 if (id != 0xfedcba67) abort ();
111 foo6 (a2, b2);
112 if (c != 0x0123ba98) abort ();
113 if (d != 0xfedc4567) abort ();
114 return 0;
117 /* { dg-final { scan-assembler-times "bfxil\\t" 3 } } */
118 /* { dg-final { scan-assembler-times "bfi\\t" 15 } } */