Branch data Line data Source code
1 : : /* Generated automatically by the program 'build/genpreds'
2 : : from the machine description file '/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/i386.md'. */
3 : :
4 : : #define IN_TARGET_CODE 1
5 : : #include "config.h"
6 : : #include "system.h"
7 : : #include "coretypes.h"
8 : : #include "backend.h"
9 : : #include "predict.h"
10 : : #include "tree.h"
11 : : #include "rtl.h"
12 : : #include "alias.h"
13 : : #include "varasm.h"
14 : : #include "stor-layout.h"
15 : : #include "calls.h"
16 : : #include "memmodel.h"
17 : : #include "tm_p.h"
18 : : #include "insn-config.h"
19 : : #include "recog.h"
20 : : #include "output.h"
21 : : #include "flags.h"
22 : : #include "df.h"
23 : : #include "resource.h"
24 : : #include "diagnostic-core.h"
25 : : #include "reload.h"
26 : : #include "regs.h"
27 : : #include "emit-rtl.h"
28 : : #include "tm-constrs.h"
29 : : #include "target.h"
30 : :
31 : :
32 : : struct target_constraints default_target_constraints;
33 : : #if SWITCHABLE_TARGET
34 : : struct target_constraints *this_target_constraints = &default_target_constraints;
35 : : #endif
36 : : static inline bool
37 : 0 : aligned_register_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
38 : : #line 25 "/home/worker/buildworker/tiber-lcov/build/gcc/common.md"
39 : : {
40 : : /* Require the offset in a non-paradoxical subreg to be naturally aligned.
41 : : For example, if we have a subreg of something that is double the size of
42 : : this operand, the offset must select the first or second half of it. */
43 : : if (SUBREG_P (op)
44 : : && multiple_p (SUBREG_BYTE (op), GET_MODE_SIZE (GET_MODE (op))))
45 : : op = SUBREG_REG (op);
46 : : if (!REG_P (op))
47 : : return false;
48 : :
49 : : if (HARD_REGISTER_P (op))
50 : : {
51 : : if (!in_hard_reg_set_p (operand_reg_set, GET_MODE (op), REGNO (op)))
52 : : return false;
53 : :
54 : : /* Reject hard registers that would need reloading, so that the reload
55 : : is visible to IRA and to pre-RA optimizers. */
56 : : if (REGNO (op) % REG_NREGS (op) != 0)
57 : : return false;
58 : : }
59 : : return true;
60 : : }
61 : :
62 : : bool
63 : : aligned_register_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
64 : : {
65 : : switch (GET_CODE (op))
66 : : {
67 : : case REG:
68 : : case SUBREG:
69 : : break;
70 : : default:
71 : : return false;
72 : : }
73 : : return (
74 : : (aligned_register_operand_1 (op, mode))) && (
75 : : (mode == VOIDmode || GET_MODE (op) == mode));
76 : : }
77 : :
78 : : bool
79 : : any_fp_register_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
80 : : {
81 : : return ((GET_CODE (op) == REG) && (
82 : : #line 23 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
83 : : (ANY_FP_REGNO_P (REGNO (op))))) && (
84 : : (mode == VOIDmode || GET_MODE (op) == mode));
85 : : }
86 : :
87 : : bool
88 : : fp_register_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
89 : : {
90 : : return ((GET_CODE (op) == REG) && (
91 : : #line 28 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
92 : : (STACK_REGNO_P (REGNO (op))))) && (
93 : : (mode == VOIDmode || GET_MODE (op) == mode));
94 : : }
95 : :
96 : : bool
97 : : general_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
98 : : {
99 : : return ((GET_CODE (op) == REG) && (
100 : : #line 33 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
101 : : (GENERAL_REGNO_P (REGNO (op))))) && (
102 : : (mode == VOIDmode || GET_MODE (op) == mode));
103 : : }
104 : :
105 : : bool
106 : : index_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
107 : : {
108 : : return ((GET_CODE (op) == REG) && (
109 : : #line 38 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
110 : : (INDEX_REGNO_P (REGNO (op))))) && (
111 : : (mode == VOIDmode || GET_MODE (op) == mode));
112 : : }
113 : :
114 : : bool
115 : : nonimmediate_gr_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
116 : : {
117 : : return (GET_CODE (op) == REG) ? ((
118 : : #line 43 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
119 : : (GENERAL_REGNO_P (REGNO (op)))) && (
120 : : (mode == VOIDmode || GET_MODE (op) == mode))) : (nonimmediate_operand (op, mode));
121 : : }
122 : :
123 : : bool
124 : : general_gr_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
125 : : {
126 : : return (GET_CODE (op) == REG) ? ((
127 : : #line 49 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
128 : : (GENERAL_REGNO_P (REGNO (op)))) && (
129 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode))) : (general_operand (op, mode));
130 : : }
131 : :
132 : : bool
133 : : mmx_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
134 : : {
135 : : return ((GET_CODE (op) == REG) && (
136 : : #line 55 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
137 : : (MMX_REGNO_P (REGNO (op))))) && (
138 : : (mode == VOIDmode || GET_MODE (op) == mode));
139 : : }
140 : :
141 : : bool
142 : : register_mmxmem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
143 : : {
144 : : return (register_operand (op, mode)) || ((!(
145 : : #line 61 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
146 : : (TARGET_MMX_WITH_SSE))) && (memory_operand (op, mode)));
147 : : }
148 : :
149 : : bool
150 : : sse_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
151 : : {
152 : : return ((GET_CODE (op) == REG) && (
153 : : #line 67 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
154 : : (SSE_REGNO_P (REGNO (op))))) && (
155 : : (mode == VOIDmode || GET_MODE (op) == mode));
156 : : }
157 : :
158 : : bool
159 : : any_QIreg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
160 : : {
161 : : return ((GET_CODE (op) == REG) && (
162 : : #line 72 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
163 : : (ANY_QI_REGNO_P (REGNO (op))))) && (
164 : : (mode == VOIDmode || GET_MODE (op) == mode));
165 : : }
166 : :
167 : : bool
168 : : QIreg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
169 : : {
170 : : return ((GET_CODE (op) == REG) && (
171 : : #line 77 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
172 : : (QI_REGNO_P (REGNO (op))))) && (
173 : : (mode == VOIDmode || GET_MODE (op) == mode));
174 : : }
175 : :
176 : : bool
177 : : ext_QIreg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
178 : : {
179 : : return ((
180 : : #line 81 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
181 : : (TARGET_64BIT)) && ((GET_CODE (op) == REG) && (!(
182 : : #line 83 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
183 : : (QI_REGNO_P (REGNO (op))))))) && (
184 : : (mode == VOIDmode || GET_MODE (op) == mode));
185 : : }
186 : :
187 : : bool
188 : : ax_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
189 : : {
190 : : return ((GET_CODE (op) == REG) && (
191 : : #line 88 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
192 : : (REGNO (op) == AX_REG))) && (
193 : : (mode == VOIDmode || GET_MODE (op) == mode));
194 : : }
195 : :
196 : : bool
197 : : flags_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
198 : : {
199 : : return (GET_CODE (op) == REG) && (
200 : : #line 93 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
201 : : (REGNO (op) == FLAGS_REG));
202 : : }
203 : :
204 : : bool
205 : : mask_reg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
206 : : {
207 : : return ((GET_CODE (op) == REG) && (
208 : : #line 98 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
209 : : (MASK_REGNO_P (REGNO (op))))) && (
210 : : (mode == VOIDmode || GET_MODE (op) == mode));
211 : : }
212 : :
213 : : bool
214 : : int248_register_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
215 : : {
216 : : return (register_operand (op, mode)) && (((
217 : : #line 103 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
218 : : (TARGET_64BIT)) && (
219 : : #line 104 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
220 : : (GET_MODE (op) == DImode))) || ((
221 : : #line 105 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
222 : : (GET_MODE (op) == SImode)) || (
223 : : #line 106 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
224 : : (GET_MODE (op) == HImode))));
225 : : }
226 : :
227 : : bool
228 : : int_nonimmediate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
229 : : {
230 : : return (nonimmediate_operand (op, mode)) && (((
231 : : #line 111 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
232 : : (TARGET_64BIT)) && (
233 : : #line 112 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
234 : : (GET_MODE (op) == DImode))) || ((
235 : : #line 113 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
236 : : (GET_MODE (op) == SImode)) || ((
237 : : #line 114 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
238 : : (GET_MODE (op) == HImode)) || (
239 : : #line 115 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
240 : : (GET_MODE (op) == QImode)))));
241 : : }
242 : :
243 : : bool
244 : : register_ssemem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
245 : : {
246 : : return (
247 : : #line 120 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
248 : : (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH)) ? (nonimmediate_operand (op, mode)) : (register_operand (op, mode));
249 : : }
250 : :
251 : : bool
252 : : nonimm_ssenomem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
253 : : {
254 : : return ((
255 : : #line 128 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
256 : : (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH)) && (!(
257 : : #line 129 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
258 : : (TARGET_MIX_SSE_I387)))) ? (register_operand (op, mode)) : (nonimmediate_operand (op, mode));
259 : : }
260 : :
261 : : bool
262 : : x87nonimm_ssenomem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
263 : : {
264 : : return ((
265 : : #line 136 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
266 : : (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH)) && (!(
267 : : #line 137 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
268 : : (TARGET_MIX_SSE_I387 && X87_ENABLE_ARITH (mode))))) ? (register_operand (op, mode)) : (nonimmediate_operand (op, mode));
269 : : }
270 : :
271 : : bool
272 : : register_sse4nonimm_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
273 : : {
274 : : return (
275 : : #line 143 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
276 : : (TARGET_SSE4_1)) ? (nonimmediate_operand (op, mode)) : (register_operand (op, mode));
277 : : }
278 : :
279 : : bool
280 : : symbol_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
281 : : {
282 : : return (GET_CODE (op) == SYMBOL_REF) && (
283 : : (mode == VOIDmode || GET_MODE (op) == mode));
284 : : }
285 : :
286 : : static inline bool
287 : : ix86_endbr_immediate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
288 : : #line 154 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
289 : : {
290 : : if (flag_cf_protection & CF_BRANCH)
291 : : {
292 : : unsigned HOST_WIDE_INT imm = UINTVAL (op);
293 : : unsigned HOST_WIDE_INT val = TARGET_64BIT ? 0xfa1e0ff3 : 0xfb1e0ff3;
294 : :
295 : : if (imm == val)
296 : : return true;
297 : :
298 : : /* NB: Encoding is byte based. */
299 : : if (TARGET_64BIT)
300 : : for (; imm >= val; imm >>= 8)
301 : : if (imm == val)
302 : : return true;
303 : : }
304 : :
305 : : return false;
306 : : }
307 : :
308 : : bool
309 : : ix86_endbr_immediate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
310 : : {
311 : : return (GET_CODE (op) == CONST_INT) && (
312 : : (ix86_endbr_immediate_operand_1 (op, mode)));
313 : : }
314 : :
315 : : static inline bool
316 : : x86_64_immediate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
317 : : #line 176 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
318 : : {
319 : : if (ix86_endbr_immediate_operand (op, VOIDmode))
320 : : return false;
321 : :
322 : : if (!TARGET_64BIT)
323 : : return immediate_operand (op, mode);
324 : :
325 : : switch (GET_CODE (op))
326 : : {
327 : : case CONST_INT:
328 : : {
329 : : HOST_WIDE_INT val = INTVAL (op);
330 : : return trunc_int_for_mode (val, SImode) == val;
331 : : }
332 : : case SYMBOL_REF:
333 : : /* TLS symbols are not constant. */
334 : : if (SYMBOL_REF_TLS_MODEL (op))
335 : : return false;
336 : :
337 : : /* Load the external function address via the GOT slot. */
338 : : if (ix86_force_load_from_GOT_p (op))
339 : : return false;
340 : :
341 : : /* For certain code models, the symbolic references are known to fit.
342 : : in CM_SMALL_PIC model we know it fits if it is local to the shared
343 : : library. Don't count TLS SYMBOL_REFs here, since they should fit
344 : : only if inside of UNSPEC handled below. */
345 : : return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_KERNEL
346 : : || (ix86_cmodel == CM_MEDIUM && !SYMBOL_REF_FAR_ADDR_P (op)));
347 : :
348 : : case LABEL_REF:
349 : : /* For certain code models, the code is near as well. */
350 : : return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM
351 : : || ix86_cmodel == CM_KERNEL);
352 : :
353 : : case CONST:
354 : : /* We also may accept the offsetted memory references in certain
355 : : special cases. */
356 : : if (GET_CODE (XEXP (op, 0)) == UNSPEC)
357 : : switch (XINT (XEXP (op, 0), 1))
358 : : {
359 : : case UNSPEC_GOTPCREL:
360 : : case UNSPEC_DTPOFF:
361 : : case UNSPEC_GOTNTPOFF:
362 : : case UNSPEC_NTPOFF:
363 : : case UNSPEC_SECREL32:
364 : : return true;
365 : : default:
366 : : break;
367 : : }
368 : :
369 : : if (GET_CODE (XEXP (op, 0)) == PLUS)
370 : : {
371 : : rtx op1 = XEXP (XEXP (op, 0), 0);
372 : : rtx op2 = XEXP (XEXP (op, 0), 1);
373 : :
374 : : if (ix86_cmodel == CM_LARGE && GET_CODE (op1) != UNSPEC)
375 : : return false;
376 : : if (!CONST_INT_P (op2))
377 : : return false;
378 : :
379 : : HOST_WIDE_INT offset = INTVAL (op2);
380 : : if (trunc_int_for_mode (offset, SImode) != offset)
381 : : return false;
382 : :
383 : : switch (GET_CODE (op1))
384 : : {
385 : : case SYMBOL_REF:
386 : : /* TLS symbols are not constant. */
387 : : if (SYMBOL_REF_TLS_MODEL (op1))
388 : : return false;
389 : :
390 : : /* Load the external function address via the GOT slot. */
391 : : if (ix86_force_load_from_GOT_p (op1))
392 : : return false;
393 : :
394 : : /* For CM_SMALL assume that latest object is 16MB before
395 : : end of 31bits boundary. We may also accept pretty
396 : : large negative constants knowing that all objects are
397 : : in the positive half of address space. */
398 : : if ((ix86_cmodel == CM_SMALL
399 : : || (ix86_cmodel == CM_MEDIUM
400 : : && !SYMBOL_REF_FAR_ADDR_P (op1)))
401 : : && offset < 16*1024*1024)
402 : : return true;
403 : : /* For CM_KERNEL we know that all object resist in the
404 : : negative half of 32bits address space. We may not
405 : : accept negative offsets, since they may be just off
406 : : and we may accept pretty large positive ones. */
407 : : if (ix86_cmodel == CM_KERNEL
408 : : && offset > 0)
409 : : return true;
410 : : break;
411 : :
412 : : case LABEL_REF:
413 : : /* These conditions are similar to SYMBOL_REF ones, just the
414 : : constraints for code models differ. */
415 : : if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
416 : : && offset < 16*1024*1024)
417 : : return true;
418 : : if (ix86_cmodel == CM_KERNEL
419 : : && offset > 0)
420 : : return true;
421 : : break;
422 : :
423 : : case UNSPEC:
424 : : switch (XINT (op1, 1))
425 : : {
426 : : case UNSPEC_DTPOFF:
427 : : case UNSPEC_NTPOFF:
428 : : return true;
429 : : }
430 : : break;
431 : :
432 : : default:
433 : : break;
434 : : }
435 : : }
436 : : break;
437 : :
438 : : default:
439 : : gcc_unreachable ();
440 : : }
441 : :
442 : : return false;
443 : : }
444 : :
445 : : bool
446 : : x86_64_immediate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
447 : : {
448 : : switch (GET_CODE (op))
449 : : {
450 : : case CONST_INT:
451 : : case SYMBOL_REF:
452 : : case LABEL_REF:
453 : : case CONST:
454 : : break;
455 : : default:
456 : : return false;
457 : : }
458 : : return (
459 : : (x86_64_immediate_operand_1 (op, mode))) && (
460 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
461 : : }
462 : :
463 : : static inline bool
464 : : x86_64_zext_immediate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
465 : : #line 306 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
466 : : {
467 : : if (ix86_endbr_immediate_operand (op, VOIDmode))
468 : : return false;
469 : :
470 : : switch (GET_CODE (op))
471 : : {
472 : : case CONST_INT:
473 : : return !(INTVAL (op) & ~HOST_WIDE_INT_C (0xffffffff));
474 : :
475 : : case SYMBOL_REF:
476 : : /* TLS symbols are not constant. */
477 : : if (SYMBOL_REF_TLS_MODEL (op))
478 : : return false;
479 : :
480 : : /* Load the external function address via the GOT slot. */
481 : : if (ix86_force_load_from_GOT_p (op))
482 : : return false;
483 : :
484 : : /* For certain code models, the symbolic references are known to fit. */
485 : : return (ix86_cmodel == CM_SMALL
486 : : || (ix86_cmodel == CM_MEDIUM
487 : : && !SYMBOL_REF_FAR_ADDR_P (op)));
488 : :
489 : : case LABEL_REF:
490 : : /* For certain code models, the code is near as well. */
491 : : return ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM;
492 : :
493 : : case CONST:
494 : : /* We also may accept the offsetted memory references in certain
495 : : special cases. */
496 : : if (GET_CODE (XEXP (op, 0)) == PLUS)
497 : : {
498 : : rtx op1 = XEXP (XEXP (op, 0), 0);
499 : : rtx op2 = XEXP (XEXP (op, 0), 1);
500 : :
501 : : if (ix86_cmodel == CM_LARGE)
502 : : return false;
503 : : if (!CONST_INT_P (op2))
504 : : return false;
505 : :
506 : : HOST_WIDE_INT offset = INTVAL (op2);
507 : : if (trunc_int_for_mode (offset, SImode) != offset)
508 : : return false;
509 : :
510 : : switch (GET_CODE (op1))
511 : : {
512 : : case SYMBOL_REF:
513 : : /* TLS symbols are not constant. */
514 : : if (SYMBOL_REF_TLS_MODEL (op1))
515 : : return false;
516 : :
517 : : /* Load the external function address via the GOT slot. */
518 : : if (ix86_force_load_from_GOT_p (op1))
519 : : return false;
520 : :
521 : : /* For small code model we may accept pretty large positive
522 : : offsets, since one bit is available for free. Negative
523 : : offsets are limited by the size of NULL pointer area
524 : : specified by the ABI. */
525 : : if ((ix86_cmodel == CM_SMALL
526 : : || (ix86_cmodel == CM_MEDIUM
527 : : && !SYMBOL_REF_FAR_ADDR_P (op1)))
528 : : && offset > -0x10000)
529 : : return true;
530 : : /* ??? For the kernel, we may accept adjustment of
531 : : -0x10000000, since we know that it will just convert
532 : : negative address space to positive, but perhaps this
533 : : is not worthwhile. */
534 : : break;
535 : :
536 : : case LABEL_REF:
537 : : /* These conditions are similar to SYMBOL_REF ones, just the
538 : : constraints for code models differ. */
539 : : if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
540 : : && offset > -0x10000)
541 : : return true;
542 : : break;
543 : :
544 : : default:
545 : : return false;
546 : : }
547 : : }
548 : : break;
549 : :
550 : : default:
551 : : gcc_unreachable ();
552 : : }
553 : : return false;
554 : : }
555 : :
556 : : bool
557 : : x86_64_zext_immediate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
558 : : {
559 : : switch (GET_CODE (op))
560 : : {
561 : : case CONST_INT:
562 : : case SYMBOL_REF:
563 : : case LABEL_REF:
564 : : case CONST:
565 : : break;
566 : : default:
567 : : return false;
568 : : }
569 : : return (
570 : : (x86_64_zext_immediate_operand_1 (op, mode))) && (
571 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
572 : : }
573 : :
574 : : static inline bool
575 : : x86_64_neg_const_int_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
576 : : #line 400 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
577 : : {
578 : : HOST_WIDE_INT val = -UINTVAL (op);
579 : : if (mode == DImode && trunc_int_for_mode (val, SImode) != val)
580 : : return false;
581 : : if (flag_cf_protection & CF_BRANCH)
582 : : {
583 : : unsigned HOST_WIDE_INT endbr = TARGET_64BIT ? 0xfa1e0ff3 : 0xfb1e0ff3;
584 : : if ((val & HOST_WIDE_INT_C (0xffffffff)) == endbr)
585 : : return false;
586 : : }
587 : : return true;
588 : : }
589 : :
590 : : bool
591 : : x86_64_neg_const_int_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
592 : : {
593 : : return (GET_CODE (op) == CONST_INT) && (
594 : : (x86_64_neg_const_int_operand_1 (op, mode)));
595 : : }
596 : :
597 : : static inline bool
598 : : x86_64_hilo_int_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
599 : : #line 417 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
600 : : {
601 : : switch (GET_CODE (op))
602 : : {
603 : : case CONST_INT:
604 : : return x86_64_immediate_operand (op, mode);
605 : :
606 : : case CONST_WIDE_INT:
607 : : gcc_assert (CONST_WIDE_INT_NUNITS (op) == 2);
608 : : return (x86_64_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (op, 0)),
609 : : DImode)
610 : : && x86_64_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (op,
611 : : 1)),
612 : : DImode));
613 : :
614 : : default:
615 : : gcc_unreachable ();
616 : : }
617 : : }
618 : :
619 : : bool
620 : : x86_64_hilo_int_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
621 : : {
622 : : switch (GET_CODE (op))
623 : : {
624 : : case CONST_INT:
625 : : case CONST_WIDE_INT:
626 : : break;
627 : : default:
628 : : return false;
629 : : }
630 : : return
631 : : (x86_64_hilo_int_operand_1 (op, mode));
632 : : }
633 : :
634 : : static inline bool
635 : : x86_64_dwzext_immediate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
636 : : #line 440 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
637 : : {
638 : : if (ix86_endbr_immediate_operand (op, VOIDmode))
639 : : return false;
640 : :
641 : : switch (GET_CODE (op))
642 : : {
643 : : case CONST_INT:
644 : : if (!TARGET_64BIT)
645 : : return UINTVAL (op) <= HOST_WIDE_INT_UC (0xffffffff);
646 : : return UINTVAL (op) <= HOST_WIDE_INT_UC (0x7fffffff);
647 : :
648 : : case CONST_WIDE_INT:
649 : : if (!TARGET_64BIT)
650 : : return false;
651 : : return (CONST_WIDE_INT_NUNITS (op) == 2
652 : : && CONST_WIDE_INT_ELT (op, 1) == 0
653 : : && (trunc_int_for_mode (CONST_WIDE_INT_ELT (op, 0), SImode)
654 : : == (HOST_WIDE_INT) CONST_WIDE_INT_ELT (op, 0)));
655 : :
656 : : default:
657 : : gcc_unreachable ();
658 : : }
659 : : }
660 : :
661 : : bool
662 : : x86_64_dwzext_immediate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
663 : : {
664 : : switch (GET_CODE (op))
665 : : {
666 : : case CONST_INT:
667 : : case CONST_WIDE_INT:
668 : : break;
669 : : default:
670 : : return false;
671 : : }
672 : : return
673 : : (x86_64_dwzext_immediate_operand_1 (op, mode));
674 : : }
675 : :
676 : : bool
677 : : x86_64_immediate_size_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
678 : : {
679 : : return ((GET_CODE (op) == SYMBOL_REF) && ((!(
680 : : #line 468 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
681 : : (TARGET_64BIT))) || ((
682 : : #line 469 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
683 : : (ix86_cmodel == CM_SMALL)) || (
684 : : #line 470 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
685 : : (ix86_cmodel == CM_KERNEL))))) && (
686 : : (mode == VOIDmode || GET_MODE (op) == mode));
687 : : }
688 : :
689 : : bool
690 : : x86_64_general_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
691 : : {
692 : : return (
693 : : #line 474 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
694 : : (TARGET_64BIT)) ? ((nonimmediate_operand (op, mode)) || (x86_64_immediate_operand (op, mode))) : (general_operand (op, mode));
695 : : }
696 : :
697 : : bool
698 : : x86_64_hilo_general_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
699 : : {
700 : : return (
701 : : #line 482 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
702 : : (TARGET_64BIT)) ? ((nonimmediate_operand (op, mode)) || (x86_64_hilo_int_operand (op, mode))) : (general_operand (op, mode));
703 : : }
704 : :
705 : : bool
706 : : x86_64_sext_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
707 : : {
708 : : return (
709 : : #line 491 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
710 : : (GET_MODE (op) != VOIDmode)) && (x86_64_general_operand (op, mode));
711 : : }
712 : :
713 : : bool
714 : : sext_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
715 : : {
716 : : return (
717 : : #line 498 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
718 : : (GET_MODE (op) != VOIDmode)) && (general_operand (op, mode));
719 : : }
720 : :
721 : : bool
722 : : x86_64_zext_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
723 : : {
724 : : return (
725 : : #line 505 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
726 : : (TARGET_64BIT)) ? ((nonimmediate_operand (op, mode)) || ((x86_64_zext_immediate_operand (op, mode)) && (
727 : : #line 508 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
728 : : (GET_MODE (op) != VOIDmode)))) : (nonimmediate_operand (op, mode));
729 : : }
730 : :
731 : : bool
732 : : x86_64_szext_general_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
733 : : {
734 : : return (
735 : : #line 514 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
736 : : (TARGET_64BIT)) ? ((nonimmediate_operand (op, mode)) || ((x86_64_immediate_operand (op, mode)) || (x86_64_zext_immediate_operand (op, mode)))) : (general_operand (op, mode));
737 : : }
738 : :
739 : : bool
740 : : x86_64_nonmemory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
741 : : {
742 : : return (
743 : : #line 522 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
744 : : (TARGET_64BIT)) ? ((register_operand (op, mode)) || (x86_64_immediate_operand (op, mode))) : (nonmemory_operand (op, mode));
745 : : }
746 : :
747 : : bool
748 : : x86_64_szext_nonmemory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
749 : : {
750 : : return (
751 : : #line 529 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
752 : : (TARGET_64BIT)) ? ((register_operand (op, mode)) || ((x86_64_immediate_operand (op, mode)) || (x86_64_zext_immediate_operand (op, mode)))) : (nonmemory_operand (op, mode));
753 : : }
754 : :
755 : : static inline bool
756 : : pic_32bit_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
757 : : #line 539 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
758 : : {
759 : : if (!flag_pic)
760 : : return false;
761 : :
762 : : /* Rule out relocations that translate into 64bit constants. */
763 : : if (TARGET_64BIT && GET_CODE (op) == CONST)
764 : : {
765 : : rtx tmp = XEXP (op, 0);
766 : : if (GET_CODE (tmp) == PLUS && CONST_INT_P (XEXP (tmp, 1)))
767 : : tmp = XEXP (tmp, 0);
768 : : if (GET_CODE (tmp) == UNSPEC
769 : : && (XINT (tmp, 1) == UNSPEC_GOTOFF
770 : : || XINT (tmp, 1) == UNSPEC_GOT))
771 : : return false;
772 : : }
773 : :
774 : : return symbolic_operand (op, mode);
775 : : }
776 : :
777 : : bool
778 : : pic_32bit_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
779 : : {
780 : : switch (GET_CODE (op))
781 : : {
782 : : case CONST:
783 : : case SYMBOL_REF:
784 : : case LABEL_REF:
785 : : break;
786 : : default:
787 : : return false;
788 : : }
789 : : return (
790 : : (pic_32bit_operand_1 (op, mode))) && (
791 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
792 : : }
793 : :
794 : : bool
795 : : x86_64_movabs_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
796 : : {
797 : : return (nonmemory_operand (op, mode)) && (!(pic_32bit_operand (op, mode)));
798 : : }
799 : :
800 : : static inline bool
801 : : symbolic_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
802 : : #line 567 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
803 : : {
804 : : switch (GET_CODE (op))
805 : : {
806 : : case SYMBOL_REF:
807 : : case LABEL_REF:
808 : : return true;
809 : :
810 : : case CONST:
811 : : op = XEXP (op, 0);
812 : : if (SYMBOL_REF_P (op)
813 : : || LABEL_REF_P (op)
814 : : || (GET_CODE (op) == UNSPEC
815 : : && (XINT (op, 1) == UNSPEC_GOT
816 : : || XINT (op, 1) == UNSPEC_GOTOFF
817 : : || XINT (op, 1) == UNSPEC_SECREL32
818 : : || XINT (op, 1) == UNSPEC_PCREL
819 : : || XINT (op, 1) == UNSPEC_GOTPCREL)))
820 : : return true;
821 : : if (GET_CODE (op) != PLUS
822 : : || !CONST_INT_P (XEXP (op, 1)))
823 : : return false;
824 : :
825 : : op = XEXP (op, 0);
826 : : if (SYMBOL_REF_P (op)
827 : : || LABEL_REF_P (op))
828 : : return true;
829 : : /* Only @GOTOFF and @SECREL32 get offsets. */
830 : : if (GET_CODE (op) != UNSPEC
831 : : || (XINT (op, 1) != UNSPEC_GOTOFF
832 : : && XINT (op, 1) != UNSPEC_SECREL32))
833 : : return false;
834 : :
835 : : op = XVECEXP (op, 0, 0);
836 : : if (SYMBOL_REF_P (op)
837 : : || LABEL_REF_P (op))
838 : : return true;
839 : : return false;
840 : :
841 : : default:
842 : : gcc_unreachable ();
843 : : }
844 : : }
845 : :
846 : : bool
847 : : symbolic_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
848 : : {
849 : : switch (GET_CODE (op))
850 : : {
851 : : case SYMBOL_REF:
852 : : case LABEL_REF:
853 : : case CONST:
854 : : break;
855 : : default:
856 : : return false;
857 : : }
858 : : return (
859 : : (symbolic_operand_1 (op, mode))) && (
860 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
861 : : }
862 : :
863 : : static inline bool
864 : : local_symbolic_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
865 : : #line 613 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
866 : : {
867 : : if (GET_CODE (op) == CONST
868 : : && GET_CODE (XEXP (op, 0)) == PLUS
869 : : && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
870 : : op = XEXP (XEXP (op, 0), 0);
871 : :
872 : : if (LABEL_REF_P (op))
873 : : return true;
874 : :
875 : : if (!SYMBOL_REF_P (op))
876 : : return false;
877 : :
878 : : if (SYMBOL_REF_TLS_MODEL (op))
879 : : return false;
880 : :
881 : : /* Dll-imported symbols are always external. */
882 : : if (TARGET_DLLIMPORT_DECL_ATTRIBUTES && SYMBOL_REF_DLLIMPORT_P (op))
883 : : return false;
884 : : if (SYMBOL_REF_LOCAL_P (op))
885 : : return true;
886 : :
887 : : /* There is, however, a not insubstantial body of code in the rest of
888 : : the compiler that assumes it can just stick the results of
889 : : ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done. */
890 : : /* ??? This is a hack. Should update the body of the compiler to
891 : : always create a DECL an invoke targetm.encode_section_info. */
892 : : if (strncmp (XSTR (op, 0), internal_label_prefix,
893 : : internal_label_prefix_len) == 0)
894 : : return true;
895 : :
896 : : return false;
897 : : }
898 : :
899 : : bool
900 : : local_symbolic_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
901 : : {
902 : : switch (GET_CODE (op))
903 : : {
904 : : case CONST:
905 : : case LABEL_REF:
906 : : case SYMBOL_REF:
907 : : break;
908 : : default:
909 : : return false;
910 : : }
911 : : return (
912 : : (local_symbolic_operand_1 (op, mode))) && (
913 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
914 : : }
915 : :
916 : : static inline bool
917 : : local_func_symbolic_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
918 : : #line 648 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
919 : : {
920 : : if (GET_CODE (op) == CONST
921 : : && GET_CODE (XEXP (op, 0)) == PLUS
922 : : && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
923 : : op = XEXP (XEXP (op, 0), 0);
924 : :
925 : : if (SYMBOL_REF_P (op)
926 : : && !SYMBOL_REF_FUNCTION_P (op))
927 : : return false;
928 : :
929 : : return true;
930 : : }
931 : :
932 : : bool
933 : : local_func_symbolic_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
934 : : {
935 : : return (local_symbolic_operand (op, mode)) && (
936 : : (local_func_symbolic_operand_1 (op, mode)));
937 : : }
938 : :
939 : : bool
940 : : gotoff_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
941 : : {
942 : : return ((!(
943 : : #line 671 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
944 : : (TARGET_VXWORKS_VAROFF))) || ((
945 : : #line 672 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
946 : : (ix86_cmodel == CM_LARGE)) || (
947 : : #line 673 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
948 : : (ix86_cmodel == CM_LARGE_PIC)))) && (local_symbolic_operand (op, mode));
949 : : }
950 : :
951 : : bool
952 : : tls_symbolic_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
953 : : {
954 : : return (GET_CODE (op) == SYMBOL_REF) && (
955 : : #line 679 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
956 : : (SYMBOL_REF_TLS_MODEL (op)));
957 : : }
958 : :
959 : : bool
960 : : tls_modbase_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
961 : : {
962 : : return (GET_CODE (op) == SYMBOL_REF) && (
963 : : #line 683 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
964 : : (op == ix86_tls_module_base ()));
965 : : }
966 : :
967 : : bool
968 : : tls_address_pattern (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
969 : : {
970 : : switch (GET_CODE (op))
971 : : {
972 : : case SET:
973 : : case PARALLEL:
974 : : case UNSPEC:
975 : : case UNSPEC_VOLATILE:
976 : : break;
977 : : default:
978 : : return false;
979 : : }
980 : : return (
981 : : #line 687 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
982 : : (ix86_tls_address_pattern_p (op))) && (
983 : : (mode == VOIDmode || GET_MODE (op) == mode));
984 : : }
985 : :
986 : : static inline bool
987 : : constant_call_address_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
988 : : #line 692 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
989 : : {
990 : : if (ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC
991 : : || flag_force_indirect_call
992 : : || (TARGET_INDIRECT_BRANCH_REGISTER
993 : : && ix86_nopic_noplt_attribute_p (op)))
994 : : return false;
995 : : if (TARGET_DLLIMPORT_DECL_ATTRIBUTES && SYMBOL_REF_DLLIMPORT_P (op))
996 : : return false;
997 : : return true;
998 : : }
999 : :
1000 : : bool
1001 : : constant_call_address_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1002 : : {
1003 : : return ((GET_CODE (op) == SYMBOL_REF) && (
1004 : : (constant_call_address_operand_1 (op, mode)))) && (
1005 : : (mode == VOIDmode || GET_MODE (op) == mode));
1006 : : }
1007 : :
1008 : : static inline bool
1009 : : register_no_elim_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1010 : : #line 707 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1011 : : {
1012 : : if (SUBREG_P (op))
1013 : : op = SUBREG_REG (op);
1014 : :
1015 : : /* Before reload, we can allow (SUBREG (MEM...)) as a register operand
1016 : : because it is guaranteed to be reloaded into one. */
1017 : : if (MEM_P (op))
1018 : : return true;
1019 : :
1020 : : return !(op == arg_pointer_rtx
1021 : : || op == frame_pointer_rtx
1022 : : || VIRTUAL_REGISTER_P (op));
1023 : : }
1024 : :
1025 : : bool
1026 : : register_no_elim_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1027 : : {
1028 : : return (register_operand (op, mode)) && (
1029 : : (register_no_elim_operand_1 (op, mode)));
1030 : : }
1031 : :
1032 : : static inline bool
1033 : : register_no_SP_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1034 : : #line 725 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1035 : : {
1036 : : if (SUBREG_P (op))
1037 : : op = SUBREG_REG (op);
1038 : :
1039 : : /* Before reload, we can allow (SUBREG (MEM...)) as a register operand
1040 : : because it is guaranteed to be reloaded into one. */
1041 : : if (MEM_P (op))
1042 : : return true;
1043 : :
1044 : : return !(op == arg_pointer_rtx
1045 : : || op == frame_pointer_rtx
1046 : : || op == stack_pointer_rtx
1047 : : || VIRTUAL_REGISTER_P (op));
1048 : : }
1049 : :
1050 : : bool
1051 : : register_no_SP_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1052 : : {
1053 : : return (register_operand (op, mode)) && (
1054 : : (register_no_SP_operand_1 (op, mode)));
1055 : : }
1056 : :
1057 : : bool
1058 : : call_register_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1059 : : {
1060 : : return (
1061 : : #line 745 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1062 : : (TARGET_64BIT)) ? (register_operand (op, mode)) : (register_no_SP_operand (op, mode));
1063 : : }
1064 : :
1065 : : bool
1066 : : general_no_elim_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1067 : : {
1068 : : return (GET_CODE (op) == REG || GET_CODE (op) == SUBREG) ? (register_no_elim_operand (op, mode)) : (general_operand (op, mode));
1069 : : }
1070 : :
1071 : : bool
1072 : : nonmemory_no_elim_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1073 : : {
1074 : : return (register_no_elim_operand (op, mode)) || (immediate_operand (op, mode));
1075 : : }
1076 : :
1077 : : bool
1078 : : indirect_branch_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1079 : : {
1080 : : return (register_operand (op, mode)) || ((!(
1081 : : #line 764 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1082 : : (TARGET_INDIRECT_BRANCH_REGISTER))) && ((!(
1083 : : #line 765 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1084 : : (TARGET_X32))) && (memory_operand (op, mode))));
1085 : : }
1086 : :
1087 : : static inline bool
1088 : : sibcall_memory_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1089 : : #line 775 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1090 : : {
1091 : : op = XEXP (op, 0);
1092 : : if (CONSTANT_P (op))
1093 : : return true;
1094 : : if (GET_CODE (op) == PLUS && REG_P (XEXP (op, 0)))
1095 : : {
1096 : : int regno = REGNO (XEXP (op, 0));
1097 : : if (!HARD_REGISTER_NUM_P (regno) || call_used_or_fixed_reg_p (regno))
1098 : : {
1099 : : op = XEXP (op, 1);
1100 : : if (GOT32_symbol_operand (op, VOIDmode))
1101 : : return true;
1102 : : }
1103 : : }
1104 : : return false;
1105 : : }
1106 : :
1107 : : bool
1108 : : sibcall_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1109 : : {
1110 : : return (memory_operand (op, mode)) && (
1111 : : (sibcall_memory_operand_1 (op, mode)));
1112 : : }
1113 : :
1114 : : bool
1115 : : GOT_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1116 : : {
1117 : : return (memory_operand (op, mode)) && ((GET_CODE (XEXP (op, 0)) == CONST) && ((GET_CODE (XEXP (XEXP (op, 0), 0)) == UNSPEC) && (
1118 : : #line 797 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1119 : : (XINT (XEXP (XEXP (op, 0), 0), 1) == UNSPEC_GOTPCREL))));
1120 : : }
1121 : :
1122 : : bool
1123 : : call_insn_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1124 : : {
1125 : : return (
1126 : : #line 802 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1127 : : (constant_call_address_operand
1128 : : (op, mode == VOIDmode ? mode : Pmode))) || ((call_register_operand (op, mode)) || (
1129 : : #line 805 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1130 : : (satisfies_constraint_Bw (op))));
1131 : : }
1132 : :
1133 : : bool
1134 : : sibcall_insn_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1135 : : {
1136 : : return (
1137 : : #line 809 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1138 : : (constant_call_address_operand
1139 : : (op, mode == VOIDmode ? mode : Pmode))) || ((register_no_elim_operand (op, mode)) || (
1140 : : #line 812 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1141 : : (satisfies_constraint_Bs (op))));
1142 : : }
1143 : :
1144 : : bool
1145 : : GOT32_symbol_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1146 : : {
1147 : : return ((GET_CODE (op) == CONST) && ((GET_CODE (XEXP (op, 0)) == UNSPEC) && (
1148 : : #line 818 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1149 : : (XINT (XEXP (op, 0), 1) == UNSPEC_GOT)))) && (
1150 : : (mode == VOIDmode || GET_MODE (op) == mode));
1151 : : }
1152 : :
1153 : : static inline bool
1154 : : const0_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1155 : : #line 823 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1156 : : {
1157 : : if (mode == VOIDmode)
1158 : : mode = GET_MODE (op);
1159 : : return op == CONST0_RTX (mode);
1160 : : }
1161 : :
1162 : : bool
1163 : : const0_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1164 : : {
1165 : : switch (GET_CODE (op))
1166 : : {
1167 : : case CONST_INT:
1168 : : case CONST_DOUBLE:
1169 : : case CONST_VECTOR:
1170 : : break;
1171 : : default:
1172 : : return false;
1173 : : }
1174 : : return (
1175 : : (const0_operand_1 (op, mode))) && (
1176 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
1177 : : }
1178 : :
1179 : : static inline bool
1180 : : const1_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1181 : : #line 832 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1182 : : {
1183 : : if (mode == VOIDmode)
1184 : : mode = GET_MODE (op);
1185 : : return op == CONST1_RTX (mode);
1186 : : }
1187 : :
1188 : : bool
1189 : : const1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1190 : : {
1191 : : switch (GET_CODE (op))
1192 : : {
1193 : : case CONST_INT:
1194 : : case CONST_DOUBLE:
1195 : : case CONST_VECTOR:
1196 : : break;
1197 : : default:
1198 : : return false;
1199 : : }
1200 : : return (
1201 : : (const1_operand_1 (op, mode))) && (
1202 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
1203 : : }
1204 : :
1205 : : bool
1206 : : constm1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1207 : : {
1208 : : return (GET_CODE (op) == CONST_INT) && (
1209 : : #line 841 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1210 : : (op == constm1_rtx));
1211 : : }
1212 : :
1213 : : bool
1214 : : const0_or_m1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1215 : : {
1216 : : return (const0_operand (op, mode)) || (constm1_operand (op, mode));
1217 : : }
1218 : :
1219 : : bool
1220 : : const8_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1221 : : {
1222 : : return (GET_CODE (op) == CONST_INT) && (
1223 : : #line 851 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1224 : : (INTVAL (op) == 8));
1225 : : }
1226 : :
1227 : : bool
1228 : : const128_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1229 : : {
1230 : : return (GET_CODE (op) == CONST_INT) && (
1231 : : #line 856 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1232 : : (INTVAL (op) == 128));
1233 : : }
1234 : :
1235 : : bool
1236 : : const_32bit_mask (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1237 : : {
1238 : : return (GET_CODE (op) == CONST_INT) && (
1239 : : #line 861 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1240 : : (trunc_int_for_mode (INTVAL (op), DImode)
1241 : : == HOST_WIDE_INT_C (0xffffffff)));
1242 : : }
1243 : :
1244 : : static inline bool
1245 : : const248_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1246 : : #line 867 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1247 : : {
1248 : : HOST_WIDE_INT i = INTVAL (op);
1249 : : return i == 2 || i == 4 || i == 8;
1250 : : }
1251 : :
1252 : : bool
1253 : : const248_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1254 : : {
1255 : : return (GET_CODE (op) == CONST_INT) && (
1256 : : (const248_operand_1 (op, mode)));
1257 : : }
1258 : :
1259 : : static inline bool
1260 : : const123_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1261 : : #line 875 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1262 : : {
1263 : : HOST_WIDE_INT i = INTVAL (op);
1264 : : return i == 1 || i == 2 || i == 3;
1265 : : }
1266 : :
1267 : : bool
1268 : : const123_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1269 : : {
1270 : : return (GET_CODE (op) == CONST_INT) && (
1271 : : (const123_operand_1 (op, mode)));
1272 : : }
1273 : :
1274 : : static inline bool
1275 : : const2367_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1276 : : #line 883 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1277 : : {
1278 : : HOST_WIDE_INT i = INTVAL (op);
1279 : : return i == 2 || i == 3 || i == 6 || i == 7;
1280 : : }
1281 : :
1282 : : bool
1283 : : const2367_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1284 : : {
1285 : : return (GET_CODE (op) == CONST_INT) && (
1286 : : (const2367_operand_1 (op, mode)));
1287 : : }
1288 : :
1289 : : static inline bool
1290 : : const1248_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1291 : : #line 891 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1292 : : {
1293 : : HOST_WIDE_INT i = INTVAL (op);
1294 : : return i == 1 || i == 2 || i == 4 || i == 8;
1295 : : }
1296 : :
1297 : : bool
1298 : : const1248_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1299 : : {
1300 : : return (GET_CODE (op) == CONST_INT) && (
1301 : : (const1248_operand_1 (op, mode)));
1302 : : }
1303 : :
1304 : : static inline bool
1305 : : const359_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1306 : : #line 899 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1307 : : {
1308 : : HOST_WIDE_INT i = INTVAL (op);
1309 : : return i == 3 || i == 5 || i == 9;
1310 : : }
1311 : :
1312 : : bool
1313 : : const359_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1314 : : {
1315 : : return (GET_CODE (op) == CONST_INT) && (
1316 : : (const359_operand_1 (op, mode)));
1317 : : }
1318 : :
1319 : : static inline bool
1320 : : const_4_or_8_to_11_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1321 : : #line 907 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1322 : : {
1323 : : HOST_WIDE_INT i = INTVAL (op);
1324 : : return i == 4 || (i >= 8 && i <= 11);
1325 : : }
1326 : :
1327 : : bool
1328 : : const_4_or_8_to_11_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1329 : : {
1330 : : return (GET_CODE (op) == CONST_INT) && (
1331 : : (const_4_or_8_to_11_operand_1 (op, mode)));
1332 : : }
1333 : :
1334 : : static inline bool
1335 : : const48_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1336 : : #line 915 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1337 : : {
1338 : : HOST_WIDE_INT i = INTVAL (op);
1339 : : return i == 4 || i == 8;
1340 : : }
1341 : :
1342 : : bool
1343 : : const48_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1344 : : {
1345 : : return (GET_CODE (op) == CONST_INT) && (
1346 : : (const48_operand_1 (op, mode)));
1347 : : }
1348 : :
1349 : : bool
1350 : : const_0_to_1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1351 : : {
1352 : : return (GET_CODE (op) == CONST_INT) && ((
1353 : : #line 923 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1354 : : (op == const0_rtx)) || (
1355 : : #line 924 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1356 : : (op == const1_rtx)));
1357 : : }
1358 : :
1359 : : bool
1360 : : const_0_to_3_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1361 : : {
1362 : : return (GET_CODE (op) == CONST_INT) && (
1363 : : #line 929 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1364 : : (IN_RANGE (INTVAL (op), 0, 3)));
1365 : : }
1366 : :
1367 : : bool
1368 : : const_0_to_4_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1369 : : {
1370 : : return (GET_CODE (op) == CONST_INT) && (
1371 : : #line 934 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1372 : : (IN_RANGE (INTVAL (op), 0, 4)));
1373 : : }
1374 : :
1375 : : bool
1376 : : const_0_to_5_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1377 : : {
1378 : : return (GET_CODE (op) == CONST_INT) && (
1379 : : #line 939 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1380 : : (IN_RANGE (INTVAL (op), 0, 5)));
1381 : : }
1382 : :
1383 : : bool
1384 : : const_0_to_7_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1385 : : {
1386 : : return (GET_CODE (op) == CONST_INT) && (
1387 : : #line 944 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1388 : : (IN_RANGE (INTVAL (op), 0, 7)));
1389 : : }
1390 : :
1391 : : bool
1392 : : const_0_to_15_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1393 : : {
1394 : : return (GET_CODE (op) == CONST_INT) && (
1395 : : #line 949 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1396 : : (IN_RANGE (INTVAL (op), 0, 15)));
1397 : : }
1398 : :
1399 : : bool
1400 : : const_0_to_31_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1401 : : {
1402 : : return (GET_CODE (op) == CONST_INT) && (
1403 : : #line 954 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1404 : : (IN_RANGE (INTVAL (op), 0, 31)));
1405 : : }
1406 : :
1407 : : bool
1408 : : const_0_to_63_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1409 : : {
1410 : : return (GET_CODE (op) == CONST_INT) && (
1411 : : #line 959 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1412 : : (IN_RANGE (INTVAL (op), 0, 63)));
1413 : : }
1414 : :
1415 : : bool
1416 : : const_0_to_127_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1417 : : {
1418 : : return (GET_CODE (op) == CONST_INT) && (
1419 : : #line 964 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1420 : : (IN_RANGE (INTVAL (op), 0, 127)));
1421 : : }
1422 : :
1423 : : bool
1424 : : const_0_to_255_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1425 : : {
1426 : : return (GET_CODE (op) == CONST_INT) && (
1427 : : #line 969 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1428 : : (IN_RANGE (INTVAL (op), 0, 255)));
1429 : : }
1430 : :
1431 : : static inline bool
1432 : : const_0_to_255_mul_8_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1433 : : #line 974 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1434 : : {
1435 : : unsigned HOST_WIDE_INT val = INTVAL (op);
1436 : : return val <= 255*8 && val % 8 == 0;
1437 : : }
1438 : :
1439 : : bool
1440 : : const_0_to_255_mul_8_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1441 : : {
1442 : : return (GET_CODE (op) == CONST_INT) && (
1443 : : (const_0_to_255_mul_8_operand_1 (op, mode)));
1444 : : }
1445 : :
1446 : : static inline bool
1447 : : const_0_to_255_not_mul_8_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1448 : : #line 982 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1449 : : {
1450 : : unsigned HOST_WIDE_INT val = INTVAL (op);
1451 : : return val <= 255 && val % 8 != 0;
1452 : : }
1453 : :
1454 : : bool
1455 : : const_0_to_255_not_mul_8_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1456 : : {
1457 : : return (GET_CODE (op) == CONST_INT) && (
1458 : : (const_0_to_255_not_mul_8_operand_1 (op, mode)));
1459 : : }
1460 : :
1461 : : bool
1462 : : const_1_to_31_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1463 : : {
1464 : : return (GET_CODE (op) == CONST_INT) && (
1465 : : #line 991 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1466 : : (IN_RANGE (INTVAL (op), 1, 31)));
1467 : : }
1468 : :
1469 : : bool
1470 : : const_1_to_63_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1471 : : {
1472 : : return (GET_CODE (op) == CONST_INT) && (
1473 : : #line 997 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1474 : : (IN_RANGE (INTVAL (op), 1, 63)));
1475 : : }
1476 : :
1477 : : bool
1478 : : const_2_to_3_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1479 : : {
1480 : : return (GET_CODE (op) == CONST_INT) && (
1481 : : #line 1002 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1482 : : (IN_RANGE (INTVAL (op), 2, 3)));
1483 : : }
1484 : :
1485 : : bool
1486 : : const_4_to_5_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1487 : : {
1488 : : return (GET_CODE (op) == CONST_INT) && (
1489 : : #line 1007 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1490 : : (IN_RANGE (INTVAL (op), 4, 5)));
1491 : : }
1492 : :
1493 : : bool
1494 : : const_4_to_7_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1495 : : {
1496 : : return (GET_CODE (op) == CONST_INT) && (
1497 : : #line 1012 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1498 : : (IN_RANGE (INTVAL (op), 4, 7)));
1499 : : }
1500 : :
1501 : : bool
1502 : : const_6_to_7_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1503 : : {
1504 : : return (GET_CODE (op) == CONST_INT) && (
1505 : : #line 1017 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1506 : : (IN_RANGE (INTVAL (op), 6, 7)));
1507 : : }
1508 : :
1509 : : bool
1510 : : const_8_to_9_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1511 : : {
1512 : : return (GET_CODE (op) == CONST_INT) && (
1513 : : #line 1022 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1514 : : (IN_RANGE (INTVAL (op), 8, 9)));
1515 : : }
1516 : :
1517 : : bool
1518 : : const_8_to_11_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1519 : : {
1520 : : return (GET_CODE (op) == CONST_INT) && (
1521 : : #line 1027 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1522 : : (IN_RANGE (INTVAL (op), 8, 11)));
1523 : : }
1524 : :
1525 : : bool
1526 : : const_8_to_15_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1527 : : {
1528 : : return (GET_CODE (op) == CONST_INT) && (
1529 : : #line 1032 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1530 : : (IN_RANGE (INTVAL (op), 8, 15)));
1531 : : }
1532 : :
1533 : : bool
1534 : : const_10_to_11_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1535 : : {
1536 : : return (GET_CODE (op) == CONST_INT) && (
1537 : : #line 1037 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1538 : : (IN_RANGE (INTVAL (op), 10, 11)));
1539 : : }
1540 : :
1541 : : bool
1542 : : const_12_to_13_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1543 : : {
1544 : : return (GET_CODE (op) == CONST_INT) && (
1545 : : #line 1042 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1546 : : (IN_RANGE (INTVAL (op), 12, 13)));
1547 : : }
1548 : :
1549 : : bool
1550 : : const_12_to_15_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1551 : : {
1552 : : return (GET_CODE (op) == CONST_INT) && (
1553 : : #line 1047 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1554 : : (IN_RANGE (INTVAL (op), 12, 15)));
1555 : : }
1556 : :
1557 : : bool
1558 : : const_14_to_15_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1559 : : {
1560 : : return (GET_CODE (op) == CONST_INT) && (
1561 : : #line 1052 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1562 : : (IN_RANGE (INTVAL (op), 14, 15)));
1563 : : }
1564 : :
1565 : : bool
1566 : : const_16_to_19_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1567 : : {
1568 : : return (GET_CODE (op) == CONST_INT) && (
1569 : : #line 1057 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1570 : : (IN_RANGE (INTVAL (op), 16, 19)));
1571 : : }
1572 : :
1573 : : bool
1574 : : const_16_to_31_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1575 : : {
1576 : : return (GET_CODE (op) == CONST_INT) && (
1577 : : #line 1062 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1578 : : (IN_RANGE (INTVAL (op), 16, 31)));
1579 : : }
1580 : :
1581 : : bool
1582 : : const_20_to_23_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1583 : : {
1584 : : return (GET_CODE (op) == CONST_INT) && (
1585 : : #line 1067 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1586 : : (IN_RANGE (INTVAL (op), 20, 23)));
1587 : : }
1588 : :
1589 : : bool
1590 : : const_24_to_27_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1591 : : {
1592 : : return (GET_CODE (op) == CONST_INT) && (
1593 : : #line 1072 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1594 : : (IN_RANGE (INTVAL (op), 24, 27)));
1595 : : }
1596 : :
1597 : : bool
1598 : : const_28_to_31_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1599 : : {
1600 : : return (GET_CODE (op) == CONST_INT) && (
1601 : : #line 1077 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1602 : : (IN_RANGE (INTVAL (op), 28, 31)));
1603 : : }
1604 : :
1605 : : bool
1606 : : cmpps_imm_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1607 : : {
1608 : : return (const_0_to_7_operand (op, mode)) || ((
1609 : : #line 1081 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1610 : : (TARGET_AVX)) && (const_0_to_31_operand (op, mode)));
1611 : : }
1612 : :
1613 : : static inline bool
1614 : : incdec_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1615 : : #line 1087 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1616 : : {
1617 : : /* On Pentium4, the inc and dec operations causes extra dependency on flag
1618 : : registers, since carry flag is not set. */
1619 : : if (!TARGET_USE_INCDEC && !optimize_insn_for_size_p ())
1620 : : return false;
1621 : : return op == const1_rtx || op == constm1_rtx;
1622 : : }
1623 : :
1624 : : bool
1625 : : incdec_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1626 : : {
1627 : : return (GET_CODE (op) == CONST_INT) && (
1628 : : (incdec_operand_1 (op, mode)));
1629 : : }
1630 : :
1631 : : bool
1632 : : vec_setm_sse41_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1633 : : {
1634 : : return ((register_operand (op, mode)) && (
1635 : : #line 1098 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1636 : : (TARGET_SSE4_1))) || ((GET_CODE (op) == CONST_INT) && (
1637 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
1638 : : }
1639 : :
1640 : : bool
1641 : : vec_setm_avx2_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1642 : : {
1643 : : return ((register_operand (op, mode)) && (
1644 : : #line 1103 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1645 : : (TARGET_AVX2))) || ((GET_CODE (op) == CONST_INT) && (
1646 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
1647 : : }
1648 : :
1649 : : bool
1650 : : vec_setm_mmx_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1651 : : {
1652 : : return ((register_operand (op, mode)) && ((
1653 : : #line 1108 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1654 : : (TARGET_SSE4_1)) && (
1655 : : #line 1109 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1656 : : (TARGET_MMX_WITH_SSE)))) || ((GET_CODE (op) == CONST_INT) && (
1657 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
1658 : : }
1659 : :
1660 : : bool
1661 : : reg_or_pm1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1662 : : {
1663 : : return (register_operand (op, mode)) || (((GET_CODE (op) == CONST_INT) && ((
1664 : : #line 1116 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1665 : : (op == const1_rtx)) || (
1666 : : #line 1117 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1667 : : (op == constm1_rtx)))) && (
1668 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
1669 : : }
1670 : :
1671 : : bool
1672 : : regmem_or_bitnot_regmem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1673 : : {
1674 : : return (nonimmediate_operand (op, mode)) || (((GET_CODE (op) == NOT) && (
1675 : : #line 1124 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1676 : : (nonimmediate_operand (XEXP (op, 0), mode)))) && (
1677 : : (mode == VOIDmode || GET_MODE (op) == mode)));
1678 : : }
1679 : :
1680 : : bool
1681 : : ternlog_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1682 : : {
1683 : : switch (GET_CODE (op))
1684 : : {
1685 : : case NOT:
1686 : : case AND:
1687 : : case IOR:
1688 : : case XOR:
1689 : : break;
1690 : : default:
1691 : : return false;
1692 : : }
1693 : : return (
1694 : : #line 1129 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1695 : : (ix86_ternlog_operand_p (op))) && (
1696 : : (mode == VOIDmode || GET_MODE (op) == mode));
1697 : : }
1698 : :
1699 : : bool
1700 : : shiftdi_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1701 : : {
1702 : : return (
1703 : : #line 1133 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1704 : : (TARGET_64BIT)) ? (nonimmediate_operand (op, mode)) : (register_operand (op, mode));
1705 : : }
1706 : :
1707 : : bool
1708 : : ashldi_input_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1709 : : {
1710 : : return (
1711 : : #line 1138 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1712 : : (TARGET_64BIT)) ? (nonimmediate_operand (op, mode)) : (reg_or_pm1_operand (op, mode));
1713 : : }
1714 : :
1715 : : static inline bool
1716 : : zero_extended_scalar_load_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1717 : : #line 1146 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1718 : : {
1719 : : unsigned n_elts;
1720 : : op = avoid_constant_pool_reference (op);
1721 : :
1722 : : if (!CONST_VECTOR_P (op))
1723 : : return false;
1724 : :
1725 : : n_elts = CONST_VECTOR_NUNITS (op);
1726 : :
1727 : : for (n_elts--; n_elts > 0; n_elts--)
1728 : : {
1729 : : rtx elt = CONST_VECTOR_ELT (op, n_elts);
1730 : : if (elt != CONST0_RTX (GET_MODE_INNER (GET_MODE (op))))
1731 : : return false;
1732 : : }
1733 : : return true;
1734 : : }
1735 : :
1736 : : bool
1737 : : zero_extended_scalar_load_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1738 : : {
1739 : : return ((GET_CODE (op) == MEM) && (
1740 : : (zero_extended_scalar_load_operand_1 (op, mode)))) && (
1741 : : (mode == VOIDmode || GET_MODE (op) == mode));
1742 : : }
1743 : :
1744 : : static inline bool
1745 : : float_vector_all_ones_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1746 : : #line 1167 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1747 : : {
1748 : : mode = GET_MODE (op);
1749 : : if (!FLOAT_MODE_P (mode)
1750 : : || (MEM_P (op)
1751 : : && (!SYMBOL_REF_P (XEXP (op, 0))
1752 : : || !CONSTANT_POOL_ADDRESS_P (XEXP (op, 0)))))
1753 : : return false;
1754 : :
1755 : : if (MEM_P (op))
1756 : : {
1757 : : op = get_pool_constant (XEXP (op, 0));
1758 : : if (!CONST_VECTOR_P (op))
1759 : : return false;
1760 : :
1761 : : if (GET_MODE (op) != mode
1762 : : && INTEGRAL_MODE_P (GET_MODE (op))
1763 : : && op == CONSTM1_RTX (GET_MODE (op)))
1764 : : return true;
1765 : : }
1766 : :
1767 : : rtx first = XVECEXP (op, 0, 0);
1768 : : for (int i = 1; i != GET_MODE_NUNITS (GET_MODE (op)); i++)
1769 : : {
1770 : : rtx tmp = XVECEXP (op, 0, i);
1771 : : if (!rtx_equal_p (tmp, first))
1772 : : return false;
1773 : : }
1774 : : if (GET_MODE (first) == E_SFmode)
1775 : : {
1776 : : long l;
1777 : : REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (first), l);
1778 : : return (l & 0xffffffff) == 0xffffffff;
1779 : : }
1780 : : else if (GET_MODE (first) == E_DFmode)
1781 : : {
1782 : : long l[2];
1783 : : REAL_VALUE_TO_TARGET_DOUBLE (*CONST_DOUBLE_REAL_VALUE (first), l);
1784 : : return ((l[0] & 0xffffffff) == 0xffffffff
1785 : : && (l[1] & 0xffffffff) == 0xffffffff);
1786 : : }
1787 : : else
1788 : : return false;
1789 : : }
1790 : :
1791 : : bool
1792 : : float_vector_all_ones_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1793 : : {
1794 : : switch (GET_CODE (op))
1795 : : {
1796 : : case CONST_VECTOR:
1797 : : case MEM:
1798 : : break;
1799 : : default:
1800 : : return false;
1801 : : }
1802 : : return (
1803 : : (float_vector_all_ones_operand_1 (op, mode))) && (
1804 : : (mode == VOIDmode || GET_MODE (op) == mode));
1805 : : }
1806 : :
1807 : : bool
1808 : : vector_all_ones_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1809 : : {
1810 : : return ((GET_CODE (op) == CONST_VECTOR) && ((
1811 : : #line 1214 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1812 : : (INTEGRAL_MODE_P (GET_MODE (op)))) && (
1813 : : #line 1215 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1814 : : (op == CONSTM1_RTX (GET_MODE (op)))))) && (
1815 : : (mode == VOIDmode || GET_MODE (op) == mode));
1816 : : }
1817 : :
1818 : : bool
1819 : : int_float_vector_all_ones_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1820 : : {
1821 : : return (vector_all_ones_operand (op, mode)) || ((float_vector_all_ones_operand (op, mode)) || ((
1822 : : #line 1221 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1823 : : (op == constm1_rtx)) && (
1824 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode))));
1825 : : }
1826 : :
1827 : : static inline bool
1828 : : vector_all_ones_zero_extend_half_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1829 : : #line 1227 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1830 : : {
1831 : : mode = GET_MODE (op);
1832 : : if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT
1833 : : || (GET_MODE_SIZE (mode) != 32
1834 : : && GET_MODE_SIZE (mode) != 64))
1835 : : return false;
1836 : :
1837 : : int nelts = CONST_VECTOR_NUNITS (op);
1838 : : for (int i = 0; i != nelts; i++)
1839 : : {
1840 : : rtx elt = CONST_VECTOR_ELT (op, i);
1841 : : if (i < nelts / 2
1842 : : && elt != CONSTM1_RTX (GET_MODE_INNER (mode)))
1843 : : return false;
1844 : : if (i >= nelts / 2
1845 : : && elt != CONST0_RTX (GET_MODE_INNER (mode)))
1846 : : return false;
1847 : : }
1848 : : return true;
1849 : : }
1850 : :
1851 : : bool
1852 : : vector_all_ones_zero_extend_half_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1853 : : {
1854 : : return ((GET_CODE (op) == CONST_VECTOR) && (
1855 : : (vector_all_ones_zero_extend_half_operand_1 (op, mode)))) && (
1856 : : (mode == VOIDmode || GET_MODE (op) == mode));
1857 : : }
1858 : :
1859 : : static inline bool
1860 : : vector_all_ones_zero_extend_quarter_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1861 : : #line 1252 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1862 : : {
1863 : : mode = GET_MODE (op);
1864 : : if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT
1865 : : || GET_MODE_SIZE (mode) != 64)
1866 : : return false;
1867 : :
1868 : : int nelts = CONST_VECTOR_NUNITS (op);
1869 : : for (int i = 0; i != nelts; i++)
1870 : : {
1871 : : rtx elt = CONST_VECTOR_ELT (op, i);
1872 : : if (i < nelts / 4
1873 : : && elt != CONSTM1_RTX (GET_MODE_INNER (mode)))
1874 : : return false;
1875 : : if (i >= nelts / 4
1876 : : && elt != CONST0_RTX (GET_MODE_INNER (mode)))
1877 : : return false;
1878 : : }
1879 : : return true;
1880 : : }
1881 : :
1882 : : bool
1883 : : vector_all_ones_zero_extend_quarter_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1884 : : {
1885 : : return ((GET_CODE (op) == CONST_VECTOR) && (
1886 : : (vector_all_ones_zero_extend_quarter_operand_1 (op, mode)))) && (
1887 : : (mode == VOIDmode || GET_MODE (op) == mode));
1888 : : }
1889 : :
1890 : : bool
1891 : : vector_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1892 : : {
1893 : : return (memory_operand (op, mode)) && ((
1894 : : #line 1276 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1895 : : (TARGET_AVX)) || (
1896 : : #line 1277 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1897 : : (MEM_ALIGN (op) >= GET_MODE_ALIGNMENT (mode))));
1898 : : }
1899 : :
1900 : : bool
1901 : : vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1902 : : {
1903 : : return (register_operand (op, mode)) || (vector_memory_operand (op, mode));
1904 : : }
1905 : :
1906 : : bool
1907 : : vector_or_const_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1908 : : {
1909 : : return (register_operand (op, mode)) || ((vector_memory_operand (op, mode)) || ((GET_CODE (op) == CONST_VECTOR) && (
1910 : : (mode == VOIDmode || GET_MODE (op) == mode))));
1911 : : }
1912 : :
1913 : : bool
1914 : : vector_or_0_or_1s_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1915 : : {
1916 : : return (register_operand (op, mode)) || ((vector_memory_operand (op, mode)) || ((const0_operand (op, mode)) || (int_float_vector_all_ones_operand (op, mode))));
1917 : : }
1918 : :
1919 : : bool
1920 : : bcst_mem_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1921 : : {
1922 : : return ((GET_CODE (op) == VEC_DUPLICATE) && (((
1923 : : #line 1301 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1924 : : (TARGET_AVX512F)) && ((
1925 : : #line 1302 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1926 : : (TARGET_AVX512VL)) || (
1927 : : #line 1303 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1928 : : (GET_MODE_SIZE (GET_MODE (op)) == 64)))) && ((
1929 : : #line 1304 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1930 : : (VALID_BCST_MODE_P (GET_MODE_INNER (GET_MODE (op))))) && ((
1931 : : #line 1305 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1932 : : (GET_MODE (XEXP (op, 0))
1933 : : == GET_MODE_INNER (GET_MODE (op)))) && (
1934 : : #line 1307 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1935 : : (memory_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0))))))))) && (
1936 : : (mode == VOIDmode || GET_MODE (op) == mode));
1937 : : }
1938 : :
1939 : : bool
1940 : : bcst_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1941 : : {
1942 : : return (vector_operand (op, mode)) || (bcst_mem_operand (op, mode));
1943 : : }
1944 : :
1945 : : bool
1946 : : nonimmediate_or_const_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1947 : : {
1948 : : return (nonimmediate_operand (op, mode)) || ((GET_CODE (op) == CONST_VECTOR) && (
1949 : : (mode == VOIDmode || GET_MODE (op) == mode)));
1950 : : }
1951 : :
1952 : : bool
1953 : : nonimmediate_or_const_vec_dup_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1954 : : {
1955 : : return (nonimmediate_operand (op, mode)) || ((
1956 : : #line 1322 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1957 : : (const_vec_duplicate_p (op))) && (
1958 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
1959 : : }
1960 : :
1961 : : bool
1962 : : reg_or_const_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1963 : : {
1964 : : return (register_operand (op, mode)) || ((GET_CODE (op) == CONST_VECTOR) && (
1965 : : (mode == VOIDmode || GET_MODE (op) == mode)));
1966 : : }
1967 : :
1968 : : static inline bool
1969 : : x86_64_const_vector_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
1970 : : #line 1334 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
1971 : : {
1972 : : if (mode == VOIDmode)
1973 : : mode = GET_MODE (op);
1974 : : else if (GET_MODE (op) != mode)
1975 : : return false;
1976 : : if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
1977 : : return false;
1978 : : HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op, mode);
1979 : : return trunc_int_for_mode (val, SImode) == val;
1980 : : }
1981 : :
1982 : : bool
1983 : : x86_64_const_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1984 : : {
1985 : : return ((GET_CODE (op) == CONST_VECTOR) && (
1986 : : (x86_64_const_vector_operand_1 (op, mode)))) && (
1987 : : (mode == VOIDmode || GET_MODE (op) == mode));
1988 : : }
1989 : :
1990 : : bool
1991 : : nonimmediate_or_x86_64_const_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1992 : : {
1993 : : return (nonimmediate_operand (op, mode)) || (x86_64_const_vector_operand (op, mode));
1994 : : }
1995 : :
1996 : : bool
1997 : : nonimmediate_or_sse_const_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
1998 : : {
1999 : : return (nonimmediate_operand (op, mode)) || ((
2000 : : #line 1352 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2001 : : (standard_sse_constant_p (op, mode))) && (
2002 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
2003 : : }
2004 : :
2005 : : bool
2006 : : reg_or_0_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2007 : : {
2008 : : return (register_operand (op, mode)) || (const0_operand (op, mode));
2009 : : }
2010 : :
2011 : : bool
2012 : : nonimm_or_0_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2013 : : {
2014 : : return (nonimmediate_operand (op, mode)) || (const0_operand (op, mode));
2015 : : }
2016 : :
2017 : : bool
2018 : : nonimm_or_0_or_1s_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2019 : : {
2020 : : return (nonimmediate_operand (op, mode)) || ((const0_operand (op, mode)) || (int_float_vector_all_ones_operand (op, mode)));
2021 : : }
2022 : :
2023 : : bool
2024 : : SImode_address_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2025 : : {
2026 : : switch (GET_CODE (op))
2027 : : {
2028 : : case SUBREG:
2029 : : case ZERO_EXTEND:
2030 : : case AND:
2031 : : break;
2032 : : default:
2033 : : return false;
2034 : : }
2035 : : return
2036 : : (mode == VOIDmode || GET_MODE (op) == mode);
2037 : : }
2038 : :
2039 : : static inline bool
2040 : : address_no_seg_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2041 : : #line 1379 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2042 : : {
2043 : : struct ix86_address parts;
2044 : : int ok;
2045 : :
2046 : : if (!CONST_INT_P (op)
2047 : : && mode != VOIDmode
2048 : : && GET_MODE (op) != mode)
2049 : : return false;
2050 : :
2051 : : ok = ix86_decompose_address (op, &parts);
2052 : : gcc_assert (ok);
2053 : : return parts.seg == ADDR_SPACE_GENERIC;
2054 : : }
2055 : :
2056 : : bool
2057 : : address_no_seg_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2058 : : {
2059 : : return (
2060 : : #line 1378 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2061 : : (address_operand (op, VOIDmode))) && (
2062 : : (address_no_seg_operand_1 (op, mode)));
2063 : : }
2064 : :
2065 : : static inline bool
2066 : : vsib_address_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2067 : : #line 1397 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2068 : : {
2069 : : struct ix86_address parts;
2070 : : int ok;
2071 : : rtx disp;
2072 : :
2073 : : ok = ix86_decompose_address (op, &parts);
2074 : : gcc_assert (ok);
2075 : : if (parts.index || parts.seg != ADDR_SPACE_GENERIC)
2076 : : return false;
2077 : :
2078 : : /* VSIB addressing doesn't support (%rip). */
2079 : : if (parts.disp)
2080 : : {
2081 : : disp = parts.disp;
2082 : : if (GET_CODE (disp) == CONST)
2083 : : {
2084 : : disp = XEXP (disp, 0);
2085 : : if (GET_CODE (disp) == PLUS)
2086 : : disp = XEXP (disp, 0);
2087 : : if (GET_CODE (disp) == UNSPEC)
2088 : : switch (XINT (disp, 1))
2089 : : {
2090 : : case UNSPEC_GOTPCREL:
2091 : : case UNSPEC_PCREL:
2092 : : case UNSPEC_GOTNTPOFF:
2093 : : return false;
2094 : : }
2095 : : }
2096 : : if (TARGET_64BIT
2097 : : && flag_pic
2098 : : && (SYMBOL_REF_P (disp)
2099 : : || LABEL_REF_P (disp)))
2100 : : return false;
2101 : : }
2102 : :
2103 : : return true;
2104 : : }
2105 : :
2106 : : bool
2107 : : vsib_address_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2108 : : {
2109 : : return ((
2110 : : #line 1396 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2111 : : (address_operand (op, VOIDmode))) && (
2112 : : (vsib_address_operand_1 (op, mode)))) && (
2113 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode));
2114 : : }
2115 : :
2116 : : bool
2117 : : vsib_mem_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2118 : : {
2119 : : return (GET_CODE (op) == MEM) && (
2120 : : (mode == VOIDmode || GET_MODE (op) == mode));
2121 : : }
2122 : :
2123 : : static inline bool
2124 : : aligned_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2125 : : #line 1441 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2126 : : {
2127 : : struct ix86_address parts;
2128 : : int ok;
2129 : :
2130 : : /* Registers and immediate operands are always "aligned". */
2131 : : if (!MEM_P (op))
2132 : : return true;
2133 : :
2134 : : /* All patterns using aligned_operand on memory operands ends up
2135 : : in promoting memory operand to 64bit and thus causing memory mismatch. */
2136 : : if (TARGET_MEMORY_MISMATCH_STALL && !optimize_insn_for_size_p ())
2137 : : return false;
2138 : :
2139 : : /* Don't even try to do any aligned optimizations with volatiles. */
2140 : : if (MEM_VOLATILE_P (op))
2141 : : return false;
2142 : :
2143 : : if (MEM_ALIGN (op) >= 32)
2144 : : return true;
2145 : :
2146 : : op = XEXP (op, 0);
2147 : :
2148 : : /* Pushes and pops are only valid on the stack pointer. */
2149 : : if (GET_CODE (op) == PRE_DEC
2150 : : || GET_CODE (op) == POST_INC)
2151 : : return true;
2152 : :
2153 : : /* Decode the address. */
2154 : : ok = ix86_decompose_address (op, &parts);
2155 : : gcc_assert (ok);
2156 : :
2157 : : if (parts.base && SUBREG_P (parts.base))
2158 : : parts.base = SUBREG_REG (parts.base);
2159 : : if (parts.index && SUBREG_P (parts.index))
2160 : : parts.index = SUBREG_REG (parts.index);
2161 : :
2162 : : /* Look for some component that isn't known to be aligned. */
2163 : : if (parts.index)
2164 : : {
2165 : : if (REGNO_POINTER_ALIGN (REGNO (parts.index)) * parts.scale < 32)
2166 : : return false;
2167 : : }
2168 : : if (parts.base)
2169 : : {
2170 : : if (REGNO_POINTER_ALIGN (REGNO (parts.base)) < 32)
2171 : : return false;
2172 : : }
2173 : : if (parts.disp)
2174 : : {
2175 : : if (!CONST_INT_P (parts.disp)
2176 : : || (INTVAL (parts.disp) & 3))
2177 : : return false;
2178 : : }
2179 : :
2180 : : /* Didn't find one -- this must be an aligned address. */
2181 : : return true;
2182 : : }
2183 : :
2184 : : bool
2185 : : aligned_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2186 : : {
2187 : : return (general_operand (op, mode)) && (
2188 : : (aligned_operand_1 (op, mode)));
2189 : : }
2190 : :
2191 : : static inline bool
2192 : : memory_displacement_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2193 : : #line 1502 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2194 : : {
2195 : : struct ix86_address parts;
2196 : : int ok;
2197 : :
2198 : : ok = ix86_decompose_address (XEXP (op, 0), &parts);
2199 : : gcc_assert (ok);
2200 : : return parts.disp != NULL_RTX;
2201 : : }
2202 : :
2203 : : bool
2204 : : memory_displacement_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2205 : : {
2206 : : return (memory_operand (op, mode)) && (
2207 : : (memory_displacement_operand_1 (op, mode)));
2208 : : }
2209 : :
2210 : : static inline bool
2211 : : memory_displacement_only_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2212 : : #line 1514 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2213 : : {
2214 : : struct ix86_address parts;
2215 : : int ok;
2216 : :
2217 : : if (TARGET_64BIT)
2218 : : return false;
2219 : :
2220 : : ok = ix86_decompose_address (XEXP (op, 0), &parts);
2221 : : gcc_assert (ok);
2222 : :
2223 : : if (parts.base || parts.index)
2224 : : return false;
2225 : :
2226 : : return parts.disp != NULL_RTX;
2227 : : }
2228 : :
2229 : : bool
2230 : : memory_displacement_only_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2231 : : {
2232 : : return (memory_operand (op, mode)) && (
2233 : : (memory_displacement_only_operand_1 (op, mode)));
2234 : : }
2235 : :
2236 : : bool
2237 : : long_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2238 : : {
2239 : : return (memory_operand (op, mode)) && (
2240 : : #line 1534 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2241 : : (memory_address_length (op, false)));
2242 : : }
2243 : :
2244 : : static inline bool
2245 : : fcmov_comparison_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2246 : : #line 1539 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2247 : : {
2248 : : machine_mode inmode = GET_MODE (XEXP (op, 0));
2249 : : enum rtx_code code = GET_CODE (op);
2250 : :
2251 : : if (inmode == CCFPmode)
2252 : : code = ix86_fp_compare_code_to_integer (code);
2253 : :
2254 : : /* i387 supports just limited amount of conditional codes. */
2255 : : switch (code)
2256 : : {
2257 : : case GEU: case LTU:
2258 : : if (inmode == CCCmode || inmode == CCGZmode)
2259 : : return true;
2260 : : /* FALLTHRU */
2261 : : case GTU: case LEU:
2262 : : if (inmode == CCmode || inmode == CCFPmode)
2263 : : return true;
2264 : : return false;
2265 : : case ORDERED: case UNORDERED:
2266 : : case EQ: case NE:
2267 : : return true;
2268 : : default:
2269 : : return false;
2270 : : }
2271 : : }
2272 : :
2273 : : bool
2274 : : fcmov_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2275 : : {
2276 : : return (comparison_operator (op, mode)) && (
2277 : : (fcmov_comparison_operator_1 (op, mode)));
2278 : : }
2279 : :
2280 : : bool
2281 : : sse_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2282 : : {
2283 : : return ((GET_CODE (op) == EQ || GET_CODE (op) == NE || GET_CODE (op) == LT || GET_CODE (op) == LE || GET_CODE (op) == UNORDERED || GET_CODE (op) == UNGE || GET_CODE (op) == UNGT || GET_CODE (op) == ORDERED) || ((
2284 : : #line 1571 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2285 : : (TARGET_AVX)) && (GET_CODE (op) == GE || GET_CODE (op) == GT || GET_CODE (op) == UNEQ || GET_CODE (op) == UNLE || GET_CODE (op) == UNLT || GET_CODE (op) == LTGT))) && (
2286 : : (mode == VOIDmode || GET_MODE (op) == mode));
2287 : : }
2288 : :
2289 : : bool
2290 : : ix86_comparison_int_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2291 : : {
2292 : : switch (GET_CODE (op))
2293 : : {
2294 : : case NE:
2295 : : case EQ:
2296 : : case GE:
2297 : : case GT:
2298 : : case LE:
2299 : : case LT:
2300 : : break;
2301 : : default:
2302 : : return false;
2303 : : }
2304 : : return
2305 : : (mode == VOIDmode || GET_MODE (op) == mode);
2306 : : }
2307 : :
2308 : : bool
2309 : : ix86_comparison_uns_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2310 : : {
2311 : : switch (GET_CODE (op))
2312 : : {
2313 : : case NE:
2314 : : case EQ:
2315 : : case GEU:
2316 : : case GTU:
2317 : : case LEU:
2318 : : case LTU:
2319 : : break;
2320 : : default:
2321 : : return false;
2322 : : }
2323 : : return
2324 : : (mode == VOIDmode || GET_MODE (op) == mode);
2325 : : }
2326 : :
2327 : : bool
2328 : : bt_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2329 : : {
2330 : : switch (GET_CODE (op))
2331 : : {
2332 : : case NE:
2333 : : case EQ:
2334 : : break;
2335 : : default:
2336 : : return false;
2337 : : }
2338 : : return
2339 : : (mode == VOIDmode || GET_MODE (op) == mode);
2340 : : }
2341 : :
2342 : : bool
2343 : : shr_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2344 : : {
2345 : : switch (GET_CODE (op))
2346 : : {
2347 : : case GTU:
2348 : : case LEU:
2349 : : break;
2350 : : default:
2351 : : return false;
2352 : : }
2353 : : return
2354 : : (mode == VOIDmode || GET_MODE (op) == mode);
2355 : : }
2356 : :
2357 : : bool
2358 : : add_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2359 : : {
2360 : : switch (GET_CODE (op))
2361 : : {
2362 : : case GEU:
2363 : : case LTU:
2364 : : break;
2365 : : default:
2366 : : return false;
2367 : : }
2368 : : return
2369 : : (mode == VOIDmode || GET_MODE (op) == mode);
2370 : : }
2371 : :
2372 : : bool
2373 : : ieee_maxmin_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2374 : : {
2375 : : switch (GET_CODE (op))
2376 : : {
2377 : : case LT:
2378 : : case GT:
2379 : : break;
2380 : : default:
2381 : : return false;
2382 : : }
2383 : : return
2384 : : (mode == VOIDmode || GET_MODE (op) == mode);
2385 : : }
2386 : :
2387 : : static inline bool
2388 : : ix86_comparison_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2389 : : #line 1595 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2390 : : {
2391 : : machine_mode inmode = GET_MODE (XEXP (op, 0));
2392 : : enum rtx_code code = GET_CODE (op);
2393 : :
2394 : : if (inmode == CCFPmode)
2395 : : return ix86_trivial_fp_comparison_operator (op, mode);
2396 : :
2397 : : switch (code)
2398 : : {
2399 : : case EQ: case NE:
2400 : : if (inmode == CCGZmode)
2401 : : return false;
2402 : : return true;
2403 : : case GE: case LT:
2404 : : if (inmode == CCmode || inmode == CCGCmode
2405 : : || inmode == CCGOCmode || inmode == CCNOmode || inmode == CCGZmode)
2406 : : return true;
2407 : : return false;
2408 : : case GEU: case LTU:
2409 : : if (inmode == CCCmode || inmode == CCGZmode)
2410 : : return true;
2411 : : /* FALLTHRU */
2412 : : case GTU: case LEU:
2413 : : if (inmode == CCmode)
2414 : : return true;
2415 : : return false;
2416 : : case ORDERED: case UNORDERED:
2417 : : if (inmode == CCmode)
2418 : : return true;
2419 : : return false;
2420 : : case GT: case LE:
2421 : : if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode)
2422 : : return true;
2423 : : return false;
2424 : : default:
2425 : : return false;
2426 : : }
2427 : : }
2428 : :
2429 : : bool
2430 : : ix86_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2431 : : {
2432 : : return (comparison_operator (op, mode)) && (
2433 : : (ix86_comparison_operator_1 (op, mode)));
2434 : : }
2435 : :
2436 : : static inline bool
2437 : : ix86_carry_flag_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2438 : : #line 1638 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2439 : : {
2440 : : machine_mode inmode = GET_MODE (XEXP (op, 0));
2441 : : enum rtx_code code = GET_CODE (op);
2442 : :
2443 : : if (inmode == CCFPmode)
2444 : : code = ix86_fp_compare_code_to_integer (code);
2445 : : else if (inmode != CCmode && inmode != CCCmode && inmode != CCGZmode)
2446 : : return false;
2447 : :
2448 : : return code == LTU;
2449 : : }
2450 : :
2451 : : bool
2452 : : ix86_carry_flag_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2453 : : {
2454 : : switch (GET_CODE (op))
2455 : : {
2456 : : case LTU:
2457 : : case UNLT:
2458 : : break;
2459 : : default:
2460 : : return false;
2461 : : }
2462 : : return (
2463 : : (ix86_carry_flag_operator_1 (op, mode))) && (
2464 : : (mode == VOIDmode || GET_MODE (op) == mode));
2465 : : }
2466 : :
2467 : : static inline bool
2468 : : ix86_carry_flag_unset_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2469 : : #line 1654 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2470 : : {
2471 : : machine_mode inmode = GET_MODE (XEXP (op, 0));
2472 : : enum rtx_code code = GET_CODE (op);
2473 : :
2474 : : if (inmode == CCFPmode)
2475 : : code = ix86_fp_compare_code_to_integer (code);
2476 : : else if (inmode != CCmode && inmode != CCCmode && inmode != CCGZmode)
2477 : : return false;
2478 : :
2479 : : return code == GEU;
2480 : : }
2481 : :
2482 : : bool
2483 : : ix86_carry_flag_unset_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2484 : : {
2485 : : switch (GET_CODE (op))
2486 : : {
2487 : : case GEU:
2488 : : case GE:
2489 : : break;
2490 : : default:
2491 : : return false;
2492 : : }
2493 : : return (
2494 : : (ix86_carry_flag_unset_operator_1 (op, mode))) && (
2495 : : (mode == VOIDmode || GET_MODE (op) == mode));
2496 : : }
2497 : :
2498 : : bool
2499 : : ix86_trivial_fp_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2500 : : {
2501 : : return ((
2502 : : #line 1669 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2503 : : (TARGET_AVX10_2)) ? (GET_CODE (op) == GT || GET_CODE (op) == GE || GET_CODE (op) == UNLT || GET_CODE (op) == UNLE || GET_CODE (op) == EQ || GET_CODE (op) == UNEQ || GET_CODE (op) == NE || GET_CODE (op) == LTGT || GET_CODE (op) == ORDERED || GET_CODE (op) == UNORDERED) : (GET_CODE (op) == GT || GET_CODE (op) == GE || GET_CODE (op) == UNLT || GET_CODE (op) == UNLE || GET_CODE (op) == UNEQ || GET_CODE (op) == LTGT || GET_CODE (op) == ORDERED || GET_CODE (op) == UNORDERED)) && (
2504 : : (mode == VOIDmode || GET_MODE (op) == mode));
2505 : : }
2506 : :
2507 : : bool
2508 : : ix86_trivial_fp_comparison_operator_xf (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2509 : : {
2510 : : switch (GET_CODE (op))
2511 : : {
2512 : : case GT:
2513 : : case GE:
2514 : : case UNLT:
2515 : : case UNLE:
2516 : : case UNEQ:
2517 : : case LTGT:
2518 : : case ORDERED:
2519 : : case UNORDERED:
2520 : : break;
2521 : : default:
2522 : : return false;
2523 : : }
2524 : : return
2525 : : (mode == VOIDmode || GET_MODE (op) == mode);
2526 : : }
2527 : :
2528 : : bool
2529 : : ix86_fp_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2530 : : {
2531 : : return (
2532 : : #line 1680 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2533 : : (ix86_fp_comparison_strategy (GET_CODE (op))
2534 : : == IX86_FPCMP_ARITH)) ? (comparison_operator (op, mode)) : (ix86_trivial_fp_comparison_operator (op, mode));
2535 : : }
2536 : :
2537 : : bool
2538 : : ix86_fp_comparison_operator_xf (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2539 : : {
2540 : : return (
2541 : : #line 1686 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2542 : : (ix86_fp_comparison_strategy (GET_CODE (op))
2543 : : == IX86_FPCMP_ARITH)) ? (comparison_operator (op, mode)) : (ix86_trivial_fp_comparison_operator_xf (op, mode));
2544 : : }
2545 : :
2546 : : bool
2547 : : ix86_timode_comparison_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2548 : : {
2549 : : return (
2550 : : #line 1693 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2551 : : (TARGET_64BIT)) ? (ordered_comparison_operator (op, mode)) : (bt_comparison_operator (op, mode));
2552 : : }
2553 : :
2554 : : bool
2555 : : ix86_timode_comparison_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2556 : : {
2557 : : return (
2558 : : #line 1699 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2559 : : (TARGET_64BIT)) ? (x86_64_general_operand (op, mode)) : (nonimmediate_operand (op, mode));
2560 : : }
2561 : :
2562 : : bool
2563 : : cmp_fp_expander_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2564 : : {
2565 : : return ((GET_CODE (op) == CONST_DOUBLE) && (
2566 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode))) || (general_operand (op, mode));
2567 : : }
2568 : :
2569 : : bool
2570 : : binary_fp_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2571 : : {
2572 : : switch (GET_CODE (op))
2573 : : {
2574 : : case PLUS:
2575 : : case MINUS:
2576 : : case MULT:
2577 : : case DIV:
2578 : : break;
2579 : : default:
2580 : : return false;
2581 : : }
2582 : : return
2583 : : (mode == VOIDmode || GET_MODE (op) == mode);
2584 : : }
2585 : :
2586 : : bool
2587 : : mult_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2588 : : {
2589 : : return (GET_CODE (op) == MULT) && (
2590 : : (mode == VOIDmode || GET_MODE (op) == mode));
2591 : : }
2592 : :
2593 : : bool
2594 : : div_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2595 : : {
2596 : : return (GET_CODE (op) == DIV) && (
2597 : : (mode == VOIDmode || GET_MODE (op) == mode));
2598 : : }
2599 : :
2600 : : bool
2601 : : logic_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2602 : : {
2603 : : switch (GET_CODE (op))
2604 : : {
2605 : : case AND:
2606 : : case IOR:
2607 : : case XOR:
2608 : : break;
2609 : : default:
2610 : : return false;
2611 : : }
2612 : : return
2613 : : (mode == VOIDmode || GET_MODE (op) == mode);
2614 : : }
2615 : :
2616 : : bool
2617 : : and_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2618 : : {
2619 : : return (GET_CODE (op) == AND) && (
2620 : : (mode == VOIDmode || GET_MODE (op) == mode));
2621 : : }
2622 : :
2623 : : bool
2624 : : plusminuslogic_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2625 : : {
2626 : : switch (GET_CODE (op))
2627 : : {
2628 : : case PLUS:
2629 : : case MINUS:
2630 : : case AND:
2631 : : case IOR:
2632 : : case XOR:
2633 : : break;
2634 : : default:
2635 : : return false;
2636 : : }
2637 : : return
2638 : : (mode == VOIDmode || GET_MODE (op) == mode);
2639 : : }
2640 : :
2641 : : bool
2642 : : arith_or_logical_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2643 : : {
2644 : : switch (GET_CODE (op))
2645 : : {
2646 : : case PLUS:
2647 : : case MULT:
2648 : : case AND:
2649 : : case IOR:
2650 : : case XOR:
2651 : : case SMIN:
2652 : : case SMAX:
2653 : : case UMIN:
2654 : : case UMAX:
2655 : : case COMPARE:
2656 : : case MINUS:
2657 : : case DIV:
2658 : : case MOD:
2659 : : case UDIV:
2660 : : case UMOD:
2661 : : case ASHIFT:
2662 : : case ROTATE:
2663 : : case ASHIFTRT:
2664 : : case LSHIFTRT:
2665 : : case ROTATERT:
2666 : : break;
2667 : : default:
2668 : : return false;
2669 : : }
2670 : : return
2671 : : (mode == VOIDmode || GET_MODE (op) == mode);
2672 : : }
2673 : :
2674 : : bool
2675 : : commutative_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2676 : : {
2677 : : switch (GET_CODE (op))
2678 : : {
2679 : : case PLUS:
2680 : : case MULT:
2681 : : case AND:
2682 : : case IOR:
2683 : : case XOR:
2684 : : case SMIN:
2685 : : case SMAX:
2686 : : case UMIN:
2687 : : case UMAX:
2688 : : break;
2689 : : default:
2690 : : return false;
2691 : : }
2692 : : return
2693 : : (mode == VOIDmode || GET_MODE (op) == mode);
2694 : : }
2695 : :
2696 : : bool
2697 : : promotable_binary_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2698 : : {
2699 : : return ((GET_CODE (op) == PLUS || GET_CODE (op) == MINUS || GET_CODE (op) == AND || GET_CODE (op) == IOR || GET_CODE (op) == XOR || GET_CODE (op) == ASHIFT) || ((GET_CODE (op) == MULT) && (
2700 : : #line 1747 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2701 : : (TARGET_TUNE_PROMOTE_HIMODE_IMUL)))) && (
2702 : : (mode == VOIDmode || GET_MODE (op) == mode));
2703 : : }
2704 : :
2705 : : bool
2706 : : compare_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2707 : : {
2708 : : return (GET_CODE (op) == COMPARE) && (
2709 : : (mode == VOIDmode || GET_MODE (op) == mode));
2710 : : }
2711 : :
2712 : : static inline bool
2713 : : extract_high_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2714 : : #line 1754 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2715 : : {
2716 : : return (const8_operand (XEXP (op, 1), VOIDmode)
2717 : : && (BINARY_P (op) || const8_operand (XEXP (op, 2), VOIDmode)));
2718 : : }
2719 : :
2720 : : bool
2721 : : extract_high_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2722 : : {
2723 : : switch (GET_CODE (op))
2724 : : {
2725 : : case ZERO_EXTRACT:
2726 : : case SIGN_EXTRACT:
2727 : : case ASHIFTRT:
2728 : : case LSHIFTRT:
2729 : : break;
2730 : : default:
2731 : : return false;
2732 : : }
2733 : : return (
2734 : : (extract_high_operator_1 (op, mode))) && (
2735 : : (mode == VOIDmode || GET_MODE (op) == mode));
2736 : : }
2737 : :
2738 : : bool
2739 : : misaligned_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2740 : : {
2741 : : return ((GET_CODE (op) == MEM) && (
2742 : : #line 1763 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2743 : : (MEM_ALIGN (op) < GET_MODE_BITSIZE (mode)))) && (
2744 : : (mode == VOIDmode || GET_MODE (op) == mode));
2745 : : }
2746 : :
2747 : : static inline bool
2748 : : movq_parallel_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2749 : : #line 1769 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2750 : : {
2751 : : unsigned nelt = XVECLEN (op, 0);
2752 : : unsigned nelt2 = nelt >> 1;
2753 : : unsigned i;
2754 : :
2755 : : if (nelt < 2)
2756 : : return false;
2757 : :
2758 : : /* Validate that all of the elements are constants,
2759 : : lower halves of permute are lower halves of the first operand,
2760 : : upper halves of permute come from any of the second operand. */
2761 : : for (i = 0; i < nelt; ++i)
2762 : : {
2763 : : rtx er = XVECEXP (op, 0, i);
2764 : : unsigned HOST_WIDE_INT ei;
2765 : :
2766 : : if (!CONST_INT_P (er))
2767 : : return false;
2768 : : ei = INTVAL (er);
2769 : : if (i < nelt2 && ei != i)
2770 : : return false;
2771 : : if (i >= nelt2 && (ei < nelt || ei >= nelt << 1))
2772 : : return false;
2773 : : }
2774 : :
2775 : : return true;
2776 : : }
2777 : :
2778 : : bool
2779 : : movq_parallel (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2780 : : {
2781 : : return ((GET_CODE (op) == PARALLEL) && (
2782 : : (movq_parallel_1 (op, mode)))) && (
2783 : : (mode == VOIDmode || GET_MODE (op) == mode));
2784 : : }
2785 : :
2786 : : static inline bool
2787 : : vzeroall_operation_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2788 : : #line 1800 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2789 : : {
2790 : : unsigned i, nregs = TARGET_64BIT ? 16 : 8;
2791 : :
2792 : : if ((unsigned) XVECLEN (op, 0) != 1 + nregs)
2793 : : return false;
2794 : :
2795 : : for (i = 0; i < nregs; i++)
2796 : : {
2797 : : rtx elt = XVECEXP (op, 0, i+1);
2798 : :
2799 : : if (GET_CODE (elt) != SET
2800 : : || GET_CODE (SET_DEST (elt)) != REG
2801 : : || GET_MODE (SET_DEST (elt)) != V8SImode
2802 : : || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
2803 : : || SET_SRC (elt) != CONST0_RTX (V8SImode))
2804 : : return false;
2805 : : }
2806 : : return true;
2807 : : }
2808 : :
2809 : : bool
2810 : : vzeroall_operation (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2811 : : {
2812 : : return ((GET_CODE (op) == PARALLEL) && (
2813 : : (vzeroall_operation_1 (op, mode)))) && (
2814 : : (mode == VOIDmode || GET_MODE (op) == mode));
2815 : : }
2816 : :
2817 : : bool
2818 : : vzeroall_pattern (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2819 : : {
2820 : : return ((GET_CODE (op) == PARALLEL) && ((GET_CODE (XVECEXP (op, 0, 0)) == UNSPEC_VOLATILE) && (
2821 : : #line 1824 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2822 : : (XINT (XVECEXP (op, 0, 0), 1) == UNSPECV_VZEROALL)))) && (
2823 : : (mode == VOIDmode || GET_MODE (op) == mode));
2824 : : }
2825 : :
2826 : : bool
2827 : : vzeroupper_pattern (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2828 : : {
2829 : : return ((GET_CODE (op) == PARALLEL) && ((GET_CODE (XVECEXP (op, 0, 1)) == UNSPEC) && ((
2830 : : #line 1830 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2831 : : (XINT (XVECEXP (op, 0, 1), 1) == UNSPEC_CALLEE_ABI)) && (
2832 : : #line 1831 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2833 : : (INTVAL (XVECEXP (XVECEXP (op, 0, 1), 0, 0)) == ABI_VZEROUPPER))))) && (
2834 : : (mode == VOIDmode || GET_MODE (op) == mode));
2835 : : }
2836 : :
2837 : : static inline bool
2838 : : addsub_vm_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2839 : : #line 1836 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2840 : : {
2841 : : rtx op0, op1;
2842 : : int swapped;
2843 : : HOST_WIDE_INT mask;
2844 : : int nunits, elt;
2845 : :
2846 : : op0 = XEXP (op, 0);
2847 : : op1 = XEXP (op, 1);
2848 : :
2849 : : /* Sanity check. */
2850 : : if (GET_CODE (op0) == MINUS && GET_CODE (op1) == PLUS)
2851 : : swapped = 0;
2852 : : else if (GET_CODE (op0) == PLUS && GET_CODE (op1) == MINUS)
2853 : : swapped = 1;
2854 : : else
2855 : : gcc_unreachable ();
2856 : :
2857 : : mask = INTVAL (XEXP (op, 2));
2858 : : nunits = GET_MODE_NUNITS (mode);
2859 : :
2860 : : for (elt = 0; elt < nunits; elt++)
2861 : : {
2862 : : /* bit clear: take from op0, set: take from op1 */
2863 : : int bit = !(mask & (HOST_WIDE_INT_1U << elt));
2864 : :
2865 : : if (bit != ((elt & 1) ^ swapped))
2866 : : return false;
2867 : : }
2868 : :
2869 : : return true;
2870 : : }
2871 : :
2872 : : bool
2873 : : addsub_vm_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2874 : : {
2875 : : return ((GET_CODE (op) == VEC_MERGE) && (
2876 : : (addsub_vm_operator_1 (op, mode)))) && (
2877 : : (mode == VOIDmode || GET_MODE (op) == mode));
2878 : : }
2879 : :
2880 : : static inline bool
2881 : : addsub_vs_operator_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2882 : : #line 1872 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2883 : : {
2884 : : rtx op0, op1;
2885 : : bool swapped;
2886 : : int nunits, elt;
2887 : :
2888 : : op0 = XEXP (XEXP (op, 0), 0);
2889 : : op1 = XEXP (XEXP (op, 0), 1);
2890 : :
2891 : : /* Sanity check. */
2892 : : if (GET_CODE (op0) == MINUS && GET_CODE (op1) == PLUS)
2893 : : swapped = false;
2894 : : else if (GET_CODE (op0) == PLUS && GET_CODE (op1) == MINUS)
2895 : : swapped = true;
2896 : : else
2897 : : gcc_unreachable ();
2898 : :
2899 : : nunits = GET_MODE_NUNITS (mode);
2900 : : if (XVECLEN (XEXP (op, 1), 0) != nunits)
2901 : : return false;
2902 : :
2903 : : /* We already checked that permutation is suitable for addsub,
2904 : : so only look at the first element of the parallel. */
2905 : : elt = INTVAL (XVECEXP (XEXP (op, 1), 0, 0));
2906 : :
2907 : : return elt == (swapped ? nunits : 0);
2908 : : }
2909 : :
2910 : : bool
2911 : : addsub_vs_operator (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2912 : : {
2913 : : return (((GET_CODE (op) == VEC_SELECT) && (GET_CODE (XEXP (op, 0)) == VEC_CONCAT)) && (
2914 : : (addsub_vs_operator_1 (op, mode)))) && (
2915 : : (mode == VOIDmode || GET_MODE (op) == mode));
2916 : : }
2917 : :
2918 : : static inline bool
2919 : : addsub_vs_parallel_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2920 : : #line 1903 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2921 : : {
2922 : : int nelt = XVECLEN (op, 0);
2923 : : int elt, i;
2924 : :
2925 : : if (nelt < 2)
2926 : : return false;
2927 : :
2928 : : /* Check that the permutation is suitable for addsub.
2929 : : For example, { 0 9 2 11 4 13 6 15 } or { 8 1 10 3 12 5 14 7 }. */
2930 : : elt = INTVAL (XVECEXP (op, 0, 0));
2931 : : if (elt == 0)
2932 : : {
2933 : : for (i = 1; i < nelt; ++i)
2934 : : if (INTVAL (XVECEXP (op, 0, i)) != (i + (i & 1) * nelt))
2935 : : return false;
2936 : : }
2937 : : else if (elt == nelt)
2938 : : {
2939 : : for (i = 1; i < nelt; ++i)
2940 : : if (INTVAL (XVECEXP (op, 0, i)) != (elt + i - (i & 1) * nelt))
2941 : : return false;
2942 : : }
2943 : : else
2944 : : return false;
2945 : :
2946 : : return true;
2947 : : }
2948 : :
2949 : : bool
2950 : : addsub_vs_parallel (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2951 : : {
2952 : : return (((GET_CODE (op) == PARALLEL) && (GET_CODE (XVECEXP (op, 0, 0)) == CONST_INT)) && (
2953 : : (addsub_vs_parallel_1 (op, mode)))) && (
2954 : : (mode == VOIDmode || GET_MODE (op) == mode));
2955 : : }
2956 : :
2957 : : static inline bool
2958 : : permvar_truncate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2959 : : #line 1935 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2960 : : {
2961 : : int nelt = GET_MODE_NUNITS (mode);
2962 : : int perm[128];
2963 : : int id;
2964 : :
2965 : : if (!INTEGRAL_MODE_P (mode) || !VECTOR_MODE_P (mode))
2966 : : return false;
2967 : :
2968 : : if (nelt < 2)
2969 : : return false;
2970 : :
2971 : : if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
2972 : : return false;
2973 : :
2974 : : id = exact_log2 (nelt);
2975 : :
2976 : : /* Check that the permutation is suitable for pmovz{bw,wd,dq}.
2977 : : For example V16HImode to V8HImode
2978 : : { 0 2 4 6 8 10 12 14 * * * * * * * * }. */
2979 : : for (int i = 0; i != nelt / 2; i++)
2980 : : if ((perm[i] & ((1 << id) - 1)) != i * 2)
2981 : : return false;
2982 : :
2983 : : return true;
2984 : : }
2985 : :
2986 : : bool
2987 : : permvar_truncate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
2988 : : {
2989 : : return ((GET_CODE (op) == MEM) && (
2990 : : (permvar_truncate_operand_1 (op, mode)))) && (
2991 : : (mode == VOIDmode || GET_MODE (op) == mode));
2992 : : }
2993 : :
2994 : : static inline bool
2995 : : pshufb_truncv4siv4hi_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
2996 : : #line 1965 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
2997 : : {
2998 : : int perm[128];
2999 : :
3000 : : if (mode != E_V16QImode)
3001 : : return false;
3002 : :
3003 : : if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
3004 : : return false;
3005 : :
3006 : : /* Check that the permutation is suitable for pmovdw.
3007 : : For example V4SImode to V4HImode
3008 : : { 0 1 4 5 8 9 12 13 * * * * * * * * }.
3009 : : index = i % 2 + (i / 2) * 4. */
3010 : : for (int i = 0; i != 8; i++)
3011 : : {
3012 : : /* if (SRC2[(i * 8)+7] = 1) then DEST[(i*8)+7..(i*8)+0] := 0; */
3013 : : if (perm[i] & 128)
3014 : : return false;
3015 : :
3016 : : if ((perm[i] & 15) != ((i & 1) + (i & 0xFE) * 2))
3017 : : return false;
3018 : : }
3019 : :
3020 : : return true;
3021 : : }
3022 : :
3023 : : bool
3024 : : pshufb_truncv4siv4hi_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3025 : : {
3026 : : return ((GET_CODE (op) == MEM) && (
3027 : : (pshufb_truncv4siv4hi_operand_1 (op, mode)))) && (
3028 : : (mode == VOIDmode || GET_MODE (op) == mode));
3029 : : }
3030 : :
3031 : : static inline bool
3032 : : pshufb_truncv8hiv8qi_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3033 : : #line 1995 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3034 : : {
3035 : : int perm[128];
3036 : :
3037 : : if (mode != E_V16QImode)
3038 : : return false;
3039 : :
3040 : : if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
3041 : : return false;
3042 : :
3043 : : /* Check that the permutation is suitable for pmovwb.
3044 : : For example V16QImode to V8QImode
3045 : : { 0 2 4 6 8 10 12 14 * * * * * * * * }.
3046 : : index = i % 2 + (i / 2) * 4. */
3047 : : for (int i = 0; i != 8; i++)
3048 : : {
3049 : : /* if (SRC2[(i * 8)+7] = 1) then DEST[(i*8)+7..(i*8)+0] := 0; */
3050 : : if (perm[i] & 128)
3051 : : return false;
3052 : :
3053 : : if ((perm[i] & 15) != i * 2)
3054 : : return false;
3055 : : }
3056 : :
3057 : : return true;
3058 : : }
3059 : :
3060 : : bool
3061 : : pshufb_truncv8hiv8qi_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3062 : : {
3063 : : return ((GET_CODE (op) == MEM) && (
3064 : : (pshufb_truncv8hiv8qi_operand_1 (op, mode)))) && (
3065 : : (mode == VOIDmode || GET_MODE (op) == mode));
3066 : : }
3067 : :
3068 : : static inline bool
3069 : : pmovzx_parallel_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3070 : : #line 2026 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3071 : : {
3072 : : int nelt = XVECLEN (op, 0);
3073 : : int elt, i;
3074 : :
3075 : : if (nelt < 2)
3076 : : return false;
3077 : :
3078 : : /* Check that the permutation is suitable for pmovz{bw,wd,dq}.
3079 : : For example { 0 16 1 17 2 18 3 19 4 20 5 21 6 22 7 23 }. */
3080 : : elt = INTVAL (XVECEXP (op, 0, 0));
3081 : : if (elt == 0)
3082 : : {
3083 : : for (i = 1; i < nelt; ++i)
3084 : : if ((i & 1) != 0)
3085 : : {
3086 : : if (INTVAL (XVECEXP (op, 0, i)) < nelt)
3087 : : return false;
3088 : : }
3089 : : else if (INTVAL (XVECEXP (op, 0, i)) != i / 2)
3090 : : return false;
3091 : : }
3092 : : else
3093 : : return false;
3094 : :
3095 : : return true;
3096 : : }
3097 : :
3098 : : bool
3099 : : pmovzx_parallel (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3100 : : {
3101 : : return (((GET_CODE (op) == PARALLEL) && (GET_CODE (XVECEXP (op, 0, 0)) == CONST_INT)) && (
3102 : : (pmovzx_parallel_1 (op, mode)))) && (
3103 : : (mode == VOIDmode || GET_MODE (op) == mode));
3104 : : }
3105 : :
3106 : : static inline bool
3107 : : const_vector_duplicate_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3108 : : #line 2056 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3109 : : {
3110 : : rtx elt = XVECEXP (op, 0, 0);
3111 : : int i, nelt = XVECLEN (op, 0);
3112 : :
3113 : : for (i = 1; i < nelt; ++i)
3114 : : if (!rtx_equal_p (elt, XVECEXP (op, 0, i)))
3115 : : return false;
3116 : : return true;
3117 : : }
3118 : :
3119 : : bool
3120 : : const_vector_duplicate_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3121 : : {
3122 : : return ((GET_CODE (op) == CONST_VECTOR) && (
3123 : : (const_vector_duplicate_operand_1 (op, mode)))) && (
3124 : : (mode == VOIDmode || GET_MODE (op) == mode));
3125 : : }
3126 : :
3127 : : static inline bool
3128 : : avx_vbroadcast_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3129 : : #line 2070 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3130 : : {
3131 : : rtx elt = XVECEXP (op, 0, 0);
3132 : : int i, nelt = XVECLEN (op, 0);
3133 : :
3134 : : /* Don't bother checking there are the right number of operands,
3135 : : merely that they're all identical. */
3136 : : for (i = 1; i < nelt; ++i)
3137 : : if (XVECEXP (op, 0, i) != elt)
3138 : : return false;
3139 : : return true;
3140 : : }
3141 : :
3142 : : bool
3143 : : avx_vbroadcast_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3144 : : {
3145 : : return (((GET_CODE (op) == PARALLEL) && (GET_CODE (XVECEXP (op, 0, 0)) == CONST_INT)) && (
3146 : : (avx_vbroadcast_operand_1 (op, mode)))) && (
3147 : : (mode == VOIDmode || GET_MODE (op) == mode));
3148 : : }
3149 : :
3150 : : static inline bool
3151 : : avx_vbroadcast128_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3152 : : #line 2086 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3153 : : {
3154 : : int i, nelt = XVECLEN (op, 0);
3155 : : int half = nelt / 2;
3156 : :
3157 : : for (i = 0; i < nelt; ++i)
3158 : : {
3159 : : int index = INTVAL (XVECEXP (op, 0, i));
3160 : : if ((i < half && index != i)
3161 : : || (i >= half && index != (i - half)))
3162 : : return false;
3163 : : }
3164 : :
3165 : : return true;
3166 : : }
3167 : :
3168 : : bool
3169 : : avx_vbroadcast128_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3170 : : {
3171 : : return (((GET_CODE (op) == PARALLEL) && (GET_CODE (XVECEXP (op, 0, 0)) == CONST_INT)) && (
3172 : : (avx_vbroadcast128_operand_1 (op, mode)))) && (
3173 : : (mode == VOIDmode || GET_MODE (op) == mode));
3174 : : }
3175 : :
3176 : : static inline bool
3177 : : palignr_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3178 : : #line 2105 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3179 : : {
3180 : : int elt = INTVAL (XVECEXP (op, 0, 0));
3181 : : int i, nelt = XVECLEN (op, 0);
3182 : :
3183 : : /* Check that an order in the permutation is suitable for palignr.
3184 : : For example, {5 6 7 0 1 2 3 4} is "palignr 5, xmm, xmm". */
3185 : : for (i = 1; i < nelt; ++i)
3186 : : if (INTVAL (XVECEXP (op, 0, i)) != ((elt + i) % nelt))
3187 : : return false;
3188 : : return true;
3189 : : }
3190 : :
3191 : : bool
3192 : : palignr_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3193 : : {
3194 : : return (((GET_CODE (op) == PARALLEL) && (GET_CODE (XVECEXP (op, 0, 0)) == CONST_INT)) && (
3195 : : (palignr_operand_1 (op, mode)))) && (
3196 : : (mode == VOIDmode || GET_MODE (op) == mode));
3197 : : }
3198 : :
3199 : : static inline bool
3200 : : avx2_pblendw_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3201 : : #line 2120 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3202 : : {
3203 : : HOST_WIDE_INT val = INTVAL (op);
3204 : : HOST_WIDE_INT low = val & 0xff;
3205 : : return val == ((low << 8) | low);
3206 : : }
3207 : :
3208 : : bool
3209 : : avx2_pblendw_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3210 : : {
3211 : : return (GET_CODE (op) == CONST_INT) && (
3212 : : (avx2_pblendw_operand_1 (op, mode)));
3213 : : }
3214 : :
3215 : : bool
3216 : : general_vector_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3217 : : {
3218 : : return (vector_operand (op, mode)) || ((GET_CODE (op) == CONST_VECTOR) && (
3219 : : (mode == VOIDmode || GET_MODE (op) == mode)));
3220 : : }
3221 : :
3222 : : bool
3223 : : register_or_constm1_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3224 : : {
3225 : : return (register_operand (op, mode)) || (((GET_CODE (op) == CONST_INT) && (
3226 : : #line 2135 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3227 : : (op == constm1_rtx))) && (
3228 : : (mode == VOIDmode || GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)));
3229 : : }
3230 : :
3231 : : static inline bool
3232 : : save_multiple_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3233 : : #line 2141 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3234 : : {
3235 : : const unsigned len = XVECLEN (op, 0);
3236 : : unsigned i;
3237 : :
3238 : : /* Starting from end of vector, count register saves. */
3239 : : for (i = 0; i < len; ++i)
3240 : : {
3241 : : rtx src, dest, addr;
3242 : : rtx e = XVECEXP (op, 0, len - 1 - i);
3243 : :
3244 : : if (GET_CODE (e) != SET)
3245 : : break;
3246 : :
3247 : : src = SET_SRC (e);
3248 : : dest = SET_DEST (e);
3249 : :
3250 : : if (!REG_P (src) || !MEM_P (dest))
3251 : : break;
3252 : :
3253 : : addr = XEXP (dest, 0);
3254 : :
3255 : : /* Good if dest address is in RAX. */
3256 : : if (REG_P (addr) && REGNO (addr) == AX_REG)
3257 : : continue;
3258 : :
3259 : : /* Good if dest address is offset of RAX. */
3260 : : if (GET_CODE (addr) == PLUS
3261 : : && REG_P (XEXP (addr, 0))
3262 : : && REGNO (XEXP (addr, 0)) == AX_REG)
3263 : : continue;
3264 : :
3265 : : break;
3266 : : }
3267 : : return (i >= 12 && i <= 18);
3268 : : }
3269 : :
3270 : : bool
3271 : : save_multiple (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3272 : : {
3273 : : return ((GET_CODE (op) == PARALLEL) && (
3274 : : (save_multiple_1 (op, mode)))) && (
3275 : : (mode == VOIDmode || GET_MODE (op) == mode));
3276 : : }
3277 : :
3278 : : static inline bool
3279 : : restore_multiple_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3280 : : #line 2182 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3281 : : {
3282 : : const unsigned len = XVECLEN (op, 0);
3283 : : unsigned i;
3284 : :
3285 : : /* Starting from end of vector, count register restores. */
3286 : : for (i = 0; i < len; ++i)
3287 : : {
3288 : : rtx src, dest, addr;
3289 : : rtx e = XVECEXP (op, 0, len - 1 - i);
3290 : :
3291 : : if (GET_CODE (e) != SET)
3292 : : break;
3293 : :
3294 : : src = SET_SRC (e);
3295 : : dest = SET_DEST (e);
3296 : :
3297 : : if (!MEM_P (src) || !REG_P (dest))
3298 : : break;
3299 : :
3300 : : addr = XEXP (src, 0);
3301 : :
3302 : : /* Good if src address is in RSI. */
3303 : : if (REG_P (addr) && REGNO (addr) == SI_REG)
3304 : : continue;
3305 : :
3306 : : /* Good if src address is offset of RSI. */
3307 : : if (GET_CODE (addr) == PLUS
3308 : : && REG_P (XEXP (addr, 0))
3309 : : && REGNO (XEXP (addr, 0)) == SI_REG)
3310 : : continue;
3311 : :
3312 : : break;
3313 : : }
3314 : : return (i >= 12 && i <= 18);
3315 : : }
3316 : :
3317 : : bool
3318 : : restore_multiple (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3319 : : {
3320 : : return ((GET_CODE (op) == PARALLEL) && (
3321 : : (restore_multiple_1 (op, mode)))) && (
3322 : : (mode == VOIDmode || GET_MODE (op) == mode));
3323 : : }
3324 : :
3325 : : static inline bool
3326 : : encodekey128_operation_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3327 : : #line 2221 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3328 : : {
3329 : : unsigned i;
3330 : : rtx elt;
3331 : :
3332 : : if (XVECLEN (op, 0) != 8)
3333 : : return false;
3334 : :
3335 : : for(i = 0; i < 3; i++)
3336 : : {
3337 : : elt = XVECEXP (op, 0, i + 1);
3338 : : if (GET_CODE (elt) != SET
3339 : : || GET_CODE (SET_DEST (elt)) != REG
3340 : : || GET_MODE (SET_DEST (elt)) != V2DImode
3341 : : || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
3342 : : || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
3343 : : || GET_MODE (SET_SRC (elt)) != V2DImode
3344 : : || XVECLEN(SET_SRC (elt), 0) != 1
3345 : : || XVECEXP(SET_SRC (elt), 0, 0) != const0_rtx)
3346 : : return false;
3347 : : }
3348 : :
3349 : : for(i = 4; i < 7; i++)
3350 : : {
3351 : : elt = XVECEXP (op, 0, i);
3352 : : if (GET_CODE (elt) != CLOBBER
3353 : : || GET_MODE (elt) != VOIDmode
3354 : : || GET_CODE (XEXP (elt, 0)) != REG
3355 : : || GET_MODE (XEXP (elt, 0)) != V2DImode
3356 : : || REGNO (XEXP (elt, 0)) != GET_SSE_REGNO (i))
3357 : : return false;
3358 : : }
3359 : :
3360 : : elt = XVECEXP (op, 0, 7);
3361 : : if (GET_CODE (elt) != CLOBBER
3362 : : || GET_MODE (elt) != VOIDmode
3363 : : || GET_CODE (XEXP (elt, 0)) != REG
3364 : : || GET_MODE (XEXP (elt, 0)) != CCmode
3365 : : || REGNO (XEXP (elt, 0)) != FLAGS_REG)
3366 : : return false;
3367 : : return true;
3368 : : }
3369 : :
3370 : : bool
3371 : : encodekey128_operation (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3372 : : {
3373 : : return ((GET_CODE (op) == PARALLEL) && (
3374 : : (encodekey128_operation_1 (op, mode)))) && (
3375 : : (mode == VOIDmode || GET_MODE (op) == mode));
3376 : : }
3377 : :
3378 : : static inline bool
3379 : : encodekey256_operation_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3380 : : #line 2265 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3381 : : {
3382 : : unsigned i;
3383 : : rtx elt;
3384 : :
3385 : : if (XVECLEN (op, 0) != 9)
3386 : : return false;
3387 : :
3388 : : elt = SET_SRC (XVECEXP (op, 0, 0));
3389 : : elt = XVECEXP (elt, 0, 2);
3390 : : if (!REG_P (elt)
3391 : : || REGNO(elt) != GET_SSE_REGNO (1))
3392 : : return false;
3393 : :
3394 : : for(i = 0; i < 4; i++)
3395 : : {
3396 : : elt = XVECEXP (op, 0, i + 1);
3397 : : if (GET_CODE (elt) != SET
3398 : : || GET_CODE (SET_DEST (elt)) != REG
3399 : : || GET_MODE (SET_DEST (elt)) != V2DImode
3400 : : || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
3401 : : || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
3402 : : || GET_MODE (SET_SRC (elt)) != V2DImode
3403 : : || XVECLEN(SET_SRC (elt), 0) != 1
3404 : : || XVECEXP(SET_SRC (elt), 0, 0) != const0_rtx)
3405 : : return false;
3406 : : }
3407 : :
3408 : : for(i = 4; i < 7; i++)
3409 : : {
3410 : : elt = XVECEXP (op, 0, i + 1);
3411 : : if (GET_CODE (elt) != CLOBBER
3412 : : || GET_MODE (elt) != VOIDmode
3413 : : || GET_CODE (XEXP (elt, 0)) != REG
3414 : : || GET_MODE (XEXP (elt, 0)) != V2DImode
3415 : : || REGNO (XEXP (elt, 0)) != GET_SSE_REGNO (i))
3416 : : return false;
3417 : : }
3418 : :
3419 : : elt = XVECEXP (op, 0, 8);
3420 : : if (GET_CODE (elt) != CLOBBER
3421 : : || GET_MODE (elt) != VOIDmode
3422 : : || GET_CODE (XEXP (elt, 0)) != REG
3423 : : || GET_MODE (XEXP (elt, 0)) != CCmode
3424 : : || REGNO (XEXP (elt, 0)) != FLAGS_REG)
3425 : : return false;
3426 : : return true;
3427 : : }
3428 : :
3429 : : bool
3430 : : encodekey256_operation (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3431 : : {
3432 : : return ((GET_CODE (op) == PARALLEL) && (
3433 : : (encodekey256_operation_1 (op, mode)))) && (
3434 : : (mode == VOIDmode || GET_MODE (op) == mode));
3435 : : }
3436 : :
3437 : : static inline bool
3438 : : aeswidekl_operation_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3439 : : #line 2316 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3440 : : {
3441 : : unsigned i;
3442 : : rtx elt;
3443 : :
3444 : : for (i = 0; i < 8; i++)
3445 : : {
3446 : : elt = XVECEXP (op, 0, i + 1);
3447 : : if (GET_CODE (elt) != SET
3448 : : || GET_CODE (SET_DEST (elt)) != REG
3449 : : || GET_MODE (SET_DEST (elt)) != V2DImode
3450 : : || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
3451 : : || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
3452 : : || GET_MODE (SET_SRC (elt)) != V2DImode
3453 : : || XVECLEN (SET_SRC (elt), 0) != 1
3454 : : || !REG_P (XVECEXP (SET_SRC (elt), 0, 0))
3455 : : || REGNO (XVECEXP (SET_SRC (elt), 0, 0)) != GET_SSE_REGNO (i))
3456 : : return false;
3457 : : }
3458 : : return true;
3459 : : }
3460 : :
3461 : : bool
3462 : : aeswidekl_operation (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3463 : : {
3464 : : return ((GET_CODE (op) == PARALLEL) && (
3465 : : (aeswidekl_operation_1 (op, mode)))) && (
3466 : : (mode == VOIDmode || GET_MODE (op) == mode));
3467 : : }
3468 : :
3469 : : static inline bool
3470 : : apx_evex_memory_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3471 : : #line 2343 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3472 : : {
3473 : : /* OK if immediate operand size < 4 bytes. */
3474 : : if (GET_MODE_SIZE (mode) < 4)
3475 : : return true;
3476 : :
3477 : : bool default_addr = ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (op));
3478 : : bool address_size_prefix = TARGET_X32 && Pmode == SImode;
3479 : :
3480 : : struct ix86_address parts;
3481 : : int ok;
3482 : :
3483 : : op = XEXP (op, 0);
3484 : : ok = ix86_decompose_address (op, &parts);
3485 : : gcc_assert (ok);
3486 : :
3487 : : if (default_addr)
3488 : : {
3489 : : /* Default address space. */
3490 : :
3491 : : /* Not OK with address size prefix, index register and disp. */
3492 : : if (address_size_prefix
3493 : : && parts.index
3494 : : && parts.disp
3495 : : && parts.disp != const0_rtx)
3496 : : return false;
3497 : : }
3498 : : else
3499 : : {
3500 : : /* Non-default address space. */
3501 : :
3502 : : /* Not OK without base register. */
3503 : : if (!parts.base)
3504 : : return false;
3505 : :
3506 : : /* Not OK with disp and address size prefix. */
3507 : : if (address_size_prefix && parts.disp)
3508 : : return false;
3509 : : }
3510 : :
3511 : : return true;
3512 : : }
3513 : :
3514 : : bool
3515 : : apx_evex_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3516 : : {
3517 : : return (memory_operand (op, mode)) && (
3518 : : (apx_evex_memory_operand_1 (op, mode)));
3519 : : }
3520 : :
3521 : : static inline bool
3522 : : apx_evex_add_memory_operand_1 (rtx op ATTRIBUTE_UNUSED, machine_mode mode ATTRIBUTE_UNUSED)
3523 : : #line 2391 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md"
3524 : : {
3525 : : /* OK if "add %reg1, name@gottpoff(%rip), %reg2" or
3526 : : "{nf} add name@gottpoff(%rip), %reg1" are supported. */
3527 : : if (HAVE_AS_R_X86_64_CODE_6_GOTTPOFF)
3528 : : return true;
3529 : :
3530 : : op = XEXP (op, 0);
3531 : :
3532 : : /* Disallow APX EVEX-encoded ADD with UNSPEC_GOTNTPOFF. */
3533 : : if (GET_CODE (op) == CONST
3534 : : && GET_CODE (XEXP (op, 0)) == UNSPEC
3535 : : && XINT (XEXP (op, 0), 1) == UNSPEC_GOTNTPOFF)
3536 : : return false;
3537 : :
3538 : : return true;
3539 : : }
3540 : :
3541 : : bool
3542 : : apx_evex_add_memory_operand (rtx op, machine_mode mode ATTRIBUTE_UNUSED)
3543 : : {
3544 : : return (memory_operand (op, mode)) && (
3545 : : (apx_evex_add_memory_operand_1 (op, mode)));
3546 : : }
3547 : :
3548 : : enum constraint_num
3549 : : lookup_constraint_1 (const char *str)
3550 : : {
3551 : : switch (str[0])
3552 : : {
3553 : : case ':':
3554 : : return CONSTRAINT__c;
3555 : : case '<':
3556 : : return CONSTRAINT__l;
3557 : : case '>':
3558 : : return CONSTRAINT__g;
3559 : : case 'A':
3560 : : return CONSTRAINT_A;
3561 : : case 'B':
3562 : : if (str[1] == 'g')
3563 : : return CONSTRAINT_Bg;
3564 : : if (str[1] == 'm')
3565 : : return CONSTRAINT_Bm;
3566 : : if (str[1] == 'k')
3567 : : return CONSTRAINT_Bk;
3568 : : if (str[1] == 'n')
3569 : : return CONSTRAINT_Bn;
3570 : : if (str[1] == 'r')
3571 : : return CONSTRAINT_Br;
3572 : : if (str[1] == 's')
3573 : : return CONSTRAINT_Bs;
3574 : : if (str[1] == 'w')
3575 : : return CONSTRAINT_Bw;
3576 : : if (str[1] == 'z')
3577 : : return CONSTRAINT_Bz;
3578 : : if (str[1] == 'C')
3579 : : return CONSTRAINT_BC;
3580 : : if (str[1] == 'F')
3581 : : return CONSTRAINT_BF;
3582 : : if (str[1] == 'H')
3583 : : return CONSTRAINT_BH;
3584 : : if (str[1] == 'M')
3585 : : return CONSTRAINT_BM;
3586 : : if (str[1] == 'f')
3587 : : return CONSTRAINT_Bf;
3588 : : break;
3589 : : case 'C':
3590 : : return CONSTRAINT_C;
3591 : : case 'D':
3592 : : return CONSTRAINT_D;
3593 : : case 'E':
3594 : : return CONSTRAINT_E;
3595 : : case 'F':
3596 : : return CONSTRAINT_F;
3597 : : case 'G':
3598 : : return CONSTRAINT_G;
3599 : : case 'I':
3600 : : return CONSTRAINT_I;
3601 : : case 'J':
3602 : : return CONSTRAINT_J;
3603 : : case 'K':
3604 : : return CONSTRAINT_K;
3605 : : case 'L':
3606 : : return CONSTRAINT_L;
3607 : : case 'M':
3608 : : return CONSTRAINT_M;
3609 : : case 'N':
3610 : : return CONSTRAINT_N;
3611 : : case 'O':
3612 : : return CONSTRAINT_O;
3613 : : case 'Q':
3614 : : return CONSTRAINT_Q;
3615 : : case 'R':
3616 : : return CONSTRAINT_R;
3617 : : case 'S':
3618 : : return CONSTRAINT_S;
3619 : : case 'T':
3620 : : if (str[1] == 's')
3621 : : return CONSTRAINT_Ts;
3622 : : if (str[1] == 'v')
3623 : : return CONSTRAINT_Tv;
3624 : : break;
3625 : : case 'U':
3626 : : return CONSTRAINT_U;
3627 : : case 'V':
3628 : : return CONSTRAINT_V;
3629 : : case 'W':
3630 : : if (str[1] == 'c')
3631 : : return CONSTRAINT_Wc;
3632 : : if (str[1] == 'w')
3633 : : return CONSTRAINT_Ww;
3634 : : if (str[1] == 'e')
3635 : : return CONSTRAINT_We;
3636 : : if (str[1] == 'z')
3637 : : return CONSTRAINT_Wz;
3638 : : if (str[1] == 'd')
3639 : : return CONSTRAINT_Wd;
3640 : : if (str[1] == 'f')
3641 : : return CONSTRAINT_Wf;
3642 : : if (str[1] == 's')
3643 : : return CONSTRAINT_Ws;
3644 : : if (str[1] == 'b')
3645 : : return CONSTRAINT_Wb;
3646 : : break;
3647 : : case 'X':
3648 : : return CONSTRAINT_X;
3649 : : case 'Y':
3650 : : if (str[1] == 'z')
3651 : : return CONSTRAINT_Yz;
3652 : : if (str[1] == 'd')
3653 : : return CONSTRAINT_Yd;
3654 : : if (str[1] == 'p')
3655 : : return CONSTRAINT_Yp;
3656 : : if (str[1] == 'a')
3657 : : return CONSTRAINT_Ya;
3658 : : if (str[1] == 'b')
3659 : : return CONSTRAINT_Yb;
3660 : : if (str[1] == 'f')
3661 : : return CONSTRAINT_Yf;
3662 : : if (str[1] == 'r')
3663 : : return CONSTRAINT_Yr;
3664 : : if (str[1] == 'v')
3665 : : return CONSTRAINT_Yv;
3666 : : if (str[1] == 'w')
3667 : : return CONSTRAINT_Yw;
3668 : : if (str[1] == 'W')
3669 : : return CONSTRAINT_YW;
3670 : : if (str[1] == 'k')
3671 : : return CONSTRAINT_Yk;
3672 : : break;
3673 : : case 'Z':
3674 : : return CONSTRAINT_Z;
3675 : : case 'a':
3676 : : return CONSTRAINT_a;
3677 : : case 'b':
3678 : : return CONSTRAINT_b;
3679 : : case 'c':
3680 : : return CONSTRAINT_c;
3681 : : case 'd':
3682 : : return CONSTRAINT_d;
3683 : : case 'e':
3684 : : return CONSTRAINT_e;
3685 : : case 'f':
3686 : : return CONSTRAINT_f;
3687 : : case 'i':
3688 : : return CONSTRAINT_i;
3689 : : case 'j':
3690 : : if (str[1] == 'r')
3691 : : return CONSTRAINT_jr;
3692 : : if (str[1] == 'm')
3693 : : return CONSTRAINT_jm;
3694 : : if (str[1] == '<')
3695 : : return CONSTRAINT_j_l;
3696 : : if (str[1] == '>')
3697 : : return CONSTRAINT_j_g;
3698 : : if (str[1] == 'o')
3699 : : return CONSTRAINT_jo;
3700 : : if (str[1] == 'V')
3701 : : return CONSTRAINT_jV;
3702 : : if (str[1] == 'p')
3703 : : return CONSTRAINT_jp;
3704 : : if (str[1] == 'a')
3705 : : return CONSTRAINT_ja;
3706 : : if (str[1] == 'b')
3707 : : return CONSTRAINT_jb;
3708 : : if (str[1] == 'c')
3709 : : return CONSTRAINT_jc;
3710 : : if (str[1] == 'e')
3711 : : return CONSTRAINT_je;
3712 : : if (str[1] == 'M')
3713 : : return CONSTRAINT_jM;
3714 : : if (str[1] == 'O')
3715 : : return CONSTRAINT_jO;
3716 : : if (str[1] == 'R')
3717 : : return CONSTRAINT_jR;
3718 : : break;
3719 : : case 'k':
3720 : : return CONSTRAINT_k;
3721 : : case 'l':
3722 : : return CONSTRAINT_l;
3723 : : case 'm':
3724 : : return CONSTRAINT_m;
3725 : : case 'n':
3726 : : return CONSTRAINT_n;
3727 : : case 'o':
3728 : : return CONSTRAINT_o;
3729 : : case 'p':
3730 : : return CONSTRAINT_p;
3731 : : case 'q':
3732 : : return CONSTRAINT_q;
3733 : : case 'r':
3734 : : return CONSTRAINT_r;
3735 : : case 's':
3736 : : return CONSTRAINT_s;
3737 : : case 't':
3738 : : return CONSTRAINT_t;
3739 : : case 'u':
3740 : : return CONSTRAINT_u;
3741 : : case 'v':
3742 : : return CONSTRAINT_v;
3743 : : case 'x':
3744 : : return CONSTRAINT_x;
3745 : : case 'y':
3746 : : return CONSTRAINT_y;
3747 : : default: break;
3748 : : }
3749 : : return CONSTRAINT__UNKNOWN;
3750 : : }
3751 : :
3752 : : const unsigned char lookup_constraint_array[] = {
3753 : : CONSTRAINT__UNKNOWN,
3754 : : CONSTRAINT__UNKNOWN,
3755 : : CONSTRAINT__UNKNOWN,
3756 : : CONSTRAINT__UNKNOWN,
3757 : : CONSTRAINT__UNKNOWN,
3758 : : CONSTRAINT__UNKNOWN,
3759 : : CONSTRAINT__UNKNOWN,
3760 : : CONSTRAINT__UNKNOWN,
3761 : : CONSTRAINT__UNKNOWN,
3762 : : CONSTRAINT__UNKNOWN,
3763 : : CONSTRAINT__UNKNOWN,
3764 : : CONSTRAINT__UNKNOWN,
3765 : : CONSTRAINT__UNKNOWN,
3766 : : CONSTRAINT__UNKNOWN,
3767 : : CONSTRAINT__UNKNOWN,
3768 : : CONSTRAINT__UNKNOWN,
3769 : : CONSTRAINT__UNKNOWN,
3770 : : CONSTRAINT__UNKNOWN,
3771 : : CONSTRAINT__UNKNOWN,
3772 : : CONSTRAINT__UNKNOWN,
3773 : : CONSTRAINT__UNKNOWN,
3774 : : CONSTRAINT__UNKNOWN,
3775 : : CONSTRAINT__UNKNOWN,
3776 : : CONSTRAINT__UNKNOWN,
3777 : : CONSTRAINT__UNKNOWN,
3778 : : CONSTRAINT__UNKNOWN,
3779 : : CONSTRAINT__UNKNOWN,
3780 : : CONSTRAINT__UNKNOWN,
3781 : : CONSTRAINT__UNKNOWN,
3782 : : CONSTRAINT__UNKNOWN,
3783 : : CONSTRAINT__UNKNOWN,
3784 : : CONSTRAINT__UNKNOWN,
3785 : : CONSTRAINT__UNKNOWN,
3786 : : CONSTRAINT__UNKNOWN,
3787 : : CONSTRAINT__UNKNOWN,
3788 : : CONSTRAINT__UNKNOWN,
3789 : : CONSTRAINT__UNKNOWN,
3790 : : CONSTRAINT__UNKNOWN,
3791 : : CONSTRAINT__UNKNOWN,
3792 : : CONSTRAINT__UNKNOWN,
3793 : : CONSTRAINT__UNKNOWN,
3794 : : CONSTRAINT__UNKNOWN,
3795 : : CONSTRAINT__UNKNOWN,
3796 : : CONSTRAINT__UNKNOWN,
3797 : : CONSTRAINT__UNKNOWN,
3798 : : CONSTRAINT__UNKNOWN,
3799 : : CONSTRAINT__UNKNOWN,
3800 : : CONSTRAINT__UNKNOWN,
3801 : : CONSTRAINT__UNKNOWN,
3802 : : CONSTRAINT__UNKNOWN,
3803 : : CONSTRAINT__UNKNOWN,
3804 : : CONSTRAINT__UNKNOWN,
3805 : : CONSTRAINT__UNKNOWN,
3806 : : CONSTRAINT__UNKNOWN,
3807 : : CONSTRAINT__UNKNOWN,
3808 : : CONSTRAINT__UNKNOWN,
3809 : : CONSTRAINT__UNKNOWN,
3810 : : CONSTRAINT__UNKNOWN,
3811 : : MIN ((int) CONSTRAINT__c, (int) UCHAR_MAX),
3812 : : CONSTRAINT__UNKNOWN,
3813 : : MIN ((int) CONSTRAINT__l, (int) UCHAR_MAX),
3814 : : CONSTRAINT__UNKNOWN,
3815 : : MIN ((int) CONSTRAINT__g, (int) UCHAR_MAX),
3816 : : CONSTRAINT__UNKNOWN,
3817 : : CONSTRAINT__UNKNOWN,
3818 : : MIN ((int) CONSTRAINT_A, (int) UCHAR_MAX),
3819 : : UCHAR_MAX,
3820 : : MIN ((int) CONSTRAINT_C, (int) UCHAR_MAX),
3821 : : MIN ((int) CONSTRAINT_D, (int) UCHAR_MAX),
3822 : : MIN ((int) CONSTRAINT_E, (int) UCHAR_MAX),
3823 : : MIN ((int) CONSTRAINT_F, (int) UCHAR_MAX),
3824 : : MIN ((int) CONSTRAINT_G, (int) UCHAR_MAX),
3825 : : CONSTRAINT__UNKNOWN,
3826 : : MIN ((int) CONSTRAINT_I, (int) UCHAR_MAX),
3827 : : MIN ((int) CONSTRAINT_J, (int) UCHAR_MAX),
3828 : : MIN ((int) CONSTRAINT_K, (int) UCHAR_MAX),
3829 : : MIN ((int) CONSTRAINT_L, (int) UCHAR_MAX),
3830 : : MIN ((int) CONSTRAINT_M, (int) UCHAR_MAX),
3831 : : MIN ((int) CONSTRAINT_N, (int) UCHAR_MAX),
3832 : : MIN ((int) CONSTRAINT_O, (int) UCHAR_MAX),
3833 : : CONSTRAINT__UNKNOWN,
3834 : : MIN ((int) CONSTRAINT_Q, (int) UCHAR_MAX),
3835 : : MIN ((int) CONSTRAINT_R, (int) UCHAR_MAX),
3836 : : MIN ((int) CONSTRAINT_S, (int) UCHAR_MAX),
3837 : : UCHAR_MAX,
3838 : : MIN ((int) CONSTRAINT_U, (int) UCHAR_MAX),
3839 : : MIN ((int) CONSTRAINT_V, (int) UCHAR_MAX),
3840 : : UCHAR_MAX,
3841 : : MIN ((int) CONSTRAINT_X, (int) UCHAR_MAX),
3842 : : UCHAR_MAX,
3843 : : MIN ((int) CONSTRAINT_Z, (int) UCHAR_MAX),
3844 : : CONSTRAINT__UNKNOWN,
3845 : : CONSTRAINT__UNKNOWN,
3846 : : CONSTRAINT__UNKNOWN,
3847 : : CONSTRAINT__UNKNOWN,
3848 : : CONSTRAINT__UNKNOWN,
3849 : : CONSTRAINT__UNKNOWN,
3850 : : MIN ((int) CONSTRAINT_a, (int) UCHAR_MAX),
3851 : : MIN ((int) CONSTRAINT_b, (int) UCHAR_MAX),
3852 : : MIN ((int) CONSTRAINT_c, (int) UCHAR_MAX),
3853 : : MIN ((int) CONSTRAINT_d, (int) UCHAR_MAX),
3854 : : MIN ((int) CONSTRAINT_e, (int) UCHAR_MAX),
3855 : : MIN ((int) CONSTRAINT_f, (int) UCHAR_MAX),
3856 : : CONSTRAINT__UNKNOWN,
3857 : : CONSTRAINT__UNKNOWN,
3858 : : MIN ((int) CONSTRAINT_i, (int) UCHAR_MAX),
3859 : : UCHAR_MAX,
3860 : : MIN ((int) CONSTRAINT_k, (int) UCHAR_MAX),
3861 : : MIN ((int) CONSTRAINT_l, (int) UCHAR_MAX),
3862 : : MIN ((int) CONSTRAINT_m, (int) UCHAR_MAX),
3863 : : MIN ((int) CONSTRAINT_n, (int) UCHAR_MAX),
3864 : : MIN ((int) CONSTRAINT_o, (int) UCHAR_MAX),
3865 : : MIN ((int) CONSTRAINT_p, (int) UCHAR_MAX),
3866 : : MIN ((int) CONSTRAINT_q, (int) UCHAR_MAX),
3867 : : MIN ((int) CONSTRAINT_r, (int) UCHAR_MAX),
3868 : : MIN ((int) CONSTRAINT_s, (int) UCHAR_MAX),
3869 : : MIN ((int) CONSTRAINT_t, (int) UCHAR_MAX),
3870 : : MIN ((int) CONSTRAINT_u, (int) UCHAR_MAX),
3871 : : MIN ((int) CONSTRAINT_v, (int) UCHAR_MAX),
3872 : : CONSTRAINT__UNKNOWN,
3873 : : MIN ((int) CONSTRAINT_x, (int) UCHAR_MAX),
3874 : : MIN ((int) CONSTRAINT_y, (int) UCHAR_MAX),
3875 : : CONSTRAINT__UNKNOWN,
3876 : : CONSTRAINT__UNKNOWN,
3877 : : CONSTRAINT__UNKNOWN,
3878 : : CONSTRAINT__UNKNOWN,
3879 : : CONSTRAINT__UNKNOWN,
3880 : : CONSTRAINT__UNKNOWN,
3881 : : CONSTRAINT__UNKNOWN,
3882 : : CONSTRAINT__UNKNOWN,
3883 : : CONSTRAINT__UNKNOWN,
3884 : : CONSTRAINT__UNKNOWN,
3885 : : CONSTRAINT__UNKNOWN,
3886 : : CONSTRAINT__UNKNOWN,
3887 : : CONSTRAINT__UNKNOWN,
3888 : : CONSTRAINT__UNKNOWN,
3889 : : CONSTRAINT__UNKNOWN,
3890 : : CONSTRAINT__UNKNOWN,
3891 : : CONSTRAINT__UNKNOWN,
3892 : : CONSTRAINT__UNKNOWN,
3893 : : CONSTRAINT__UNKNOWN,
3894 : : CONSTRAINT__UNKNOWN,
3895 : : CONSTRAINT__UNKNOWN,
3896 : : CONSTRAINT__UNKNOWN,
3897 : : CONSTRAINT__UNKNOWN,
3898 : : CONSTRAINT__UNKNOWN,
3899 : : CONSTRAINT__UNKNOWN,
3900 : : CONSTRAINT__UNKNOWN,
3901 : : CONSTRAINT__UNKNOWN,
3902 : : CONSTRAINT__UNKNOWN,
3903 : : CONSTRAINT__UNKNOWN,
3904 : : CONSTRAINT__UNKNOWN,
3905 : : CONSTRAINT__UNKNOWN,
3906 : : CONSTRAINT__UNKNOWN,
3907 : : CONSTRAINT__UNKNOWN,
3908 : : CONSTRAINT__UNKNOWN,
3909 : : CONSTRAINT__UNKNOWN,
3910 : : CONSTRAINT__UNKNOWN,
3911 : : CONSTRAINT__UNKNOWN,
3912 : : CONSTRAINT__UNKNOWN,
3913 : : CONSTRAINT__UNKNOWN,
3914 : : CONSTRAINT__UNKNOWN,
3915 : : CONSTRAINT__UNKNOWN,
3916 : : CONSTRAINT__UNKNOWN,
3917 : : CONSTRAINT__UNKNOWN,
3918 : : CONSTRAINT__UNKNOWN,
3919 : : CONSTRAINT__UNKNOWN,
3920 : : CONSTRAINT__UNKNOWN,
3921 : : CONSTRAINT__UNKNOWN,
3922 : : CONSTRAINT__UNKNOWN,
3923 : : CONSTRAINT__UNKNOWN,
3924 : : CONSTRAINT__UNKNOWN,
3925 : : CONSTRAINT__UNKNOWN,
3926 : : CONSTRAINT__UNKNOWN,
3927 : : CONSTRAINT__UNKNOWN,
3928 : : CONSTRAINT__UNKNOWN,
3929 : : CONSTRAINT__UNKNOWN,
3930 : : CONSTRAINT__UNKNOWN,
3931 : : CONSTRAINT__UNKNOWN,
3932 : : CONSTRAINT__UNKNOWN,
3933 : : CONSTRAINT__UNKNOWN,
3934 : : CONSTRAINT__UNKNOWN,
3935 : : CONSTRAINT__UNKNOWN,
3936 : : CONSTRAINT__UNKNOWN,
3937 : : CONSTRAINT__UNKNOWN,
3938 : : CONSTRAINT__UNKNOWN,
3939 : : CONSTRAINT__UNKNOWN,
3940 : : CONSTRAINT__UNKNOWN,
3941 : : CONSTRAINT__UNKNOWN,
3942 : : CONSTRAINT__UNKNOWN,
3943 : : CONSTRAINT__UNKNOWN,
3944 : : CONSTRAINT__UNKNOWN,
3945 : : CONSTRAINT__UNKNOWN,
3946 : : CONSTRAINT__UNKNOWN,
3947 : : CONSTRAINT__UNKNOWN,
3948 : : CONSTRAINT__UNKNOWN,
3949 : : CONSTRAINT__UNKNOWN,
3950 : : CONSTRAINT__UNKNOWN,
3951 : : CONSTRAINT__UNKNOWN,
3952 : : CONSTRAINT__UNKNOWN,
3953 : : CONSTRAINT__UNKNOWN,
3954 : : CONSTRAINT__UNKNOWN,
3955 : : CONSTRAINT__UNKNOWN,
3956 : : CONSTRAINT__UNKNOWN,
3957 : : CONSTRAINT__UNKNOWN,
3958 : : CONSTRAINT__UNKNOWN,
3959 : : CONSTRAINT__UNKNOWN,
3960 : : CONSTRAINT__UNKNOWN,
3961 : : CONSTRAINT__UNKNOWN,
3962 : : CONSTRAINT__UNKNOWN,
3963 : : CONSTRAINT__UNKNOWN,
3964 : : CONSTRAINT__UNKNOWN,
3965 : : CONSTRAINT__UNKNOWN,
3966 : : CONSTRAINT__UNKNOWN,
3967 : : CONSTRAINT__UNKNOWN,
3968 : : CONSTRAINT__UNKNOWN,
3969 : : CONSTRAINT__UNKNOWN,
3970 : : CONSTRAINT__UNKNOWN,
3971 : : CONSTRAINT__UNKNOWN,
3972 : : CONSTRAINT__UNKNOWN,
3973 : : CONSTRAINT__UNKNOWN,
3974 : : CONSTRAINT__UNKNOWN,
3975 : : CONSTRAINT__UNKNOWN,
3976 : : CONSTRAINT__UNKNOWN,
3977 : : CONSTRAINT__UNKNOWN,
3978 : : CONSTRAINT__UNKNOWN,
3979 : : CONSTRAINT__UNKNOWN,
3980 : : CONSTRAINT__UNKNOWN,
3981 : : CONSTRAINT__UNKNOWN,
3982 : : CONSTRAINT__UNKNOWN,
3983 : : CONSTRAINT__UNKNOWN,
3984 : : CONSTRAINT__UNKNOWN,
3985 : : CONSTRAINT__UNKNOWN,
3986 : : CONSTRAINT__UNKNOWN,
3987 : : CONSTRAINT__UNKNOWN,
3988 : : CONSTRAINT__UNKNOWN,
3989 : : CONSTRAINT__UNKNOWN,
3990 : : CONSTRAINT__UNKNOWN,
3991 : : CONSTRAINT__UNKNOWN,
3992 : : CONSTRAINT__UNKNOWN,
3993 : : CONSTRAINT__UNKNOWN,
3994 : : CONSTRAINT__UNKNOWN,
3995 : : CONSTRAINT__UNKNOWN,
3996 : : CONSTRAINT__UNKNOWN,
3997 : : CONSTRAINT__UNKNOWN,
3998 : : CONSTRAINT__UNKNOWN,
3999 : : CONSTRAINT__UNKNOWN,
4000 : : CONSTRAINT__UNKNOWN,
4001 : : CONSTRAINT__UNKNOWN,
4002 : : CONSTRAINT__UNKNOWN,
4003 : : CONSTRAINT__UNKNOWN,
4004 : : CONSTRAINT__UNKNOWN,
4005 : : CONSTRAINT__UNKNOWN,
4006 : : CONSTRAINT__UNKNOWN,
4007 : : CONSTRAINT__UNKNOWN,
4008 : : CONSTRAINT__UNKNOWN
4009 : : };
4010 : :
4011 : : enum reg_class
4012 : : reg_class_for_constraint_1 (enum constraint_num c)
4013 : : {
4014 : : switch (c)
4015 : : {
4016 : : case CONSTRAINT_r: return GENERAL_REGS;
4017 : : case CONSTRAINT_R: return LEGACY_GENERAL_REGS;
4018 : : case CONSTRAINT_q: return TARGET_64BIT ? GENERAL_REGS : Q_REGS;
4019 : : case CONSTRAINT_Q: return Q_REGS;
4020 : : case CONSTRAINT_l: return INDEX_REGS;
4021 : : case CONSTRAINT_a: return AREG;
4022 : : case CONSTRAINT_b: return BREG;
4023 : : case CONSTRAINT_c: return CREG;
4024 : : case CONSTRAINT_d: return DREG;
4025 : : case CONSTRAINT_S: return SIREG;
4026 : : case CONSTRAINT_D: return DIREG;
4027 : : case CONSTRAINT_A: return AD_REGS;
4028 : : case CONSTRAINT_U: return CLOBBERED_REGS;
4029 : : case CONSTRAINT_f: return TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FLOAT_REGS : NO_REGS;
4030 : : case CONSTRAINT_t: return TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FP_TOP_REG : NO_REGS;
4031 : : case CONSTRAINT_u: return TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 ? FP_SECOND_REG : NO_REGS;
4032 : : case CONSTRAINT_Yk: return TARGET_AVX512F ? MASK_REGS : NO_REGS;
4033 : : case CONSTRAINT_k: return TARGET_AVX512F ? ALL_MASK_REGS : NO_REGS;
4034 : : case CONSTRAINT_y: return TARGET_MMX ? MMX_REGS : NO_REGS;
4035 : : case CONSTRAINT_x: return TARGET_SSE ? SSE_REGS : NO_REGS;
4036 : : case CONSTRAINT_v: return TARGET_SSE ? ALL_SSE_REGS : NO_REGS;
4037 : : case CONSTRAINT_Yz: return TARGET_SSE ? SSE_FIRST_REG : NO_REGS;
4038 : : case CONSTRAINT_Yd: return TARGET_AVX512DQ ? ALL_SSE_REGS : TARGET_SSE4_1 ? SSE_REGS : NO_REGS;
4039 : : case CONSTRAINT_Yp: return TARGET_PARTIAL_REG_STALL ? NO_REGS : GENERAL_REGS;
4040 : : case CONSTRAINT_Ya: return TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)
4041 : : ? NO_REGS : GENERAL_REGS;
4042 : : case CONSTRAINT_Yb: return (!flag_plt && HAVE_AS_IX86_TLS_GET_ADDR_GOT) ? TLS_GOTBASE_REGS : BREG;
4043 : : case CONSTRAINT_Yf: return (ix86_fpmath & FPMATH_387) ? FLOAT_REGS : NO_REGS;
4044 : : case CONSTRAINT_Yr: return TARGET_SSE ? (TARGET_AVOID_4BYTE_PREFIXES ? NO_REX_SSE_REGS : ALL_SSE_REGS) : NO_REGS;
4045 : : case CONSTRAINT_Yv: return TARGET_AVX512VL ? ALL_SSE_REGS : TARGET_SSE ? SSE_REGS : NO_REGS;
4046 : : case CONSTRAINT_Yw: return TARGET_AVX512BW && TARGET_AVX512VL ? ALL_SSE_REGS : TARGET_SSE ? SSE_REGS : NO_REGS;
4047 : : case CONSTRAINT_YW: return TARGET_AVX512BW ? ALL_SSE_REGS : TARGET_SSE ? SSE_REGS : NO_REGS;
4048 : : case CONSTRAINT_jR: return GENERAL_REGS;
4049 : : case CONSTRAINT_jr: return TARGET_APX_EGPR ? GENERAL_GPR16 : GENERAL_REGS;
4050 : : case CONSTRAINT_jc: return TARGET_APX_EGPR && !TARGET_AVX ? GENERAL_GPR16 : GENERAL_REGS;
4051 : : default: break;
4052 : : }
4053 : : return NO_REGS;
4054 : : }
4055 : :
4056 : : bool (*constraint_satisfied_p_array[]) (rtx) = {
4057 : : satisfies_constraint_I,
4058 : : satisfies_constraint_J,
4059 : : satisfies_constraint_K,
4060 : : satisfies_constraint_L,
4061 : : satisfies_constraint_M,
4062 : : satisfies_constraint_N,
4063 : : satisfies_constraint_O,
4064 : : satisfies_constraint_m,
4065 : : satisfies_constraint_o,
4066 : : satisfies_constraint_jm,
4067 : : satisfies_constraint_jo,
4068 : : satisfies_constraint_je,
4069 : : satisfies_constraint_jM,
4070 : : satisfies_constraint_jO,
4071 : : satisfies_constraint_Bm,
4072 : : satisfies_constraint_Bk,
4073 : : satisfies_constraint_Bn,
4074 : : satisfies_constraint_Br,
4075 : : satisfies_constraint_ja,
4076 : : satisfies_constraint_p,
4077 : : satisfies_constraint_Tv,
4078 : : satisfies_constraint_Ts,
4079 : : satisfies_constraint_jp,
4080 : : satisfies_constraint_jb,
4081 : : satisfies_constraint_Bz,
4082 : : satisfies_constraint_BH,
4083 : : satisfies_constraint_Wb,
4084 : : satisfies_constraint_Wc,
4085 : : satisfies_constraint_Ww,
4086 : : satisfies_constraint_G,
4087 : : satisfies_constraint_e,
4088 : : satisfies_constraint_We,
4089 : : satisfies_constraint_Wz,
4090 : : satisfies_constraint_Wd,
4091 : : satisfies_constraint_Wf,
4092 : : satisfies_constraint_Ws,
4093 : : satisfies_constraint_Z,
4094 : : satisfies_constraint_Bf,
4095 : : satisfies_constraint_V,
4096 : : satisfies_constraint__l,
4097 : : satisfies_constraint__g,
4098 : : satisfies_constraint_BF,
4099 : : satisfies_constraint_BM,
4100 : : satisfies_constraint_j_l,
4101 : : satisfies_constraint_j_g,
4102 : : satisfies_constraint_jV,
4103 : : satisfies_constraint_i,
4104 : : satisfies_constraint_s,
4105 : : satisfies_constraint__c,
4106 : : satisfies_constraint_n,
4107 : : satisfies_constraint_E,
4108 : : satisfies_constraint_F,
4109 : : satisfies_constraint_X,
4110 : : satisfies_constraint_Bg,
4111 : : satisfies_constraint_Bs,
4112 : : satisfies_constraint_Bw,
4113 : : satisfies_constraint_BC,
4114 : : satisfies_constraint_C
4115 : : };
4116 : :
4117 : : bool
4118 : : insn_const_int_ok_for_constraint (HOST_WIDE_INT ival, enum constraint_num c)
4119 : : {
4120 : : switch (c)
4121 : : {
4122 : : case CONSTRAINT_I:
4123 : : return
4124 : : #line 269 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4125 : : (IN_RANGE (ival, 0, 31));
4126 : :
4127 : : case CONSTRAINT_J:
4128 : : return
4129 : : #line 274 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4130 : : (IN_RANGE (ival, 0, 63));
4131 : :
4132 : : case CONSTRAINT_K:
4133 : : return
4134 : : #line 279 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4135 : : (IN_RANGE (ival, -128, 127));
4136 : :
4137 : : case CONSTRAINT_L:
4138 : : return (
4139 : : #line 285 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4140 : : (ival == 0xff)) || ((
4141 : : #line 286 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4142 : : (ival == 0xffff)) || (
4143 : : #line 287 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4144 : : (ival == HOST_WIDE_INT_C (0xffffffff))));
4145 : :
4146 : : case CONSTRAINT_M:
4147 : : return
4148 : : #line 292 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4149 : : (IN_RANGE (ival, 0, 3));
4150 : :
4151 : : case CONSTRAINT_N:
4152 : : return
4153 : : #line 298 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4154 : : (IN_RANGE (ival, 0, 255));
4155 : :
4156 : : case CONSTRAINT_O:
4157 : : return
4158 : : #line 303 "/home/worker/buildworker/tiber-lcov/build/gcc/config/i386/constraints.md"
4159 : : (IN_RANGE (ival, 0, 127));
4160 : :
4161 : : default: break;
4162 : : }
4163 : : return false;
4164 : : }
4165 : :
4166 : :
4167 : : void
4168 : : init_reg_class_start_regs ()
4169 : : {
4170 : : }
|