2018-02-09 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / gcc / testsuite / gcc.target / sh / pr64661-0.h
blob3f1d901f24e495c1e112ae4fdca0888cc8c3285e
1 /* Check that addressing modes for atomics are generated as expected. */
3 #define concat_1(x, y) x ## y
4 #define concat(x, y) concat_1 (x, y)
5 #define makefuncname(name) concat (concat (test_, __LINE__), name)
7 #define emitfuncs(name,val,off)\
8 char makefuncname (_0) (char* mem)\
9 {\
10 return name (mem + off, val, __ATOMIC_ACQ_REL);\
12 char makefuncname (_1) (void)\
14 char* mem = (char*)__builtin_thread_pointer ();\
15 return name (mem + off, val, __ATOMIC_ACQ_REL);\
17 short makefuncname (_2) (short* mem)\
19 return name (mem + off, val, __ATOMIC_ACQ_REL);\
21 short makefuncname (_3) (void)\
23 short* mem = (short*)__builtin_thread_pointer ();\
24 return name (mem + off, val, __ATOMIC_ACQ_REL);\
26 int makefuncname (_4) (int* mem)\
28 return name (mem + off, val, __ATOMIC_ACQ_REL);\
30 int makefuncname (_5) (void)\
32 int* mem = (int*)__builtin_thread_pointer ();\
33 return name (mem + off, val, __ATOMIC_ACQ_REL);\
36 emitfuncs (__atomic_add_fetch, 1, 0)
37 emitfuncs (__atomic_add_fetch, 1, 4)
39 emitfuncs (__atomic_fetch_add, 1, 0)
40 emitfuncs (__atomic_fetch_add, 1, 4)
42 emitfuncs (__atomic_sub_fetch, 1, 0)
43 emitfuncs (__atomic_sub_fetch, 1, 4)
44 emitfuncs (__atomic_fetch_sub, 1, 0)
45 emitfuncs (__atomic_fetch_sub, 1, 4)
47 emitfuncs (__atomic_and_fetch, 1, 0)
48 emitfuncs (__atomic_and_fetch, 1, 4)
49 emitfuncs (__atomic_fetch_and, 1, 0)
50 emitfuncs (__atomic_fetch_and, 1, 4)
52 emitfuncs (__atomic_or_fetch, 1, 0)
53 emitfuncs (__atomic_or_fetch, 1, 4)
54 emitfuncs (__atomic_fetch_or, 1, 0)
55 emitfuncs (__atomic_fetch_or, 1, 4)
57 emitfuncs (__atomic_xor_fetch, 1, 0)
58 emitfuncs (__atomic_xor_fetch, 1, 4)
59 emitfuncs (__atomic_fetch_xor, 1, 0)
60 emitfuncs (__atomic_fetch_xor, 1, 4)
62 emitfuncs (__atomic_nand_fetch, 1, 0)
63 emitfuncs (__atomic_nand_fetch, 1, 4)
64 emitfuncs (__atomic_fetch_nand, 1, 0)
65 emitfuncs (__atomic_fetch_nand, 1, 4)
67 emitfuncs (__atomic_xor_fetch, -1, 0)
68 emitfuncs (__atomic_xor_fetch, -1, 4)
69 emitfuncs (__atomic_fetch_xor, -1, 0)
70 emitfuncs (__atomic_fetch_xor, -1, 4)
72 emitfuncs (__atomic_nand_fetch, -1, 0)
73 emitfuncs (__atomic_nand_fetch, -1, 4)
74 emitfuncs (__atomic_fetch_nand, -1, 0)
75 emitfuncs (__atomic_fetch_nand, -1, 4)
77 #undef emitfuncs
78 #define emitfuncs(off)\
79 char makefuncname (_6) (char* mem)\
81 char expected = 1;\
82 char desired = 5;\
83 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
84 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
86 char makefuncname (_7) (void)\
88 char* mem = (char*)__builtin_thread_pointer ();\
89 char expected = 1;\
90 char desired = 5;\
91 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
92 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
94 short makefuncname (_8) (short* mem)\
96 short expected = 1;\
97 short desired = 5;\
98 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
99 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
101 short makefuncname (_9) (void)\
103 short* mem = (short*)__builtin_thread_pointer ();\
104 short expected = 1;\
105 short desired = 5;\
106 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
107 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
109 int makefuncname (_10) (int* mem)\
111 int expected = 1;\
112 int desired = 5;\
113 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
114 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
116 int makefuncname (_11) (void)\
118 int* mem = (int*)__builtin_thread_pointer ();\
119 int expected = 1;\
120 int desired = 5;\
121 return __atomic_compare_exchange (mem + off, &expected, &desired, 0,\
122 __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);\
124 char makefuncname (_12) (char* mem)\
126 char newval = 5;\
127 char prevval;\
128 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
129 return prevval;\
131 char makefuncname (_13) (void)\
133 char* mem = (char*)__builtin_thread_pointer ();\
134 char newval = 5;\
135 char prevval;\
136 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
137 return prevval;\
139 short makefuncname (_14) (short* mem)\
141 short newval = 5;\
142 short prevval;\
143 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
144 return prevval;\
146 short makefuncname (_15) (void)\
148 short* mem = (short*)__builtin_thread_pointer ();\
149 short newval = 5;\
150 short prevval;\
151 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
152 return prevval;\
154 int makefuncname (_16) (int* mem)\
156 int newval = 5;\
157 int prevval;\
158 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
159 return prevval;\
161 int makefuncname (_17) (void)\
163 int* mem = (int*)__builtin_thread_pointer ();\
164 int newval = 5;\
165 int prevval;\
166 __atomic_exchange (mem + off, &newval, &prevval, __ATOMIC_ACQ_REL);\
167 return prevval;\
170 emitfuncs (0)
171 emitfuncs (4)