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