5 /* ia64 code generation is not optimized for size, and also some
6 * codes generate quite long sequences due to need for stops causing
7 * no code template match and needing to add nops, and other cases
8 * are division/remainder that needs function calls, or float division
9 * that requires a quite long sequence.
10 * (the brute force tests of all register combinations can easily
11 * generate several GB of jit).
16 /* reg0 = reg1 op reg2 */
17 #define ALUR(N, T, OP, I0, I1, V, R0, R1, R2) \
20 OP##r##T %R0 %R1 %R2 \
21 beqi OP##T##N##r_##R0##R1##R2 %R0 V \
23 OP##T##N##r_##R0##R1##R2:
25 /* reg0 = reg1 op im */
26 #define ALUI(N, T, OP, I0, I1, V, R0, R1, R2) \
30 beqr OP##T##N##i_##R0##R1##R2 %R0 %R2 \
32 OP##T##N##i_##R0##R1##R2:
34 /* reg0 = reg0 op reg1 */
35 #define ALUR0(N, T, OP, I0, I1, V, R0, R1, R2) \
39 OP##r##T %R0 %R0 %R1 \
40 beqr OP##T##N##r_0##R0##R1##R2 %R0 %R2 \
42 OP##T##N##r_0##R0##R1##R2:
44 /* reg0 = reg1 op reg0 */
45 #define ALUR1(N, T, OP, I0, I1, V, R0, R1, R2) \
49 OP##r##T %R0 %R1 %R0 \
50 beqr OP##T##N##r_1##R0##R1##R2 %R0 %R2 \
52 OP##T##N##r_1##R0##R1##R2:
54 /* reg0 = reg0 op im */
55 #define ALUI0(N, T, OP, I0, I1, V, R0, R1, R2) \
59 beqr OP##T##N##i_0##R0##R1##R2 %R0 %R1 \
61 OP##T##N##i_0##R0##R1##R2:
63 #define ALU3(N, T, OP, I0, I1, V, R0, R1, R2) \
64 ALUR(N, T, OP, I0, I1, V, R0, R1, R2) \
65 ALUI(N, T, OP, I0, I1, V, R0, R1, R2) \
66 ALUR0(N, T, OP, I0, I1, V, R0, R1, R2) \
67 ALUR1(N, T, OP, I0, I1, V, R0, R1, R2) \
68 ALUI0(N, T, OP, I0, I1, V, R0, R1, R2)
70 #define ALU2(N, T, OP, I0, I1, V, R0, R1, R2) \
71 ALU3(N, T, OP, I0, I1, V, R0, R1, R2) \
72 ALU3(N, T, OP, I0, I1, V, R0, R2, R1)
74 #define ALU1(N, T, OP, I0, I1, V, R0, R1, R2) \
75 ALU2(N, T, OP, I0, I1, V, R0, R1, R2) \
76 ALU2(N, T, OP, I0, I1, V, R1, R0, R2) \
77 ALU2(N, T, OP, I0, I1, V, R2, R1, R0)
80 # define ALU(N, T, OP, I0, I1, V) \
81 ALU3(N, T, OP, I0, I1, V, r0, r1, r2) \
82 ALU3(N, T, OP, I0, I1, V, v0, v1, v2)
84 # define ALU(N, T, OP, I0, I1, V) \
85 ALU1(N, T, OP, I0, I1, V, v0, v1, v2) \
86 ALU1(N, T, OP, I0, I1, V, v0, v1, r0) \
87 ALU1(N, T, OP, I0, I1, V, v0, v1, r1) \
88 ALU1(N, T, OP, I0, I1, V, v0, v1, r2) \
89 ALU1(N, T, OP, I0, I1, V, v1, v2, r1) \
90 ALU1(N, T, OP, I0, I1, V, v1, v2, r2) \
91 ALU1(N, T, OP, I0, I1, V, v2, r0, r1) \
92 ALU1(N, T, OP, I0, I1, V, v2, r0, r2) \
93 ALU1(N, T, OP, I0, I1, V, r0, r1, r2)
96 /* 3 carry set/propagate */
102 * r0 = r0 opc r1 <only want carry>
103 * r2 = r2 opx r2 <r2 must match v>
105 #define ALUXII(N, OP, I0, I1, V, R0, R1, R2) \
110 beqi OP##N##ii##R0##R1##R2 %R2 V \
112 OP##N##ii##R0##R1##R2:
114 #define ALUXIR(N, OP, I0, I1, V, R0, R1, R2) \
119 beqi OP##N##ir##R0##R1##R2 %R2 V \
121 OP##N##ir##R0##R1##R2:
123 #define ALUXRI(N, OP, I0, I1, V, R0, R1, R2) \
129 beqi OP##N##ri##R0##R1##R2 %R2 V \
131 OP##N##ri##R0##R1##R2:
133 #define ALUXRR(N, OP, I0, I1, V, R0, R1, R2) \
139 beqi OP##N##rr##R0##R1##R2 %R2 V \
141 OP##N##rr##R0##R1##R2:
143 #define ALUX2(N, OP, I0, I1, V, R0, R1, R2) \
144 ALUXII(N, OP, I0, I1, V, R0, R1, R2) \
145 ALUXIR(N, OP, I0, I1, V, R0, R1, R2) \
146 ALUXRI(N, OP, I0, I1, V, R0, R1, R2) \
147 ALUXRR(N, OP, I0, I1, V, R0, R1, R2)
149 #define ALUX1(N, OP, I0, I1, V, R0, R1, R2) \
150 ALUX2(N, OP, I0, I1, V, R0, R1, R2) \
151 ALUX2(N, OP, I0, I1, V, R0, R2, R1)
153 #define ALUX0(N, OP, I0, I1, V, R0, R1, R2) \
154 ALUX1(N, OP, I0, I1, V, R0, R1, R2) \
155 ALUX1(N, OP, I0, I1, V, R1, R0, R2) \
156 ALUX1(N, OP, I0, I1, V, R2, R1, R0)
159 # define ALUX(N, OP, I0, I1, V) \
160 ALUX2(N, OP, I0, I1, V, r0, r1, r2) \
161 ALUX2(N, OP, I0, I1, V, v0, v1, v2)
163 # define ALUX(N, OP, I0, I1, V) \
164 ALUX0(N, OP, I0, I1, V, v0, v1, v2) \
165 ALUX0(N, OP, I0, I1, V, v0, v1, r0) \
166 ALUX0(N, OP, I0, I1, V, v0, v1, r1) \
167 ALUX0(N, OP, I0, I1, V, v0, v1, r2) \
168 ALUX0(N, OP, I0, I1, V, v1, v2, r0) \
169 ALUX0(N, OP, I0, I1, V, v1, v2, r1) \
170 ALUX0(N, OP, I0, I1, V, v1, v2, r2) \
171 ALUX0(N, OP, I0, I1, V, v2, r0, r1) \
172 ALUX0(N, OP, I0, I1, V, v2, r0, r2) \
173 ALUX0(N, OP, I0, I1, V, r0, r1, r2)
178 #define UNR(N, OP, I, V, R0, R1) \
181 beqi OP##N##R0##R1 %R0 V \
185 #define UNRC(N, OP, I, V, R0, R1) \
188 beqi OP##N##c##R0##R1 %R0 V \
192 #define UN2(N, OP, I, V, R0, R1) \
193 UNR(N, OP, I, V, R0, R1) \
194 UNRC(N, OP, I, V, R0, R1)
196 #define UN1(N, OP, I, V, R0, R1) \
197 UN2(N, OP, I, V, R0, R1) \
198 UN2(N, OP, I, V, R1, R0)
201 # define UN(N, OP, I, V) \
202 UN2(N, OP, I, V, r0, r1) \
203 UN2(N, OP, I, V, v0, v1)
205 # define UN(N, OP, I, V) \
206 UN1(N, OP, I, V, v0, v1) \
207 UN1(N, OP, I, V, v0, v2) \
208 UN1(N, OP, I, V, v0, r0) \
209 UN1(N, OP, I, V, v0, r1) \
210 UN1(N, OP, I, V, v0, r2) \
211 UN1(N, OP, I, V, v1, v2) \
212 UN1(N, OP, I, V, v1, r0) \
213 UN1(N, OP, I, V, v1, r1) \
214 UN1(N, OP, I, V, v1, r2) \
215 UN1(N, OP, I, V, v2, r0) \
216 UN1(N, OP, I, V, v2, r1) \
217 UN1(N, OP, I, V, v2, r2) \
218 UN1(N, OP, I, V, r0, r1) \
219 UN1(N, OP, I, V, r0, r2) \
220 UN1(N, OP, I, V, r1, r2)
223 /* reg0 = reg1 op reg2 */
224 #define FOPR(N, T, OP, I0, I1, V, F0, F1, F2) \
227 OP##r##T %F0 %F1 %F2 \
228 beqi##T OP##T##N##F0##F1##F2 %F0 V \
230 OP##T##N##F0##F1##F2:
232 /* reg0 = reg0 op reg1 */
233 #define FOPR0(N, T, OP, I0, I1, V, F0, F1, F2) \
236 OP##r##T %F0 %F0 %F1 \
237 beqi##T OP##T##N##0##F0##F1##F2 %F0 V \
239 OP##T##N##0##F0##F1##F2:
241 /* reg1 = reg0 op reg1 */
242 #define FOPR1(N, T, OP, I0, I1, V, F0, F1, F2) \
245 OP##r##T %F1 %F0 %F1 \
246 beqi##T OP##T##N##1##F0##F1##F2 %F1 V \
248 OP##T##N##1##F0##F1##F2:
250 /* reg0 = reg1 op im */
251 #define FOPI(N, T, OP, I0, I1, V, F0, F1, F2) \
254 OP##i##T %F0 %F1 I1 \
255 beqr##T OP##T##N##i##F0##F1##F2 %F0 %F2 \
257 OP##T##N##i##F0##F1##F2:
259 /* reg0 = reg0 op im */
260 #define FOPI0(N, T, OP, I0, I1, V, F0, F1, F2) \
263 OP##i##T %F0 %F0 I1 \
264 beqr##T OP##T##N##i0##F0##F1##F2 %F0 %F2 \
266 OP##T##N##i0##F0##F1##F2:
268 #define FOP1(N, T, OP, I0, I1, V, F0, F1, F2) \
269 FOPR(N, T, OP, I0, I1, V, F0, F1, F2) \
270 FOPR0(N, T, OP, I0, I1, V, F0, F1, F2) \
271 FOPR1(N, T, OP, I0, I1, V, F0, F1, F2) \
272 FOPI(N, T, OP, I0, I1, V, F0, F1, F2) \
273 FOPI0(N, T, OP, I0, I1, V, F0, F1, F2)
276 # define FOP(N, T, OP, I0, I1, V) \
277 FOP1(N, T, OP, I0, I1, V, f0, f1, f2)
279 # define FOP(N, T, OP, I0, I1, V) \
280 FOP1(N, T, OP, I0, I1, V, f0, f1, f2) \
281 FOP1(N, T, OP, I0, I1, V, f0, f2, f3) \
282 FOP1(N, T, OP, I0, I1, V, f0, f3, f4) \
283 FOP1(N, T, OP, I0, I1, V, f0, f5, f1)
288 #define FUNR(N, T, OP, I, V, R0, R1) \
291 beqi##T OP##N##T##R0##R1 %R0 V \
295 #define FUNRC(N, T, OP, I, V, R0, R1) \
298 beqi##T OP##N##T##c##R0##R1 %R0 V \
302 #define FUN2(N, T, OP, I, V, R0, R1) \
303 FUNR(N, T, OP, I, V, R0, R1) \
304 FUNRC(N, T, OP, I, V, R0, R1)
306 #define FUN1(N, T, OP, I, V, R0, R1) \
307 FUN2(N, T, OP, I, V, R0, R1) \
308 FUN2(N, T, OP, I, V, R1, R0)
311 # define FUN(N, T, OP, I, V) \
312 FUN2(N, T, OP, I, V, f0, f1)
314 # define FUN(N, T, OP, I, V) \
315 FUN1(N, T, OP, I, V, f0, f1) \
316 FUN1(N, T, OP, I, V, f0, f2) \
317 FUN1(N, T, OP, I, V, f0, f3) \
318 FUN1(N, T, OP, I, V, f0, f4) \
319 FUN1(N, T, OP, I, V, f0, f5)
322 /* unordered comparison unary float */
324 #define UFUNR(N, T, OP, I, V, R0, R1) \
327 buneqi##T OP##N##T##u##R0##R1 %R0 V \
331 #define UFUNRC(N, T, OP, I, V, R0, R1) \
334 buneqi##T OP##N##T##uc##R0##R1 %R0 V \
336 OP##N##T##uc##R0##R1:
338 #define UFUN2(N, T, OP, I, V, R0, R1) \
339 UFUNR(N, T, OP, I, V, R0, R1) \
340 UFUNRC(N, T, OP, I, V, R0, R1)
342 #define UFUN1(N, T, OP, I, V, R0, R1) \
343 UFUN2(N, T, OP, I, V, R0, R1) \
344 UFUN2(N, T, OP, I, V, R1, R0)
347 # define UFUN(N, T, OP, I, V) \
348 UFUN2(N, T, OP, I, V, f0, f1)
350 # define UFUN(N, T, OP, I, V) \
351 UFUN1(N, T, OP, I, V, f0, f1) \
352 UFUN1(N, T, OP, I, V, f0, f2) \
353 UFUN1(N, T, OP, I, V, f0, f3) \
354 UFUN1(N, T, OP, I, V, f0, f4) \
355 UFUN1(N, T, OP, I, V, f0, f5)
360 . $($nInf = -1.0/0.0)