release r24
[pcsx_rearmed.git] / deps / lightning / lib / jit_ia64-fpu.c
CommitLineData
4a71579b 1/*
79bfeef6 2 * Copyright (C) 2013-2023 Free Software Foundation, Inc.
4a71579b
PC
3 *
4 * This file is part of GNU lightning.
5 *
6 * GNU lightning is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation; either version 3, or (at your option)
9 * any later version.
10 *
11 * GNU lightning is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 * License for more details.
15 *
16 * Authors:
17 * Paulo Cesar Pereira de Andrade
18 */
19
20#if PROTO
21#define SF_S0 0
22#define SF_S1 1
23#define SF_S2 2
24#define SF_S3 3
25
26#define TSTFREG1(r0) \
27 do { \
28 if (jit_regset_tstbit(&_jitc->regs, r0 + 128)) \
29 stop(); \
30 } while (0)
31#define TSTFREG2(r0, r1) \
32 do { \
33 if (jit_regset_tstbit(&_jitc->regs, r0 + 128) || \
34 jit_regset_tstbit(&_jitc->regs, r1 + 128)) \
35 stop(); \
36 } while (0)
37#define TSTFREG3(r0, r1, r2) \
38 do { \
39 if (jit_regset_tstbit(&_jitc->regs, r0 + 128) || \
40 jit_regset_tstbit(&_jitc->regs, r1 + 128) || \
41 jit_regset_tstbit(&_jitc->regs, r2 + 128)) \
42 stop(); \
43 } while (0)
44#define SETFREG(r0) jit_regset_setbit(&_jitc->regs, r0 + 128)
45
46/* libm */
47extern float sqrtf(float);
48extern double sqrt(double);
49#define M7(x6,ht,r3,r2,f1) _M7(_jit,0,x6,ht,r3,r2,f1)
50static void _M7(jit_state_t*,jit_word_t,
51 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
52 maybe_unused;
53#define M8(x6,ht,r3,im,f1) _M8(_jit,0,x6,ht,r3,im,f1)
54static void _M8(jit_state_t*,jit_word_t,
55 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
56 maybe_unused;
57#define M9(x6,ht,r3,f1) _M9(_jit,0,x6,ht,r3,f1)
58static void _M9(jit_state_t*,jit_word_t,
59 jit_word_t,jit_word_t,jit_word_t,jit_word_t);
60#define M10(x6,ht,r3,r2,im) _M10(_jit,0,x6,ht,r3,r2,im)
61static void _M10(jit_state_t*,jit_word_t,
62 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
63 maybe_unused;
64#define M11(x6,ht,r3,f2,f1) _M11(_jit,0,x6,ht,r3,f2,f1)
65static void _M11(jit_state_t*,jit_word_t,
66 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
67 maybe_unused;
68#define M12(x6,ht,r3,f2,f1) _M12(_jit,0,x6,ht,r3,f2,f1)
69static void _M12(jit_state_t*,jit_word_t,
70 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
71 maybe_unused;
72#define M18(x6,r2,f1) _M18(_jit,0,x6,r2,f1)
73static void _M18(jit_state_t*,jit_word_t,
74 jit_word_t,jit_word_t,jit_word_t);
75#define M19(x6,f2,r1) _M19(_jit,0,x6,f2,r1)
76static void _M19(jit_state_t*,jit_word_t,
77 jit_word_t,jit_word_t,jit_word_t);
78#define M21(f2,im) M20x(0x3,f2,im)
79#define M23(x3,im,f1) M22x(x3,im,f1)
80#define M27(f1) M26x(3,f1)
81#define F1(op,x,sf,f4,f3,f2,f1) F1_(_jit,0,op,x,sf,f4,f3,f2,f1)
82#define F2(x2,f4,f3,f2,f1) F1(0xe,1,x2,f4,f3,f2,f1)
83#define F3(f4,f3,f2,f1) F1(0xe,0,0,f4,f3,f2,f1)
84static void F1_(jit_state_t*,jit_word_t,
85 jit_word_t,jit_word_t,jit_word_t,
86 jit_word_t,jit_word_t,jit_word_t,jit_word_t);
87#define F4(rb,sf,ra,p2,f3,f2,ta,p1) F4_(_jit,0,rb,sf,ra,p2,f3,f2,ta,p1)
88static void F4_(jit_state_t*,jit_word_t,
89 jit_word_t,jit_word_t,jit_word_t,jit_word_t,
90 jit_word_t,jit_word_t,jit_word_t,jit_word_t);
91#define F5(p2,fc,f2,ta,p1) F5_(_jit,0,p2,fc,f2,ta,p1)
92static void F5_(jit_state_t*,jit_word_t,
93 jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t)
94 maybe_unused;
95#define F6x(op,q,sf,p2,f3,f2,f1) F6x_(_jit,0,op,q,sf,p2,f3,f2,f1)
96#define F6(op,sf,p2,f3,f2,f1) F6x(op,0,sf,p2,f3,f2,f1)
97#define F7(op,sf,p2,f3,f1) F6x(op,1,sf,p2,f3,0,f1)
98static void F6x_(jit_state_t*,jit_word_t,
99 jit_word_t,jit_word_t,jit_word_t,
100 jit_word_t,jit_word_t,jit_word_t,jit_word_t);
101#define F8(op,sf,x6,f3,f2,f1) F8_(_jit,0,op,sf,x6,f3,f2,f1)
102#define F9(op,x6,f3,f2,f1) F8(op,0,x6,f3,f2,f1)
103#define F10(op,sf,x6,f2,f1) F8(op,sf,x6,0,f2,f1)
104#define F11(x6,f2,f1) F8(0,0,x6,0,f2,f1)
105static void F8_(jit_state_t*,jit_word_t,
106 jit_word_t,jit_word_t,jit_word_t,
107 jit_word_t,jit_word_t,jit_word_t);
108#define F12(sf,x6,omsk,amsk) F12_(_jit,0,sf,x6,omsk,amsk)
109#define F13(sf,x6) F12(sf,x6,0,0)
110static void F12_(jit_state_t*,jit_word_t,
111 jit_word_t,jit_word_t,jit_word_t,jit_word_t)
112 maybe_unused;
113#define F14x(sf,x,x6,im) F14x_(_jit,0,sf,x,x6,im)
114#define F14(sf,im) F14x(sf,0,8,im)
115#define F15(im) F14x(0,0,0,im)
116static void F14x_(jit_state_t*,jit_word_t,
117 jit_word_t,jit_word_t,jit_word_t,jit_word_t)
118 maybe_unused;
119#define F16(y,im) F16_(_jit,0,y,im)
120static void F16_(jit_state_t*,jit_word_t,
121 jit_word_t,jit_word_t)maybe_unused;
122
123/* break */
124#define BREAK_F(im) F15(im)
125/* chk */
126#define CHK_S(f2,im) M21(f2,im)
127#define CHKF_A_NC(f1,im) M23(0x6,im,f1)
128#define CHKF_A_CLR(f1,im) M23(0x7,im,f1)
129/* fabs */
130#define FABS(f1,f3) FMERGE_S(f1,0,f3)
131/* fadd */
132#define FADD(f1,f3,f2) FMA(f1,f3,1,f2)
133#define FADD_S(f1,f3,f2) FMA_S(f1,f3,1,f2)
134#define FADD_D(f1,f3,f2) FMA_D(f1,f3,1,f2)
135/* famax */
136#define FAMAX(f1,f2,f3) F8(0,SF_S0,0x17,f3,f2,f1)
137/* famin */
138#define FAMIN(f1,f2,f3) F8(0,SF_S0,0x16,f3,f2,f1)
139/* fand */
140#define FAND(f1,f2,f3) F9(0,0x2c,f3,f2,f1)
141/* fandcm */
142#define FANDCM(f1,f2,f3) F9(0,0x2d,f3,f2,f1)
143/* fchkf */
144#define FCHKF(im) F14(SF_S0,im)
145/* fclass */
146#define FCLASS_M(p1,p2,f2,fc) F5(p2,fc,f2,0,p1)
147#define FCLASS_M_UNC(p1,p2,f2,fc) F5(p2,fc,f2,1,p1)
148/* fclrf */
149#define FCLRF() F13(SF_S0,5)
150/* fcmp */
151#define FCMP_EQ(p1,p2,f2,f3) F4(0,SF_S0,0,p2,f3,f2,0,p1)
152#define FCMP_LT(p1,p2,f2,f3) F4(1,SF_S0,0,p2,f3,f2,0,p1)
153#define FCMP_LE(p1,p2,f2,f3) F4(0,SF_S0,1,p2,f3,f2,0,p1)
154#define FCMP_UNORD(p1,p2,f2,f3) F4(1,SF_S0,1,p2,f3,f2,0,p1)
155#define FCMP_EQ_UNC(p1,p2,f2,f3) F4(0,SF_S0,0,p2,f3,f2,1,p1)
156#define FCMP_LT_UNC(p1,p2,f2,f3) F4(1,SF_S0,0,p2,f3,f2,1,p1)
157#define FCMP_LE_UNC(p1,p2,f2,f3) F4(0,SF_S0,1,p2,f3,f2,1,p1)
158#define FCMP_UNORD_UNC(p1,p2,f2,f3) F4(1,SF_S0,1,p2,f3,f2,1,p1)
159/* fcvt.fx */
160#define FCVT_FX(f1,f2) F10(0,SF_S0,0x18,f2,f1)
161#define FCVT_FXU(f1,f2) F10(0,SF_S0,0x19,f2,f1)
162#define FCVT_FX_TRUNC(f1,f2) F10(0,SF_S0,0x1a,f2,f1)
163#define FCVT_FXU_TRUNC(f1,f2) F10(0,SF_S0,0x1b,f2,f1)
164/* fcvt.xf */
165#define FCVT_XF(f1,f2) F11(0x1c,f2,f1)
166/* fcvt.fxuf */
167#define FCVT_XUF(f1,f3) FMA(f1,f3,1,0)
168/* fma */
169#define FMA(f1,f3,f4,f2) F1(0x8,0,SF_S0,f4,f3,f2,f1)
170#define FMA_p(f1,f3,f4,f2,sf,_p) F1_(_jit,_p,0x8,0,sf,f4,f3,f2,f1)
171#define FMA_S(f1,f3,f4,f2) F1(0x8,1,SF_S0,f4,f3,f2,f1)
172#define FMA_S_p(f1,f3,f4,f2,sf,_p) F1_(_jit,_p,0x8,1,sf,f4,f3,f2,f1)
173#define FMA_D(f1,f3,f4,f2) F1(0x9,0,SF_S0,f4,f3,f2,f1)
174#define FMA_D_p(f1,f3,f4,f2,sf,_p) F1_(_jit,_p,0x9,0,sf,f4,f3,f2,f1)
175/* fmax */
176#define FMAX(f1,f2,f3) F8(0,SF_S0,0x15,f3,f2,f1)
177/* fmerge */
178#define FMERGE_S(f1,f2,f3) F9(0,0x10,f3,f2,f1)
179#define FMERGE_NS(f1,f2,f3) F9(0,0x11,f3,f2,f1)
180#define FMERGE_SE(f1,f2,f3) F9(0,0x12,f3,f2,f1)
181/* fmin */
182#define FMIN(f1,f2,f3) F8(0,SF_S0,0x14,f3,f2,f1)
183/* fmix */
184#define FMIX_LR(f1,f2,f3) F9(0,0x39,f3,f2,f1)
185#define FMIX_R(f1,f2,f3) F9(0,0x3a,f3,f2,f1)
186#define FMIX_L(f1,f2,f3) F9(0,0x3b,f3,f2,f1)
187/* fmpy */
188#define FMPY(f1,f3,f4) FMA(f1,f3,f4,0)
189#define FMPY_p(f1,f3,f4,sf,_p) FMA_p(f1,f3,f4,0,sf,_p)
190#define FMPY_S(f1,f3,f4) FMA_S(f1,f3,f4,0)
191#define FMPY_S_p(f1,f3,f4,sf,_p) FMA_S_p(f1,f3,f4,0,sf,_p)
192#define FMPY_D(f1,f3,f4) FMA_D(f1,f3,f4,0)
193#define FMPY_D_p(f1,f3,f4,sf,_p) FMA_D_p(f1,f3,f4,0,sf,_p)
194/* fms */
195#define FMS(f1,f3,f4,f2) F1(0xa,0,SF_S0,f4,f3,f2,f1)
196#define FMS_S(f1,f3,f4,f2) F1(0xa,1,SF_S0,f4,f3,f2,f1)
197#define FMS_D(f1,f3,f4,f2) F1(0xb,0,SF_S0,f4,f3,f2,f1)
198/* fneg */
199#define FNEG(f1,f3) FMERGE_NS(f1,f3,f3)
200/* fnegabs */
201#define FNEGABS(f1,f3) FMERGE_NS(f1,0,f3)
202/* fnma */
203#define FNMA(f1,f3,f4,f2) F1(0xc,0,SF_S0,f4,f3,f2,f1)
204#define FNMA_p(f1,f3,f4,f2,sf,_p) F1_(_jit,_p,0xc,0,sf,f4,f3,f2,f1)
205#define FNMA_S(f1,f3,f4,f2) F1(0xc,1,SF_S0,f4,f3,f2,f1)
206#define FNMA_D(f1,f3,f4,f2) F1(0xd,0,SF_S0,f4,f3,f2,f1)
207/* fnmpy */
208#define FNMPY(f1,f3,f4) FNMA(f1,f3,f4,0)
209/* fnorm */
210#define FNORM(f1,f3) FMA(f1,f3,1,0)
211#define FNORM_S(f1,f3) FMA_S(f1,f3,1,0)
212#define FNORM_D(f1,f3) FMA_D(f1,f3,1,0)
213/* for */
214#define FOR(f1,f2,f3) F9(0,0x2e,f3,f2,f1)
215/* fpabs */
216#define FPABS(f1,f3) FPMERGE_S(f1,0,f3)
217/* fpack */
218#define FPACK(f1,f2,f3) F9(0,0x28,f3,f2,f1)
219/* fpamax */
220#define FPAMAX(f1,f2,f3) F8(1,SF_S0,0x17,f3,f2,f1)
221/* fpamin */
222#define FPAMIN(f1,f2,f3) F8(1,SF_S0,0x16,f3,f2,f1)
223/* fpcmp */
224#define FPCMP_EQ(f1,f2,f3) F8(1,SF_S0,0x30,f3,f2,f1)
225#define FPCMP_LT(f1,f2,f3) F8(1,SF_S0,0x31,f3,f2,f1)
226#define FPCMP_LE(f1,f2,f3) F8(1,SF_S0,0x32,f3,f2,f1)
227#define FPCMP_UNORD(f1,f2,f3) F8(1,SF_S0,0x33,f3,f2,f1)
228#define FPCMP_NEQ(f1,f2,f3) F8(1,SF_S0,0x34,f3,f2,f1)
229#define FPCMP_NLT(f1,f2,f3) F8(1,SF_S0,0x35,f3,f2,f1)
230#define FPCMP_NLE(f1,f2,f3) F8(1,SF_S0,0x36,f3,f2,f1)
231#define FPCMP_ORD(f1,f2,f3) F8(1,SF_S0,0x37,f3,f2,f1)
232/* fpcvt.fx */
233#define FPCVT_FX(f1,f2) F10(1,SF_S0,0x18,f2,f1)
234#define FPCVT_FXU(f1,f2) F10(1,SF_S0,0x19,f2,f1)
235#define FPCVT_FX_TRUNC(f1,f2) F10(1,SF_S0,0x1a,f2,f1)
236#define FPCVT_FXU_TRUNC(f1,f2) F10(1,SF_S0,0x1b,f2,f1)
237/* fpma */
238#define FPMA(f1,f3,f4,f2) F1(0x9,1,SF_S0,f4,f3,f3,f1)
239/* fpmax */
240#define FPMAX(f1,f2,f3) F8(1,SF_S0,0x15,f3,f2,f1)
241/* fpmerge */
242#define FPMERGE_S(f1,f2,f3) F9(1,0x10,f3,f2,f1)
243#define FPMERGE_NS(f1,f2,f3) F9(1,0x11,f3,f2,f1)
244#define FPMERGE_SE(f1,f2,f3) F9(1,0x12,f3,f2,f1)
245/* fpmin */
246#define FPMIN(f1,f2,f3) F8(1,SF_S0,0x14,f3,f2,f1)
247/* fpmpy */
248#define FPMPY(f1,f3,f4) FPMA(f1,f3,f4,0)
249/* fpms */
250#define FPMS(f1,f3,f4,f2) F1(0xb,1,SF_S0,f4,f3,f3,f1)
251/* fpneg */
252#define FPNEG(f1,f3) FPMERGE_NS(f1,f3,f3)
253/* fpnegabs */
254#define FPNEGABS(f1,f3) FPMERGE_NS(f1,0,f3)
255/* fpnma */
256#define FPNMA(f1,f3,f4,f2) F1(0xd,1,SF_S0,f4,f3,f3,f1)
257/* fpnmpy */
258#define FPNMPY(f1,f3,f4) FPNMA(f1,f3,f4,0)
259/* fprcpa */
260#define FPRCPA(f1,p2,f2,f3) F6(1,SF_S0,p2,f3,f2,f1)
261/* fprsqrta */
262#define FPRSQRTA(f1,p2,f3) F7(1,SF_S0,p2,f3,f1)
263/* frcpa */
264#define FRCPA(f1,p2,f2,f3) F6(0,SF_S0,p2,f3,f2,f1)
265/* frsqrta */
266#define FRSQRTA(f1,p2,f3) F7(0,SF_S0,p2,f3,f1)
267/* fselect */
268#define FSELECT(f1,f3,f4,f2) F3(f4,f3,f2,f1)
269#define FSETC(amsk,omsk) F12(SF_S0,4,omsk,amsk)
270/* fsub */
271#define FSUB(f1,f3,f2) FMS(f1,f3,1,f2)
272#define FSUB_S(f1,f3,f2) FMS_S(f1,f3,1,f2)
273#define FSUB_D(f1,f3,f2) FMS_D(f1,f3,1,f2)
274/* fswap */
275#define FSWAP(f1,f2,f3) F9(0,0x34,f3,f2,f1)
276#define FSWAP_NL(f1,f2,f3) F9(0,0x35,f3,f2,f1)
277#define FSWAP_NR(f1,f2,f3) F9(0,0x36,f3,f2,f1)
278/* fsxt */
279#define FSXT_R(f1,f2,f3) F9(0,0x3c,f3,f2,f1)
280#define FSXT_L(f1,f2,f3) F9(0,0x3d,f3,f2,f1)
281/* fxor */
282#define FXOR(f1,f2,f3) F9(0,0x2f,f3,f2,f1)
283/* getf */
284#define GETF_S(r1,f2) M19(0x1e,f2,r1)
285#define GETF_D(r1,f2) M19(0x1f,f2,r1)
286#define GETF_EXP(r1,f2) M19(0x1d,f2,r1)
287#define GETF_SIG(r1,f2) M19(0x1c,f2,r1)
288/* hint */
289#define HINT_F(im) F16(1,im)
290/* invala */
291#define INVALAF_E(f1) M27(f1)
292/* ldf */
293#define LDFS(f1,r3) M9(0x02,LD_NONE,r3,f1)
294#define LDFD(f1,r3) M9(0x03,LD_NONE,r3,f1)
295#define LDF8(f1,r3) M9(0x01,LD_NONE,r3,f1)
296#define LDFE(f1,r3) M9(0x00,LD_NONE,r3,f1)
297#define LDFS_S(f1,r3) M9(0x06,LD_NONE,r3,f1)
298#define LDFD_S(f1,r3) M9(0x07,LD_NONE,r3,f1)
299#define LDF8_S(f1,r3) M9(0x05,LD_NONE,r3,f1)
300#define LDFE_S(f1,r3) M9(0x04,LD_NONE,r3,f1)
301#define LDFS_A(f1,r3) M9(0x0a,LD_NONE,r3,f1)
302#define LDFD_A(f1,r3) M9(0x0b,LD_NONE,r3,f1)
303#define LDF8_A(f1,r3) M9(0x09,LD_NONE,r3,f1)
304#define LDFE_A(f1,r3) M9(0x08,LD_NONE,r3,f1)
305#define LDFS_SA(f1,r3) M9(0x0e,LD_NONE,r3,f1)
306#define LDFD_SA(f1,r3) M9(0x0f,LD_NONE,r3,f1)
307#define LDF8_SA(f1,r3) M9(0x0d,LD_NONE,r3,f1)
308#define LDFE_SA(f1,r3) M9(0x0c,LD_NONE,r3,f1)
309#define LDF_FILL(f1,r3) M9(0x1b,LD_NONE,r3,f1)
310#define LDFS_C_CLR(f1,r3) M9(0x22,LD_NONE,r3,f1)
311#define LDFD_C_CLR(f1,r3) M9(0x23,LD_NONE,r3,f1)
312#define LDF8_C_CLR(f1,r3) M9(0x21,LD_NONE,r3,f1)
313#define LDFE_C_CLR(f1,r3) M9(0x20,LD_NONE,r3,f1)
314#define LDFS_C_NC(f1,r3) M9(0x26,LD_NONE,r3,f1)
315#define LDFD_C_NC(f1,r3) M9(0x27,LD_NONE,r3,f1)
316#define LDF8_C_NC(f1,r3) M9(0x25,LD_NONE,r3,f1)
317#define LDFE_C_NC(f1,r3) M9(0x24,LD_NONE,r3,f1)
318#define LDFS_inc(f1,r3,r2) M7(0x02,LD_NONE,r3,r2,f1)
319#define LDFD_inc(f1,r3,r2) M7(0x03,LD_NONE,r3,r2,f1)
320#define LDF8_inc(f1,r3,r2) M7(0x01,LD_NONE,r3,r2,f1)
321#define LDFE_inc(f1,r3,r2) M7(0x00,LD_NONE,r3,r2,f1)
322#define LDFS_S_inc(f1,r3,r2) M7(0x06,LD_NONE,r3,r2,f1)
323#define LDFD_S_inc(f1,r3,r2) M7(0x07,LD_NONE,r3,r2,f1)
324#define LDF8_S_inc(f1,r3,r2) M7(0x05,LD_NONE,r3,r2,f1)
325#define LDFE_S_inc(f1,r3,r2) M7(0x04,LD_NONE,r3,r2,f1)
326#define LDFS_A_inc(f1,r3,r2) M7(0x0a,LD_NONE,r3,r2,f1)
327#define LDXFD_A_inc(f1,r3,r2) M7(0x0b,LD_NONE,r3,r2,f1)
328#define LDXF8_A_inc(f1,r3,r2) M7(0x09,LD_NONE,r3,r2,f1)
329#define LDXFE_A_inc(f1,r3,r2) M7(0x08,LD_NONE,r3,r2,f1)
330#define LDXFS_SA_inc(f1,r3,r2) M7(0x0e,LD_NONE,r3,r2,f1)
331#define LDXFD_SA_inc(f1,r3,r2) M7(0x0f,LD_NONE,r3,r2,f1)
332#define LDXF8_SA_inc(f1,r3,r2) M7(0x0d,LD_NONE,r3,r2,f1)
333#define LDXFE_SA_inc(f1,r3,r2) M7(0x0c,LD_NONE,r3,r2,f1)
334#define LDXFS_FILL_inc(f1,r3,r2) M7(0x1b,LD_NONE,r3,r2,f1)
335#define LDXFS_C_CLR_inc(f1,r3,r2) M7(0x22,LD_NONE,r3,r2,f1)
336#define LDXFD_C_CLR_inc(f1,r3,r2) M7(0x23,LD_NONE,r3,r2,f1)
337#define LDXF8_C_CLR_inc(f1,r3,r2) M7(0x21,LD_NONE,r3,r2,f1)
338#define LDXFE_C_CLR_inc(f1,r3,r2) M7(0x20,LD_NONE,r3,r2,f1)
339#define LDXFS_C_NC_inc(f1,r3,r2) M7(0x26,LD_NONE,r3,r2,f1)
340#define LDXFD_C_NC_inc(f1,r3,r2) M7(0x27,LD_NONE,r3,r2,f1)
341#define LDXF8_C_NC_inc(f1,r3,r2) M7(0x25,LD_NONE,r3,r2,f1)
342#define LDXFE_C_NC_inc(f1,r3,r2) M7(0x24,LD_NONE,r3,r2,f1)
343#define LDIFS_inc(f1,f3,im) M8(0x02,LD_NONE,f3,im,f1)
344#define LDIFD_inc(f1,f3,im) M8(0x03,LD_NONE,f3,im,f1)
345#define LDIF8_inc(f1,f3,im) M8(0x01,LD_NONE,f3,im,f1)
346#define LDIFE_inc(f1,f3,im) M8(0x00,LD_NONE,f3,im,f1)
347#define LDIFS_S_inc(f1,f3,im) M8(0x06,LD_NONE,f3,im,f1)
348#define LDIFD_S_inc(f1,f3,im) M8(0x07,LD_NONE,f3,im,f1)
349#define LDIF8_S_inc(f1,f3,im) M8(0x05,LD_NONE,f3,im,f1)
350#define LDIFE_S_inc(f1,f3,im) M8(0x04,LD_NONE,f3,im,f1)
351#define LDIFS_A_inc(f1,f3,im) M8(0x0a,LD_NONE,f3,im,f1)
352#define LDIFD_A_inc(f1,f3,im) M8(0x0b,LD_NONE,f3,im,f1)
353#define LDIF8_A_inc(f1,f3,im) M8(0x09,LD_NONE,f3,im,f1)
354#define LDIFE_A_inc(f1,f3,im) M8(0x08,LD_NONE,f3,im,f1)
355#define LDIF_FILL_inc(f1,f3,im) M8(0x1b,LD_NONE,f3,im,f1)
356#define LDIFS_C_CLR_inc(f1,f3,im) M8(0x22,LD_NONE,f3,im,f1)
357#define LDIFD_C_CLR_inc(f1,f3,im) M8(0x23,LD_NONE,f3,im,f1)
358#define LDIF8_C_CLR_inc(f1,f3,im) M8(0x21,LD_NONE,f3,im,f1)
359#define LDIFE_C_CLR_inc(f1,f3,im) M8(0x20,LD_NONE,f3,im,f1)
360#define LDIFS_C_NC_inc(f1,f3,im) M8(0x26,LD_NONE,f3,im,f1)
361#define LDIFD_C_NC_inc(f1,f3,im) M8(0x27,LD_NONE,f3,im,f1)
362#define LDIF8_C_NC_inc(f1,f3,im) M8(0x25,LD_NONE,f3,im,f1)
363#define LDIFE_C_NC_inc(f1,f3,im) M8(0x24,LD_NONE,f3,im,f1)
364/* ldpf */
365#define LDFPS(f1,f2,r3) M11(0x02,LD_NONE,r3,f2,f1)
366#define LDFPD(f1,f2,r3) M11(0x03,LD_NONE,r3,f2,f1)
367#define LDFP8(f1,f2,r3) M11(0x01,LD_NONE,r3,f2,f1)
368#define LDFPS_S(f1,f2,r3) M11(0x06,LD_NONE,r3,f2,f1)
369#define LDFPD_S(f1,f2,r3) M11(0x07,LD_NONE,r3,f2,f1)
370#define LDFP8_S(f1,f2,r3) M11(0x05,LD_NONE,r3,f2,f1)
371#define LDFPS_A(f1,f2,r3) M11(0x0a,LD_NONE,r3,f2,f1)
372#define LDFPD_A(f1,f2,r3) M11(0x0b,LD_NONE,r3,f2,f1)
373#define LDFP8_A(f1,f2,r3) M11(0x09,LD_NONE,r3,f2,f1)
374#define LDFPS_SA(f1,f2,r3) M11(0x0e,LD_NONE,r3,f2,f1)
375#define LDFPD_SA(f1,f2,r3) M11(0x0f,LD_NONE,r3,f2,f1)
376#define LDFP8_SA(f1,f2,r3) M11(0x0d,LD_NONE,r3,f2,f1)
377#define LDFPS_C_CLR(f1,f2,r3) M11(0x22,LD_NONE,r3,f2,f1)
378#define LDFPD_C_CLR(f1,f2,r3) M11(0x23,LD_NONE,r3,f2,f1)
379#define LDFP8_C_CLR(f1,f2,r3) M11(0x21,LD_NONE,r3,f2,f1)
380#define LDFPS_C_NC(f1,f2,r3) M11(0x26,LD_NONE,r3,f2,f1)
381#define LDFPD_C_NC(f1,f2,r3) M11(0x27,LD_NONE,r3,f2,f1)
382#define LDFP8_C_NC(f1,f2,r3) M11(0x25,LD_NONE,r3,f2,f1)
383#define LDIFPS(f1,f2,r3) M12(0x02,LD_NONE,r3,f2,f1)
384#define LDIFPD(f1,f2,r3) M12(0x03,LD_NONE,r3,f2,f1)
385#define LDIFP8(f1,f2,r3) M12(0x01,LD_NONE,r3,f2,f1)
386#define LDIFPS_S(f1,f2,r3) M12(0x06,LD_NONE,r3,f2,f1)
387#define LDIFPD_S(f1,f2,r3) M12(0x07,LD_NONE,r3,f2,f1)
388#define LDIFP8_S(f1,f2,r3) M12(0x05,LD_NONE,r3,f2,f1)
389#define LDIFPS_A(f1,f2,r3) M12(0x0a,LD_NONE,r3,f2,f1)
390#define LDIFPD_A(f1,f2,r3) M12(0x0b,LD_NONE,r3,f2,f1)
391#define LDIFP8_A(f1,f2,r3) M12(0x09,LD_NONE,r3,f2,f1)
392#define LDIFPS_SA(f1,f2,r3) M12(0x0e,LD_NONE,r3,f2,f1)
393#define LDIFPD_SA(f1,f2,r3) M12(0x0f,LD_NONE,r3,f2,f1)
394#define LDIFP8_SA(f1,f2,r3) M12(0x0d,LD_NONE,r3,f2,f1)
395#define LDIFPS_C_CLR(f1,f2,r3) M12(0x22,LD_NONE,r3,f2,f1)
396#define LDIFPD_C_CLR(f1,f2,r3) M12(0x23,LD_NONE,r3,f2,f1)
397#define LDIFP8_C_CLR(f1,f2,r3) M12(0x21,LD_NONE,r3,f2,f1)
398#define LDIFPS_C_NC(f1,f2,r3) M12(0x26,LD_NONE,r3,f2,f1)
399#define LDIFPD_C_NC(f1,f2,r3) M12(0x27,LD_NONE,r3,f2,f1)
400#define LDIFP8_C_NC(f1,f2,r3) M12(0x25,LD_NONE,r3,f2,f1)
401/* mov - Move Floating-point Register */
402#define MOVF(f1,f3) FMERGE_S(f1,f3,f3)
403/* nop */
404#define NOP_F(im) F16(0,im)
405/* setf */
406#define SETF_S(f1,r2) M18(0x1e,r2,f1)
407#define SETF_D(f1,r2) M18(0x1f,r2,f1)
408#define SETF_EXP(f1,r2) M18(0x1d,r2,f1)
409#define SETF_SIG(f1,r2) M18(0x1c,r2,f1)
410/* stf */
411#define STFS(r3,f2) M13(0x32,ST_NONE,r3,f2)
412#define STFD(r3,f2) M13(0x33,ST_NONE,r3,f2)
413#define STF8(r3,f2) M13(0x31,ST_NONE,r3,f2)
414#define STFE(r3,f2) M13(0x30,ST_NONE,r3,f2)
415#define STF_SPILL(r3,f2) M13(0x3b,ST_NONE,r3,f2)
416#define STFS_inc(r3,f2,im) M10(0x32,ST_NONE,r3,f2,im)
417#define STFD_inc(r3,f2,im) M10(0x33,ST_NONE,r3,f2,im)
418#define STF8_inc(r3,f2,im) M10(0x31,ST_NONE,r3,f2,im)
419#define STFE_inc(r3,f2,im) M10(0x30,ST_NONE,r3,f2,im)
420#define STF_SPILL_inc(r3,f2,im) M10(0x3b,ST_NONE,r3,f2,im)
421/* xma */
422#define XMA_L(f1,f3,f4,f2) F2(0,f4,f3,f2,f1)
423#define XMA_LU(f1,f3,f4,f2) XMA_L(f1,f3,f4,f2)
424#define XMA_H(f1,f3,f4,f2) F2(3,f4,f3,f2,f1)
425#define XMA_HU(f1,f3,f4,f2) F2(2,f4,f3,f2,f1)
426/* xmpy */
427#define XMPY_L(f1,f3,f4) XMA_L(f1,f3,f4,0)
428#define XMPY_LU(f1,f3,f4) XMA_L(f1,f3,f4,0)
429#define XMPY_H(f1,f3,f4) XMA_H(f1,f3,f4,0)
430#define XMPY_HU(f1,f3,f4) XMA_HU(f1,f3,f4,0)
431
432#define movr_f(r0,r1) movr_d(r0,r1)
433#define movr_d(r0,r1) MOVF(r0,r1)
434#define movi_f(r0,i0) _movi_f(_jit,r0,i0)
435static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
436#define movi_d(r0,i0) _movi_d(_jit,r0,i0)
437static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
438#define movr_w_f(r0,r1) _movr_w_f(_jit,r0,r1)
439static void _movr_w_f(jit_state_t*,jit_int32_t,jit_int32_t);
440#define movr_f_w(r0,r1) _movr_f_w(_jit,r0,r1)
441static void _movr_f_w(jit_state_t*,jit_int32_t,jit_int32_t);
ba86ff93
PC
442#define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0)
443static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
4a71579b
PC
444#define movr_w_d(r0,r1) _movr_w_d(_jit,r0,r1)
445static void _movr_w_d(jit_state_t*,jit_int32_t,jit_int32_t);
446#define movr_d_w(r0,r1) _movr_d_w(_jit,r0,r1)
447static void _movr_d_w(jit_state_t*,jit_int32_t,jit_int32_t);
ba86ff93
PC
448#define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0)
449static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
4a71579b
PC
450#define absr_f(r0,r1) absr_d(r0,r1)
451#define absr_d(r0,r1) FABS(r0,r1)
452#define negr_f(r0,r1) negr_d(r0,r1)
453#define negr_d(r0,r1) FNEG(r0,r1)
454#define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1)
455static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t);
ba86ff93
PC
456#define fmar_f(r0,r1,r2,r3) FMA_S(r0,r1,r2,r3)
457#define fmsr_f(r0,r1,r2,r3) FMS_S(r0,r1,r2,r3)
458#define fnmsr_f(r0,r1,r2,r3) FNMA_S(r0,r1,r2,r3)
459#define fnmar_f(r0,r1,r2,r3) _fnmar_f(_jit,r0,r1,r2,r3)
460static void _fnmar_f(jit_state_t*,
461 jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
4a71579b
PC
462#define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1)
463static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t);
ba86ff93
PC
464#define fmar_d(r0,r1,r2,r3) FMA_D(r0,r1,r2,r3)
465#define fmsr_d(r0,r1,r2,r3) FMS_D(r0,r1,r2,r3)
466#define fnmsr_d(r0,r1,r2,r3) FNMA_D(r0,r1,r2,r3)
467#define fnmar_d(r0,r1,r2,r3) _fnmar_d(_jit,r0,r1,r2,r3)
468static void _fnmar_d(jit_state_t*,
469 jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
4a71579b
PC
470#define extr_f_d(r0,r1) FNORM_D(r0,r1)
471#define extr_d_f(r0,r1) FNORM_S(r0,r1)
472#define extr_f(r0,r1) _extr_f(_jit,r0,r1)
473static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
474#define extr_d(r0,r1) _extr_d(_jit,r0,r1)
475static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
476#define truncr_f_i(r0,r1) truncr_d_l(r0,r1)
477#define truncr_d_i(r0,r1) truncr_d_l(r0,r1)
478#define truncr_f_l(r0,r1) truncr_d_l(r0,r1)
479#define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1)
480static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
481#define addr_f(r0,r1,r2) FADD_S(r0,r1,r2)
482#define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
483static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
484#define addr_d(r0,r1,r2) FADD_D(r0,r1,r2)
485#define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
486static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
487#define subr_f(r0,r1,r2) FSUB_S(r0,r1,r2)
488#define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
489static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
490#define subr_d(r0,r1,r2) FSUB_D(r0,r1,r2)
491#define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
492static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
493#define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
494#define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
495static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
496#define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
497#define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
498static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
499#define mulr_f(r0,r1,r2) FMPY_S(r0,r1,r2)
500#define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
501static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
502#define mulr_d(r0,r1,r2) FMPY_D(r0,r1,r2)
503#define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
504static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
505#define divr_f(r0,r1,r2) _divr_f(_jit,r0,r1,r2)
506static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
507#define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
508static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
509#define divr_d(r0,r1,r2) _divr_d(_jit,r0,r1,r2)
510static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
511#define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
512static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
513#define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2)
514#define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2)
515static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
516#define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0)
517static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
518#define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0)
519static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
520#define ler_f(r0,r1,r2) ler_d(r0,r1,r2)
521#define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2)
522static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
523#define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0)
524static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
525#define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0)
526static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
527#define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2)
528#define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2)
529static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
530#define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0)
531static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
532#define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0)
533static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
534#define ger_f(r0,r1,r2) ger_d(r0,r1,r2)
535#define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2)
536static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
537#define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0)
538static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
539#define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0)
540static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
541#define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2)
542#define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2)
543static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
544#define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0)
545static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
546#define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0)
547static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
548#define ner_f(r0,r1,r2) ner_d(r0,r1,r2)
549#define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2)
550static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
551#define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0)
552static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
553#define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0)
554static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
555#define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2)
556#define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2)
557static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
558#define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0)
559static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
560#define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0)
561static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
562#define unler_f(r0,r1,r2) unler_d(r0,r1,r2)
563#define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2)
564static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
565#define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0)
566static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
567#define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0)
568static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
569#define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2)
570#define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2)
571static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
572#define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0)
573static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
574#define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0)
575static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
576#define unger_f(r0,r1,r2) unger_d(r0,r1,r2)
577#define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2)
578static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
579#define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0)
580static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
581#define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0)
582static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
583#define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2)
584#define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2)
585static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
586#define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0)
587static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
588#define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0)
589static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
590#define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2)
591#define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2)
592static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
593#define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0)
594static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
595#define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0)
596static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
597#define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2)
598#define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2)
599static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
600#define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0)
601static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
602#define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0)
603static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
604#define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2)
605#define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2)
606static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
607#define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0)
608static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
609#define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0)
610static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
611#define ldr_f(r0,r1) LDFS(r0,r1)
612#define ldi_f(r0,i0) _ldi_f(_jit,r0,i0)
613static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
614#define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2)
615static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
616#define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0)
617static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
ba86ff93
PC
618# define unldr_x(r0, r1, i0) _unldr_x(_jit, r0, r1, i0)
619static void _unldr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
620# define unldi_x(r0, i0, i1) _unldi_x(_jit, r0, i0, i1)
621static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
4a71579b
PC
622#define ldr_d(r0,r1) LDFD(r0,r1)
623#define ldi_d(r0,i0) _ldi_d(_jit,r0,i0)
624static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
625#define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2)
626static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
627#define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0)
628static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
629#define str_f(r0,r1) STFS(r0,r1)
630#define sti_f(i0,r0) _sti_f(_jit,i0,r0)
631static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
632#define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2)
633static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
634#define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1)
635static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
ba86ff93
PC
636#define unstr_x(r0, r1, i0) _unstr_x(_jit, r0, r1, i0)
637static void _unstr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
638#define unsti_x(i0, r0, i1) _unsti_x(_jit, i0, r0, i1)
639static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t);
4a71579b
PC
640#define str_d(r0,r1) STFD(r0,r1)
641#define sti_d(i0,r0) _sti_d(_jit,i0,r0)
642static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
643#define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2)
644static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
645#define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1)
646static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
647#define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1)
648#define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1)
649static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
650#define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1)
651static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
652#define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1)
653static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
654#define bler_f(i0,r0,r1) bler_d(i0,r0,r1)
655#define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1)
656static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
657#define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1)
658static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
659#define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1)
660static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
661#define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1)
662#define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1)
663static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
664#define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1)
665static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
666#define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1)
667static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
668#define bger_f(i0,r0,r1) bger_d(i0,r0,r1)
669#define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1)
670static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
671#define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1)
672static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
673#define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1)
674static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
675#define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1)
676#define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1)
677static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
678#define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1)
679static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
680#define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1)
681static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
682#define bner_f(i0,r0,r1) bner_d(i0,r0,r1)
683#define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1)
684static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
685#define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1)
686static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
687#define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1)
688static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
689#define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1)
690#define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1)
691static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
692#define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1)
693static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
694#define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1)
695static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
696#define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1)
697#define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1)
698static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
699#define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1)
700static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
701#define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1)
702static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
703#define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1)
704#define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1)
705static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
706#define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1)
707static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
708#define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1)
709static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
710#define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1)
711#define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1)
712static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
713#define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1)
714static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
715#define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1)
716static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
717#define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1)
718#define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1)
719static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
720#define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1)
721static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
722#define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1)
723static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
724#define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1)
725#define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1)
726static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
727#define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1)
728static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
729#define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1)
730static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
731#define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1)
732#define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1)
733static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
734#define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1)
735static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
736#define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1)
737static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
738#define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1)
739#define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1)
740static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
741#define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1)
742static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
743#define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1)
744static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
745# define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
746static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
747#endif
748
749#if CODE
750static void
751_M7(jit_state_t *_jit, jit_word_t _p,
752 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t r2, jit_word_t f1)
753{
754 assert(!(_p & ~0x3fL));
755 assert(!(x6 & ~0x3fL));
756 assert(!(ht & ~0x3L));
757 assert(!(r3 & ~0x7fL));
758 assert(!(r2 & ~0x7fL));
759 assert(!(f1 & ~0x7fL));
760 TSTREG2(r2, r3);
761 TSTPRED(_p);
762 TSTFREG1(f1);
763 inst((6L<<37)|(1L<<36)|(x6<<30)|(ht<<28)|
764 (r3<<20)|(r2<<13)|(f1<<6)|_p, INST_M);
765 SETFREG(f1);
766 SETREG(r3);
767}
768
769static void
770_M8(jit_state_t *_jit, jit_word_t _p,
771 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t im, jit_word_t f1)
772{
773 assert(!(_p & ~0x3fL));
774 assert(!(x6 & ~0x3fL));
775 assert(!(ht & ~0x3L));
776 assert(!(r3 & ~0x7fL));
777 assert(im > -256 && im <= 255);
778 assert(!(f1 & ~0x7fL));
779 TSTREG1(r3);
780 TSTPRED(_p);
781 TSTFREG1(f1);
782 inst((7L<<37)|(((im>>8)&1L)<<36)|(x6<<30)|(ht<<28)|
783 (((im>>8)&1L)<<27)|(r3<<20)|((im&0x7fLL)<<13)|(f1<<6)|_p, INST_M);
784 SETFREG(f1);
785 SETREG(r3);
786}
787
788static void
789_M9(jit_state_t *_jit, jit_word_t _p,
790 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t f1)
791{
792 assert(!(_p & ~0x3fL));
793 assert(!(x6 & ~0x3fL));
794 assert(!(ht & ~0x3L));
795 assert(!(r3 & ~0x7fL));
796 assert(!(f1 & ~0x7fL));
797 TSTREG1(r3);
798 TSTPRED(_p);
799 TSTFREG1(f1);
800 inst((6L<<37)|(x6<<30)|(ht<<28)|(r3<<20)|(f1<<6)|_p, INST_M);
801 SETFREG(f1);
802}
803
804static void
805_M10(jit_state_t *_jit, jit_word_t _p,
806 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t f2, jit_word_t im)
807{
808 assert(!(_p & ~0x3fL));
809 assert(!(x6 & ~0x3fL));
810 assert(!(ht & ~0x3L));
811 assert(!(r3 & ~0x7fL));
812 assert(!(f2 & ~0x7fL));
813 assert(im > -256 && im <= 255);
814 TSTREG1(r3);
815 TSTFREG1(f2);
816 TSTPRED(_p);
817 inst((7L<<37)|(((im>>8)&1L)<<36)|(x6<<30)|(ht<<28)|
818 (((im>>8)&1L)<<27)|(r3<<20)|(f2<<13)|((im&0x7fL)<<6)|_p, INST_M);
819 SETREG(r3);
820}
821
822static void
823_M11(jit_state_t *_jit, jit_word_t _p,
824 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t f2, jit_word_t f1)
825{
826 assert(!(_p & ~0x3fL));
827 assert(!(x6 & ~0x3fL));
828 assert(!(ht & ~0x3L));
829 assert(!(r3 & ~0x7fL));
830 assert(!(f2 & ~0x7fL));
831 assert(!(f1 & ~0x7fL));
832 TSTREG1(r3);
833 TSTPRED(_p);
834 TSTFREG2(f1, f2);
835 inst((6L<<37)|(x6<<30)|(ht<<28)|(1L<<27)|
836 (r3<<20)|(f2<<13)|(f1<<6)|_p, INST_M);
837 SETFREG(f1);
838 SETFREG(f2);
839}
840
841static void
842_M12(jit_state_t *_jit, jit_word_t _p,
843 jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t f2, jit_word_t f1)
844{
845 assert(!(_p & ~0x3fL));
846 assert(!(x6 & ~0x3fL));
847 assert(!(ht & ~0x3L));
848 assert(!(r3 & ~0x7fL));
849 assert(!(f2 & ~0x7fL));
850 assert(!(f1 & ~0x7fL));
851 TSTREG1(r3);
852 TSTPRED(_p);
853 TSTFREG2(f1, f2);
854 inst((6L<<37)|(1L<<36)|(x6<<30)|(ht<<28)|
855 (1L<<27)|(r3<<20)|(f2<<13)|(f1<<6)|_p, INST_M);
856 SETFREG(f1);
857 SETFREG(f2);
858 SETREG(r3);
859}
860
861static void
862_M18(jit_state_t *_jit, jit_word_t _p,
863 jit_word_t x6, jit_word_t r2, jit_word_t f1)
864{
865 assert(!(_p & ~0x3fL));
866 assert(!(x6 & ~0x3fL));
867 assert(!(r2 & ~0x7fL));
868 assert(!(f1 & ~0x7fL));
869 TSTREG1(r2);
870 TSTPRED(_p);
871 TSTFREG1(f1);
872 inst((6L<<37)|(x6<<30)|(1L<<27)|(r2<<13)|(f1<<6)|_p, INST_M);
873 SETFREG(f1);
874}
875
876static void
877_M19(jit_state_t *_jit, jit_word_t _p,
878 jit_word_t x6, jit_word_t f2, jit_word_t r1)
879{
880 assert(!(_p & ~0x3fL));
881 assert(!(x6 & ~0x3fL));
882 assert(!(f2 & ~0x7fL));
883 assert(!(r1 & ~0x7fL));
884 TSTFREG1(f2);
885 TSTPRED(_p);
886 TSTREG1(r1);
887 inst((4L<<37)|(x6<<30)|(1L<<27)|(f2<<13)|(r1<<6)|_p, INST_M);
888 SETREG(r1);
889}
890
891static void
892F1_(jit_state_t *_jit, jit_word_t _p,
893 jit_word_t op, jit_word_t x, jit_word_t sf,
894 jit_word_t f4, jit_word_t f3, jit_word_t f2, jit_word_t f1)
895{
896 assert(!(_p & ~0x3fL));
897 assert(!(op & ~0xfL));
898 assert(!(x & ~0x1L));
899 assert(!(sf & ~0x3L));
900 assert(!(f4 & ~0x7fL));
901 assert(!(f3 & ~0x7fL));
902 assert(!(f2 & ~0x7fL));
903 assert(!(f1 & ~0x7fL));
904 TSTFREG3(f2, f3, f4);
905 TSTPRED(_p);
906 TSTFREG1(f1);
907 inst((op<<37)|(x<<36)|(sf<<34)|(f4<<27)|
908 (f3<<20)|(f2<<13)|(f1<<6)|_p, INST_F);
909 SETFREG(f1);
910}
911
912static void
913F4_(jit_state_t *_jit, jit_word_t _p,
914 jit_word_t rb, jit_word_t sf, jit_word_t ra, jit_word_t p2,
915 jit_word_t f3, jit_word_t f2, jit_word_t ta, jit_word_t p1)
916{
917 assert(!(_p & ~0x3fL));
918 assert(!(rb & ~0x1L));
919 assert(!(sf & ~0x3L));
920 assert(!(ra & ~0x1L));
921 assert(!(p2 & ~0x3fL));
922 assert(!(f3 & ~0x7fL));
923 assert(!(f2 & ~0x7fL));
924 assert(!(ta & ~0x1L));
925 assert(!(p1 & ~0x3fL));
926 TSTFREG2(f2, f3);
927 TSTPRED(_p);
928 inst((4L<<37)|(rb<<36)|(sf<<34)|(ra<<33)|(p2<<27)|
929 (f3<<20)|(f2<<13)|(ta<<12)|(p1<<6)|_p, INST_F);
930 if (p1)
931 _jitc->pred |= 1 << p1;
932 if (p2)
933 _jitc->pred |= 1 << p2;
934}
935
936static void
937F5_(jit_state_t *_jit, jit_word_t _p,
938 jit_word_t p2, jit_word_t fc, jit_word_t f2, jit_word_t ta, jit_word_t p1)
939{
940 assert(!(_p & ~0x3fL));
941 assert(!(p2 & ~0x3fL));
942 assert(!(fc & ~0x1ffL));
943 assert(!(f2 & ~0x7fL));
944 assert(!(ta & ~0x1L));
945 assert(!(p1 & ~0x3fL));
946 TSTFREG1(f2);
947 TSTPRED(_p);
948 inst((5L<<37)|(((fc>>7)&3L)<<33)|(p2<<27)|
949 ((fc&0x7fL)<<20)|(f2<<13)|(ta<<12)|(p1<<6)|_p, INST_F);
950 if (p1)
951 _jitc->pred |= 1 << p1;
952 if (p2)
953 _jitc->pred |= 1 << p2;
954}
955
956static void
957F6x_(jit_state_t *_jit, jit_word_t _p,
958 jit_word_t op, jit_word_t q, jit_word_t sf,
959 jit_word_t p2, jit_word_t f3, jit_word_t f2, jit_word_t f1)
960{
961 assert(!(_p & ~0x3fL));
962 assert(!(op & ~0xfL));
963 assert(!(q & ~0x1L));
964 assert(!(sf & ~0x3L));
965 assert(!(p2 & ~0x3fL));
966 assert(!(f3 & ~0x7fL));
967 assert(!(f2 & ~0x7fL));
968 assert(!(f1 & ~0x7fL));
969 TSTFREG2(f2, f3);
970 TSTPRED(_p);
971 TSTFREG1(f1);
972 inst((op<<37)|(q<<36)|(sf<<34)|(1L<<33)|
973 (p2<<27)|(f3<<20)|(f2<<13)|(f1<<6)|_p, INST_F);
974 SETFREG(f1);
975 if (p2)
976 _jitc->pred |= 1 << p2;
977}
978
979static void
980F8_(jit_state_t *_jit, jit_word_t _p,
981 jit_word_t op, jit_word_t sf, jit_word_t x6,
982 jit_word_t f3, jit_word_t f2, jit_word_t f1)
983{
984 assert(!(_p & ~0x3fL));
985 assert(!(op & ~0xfL));
986 assert(!(sf & ~0x3L));
987 assert(!(x6 & ~0x3fL));
988 assert(!(f3 & ~0x7fL));
989 assert(!(f2 & ~0x7fL));
990 assert(!(f1 & ~0x7fL));
991 TSTFREG2(f2, f3);
992 TSTPRED(_p);
993 TSTFREG1(f1);
994 inst((op<<37)|(sf<<34)|(x6<<27)|(f3<<20)|(f2<<13)|(f1<<6)|_p, INST_F);
995 SETFREG(f1);
996}
997
998static void
999F12_(jit_state_t *_jit, jit_word_t _p,
1000 jit_word_t sf, jit_word_t x6, jit_word_t omsk, jit_word_t amsk)
1001{
1002 assert(!(_p & ~0x3fL));
1003 assert(!(sf & ~0x3L));
1004 assert(!(x6 & ~0x3fL));
1005 assert(!(omsk & ~0x7fL));
1006 assert(!(amsk & ~0x7fL));
1007 TSTPRED(_p);
1008 inst((sf<<34)|(x6<<27)|(omsk<<20)|(amsk<<13), INST_F);
1009}
1010
1011static void
1012F14x_(jit_state_t* _jit, jit_word_t _p,
1013 jit_word_t sf, jit_word_t x, jit_word_t x6, jit_word_t im)
1014{
1015 assert(!(_p & ~0x3fL));
1016 assert(!(sf & ~0x3L));
1017 assert(!(x & ~0x1L));
1018 assert(!(x6 & ~0x3fL));
1019 assert(!(im & ~0x1ffffL));
1020 TSTPRED(_p);
1021 inst((((im>>20)&1L)<<36)|(sf<<34)|(x<<33)|
1022 (x6<<27)|((im&0xffffL)<<6)|_p, INST_F);
1023}
1024
1025static void
1026F16_(jit_state_t* _jit, jit_word_t _p,
1027 jit_word_t y, jit_word_t im)
1028{
1029 assert(!(_p & ~0x3fL));
1030 assert(!(y & ~0x1L));
1031 assert(!(im & ~0x1ffffL));
1032 TSTPRED(_p);
1033 inst((((im>>20)&1L)<<36)|(y<<27)|(1L<<26)|((im&0xffffL)<<6)|_p, INST_F);
1034}
1035
1036static void
1037_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
1038{
1039 union {
1040 jit_int32_t i;
1041 jit_float32_t f;
1042 } data;
1043 jit_int32_t reg;
1044
1045 if (_jitc->no_data) {
1046 data.f = *i0;
1047 reg = jit_get_reg(jit_class_gpr);
1048 movi(rn(reg), data.i & 0xffffffff);
1049 SETF_S(r0, rn(reg));
1050 jit_unget_reg(reg);
1051 }
1052 else
1053 ldi_f(r0, (jit_word_t)i0);
1054}
1055
1056static void
1057_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
1058{
1059 union {
1060 jit_word_t w;
1061 jit_float64_t d;
1062 } data;
1063 jit_int32_t reg;
1064
1065 if (_jitc->no_data) {
1066 data.d = *i0;
1067 reg = jit_get_reg(jit_class_gpr);
1068 movi(rn(reg), data.w);
1069 SETF_D(r0, rn(reg));
1070 jit_unget_reg(reg);
1071 }
1072 else
1073 ldi_d(r0, (jit_word_t)i0);
1074}
1075
1076static void
1077_movr_w_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1078{
1079 /* Should be used only in this case (with out0 == 120) */
1080 if (r1 >= 120)
1081 r1 = _jitc->rout + (r1 - 120);
1082 SETF_S(r0, r1);
1083}
1084
1085static void
1086_movr_f_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1087{
1088 /* Should actually be used only in this case (with out0 == 120) */
1089 if (r0 >= 120)
1090 r0 = _jitc->rout + (r0 - 120);
1091 GETF_S(r0, r1);
1092}
1093
1094static void
ba86ff93 1095_movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
4a71579b 1096{
ba86ff93
PC
1097 jit_int32_t reg;
1098 reg = jit_get_reg(jit_class_gpr);
1099 movi(rn(reg), i0);
1100 movr_w_f(r0, rn(reg));
1101 jit_unget_reg(reg);
4a71579b
PC
1102}
1103
1104static void
1105_movr_w_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1106{
1107 /* Should be used only in this case (with out0 == 120) */
1108 if (r1 >= 120)
1109 r1 = _jitc->rout + (r1 - 120);
1110 SETF_D(r0, r1);
1111}
1112
1113static void
1114_movr_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1115{
1116 /* Should be used only in this case (with out0 == 120) */
1117 if (r0 >= 120)
1118 r0 = _jitc->rout + (r0 - 120);
1119 GETF_D(r0, r1);
1120}
1121
1122static void
ba86ff93 1123_movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
4a71579b 1124{
ba86ff93
PC
1125 jit_int32_t reg;
1126 reg = jit_get_reg(jit_class_gpr);
1127 movi(rn(reg), i0);
1128 movr_w_d(r0, rn(reg));
1129 jit_unget_reg(reg);
4a71579b
PC
1130}
1131
1132#define fpr_opi(name, type, size) \
1133static void \
1134_##name##i_##type(jit_state_t *_jit, \
1135 jit_int32_t r0, jit_int32_t r1, \
1136 jit_float##size##_t *i0) \
1137{ \
1138 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
1139 movi_##type(rn(reg), i0); \
1140 name##r_##type(r0, r1, rn(reg)); \
1141 jit_unget_reg(reg); \
1142}
1143#define fpr_bopi(name, type, size) \
1144static jit_word_t \
1145_b##name##i_##type(jit_state_t *_jit, \
1146 jit_word_t i0, jit_int32_t r0, \
1147 jit_float##size##_t *i1) \
1148{ \
1149 jit_word_t word; \
1150 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
1151 jit_class_nospill); \
1152 movi_##type(rn(reg), i1); \
1153 word = b##name##r_##type(i0, r0, rn(reg)); \
1154 jit_unget_reg(reg); \
1155 return (word); \
1156}
1157#define fopi(name) fpr_opi(name, f, 32)
1158#define fbopi(name) fpr_bopi(name, f, 32)
1159#define dopi(name) fpr_opi(name, d, 64)
1160#define dbopi(name) fpr_bopi(name, d, 64)
1161
1162fopi(add)
1163fopi(sub)
1164fopi(rsb)
1165fopi(mul)
1166fopi(div)
1167dopi(add)
1168dopi(sub)
1169dopi(rsb)
1170dopi(mul)
1171dopi(div)
1172
1173/* translation from gcc -O0 */
1174static void
1175_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1176{
1177 jit_int32_t t0, t1, t2;
1178 t0 = jit_get_reg(jit_class_fpr);
1179 t1 = jit_get_reg(jit_class_fpr);
1180 t2 = jit_get_reg(jit_class_fpr);
1181 FRCPA(rn(t0), PR_6, r1, r2);
1182 FNMA_p(rn(t1), r2, rn(t0), GR_1, SF_S1, PR_6);
1183 FMA_p(rn(t2), rn(t0), rn(t1), rn(t0), SF_S1, PR_6);
1184 FMPY_p(rn(t1), rn(t1), rn(t1), SF_S1, PR_6);
1185 FMA_p(rn(t2), rn(t2), rn(t1), rn(t2), SF_S1, PR_6);
1186 FMPY_p(rn(t1), rn(t1), rn(t1), SF_S1, PR_6);
1187 FMA_p(rn(t1), rn(t2), rn(t1), rn(t2), SF_S1, PR_6);
1188 FMPY_S_p(rn(t2), r1, rn(t1), SF_S1, PR_6);
1189 FNMA_p(rn(t0), r2, rn(t2), r1, SF_S1, PR_6);
1190 FMA_S_p(r0, rn(t0), rn(t1), rn(t2), SF_S0, PR_6);
1191 jit_unget_reg(t2);
1192 jit_unget_reg(t1);
1193 jit_unget_reg(t0);
1194}
1195
1196static void
1197_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1198{
1199 jit_int32_t t0, t1, t2;
1200 t0 = jit_get_reg(jit_class_fpr);
1201 t1 = jit_get_reg(jit_class_fpr);
1202 t2 = jit_get_reg(jit_class_fpr);
1203 FRCPA(rn(t0), PR_6, r1, r2);
1204 FNMA_p(rn(t1), r2, rn(t0), GR_1, SF_S1, PR_6);
1205 FMA_p(rn(t2), rn(t0), rn(t1), rn(t0), SF_S1, PR_6);
1206 FMPY_p(rn(t1), rn(t1), rn(t1), SF_S1, PR_6);
1207 FMA_p(rn(t2), rn(t2), rn(t1), rn(t2), SF_S1, PR_6);
1208 FMPY_p(rn(t1), rn(t1), rn(t1), SF_S1, PR_6);
1209 FMA_p(rn(t1), rn(t2), rn(t1), rn(t2), SF_S1, PR_6);
1210 FMPY_D_p(rn(t2), r1, rn(t1), SF_S1, PR_6);
1211 FNMA_p(rn(t0), r2, rn(t2), r1, SF_S1, PR_6);
1212 FMA_D_p(r0, rn(t0), rn(t1), rn(t2), SF_S0, PR_6);
1213 jit_unget_reg(t2);
1214 jit_unget_reg(t1);
1215 jit_unget_reg(t0);
1216}
1217
1218static void
1219_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1220{
1221 jit_int32_t reg;
1222 reg = jit_get_reg(jit_class_fpr);
1223 SETF_SIG(rn(reg), r1);
1224 FCVT_XF(r0, rn(reg));
1225 FNORM_S(r0, r0);
1226 jit_unget_reg(reg);
1227}
1228
1229static void
1230_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1231{
1232 jit_int32_t reg;
1233 reg = jit_get_reg(jit_class_fpr);
1234 SETF_SIG(rn(reg), r1);
1235 FCVT_XF(r0, rn(reg));
1236 FNORM_D(r0, r0);
1237 jit_unget_reg(reg);
1238}
1239
1240static void
1241_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1242{
1243 jit_int32_t reg;
1244 reg = jit_get_reg(jit_class_fpr);
1245 FCVT_FX_TRUNC(rn(reg), r1);
1246 GETF_SIG(r0, rn(reg));
1247 FNORM(r0, r0);
1248 jit_unget_reg(reg);
1249}
1250
1251static void
1252_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1253{
1254 FCMP_LT(PR_6, PR_7, r1, r2);
1255 MOVI_p(r0, 1, PR_6);
1256 MOV_p(r0, GR_0, PR_7);
1257}
1258fopi(lt)
1259dopi(lt)
1260
1261static void
1262_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1263{
1264 FCMP_LE(PR_6, PR_7, r1, r2);
1265 MOVI_p(r0, 1, PR_6);
1266 MOV_p(r0, GR_0, PR_7);
1267}
1268fopi(le)
1269dopi(le)
1270
1271static void
1272_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1273{
1274 FCMP_EQ(PR_6, PR_7, r1, r2);
1275 MOVI_p(r0, 1, PR_6);
1276 MOV_p(r0, GR_0, PR_7);
1277}
1278fopi(eq)
1279dopi(eq)
1280
1281static void
1282_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1283{
1284 FCMP_LE(PR_6, PR_7, r2, r1);
1285 MOVI_p(r0, 1, PR_6);
1286 MOV_p(r0, GR_0, PR_7);
1287}
1288fopi(ge)
1289dopi(ge)
1290
1291static void
1292_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1293{
1294 FCMP_LT(PR_6, PR_7, r2, r1);
1295 MOVI_p(r0, 1, PR_6);
1296 MOV_p(r0, GR_0, PR_7);
1297}
1298fopi(gt)
1299dopi(gt)
1300
1301static void
1302_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1303{
1304 FCMP_EQ(PR_6, PR_7, r1, r2);
1305 MOV_p(r0, GR_0, PR_6);
1306 MOVI_p(r0, 1, PR_7);
1307}
1308fopi(ne)
1309dopi(ne)
1310
1311static void
1312_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1313{
1314 FCMP_LE(PR_6, PR_7, r2, r1);
1315 MOV_p(r0, GR_0, PR_6);
1316 MOVI_p(r0, 1, PR_7);
1317}
1318fopi(unlt)
1319dopi(unlt)
1320
1321static void
1322_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1323{
1324 FCMP_LT(PR_6, PR_7, r2, r1);
1325 MOV_p(r0, GR_0, PR_6);
1326 MOVI_p(r0, 1, PR_7);
1327}
1328fopi(unle)
1329dopi(unle)
1330
1331static void
1332_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1333{
1334 MOVI(r0, 1);
1335 FCMP_LT(PR_8, PR_9, r1, r2);
1336 FCMP_LT(PR_6, PR_7, r2, r1);
1337 MOV_p(r0, GR_0, PR_8); /* !(r1 < r2) && !(r2 < r1) */
1338 MOV_p(r0, GR_0, PR_6);
1339}
1340fopi(uneq)
1341dopi(uneq)
1342
1343static void
1344_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1345{
1346 FCMP_LT(PR_6, PR_7, r1, r2);
1347 MOV_p(r0, GR_0, PR_6);
1348 MOVI_p(r0, 1, PR_7);
1349}
1350fopi(unge)
1351dopi(unge)
1352
1353static void
1354_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1355{
1356 FCMP_LE(PR_6, PR_7, r1, r2);
1357 MOV_p(r0, GR_0, PR_6);
1358 MOVI_p(r0, 1, PR_7);
1359}
1360fopi(ungt)
1361dopi(ungt)
1362
1363static void
1364_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1365{
1366 MOVI(r0, 1);
1367 FCMP_EQ(PR_8, PR_9, r1, r2);
1368 FCMP_UNORD(PR_6, PR_7, r1, r2);
1369 MOV_p(r0, GR_0, PR_8);
1370 MOV_p(r0, GR_0, PR_6);
1371}
1372fopi(ltgt)
1373dopi(ltgt)
1374
1375static void
1376_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1377{
1378 FCMP_UNORD(PR_6, PR_7, r1, r2);
1379 MOV_p(r0, GR_0, PR_6);
1380 MOVI_p(r0, 1, PR_7);
1381}
1382fopi(ord)
1383dopi(ord)
1384
1385static void
1386_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1387{
1388 FCMP_UNORD(PR_6, PR_7, r1, r2);
1389 MOVI_p(r0, 1, PR_6);
1390 MOV_p(r0, GR_0, PR_7);
1391}
1392fopi(unord)
1393dopi(unord)
1394
1395static void
1396_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1397{
1398 jit_int32_t reg;
1399 reg = jit_get_reg(jit_class_gpr);
1400 movi(rn(reg), i0);
1401 ldr_f(r0, rn(reg));
1402 jit_unget_reg(reg);
1403}
1404
1405static void
1406_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1407{
1408 jit_int32_t reg;
1409 reg = jit_get_reg(jit_class_gpr);
1410 addr(rn(reg), r1, r2);
1411 ldr_f(r0, rn(reg));
1412 jit_unget_reg(reg);
1413}
1414
1415static void
1416_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1417{
1418 jit_int32_t reg;
1419 if (r0) {
1420 reg = jit_get_reg(jit_class_gpr);
1421 addi(rn(reg), r1, i0);
1422 ldr_f(r0, rn(reg));
1423 jit_unget_reg(reg);
1424 }
1425 else
1426 ldr_f(r0, r1);
1427}
1428
ba86ff93
PC
1429static void
1430_unldr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1431{
1432 if (jit_unaligned_p())
1433 fallback_unldr_x(r0, r1, i0);
1434 else
1435 generic_unldr_x(r0, r1, i0);
1436}
1437
1438static void
1439_unldi_x(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
1440{
1441 if (jit_unaligned_p())
1442 fallback_unldi_x(r0, i0, i1);
1443 else
1444 generic_unldi_x(r0, i0, i1);
1445}
1446
4a71579b
PC
1447static void
1448_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1449{
1450 jit_int32_t reg;
1451 reg = jit_get_reg(jit_class_gpr);
1452 movi(rn(reg), i0);
1453 ldr_d(r0, rn(reg));
1454 jit_unget_reg(reg);
1455}
1456
1457static void
1458_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1459{
1460 jit_int32_t reg;
1461 reg = jit_get_reg(jit_class_gpr);
1462 addr(rn(reg), r1, r2);
1463 ldr_d(r0, rn(reg));
1464 jit_unget_reg(reg);
1465}
1466
1467static void
1468_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1469{
1470 jit_int32_t reg;
1471 if (r0) {
1472 reg = jit_get_reg(jit_class_gpr);
1473 addi(rn(reg), r1, i0);
1474 ldr_d(r0, rn(reg));
1475 jit_unget_reg(reg);
1476 }
1477 else
1478 ldr_d(r0, r1);
1479}
1480
1481static void
1482_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1483{
1484 jit_int32_t reg;
1485 reg = jit_get_reg(jit_class_gpr);
1486 movi(rn(reg), i0);
1487 str_f(rn(reg), r0);
1488 jit_unget_reg(reg);
1489}
1490
1491static void
1492_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1493{
1494 jit_int32_t reg;
1495 reg = jit_get_reg(jit_class_gpr);
1496 addr(rn(reg), r0, r1);
1497 str_f(rn(reg), r2);
1498 jit_unget_reg(reg);
1499}
1500
1501static void
1502_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1503{
1504 jit_int32_t reg;
1505 if (i0) {
1506 reg = jit_get_reg(jit_class_gpr);
1507 addi(rn(reg), r0, i0);
1508 str_f(rn(reg), r1);
1509 jit_unget_reg(reg);
1510 }
1511 else
1512 str_f(r0, r1);
1513}
1514
ba86ff93
PC
1515static void
1516_unstr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1517{
1518 if (jit_unaligned_p())
1519 fallback_unstr_x(r0, r1, i0);
1520 else
1521 generic_unstr_x(r0, r1, i0);
1522}
1523
1524static void
1525_unsti_x(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
1526{
1527 if (jit_unaligned_p())
1528 fallback_unsti_x(i0, r0, i1);
1529 else
1530 fallback_unsti_x(i0, r0, i1);
1531}
1532
4a71579b
PC
1533static void
1534_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1535{
1536 jit_int32_t reg;
1537 reg = jit_get_reg(jit_class_gpr);
1538 movi(rn(reg), i0);
1539 str_d(rn(reg), r0);
1540 jit_unget_reg(reg);
1541}
1542
1543static void
1544_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1545{
1546 jit_int32_t reg;
1547 reg = jit_get_reg(jit_class_gpr);
1548 addr(rn(reg), r0, r1);
1549 str_d(rn(reg), r2);
1550 jit_unget_reg(reg);
1551}
1552
1553static void
1554_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1555{
1556 jit_int32_t reg;
1557 if (i0) {
1558 reg = jit_get_reg(jit_class_gpr);
1559 addi(rn(reg), r0, i0);
1560 str_d(rn(reg), r1);
1561 jit_unget_reg(reg);
1562 }
1563 else
1564 str_d(r0, r1);
1565}
1566
1567static void
1568_sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1569{
1570 movr_f(GR_8, r1);
1571 calli((jit_word_t)sqrtf);
1572 MOVF(r0, GR_8);
1573}
1574
ba86ff93
PC
1575static void
1576_fnmar_f(jit_state_t *_jit,
1577 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1578{
1579 fmar_f(r0, r1, r2, r3);
1580 negr_f(r0, r0);
1581}
1582
4a71579b
PC
1583static void
1584_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1585{
1586 movr_d(GR_8, r1);
1587 calli((jit_word_t)sqrt);
1588 MOVF(r0, GR_8);
1589}
1590
ba86ff93
PC
1591static void
1592_fnmar_d(jit_state_t *_jit,
1593 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1594{
1595 fmar_d(r0, r1, r2, r3);
1596 negr_d(r0, r0);
1597}
1598
4a71579b
PC
1599static jit_word_t
1600_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1601{
1602 jit_word_t w;
1603 FCMP_LT(PR_6, PR_7, r0, r1);
1604 sync();
1605 w = _jit->pc.w;
1606 BRI_COND((i0 - w) >> 4, PR_6);
1607 return (w);
1608}
1609fbopi(lt)
1610dbopi(lt)
1611
1612static jit_word_t
1613_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1614{
1615 jit_word_t w;
1616 FCMP_LE(PR_6, PR_7, r0, r1);
1617 sync();
1618 w = _jit->pc.w;
1619 BRI_COND((i0 - w) >> 4, PR_6);
1620 return (w);
1621}
1622fbopi(le)
1623dbopi(le)
1624
1625static jit_word_t
1626_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1627{
1628 jit_word_t w;
1629 FCMP_EQ(PR_6, PR_7, r0, r1);
1630 sync();
1631 w = _jit->pc.w;
1632 BRI_COND((i0 - w) >> 4, PR_6);
1633 return (w);
1634}
1635fbopi(eq)
1636dbopi(eq)
1637
1638static jit_word_t
1639_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1640{
1641 jit_word_t w;
1642 FCMP_LE(PR_6, PR_7, r1, r0);
1643 sync();
1644 w = _jit->pc.w;
1645 BRI_COND((i0 - w) >> 4, PR_6);
1646 return (w);
1647}
1648fbopi(ge)
1649dbopi(ge)
1650
1651static jit_word_t
1652_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1653{
1654 jit_word_t w;
1655 FCMP_LT(PR_6, PR_7, r1, r0);
1656 sync();
1657 w = _jit->pc.w;
1658 BRI_COND((i0 - w) >> 4, PR_6);
1659 return (w);
1660}
1661fbopi(gt)
1662dbopi(gt)
1663
1664static jit_word_t
1665_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1666{
1667 jit_word_t w;
1668 FCMP_EQ(PR_6, PR_7, r0, r1);
1669 sync();
1670 w = _jit->pc.w;
1671 BRI_COND((i0 - w) >> 4, PR_7);
1672 return (w);
1673}
1674fbopi(ne)
1675dbopi(ne)
1676
1677static jit_word_t
1678_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1679{
1680 jit_word_t w;
1681 FCMP_LE(PR_6, PR_7, r1, r0);
1682 sync();
1683 w = _jit->pc.w;
1684 BRI_COND((i0 - w) >> 4, PR_7);
1685 return (w);
1686}
1687fbopi(unlt)
1688dbopi(unlt)
1689
1690static jit_word_t
1691_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1692{
1693 jit_word_t w;
1694 FCMP_LT(PR_6, PR_7, r1, r0);
1695 sync();
1696 w = _jit->pc.w;
1697 BRI_COND((i0 - w) >> 4, PR_7);
1698 return (w);
1699}
1700fbopi(unle)
1701dbopi(unle)
1702
1703static jit_word_t
1704_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1705{
1706 jit_word_t w;
1707 jit_word_t junord, jne;
1708 FCMP_UNORD(PR_8, PR_9, r0, r1);
1709 sync();
1710 /* junord L1 */
1711 junord = _jit->pc.w;
1712 BRI_COND(3, PR_8);
1713 FCMP_EQ(PR_6, PR_7, r0, r1);
1714 sync();
1715 /* jne L2 */
1716 jne = _jit->pc.w;
1717 BRI_COND(2, PR_7);
1718 sync();
1719 w = _jit->pc.w;
1720 /* L1: */
1721 patch_at(jit_code_bunordr_d, junord, _jit->pc.w);
1722 BRI((i0 - w) >> 4); /* unconditional jump to patch */
1723 sync();
1724 /* L2: */
1725 patch_at(jit_code_bner_d, jne, _jit->pc.w);
1726 return (w);
1727}
1728fbopi(uneq)
1729dbopi(uneq)
1730
1731static jit_word_t
1732_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1733{
1734 jit_word_t w;
1735 FCMP_LT(PR_6, PR_7, r0, r1);
1736 sync();
1737 w = _jit->pc.w;
1738 BRI_COND((i0 - w) >> 4, PR_7);
1739 return (w);
1740}
1741fbopi(unge)
1742dbopi(unge)
1743
1744static jit_word_t
1745_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1746{
1747 jit_word_t w;
1748 FCMP_LE(PR_6, PR_7, r0, r1);
1749 sync();
1750 w = _jit->pc.w;
1751 BRI_COND((i0 - w) >> 4, PR_7);
1752 return (w);
1753}
1754fbopi(ungt)
1755dbopi(ungt)
1756
1757static jit_word_t
1758_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1759{
1760 jit_word_t w;
1761 jit_word_t jeq, junord;
1762 FCMP_EQ(PR_8, PR_9, r0, r1);
1763 /* jeq L1 */
1764 sync();
1765 jeq = _jit->pc.w;
1766 BRI_COND(4, PR_8);
1767 FCMP_UNORD(PR_6, PR_7, r0, r1);
1768 /* junord L1 */
1769 sync();
1770 junord = _jit->pc.w;
1771 BRI_COND(2, PR_6);
1772 sync();
1773 w = _jit->pc.w;
1774 BRI((i0 - w) >> 4); /* unconditional jump to patch */
1775 /* L1 */
1776 sync();
1777 patch_at(jit_code_beqr_d, jeq, _jit->pc.w);
1778 patch_at(jit_code_bordr_d, junord, _jit->pc.w);
1779 return (w);
1780}
1781fbopi(ltgt)
1782dbopi(ltgt)
1783
1784static jit_word_t
1785_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1786{
1787 jit_word_t w;
1788 FCMP_UNORD(PR_6, PR_7, r0, r1);
1789 sync();
1790 w = _jit->pc.w;
1791 BRI_COND((i0 - w) >> 4, PR_7);
1792 return (w);
1793}
1794fbopi(ord)
1795dbopi(ord)
1796
1797static jit_word_t
1798_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1799{
1800 jit_word_t w;
1801 FCMP_UNORD(PR_6, PR_7, r0, r1);
1802 sync();
1803 w = _jit->pc.w;
1804 BRI_COND((i0 - w) >> 4, PR_6);
1805 return (w);
1806}
1807fbopi(unord)
1808dbopi(unord)
1809
1810static void
1811_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1812{
1813 assert(_jitc->function->self.call & jit_call_varargs);
1814 /* Load argument. */
1815 ldr_d(r0, r1);
1816 /* Update va_list. */
1817 addi(r1, r1, 8);
1818}
1819#endif