* config/i386/avx512fintrin.h (_mm512_set_epi16, _mm512_set_epi8,
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / aapcs64 / macro-def.h
blob72a47067631b20bf21c58e5c3569bbef45932c1c
1 /* This header file defines a set of macros to be used in the construction
2 of parameter passing and/or va_arg code gen tests during the
3 pre-processing stage. It is included inside abitest.h.
5 The following macros are defined here:
7 LAST_ARG
8 ARG
9 DOTS
10 ANON
11 LAST_ANON
12 PTR
13 PTR_ANON
14 LAST_ANONPTR
16 These macros are given different definitions depending on which one of
17 the following macros is defined.
19 AARCH64_MACRO_DEF_CHECK_INCOMING_ARGS
20 AARCH64_MACRO_DEF_GEN_PARAM_TYPE_LIST
21 AARCH64_MACRO_DEF_GEN_ARGUMENT_LIST
22 AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST
23 AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST_WITH_IDENT
24 AARCH64_VARIADIC_MACRO_DEF_ASSIGN_LOCAL_VARS_WITH_ARGS
25 AARCH64_VARIADIC_MACRO_DEF_GEN_ARGUMENT_LIST
27 Do not define more than one of the above macros. */
30 /* AARCH64_MACRO_DEF_CHECK_INCOMING_ARGS
31 Define macros to check the incoming arguments. */
33 #ifdef AARCH64_MACRO_DEF_CHECK_INCOMING_ARGS
35 #undef LAST_ARG
36 #undef ARG
37 #undef DOTS
38 #undef ANON
39 #undef LAST_ANON
40 #undef PTR
41 #undef PTR_ANON
42 #undef LAST_ANONPTR
43 #undef ANON_PROMOTED
45 /* Generate memcmp to check if the incoming args have the expected values. */
46 #define LAST_ARG_NONFLAT(type, val, offset, layout, ...) \
47 { \
48 type __x = val; \
49 DUMP_ARG(type,val); \
50 if (validate_memory (&__x, stack + offset, sizeof (type), layout) != 0) \
51 abort(); \
53 #define LAST_ARG(type,val,offset,...) LAST_ARG_NONFLAT (type, val, offset, \
54 flat,__VA_ARGS__)
55 #define ARG_NONFLAT(type,val,offset,layout,...) LAST_ARG_NONFLAT (type, val, \
56 offset, \
57 layout, \
58 __VA_ARGS__)
59 #define ARG(type,val,offset,...) LAST_ARG_NONFLAT(type, val, offset, \
60 flat, __VA_ARGS__)
61 #define ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
62 #define LAST_ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
63 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...) \
64 ANON(type_promoted, val_promoted, offset, __VA_ARGS__)
65 /* Composite larger than 16 bytes is replaced by a pointer to a copy prepared
66 by the caller, so here we extrat the pointer, deref it and compare the
67 content with that of the original one. */
68 #define PTR(type, val, offset, ...) { \
69 type * ptr; \
70 DUMP_ARG(type,val); \
71 ptr = *(type **)(stack + offset); \
72 if (memcmp (ptr, &val, sizeof (type)) != 0) abort (); \
74 #define PTR_ANON(type, val, offset, ...) PTR(type, val, offset, __VA_ARGS__)
75 #define LAST_ANONPTR(type, val, offset, ...) PTR(type, val, offset, __VA_ARGS__)
76 #define DOTS
78 #endif /* AARCH64_MACRO_DEF_CHECK_INCOMING_ARGS */
81 /* AARCH64_MACRO_DEF_GEN_PARAM_TYPE_LIST
82 Define macros to generate parameter type list. */
84 #ifdef AARCH64_MACRO_DEF_GEN_PARAM_TYPE_LIST
86 #undef LAST_ARG
87 #undef ARG
88 #undef DOTS
89 #undef ANON
90 #undef LAST_ANON
91 #undef PTR
92 #undef PTR_ANON
93 #undef LAST_ANONPTR
95 /* Generate parameter type list (without identifiers). */
96 #define LAST_ARG(type,val,offset) type
97 #define LAST_ARG_NONFLAT(type, val, offset, layout) type
98 #define ARG(type,val,offset) LAST_ARG(type, val, offset),
99 #define ARG_NONFLAT(type, val, offset, layout) LAST_ARG (type, val, offset),
100 #define DOTS ...
101 #define ANON(type,val, offset)
102 #define LAST_ANON(type,val, offset)
103 #define PTR(type, val, offset) LAST_ARG(type, val, offset),
104 #define PTR_ANON(type, val, offset)
105 #define LAST_ANONPTR(type, val, offset)
107 #endif /* AARCH64_MACRO_DEF_GEN_PARAM_TYPE_LIST */
110 /* AARCH64_MACRO_DEF_GEN_ARGUMENT_LIST
111 Define macros to generate argument list. */
113 #ifdef AARCH64_MACRO_DEF_GEN_ARGUMENT_LIST
115 #undef LAST_ARG
116 #undef ARG
117 #undef DOTS
118 #undef ANON
119 #undef LAST_ANON
120 #undef PTR
121 #undef PTR_ANON
122 #undef LAST_ANONPTR
123 #undef ANON_PROMOTED
125 /* Generate the argument list; use VAL as the argument name. */
126 #define LAST_ARG(type,val,offset,...) val
127 #define LAST_ARG_NONFLAT(type,val,offset,layout,...) val
128 #define ARG(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
129 #define ARG_NONFLAT(type, val, offset, layout,...) LAST_ARG (type, val, \
130 offset, \
131 __VA_ARGS__),
132 #define DOTS
133 #define LAST_ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
134 #define ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
135 #define PTR(type, val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
136 #define PTR_ANON(type, val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
137 #define LAST_ANONPTR(type, val, offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
138 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...) \
139 LAST_ARG(type, val, offset, __VA_ARGS__),
141 #endif /* AARCH64_MACRO_DEF_GEN_ARGUMENT_LIST */
144 /* AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST
145 Define variadic macros to generate parameter type list. */
147 #ifdef AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST
149 #undef LAST_ARG
150 #undef ARG
151 #undef DOTS
152 #undef ANON
153 #undef LAST_ANON
154 #undef PTR
155 #undef PTR_ANON
156 #undef LAST_ANONPTR
157 #undef ANON_PROMOTED
159 /* Generate parameter type list (without identifiers). */
160 #define LAST_ARG(type,val,offset,...) type
161 #define LAST_ARG_NONFLAT(type, val, offset, layout, ...) type
162 #define ARG(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
163 #define ARG_NONFLAT(type, val, offset, layout, ...) LAST_ARG (type, val, \
164 offset, \
165 __VA_ARGS__),
166 #define DOTS
167 #define ANON(type,val, offset,...) ARG(type,val,offset, __VA_ARGS__)
168 #define LAST_ANON(type,val, offset,...) LAST_ARG(type,val, offset, __VA_ARGS__)
169 #define PTR(type, val, offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
170 #define PTR_ANON(type, val, offset,...) PTR(type, val, offset, __VA_ARGS__)
171 #define LAST_ANONPTR(type, val, offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
172 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...) \
173 LAST_ARG(type_promoted, val_promoted, offset, __VA_ARGS__),
175 #endif /* AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST */
178 /* AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST_WITH_IDENT
179 Define variadic macros to generate parameter type list with
180 identifiers. */
182 #ifdef AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST_WITH_IDENT
184 #undef LAST_ARG
185 #undef ARG
186 #undef DOTS
187 #undef ANON
188 #undef LAST_ANON
189 #undef PTR
190 #undef PTR_ANON
191 #undef LAST_ANONPTR
192 #undef ANON_PROMOTED
194 /* Generate parameter type list (with identifiers).
195 The identifiers are named with prefix _f and suffix of the value of
196 __VA_ARGS__. */
197 #define LAST_ARG(type,val,offset,...) type _f##__VA_ARGS__
198 #define LAST_ARG_NONFLAT(type, val, offset, layout, ...) type _f##__VA_ARGS__
199 #define ARG(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
200 #define ARG_NONFLAT(type, val, offset, layout, ...) LAST_ARG (type, val, \
201 offset, \
202 __VA_ARGS__),
203 #define DOTS ...
204 #define ANON(type,val, offset,...)
205 #define LAST_ANON(type,val, offset,...)
206 #define PTR(type, val, offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
207 #define PTR_ANON(type, val, offset,...)
208 #define LAST_ANONPTR(type, val, offset,...)
209 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...)
211 #endif /* AARCH64_VARIADIC_MACRO_DEF_GEN_PARAM_TYPE_LIST_WITH_IDENT */
214 /* AARCH64_VARIADIC_MACRO_DEF_ASSIGN_LOCAL_VARS_WITH_ARGS
215 Define variadic macros to generate assignment from the function
216 incoming arguments to local variables. */
218 #ifdef AARCH64_VARIADIC_MACRO_DEF_ASSIGN_LOCAL_VARS_WITH_ARGS
220 #undef LAST_ARG
221 #undef ARG
222 #undef DOTS
223 #undef ANON
224 #undef LAST_ANON
225 #undef PTR
226 #undef PTR_ANON
227 #undef LAST_ANONPTR
228 #undef ANON_PROMOTED
230 /* Generate assignment statements. For named args, direct assignment from
231 the formal parameter is generated; for unnamed args, va_arg is used.
232 The names of the local variables start with _x and end with the value of
233 __VA_ARGS__. */
234 #define LAST_ARG(type,val,offset,...) type _x##__VA_ARGS__ = _f##__VA_ARGS__;
235 #define LAST_ARG_NONFLAT(type, val, offset, layout, ...) \
236 type _x##__VA_ARGS__ = _f##__VA_ARGS__;
237 #define ARG(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
238 #define ARG_NONFLAT(type,val,offset,layout,...) \
239 LAST_ARG (type, val, offset, __VA_ARGS__)
240 #define ANON(type,val,offset,...) type _x##__VA_ARGS__ = va_arg (ap, type);
241 #define LAST_ANON(type,val,offset,...) ANON(type, val, offset, __VA_ARGS__)
242 #define PTR(type, val,offset,...) ARG(type, val, offset, __VA_ARGS__)
243 #define PTR_ANON(type, val, offset,...) ANON(type, val,offset, __VA_ARGS__)
244 #define LAST_ANONPTR(type, val, offset,...) ANON(type, val, offset, __VA_ARGS__)
245 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...) \
246 ANON(type_promoted, val_promoted, offset, __VA_ARGS__)
248 #define DOTS
250 #endif /* AARCH64_VARIADIC_MACRO_DEF_ASSIGN_LOCAL_VARS_WITH_ARGS */
253 /* AARCH64_VARIADIC_MACRO_DEF_GEN_ARGUMENT_LIST
254 Define variadic macros to generate argument list using the variables
255 generated during AARCH64_VARIADIC_MACRO_DEF_ASSIGN_LOCAL_VARS_WITH_ARGS. */
257 #ifdef AARCH64_VARIADIC_MACRO_DEF_GEN_ARGUMENT_LIST
259 #undef LAST_ARG
260 #undef ARG
261 #undef DOTS
262 #undef ANON
263 #undef LAST_ANON
264 #undef PTR
265 #undef PTR_ANON
266 #undef LAST_ANONPTR
267 #undef ANON_PROMOTED
269 /* Generate the argument list; the names start with _x and end with the value of
270 __VA_ARGS__. All arguments (named or unnamed) in stdarg_func are passed to
271 myfunc as named arguments. */
272 #define LAST_ARG(type,val,offset,...) _x##__VA_ARGS__
273 #define LAST_ARG_NONFLAT(type, val, offset, layout, ...) _x##__VA_ARGS__
274 #define ARG(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
275 #define ARG_NONFLAT(type, val, offset, layout, ...) \
276 LAST_ARG_NONFLAT (type, val, offset, layout, __VA_ARGS__),
277 #define DOTS
278 #define LAST_ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
279 #define ANON(type,val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
280 #define PTR(type, val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
281 #define PTR_ANON(type, val,offset,...) LAST_ARG(type, val, offset, __VA_ARGS__),
282 #define LAST_ANONPTR(type, val, offset,...) LAST_ARG(type, val, offset, __VA_ARGS__)
283 #define ANON_PROMOTED(type,val,type_promoted, val_promoted, offset,...) \
284 ANON(type_promoted, val_promoted, offset, __VA_ARGS__)
286 #endif /* AARCH64_VARIADIC_MACRO_DEF_GEN_ARGUMENT_LIST */