git subrepo pull --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / lib / jit_mips-fpu.c
CommitLineData
4a71579b 1/*
c0c16242 2 * Copyright (C) 2012-2022 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 BE_P (__BYTE_ORDER == __BIG_ENDIAN)
22# define LE_P (__BYTE_ORDER == __LITTLE_ENDIAN)
23# define MIPS_fmt_S 0x10 /* float32 */
24# define MIPS_fmt_D 0x11 /* float64 */
25# define MIPS_fmt_W 0x14 /* int32 */
26# define MIPS_fmt_L 0x15 /* int64 */
27# define MIPS_fmt_PS 0x16 /* 2 x float32 */
28# define MIPS_fmt_S_PU 0x20
29# define MIPS_fmt_S_PL 0x26
30# define MIPS_ADD_fmt 0x00
31# define MIPS_LWXC1 0x00
32# define MIPS_SUB_fmt 0x01
33# define MIPS_LDXC1 0x01
34# define MIPS_MUL_fmt 0x02
35# define MIPS_DIV_fmt 0x03
36# define MIPS_SQRT_fmt 0x04
37# define MIPS_ABS_fmt 0x05
38# define MIPS_LUXC1 0x05
39# define MIPS_MOV_fmt 0x06
40# define MIPS_NEG_fmt 0x07
41# define MIPS_SWXC1 0x08
42# define MIPS_ROUND_fmt_L 0x08
43# define MIPS_TRUNC_fmt_L 0x09
44# define MIPS_SDXC1 0x09
45# define MIPS_CEIL_fmt_L 0x0a
46# define MIPS_FLOOR_fmt_L 0x0b
47# define MIPS_ROUND_fmt_W 0x0c
48# define MIPS_TRUNC_fmt_W 0x0d
49# define MIPS_SUXC1 0x0d
50# define MIPS_CEIL_fmt_W 0x0e
51# define MIPS_FLOOR_fmt_W 0x0f
52# define MIPS_RECIP 0x15
53# define MIPS_RSQRT 0x16
54# define MIPS_ALNV_PS 0x1e
55# define MIPS_CVT_fmt_S 0x20
56# define MIPS_CVT_fmt_D 0x21
57# define MIPS_CVT_fmt_W 0x24
58# define MIPS_CVT_fmt_L 0x25
59# define MIPS_PLL 0x2c
60# define MIPS_PLU 0x2d
61# define MIPS_PUL 0x2e
62# define MIPS_PUU 0x2f
63# define MIPS_MADD_fmt_S (0x20 | MIPS_fmt_S)
64# define MIPS_MADD_fmt_D (0x20 | MIPS_fmt_D)
65# define MIPS_MADD_fmt_PS (0x20 | MIPS_fmt_PS)
66# define MIPS_MSUB_fmt_S (0x28 | MIPS_fmt_S)
67# define MIPS_MSUB_fmt_D (0x28 | MIPS_fmt_D)
68# define MIPS_MSUB_fmt_PS (0x28 | MIPS_fmt_PS)
69# define MIPS_NMADD_fmt_S (0x30 | MIPS_fmt_S)
70# define MIPS_NMADD_fmt_D (0x30 | MIPS_fmt_D)
71# define MIPS_NMADD_fmt_PS (0x30 | MIPS_fmt_PS)
72# define MIPS_NMSUB_fmt_S (0x38 | MIPS_fmt_S)
73# define MIPS_NMSUB_fmt_D (0x38 | MIPS_fmt_D)
74# define MIPS_NMSUB_fmt_PS (0x38 | MIPS_fmt_PS)
75# define MIPS_cond_F 0x30
76# define MIPS_cond_UN 0x31
77# define MIPS_cond_EQ 0x32
78# define MIPS_cond_UEQ 0x33
79# define MIPS_cond_OLT 0x34
80# define MIPS_cond_ULT 0x35
81# define MIPS_cond_OLE 0x36
82# define MIPS_cond_ULE 0x37
83# define MIPS_cond_SF 0x38
84# define MIPS_cond_NGLE 0x39
85# define MIPS_cond_SEQ 0x3a
86# define MIPS_cond_NGL 0x3b
87# define MIPS_cond_LT 0x3c
88# define MIPS_cond_NGE 0x3d
89# define MIPS_cond_LE 0x3e
90# define MIPS_cond_UGT 0x3f
91# define ADD_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_ADD_fmt)
92# define ADD_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_ADD_fmt)
93# define SUB_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_SUB_fmt)
94# define SUB_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_SUB_fmt)
95# define MUL_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MUL_fmt)
96# define MUL_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MUL_fmt)
97# define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
98# define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
99# define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
100# define ABS_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
101# define NEG_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
102# define NEG_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
103# define SQRT_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
104# define SQRT_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
105# define MFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
106# define MTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
107# define DMFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
108# define DMTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMT,rt,fs,0,0)
109# define CVT_D_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_D)
110# define CVT_D_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_D)
111# define CVT_D_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_D)
112# define CVT_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_L)
113# define CVT_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_L)
114# define CVT_PS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_PS)
115# define CVT_S_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_S)
116# define CVT_S_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_S)
117# define CVT_S_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_S)
118# define CVT_S_PL(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PL)
119# define CVT_S_PU(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PU)
120# define CVT_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_W)
121# define CVT_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_W)
122# define TRUNC_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_L)
123# define TRUNC_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_L)
124# define TRUNC_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_W)
125# define TRUNC_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_W)
126# define LWC1(rt, of, rb) hrri(MIPS_LWC1, rb, rt, of)
127# define SWC1(rt, of, rb) hrri(MIPS_SWC1, rb, rt, of)
128# define LDC1(rt, of, rb) hrri(MIPS_LDC1, rb, rt, of)
129# define SDC1(rt, of, rb) hrri(MIPS_SDC1, rb, rt, of)
130# define MOV_S(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_MOV_fmt)
131# define MOV_D(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_MOV_fmt)
132# define BC1F(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCF,im)
133# define BC1T(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCT,im)
134# define C_F_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_F)
135# define C_F_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_F)
136# define C_F_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_F)
137# define C_UN_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UN)
138# define C_UN_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UN)
139# define C_UN_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UN)
140# define C_EQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_EQ)
141# define C_EQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_EQ)
142# define C_EQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_EQ)
143# define C_UEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UEQ)
144# define C_UEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UEQ)
145# define C_UEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UEQ)
146# define C_OLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLT)
147# define C_OLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLT)
148# define C_OLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLT)
149# define C_ULT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULT)
150# define C_ULT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULT)
151# define C_ULT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULT)
152# define C_OLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLE)
153# define C_OLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLE)
154# define C_OLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLE)
155# define C_ULE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULE)
156# define C_ULE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULE)
157# define C_ULE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULE)
158# define C_SF_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SF)
159# define C_SF_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SF)
160# define C_SF_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SF)
161# define C_NGLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGLE)
162# define C_NGLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGLE)
163# define C_NGLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGLE)
164# define C_SEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SEQ)
165# define C_SEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SEQ)
166# define C_SEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SEQ)
167# define C_NGL_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGL)
168# define C_NGL_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGL)
169# define C_NGL_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGL)
170# define C_NLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLT)
171# define C_NLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLT)
172# define C_NLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLT)
173# define C_NGE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGE)
174# define C_NGE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGE)
175# define C_NGE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGE)
176# define C_NLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLE)
177# define C_NLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLE)
178# define C_NLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLE)
179# define C_UGT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UGT)
180# define C_UGT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UGT)
181# define C_UGT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UGT)
182# define c_cond_fmt(fm,ft,fs,cc) _c_cond_fmt(_jit,fm,ft,fs,cc)
183static void
184_c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
185 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc);
186# define addr_f(r0,r1,r2) ADD_S(r0,r1,r2)
187# define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
188static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
189# define addr_d(r0,r1,r2) ADD_D(r0,r1,r2)
190# define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
191static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
192# define subr_f(r0,r1,r2) SUB_S(r0,r1,r2)
193# define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
194static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
195# define subr_d(r0,r1,r2) SUB_D(r0,r1,r2)
196# define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
197static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
198# define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
199# define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
200static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
201# define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
202# define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
203static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
204# define mulr_f(r0,r1,r2) MUL_S(r0,r1,r2)
205# define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
206static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
207# define mulr_d(r0,r1,r2) MUL_D(r0,r1,r2)
208# define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
209static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
210# define divr_f(r0,r1,r2) DIV_S(r0,r1,r2)
211# define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
212static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
213# define divr_d(r0,r1,r2) DIV_D(r0,r1,r2)
214# define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
215static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
216# define absr_f(r0,r1) ABS_S(r0,r1)
217# define absr_d(r0,r1) ABS_D(r0,r1)
218# define negr_f(r0,r1) NEG_S(r0,r1)
219# define negr_d(r0,r1) NEG_D(r0,r1)
220# define sqrtr_f(r0,r1) SQRT_S(r0,r1)
221# define sqrtr_d(r0,r1) SQRT_D(r0,r1)
222# define movr_w_f(r0, r1) MTC1(r1, r0)
223# define movr_f_w(r0, r1) MFC1(r1, r0)
224# define movi_f_w(r0, i0) _movi_f_w(_jit, r0, i0)
225static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*);
226# define extr_f(r0, r1) _extr_f(_jit, r0, r1)
227static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
228# define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1)
229static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
230# if __WORDSIZE == 64
231# define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1)
232static void _truncr_f_l(jit_state_t*,jit_int32_t,jit_int32_t);
233# endif
234# define extr_d_f(r0, r1) CVT_S_D(r0, r1)
235# define ldr_f(r0, r1) LWC1(r0, 0, r1)
236# define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
237static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
238# define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2)
239static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
240# define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
241static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
242# define str_f(r0, r1) SWC1(r1, 0, r0)
243# define sti_f(i0, r0) _sti_f(_jit, i0, r0)
244static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
245# define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2)
246static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
247# define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
248static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
249# define movr_f(r0, r1) _movr_f(_jit, r0, r1)
250static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t);
251# define movi_f(r0, i0) _movi_f(_jit, r0, i0)
252static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
253# if NEW_ABI
254# if __WORDSIZE == 32
255# define movi64(r0, i0) _movi64(_jit, r0, i0)
256static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t);
257# else
258# define movi64(r0, i0) movi(r0, i0)
259# endif
260# define movr_w_d(r0, r1) DMTC1(r1, r0)
261# define movr_d_w(r0, r1) DMFC1(r0, r1)
262# define movi_d_w(r0, i0) _movi_d_w(_jit,r0,i0)
263static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t*);
264# else
265# define movr_ww_d(r0, r1, r2) _movr_ww_d(_jit, r0, r1, r2)
266static void _movr_ww_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
267# define movr_d_ww(r0, r1, r2) _movr_d_ww(_jit, r0, r1, r2)
268static void _movr_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
269# define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0)
270static void _movi_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
271# endif
272# define extr_d(r0, r1) _extr_d(_jit, r0, r1)
273static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
274# define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1)
275static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
276# if __WORDSIZE == 64
277# define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1)
278static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
279# endif
280# define ldr_d(r0, r1) _ldr_d(_jit, r0, r1)
281static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t);
282# define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
283static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
284# define ldxr_d(r0, r1, r2) _ldxr_d(_jit, r0, r1, r2)
285static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
286# define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
287static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
288# define str_d(r0, r1) _str_d(_jit, r0, r1)
289static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t);
290# define sti_d(i0, r0) _sti_d(_jit, i0, r0)
291static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
292# define stxr_d(r0, r1, r2) _stxr_d(_jit, r0, r1, r2)
293static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
294# define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
295static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
296# define movr_d(r0, r1) _movr_d(_jit, r0, r1)
297static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
298# define movi_d(r0, i0) _movi_d(_jit, r0, i0)
299static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
300# define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
301static void _ltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
302# define lti_f(r0, r1, i2) _lti_f(_jit, r0, r1, i2)
303static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
304# define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
305static void _ler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
306# define lei_f(r0, r1, i2) _lei_f(_jit, r0, r1, i2)
307static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
308# define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
309static void _eqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
310# define eqi_f(r0, r1, i2) _eqi_f(_jit, r0, r1, i2)
311static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
312# define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
313static void _ger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
314# define gei_f(r0, r1, i2) _gei_f(_jit, r0, r1, i2)
315static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
316# define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
317static void _gtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
318# define gti_f(r0, r1, i2) _gti_f(_jit, r0, r1, i2)
319static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
320# define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
321static void _ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
322# define nei_f(r0, r1, i2) _nei_f(_jit, r0, r1, i2)
323static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
324# define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
325static void _unltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
326# define unlti_f(r0, r1, i2) _unlti_f(_jit, r0, r1, i2)
327static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
328# define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
329static void _unler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
330# define unlei_f(r0, r1, i2) _unlei_f(_jit, r0, r1, i2)
331static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
332# define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
333static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
334# define uneqi_f(r0, r1, i2) _uneqi_f(_jit, r0, r1, i2)
335static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
336# define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
337static void _unger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
338# define ungei_f(r0, r1, i2) _ungei_f(_jit, r0, r1, i2)
339static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
340# define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
341static void _ungtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
342# define ungti_f(r0, r1, i2) _ungti_f(_jit, r0, r1, i2)
343static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
344# define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
345static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
346# define ltgti_f(r0, r1, i2) _ltgti_f(_jit, r0, r1, i2)
347static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
348# define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
349static void _ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
350# define ordi_f(r0, r1, i2) _ordi_f(_jit, r0, r1, i2)
351static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
352# define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
353static void _unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
354# define unordi_f(r0, r1, i2) _unordi_f(_jit, r0, r1, i2)
355static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
356# define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
357static jit_word_t _bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
358# define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
359static jit_word_t
360_blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
361# define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
362static jit_word_t _bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
363# define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
364static jit_word_t
365_blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
366# define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
367static jit_word_t _beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
368# define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
369static jit_word_t
370_beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
371# define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
372static jit_word_t _bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
373# define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
374static jit_word_t
375_bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
376# define bgtr_f(i0, r0, r1) _bgtr_f(_jit, i0, r0, r1)
377static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
378# define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
379static jit_word_t
380_bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
381# define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
382static jit_word_t _bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
383# define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
384static jit_word_t
385_bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
386# define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
387static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
388# define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
389static jit_word_t
390_bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
391# define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
392static jit_word_t _bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
393# define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
394static jit_word_t
395_bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
396# define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
397static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
398# define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
399static jit_word_t
400_buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
401# define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
402static jit_word_t _bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
403# define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
404static jit_word_t
405_bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
406# define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
407static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
408# define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
409static jit_word_t
410_bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
411# define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
412static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
413# define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
414static jit_word_t
415_bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
416# define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
417static jit_word_t _bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
418# define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
419static jit_word_t
420_bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
421# define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
422static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
423# define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0, r0, i1)
424static jit_word_t
425_bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
426# define extr_f_d(r0, r1) CVT_D_S(r0, r1)
427# define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
428static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
429# define lti_d(r0, r1, i2) _lti_d(_jit, r0, r1, i2)
430static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
431# define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
432static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
433# define lei_d(r0, r1, i2) _lei_d(_jit, r0, r1, i2)
434static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
435# define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
436static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
437# define eqi_d(r0, r1, i2) _eqi_d(_jit, r0, r1, i2)
438static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
439# define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
440static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
441# define gei_d(r0, r1, i2) _gei_d(_jit, r0, r1, i2)
442static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
443# define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
444static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
445# define gti_d(r0, r1, i2) _gti_d(_jit, r0, r1, i2)
446static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
447# define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
448static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
449# define nei_d(r0, r1, i2) _nei_d(_jit, r0, r1, i2)
450static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
451# define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
452static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
453# define unlti_d(r0, r1, i2) _unlti_d(_jit, r0, r1, i2)
454static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
455# define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
456static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
457# define unlei_d(r0, r1, i2) _unlei_d(_jit, r0, r1, i2)
458static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
459# define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
460static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
461# define uneqi_d(r0, r1, i2) _uneqi_d(_jit, r0, r1, i2)
462static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
463# define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
464static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
465# define ungei_d(r0, r1, i2) _ungei_d(_jit, r0, r1, i2)
466static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
467# define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
468static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
469# define ungti_d(r0, r1, i2) _ungti_d(_jit, r0, r1, i2)
470static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
471# define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
472static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
473# define ltgti_d(r0, r1, i2) _ltgti_d(_jit, r0, r1, i2)
474static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
475# define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
476static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
477# define ordi_d(r0, r1, i2) _ordi_d(_jit, r0, r1, i2)
478static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
479# define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
480static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
481# define unordi_d(r0, r1, i2) _unordi_d(_jit, r0, r1, i2)
482static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
483# define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
484static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
485# define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
486static jit_word_t
487_blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
488# define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
489static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
490# define blei_d(i0, r0, i1) _blei_d(_jit, i0, r0, i1)
491static jit_word_t
492_blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
493# define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
494static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
495# define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
496static jit_word_t
497_beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
498# define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
499static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
500# define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
501static jit_word_t
502_bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
503# define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
504static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
505# define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
506static jit_word_t
507_bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
508# define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
509static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
510# define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
511static jit_word_t
512_bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
513# define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
514static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
515# define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
516static jit_word_t
517_bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
518# define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
519static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
520# define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
521static jit_word_t
522_bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
523# define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
524static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
525# define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0, r0, i1)
526static jit_word_t
527_buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
528# define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
529static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
530# define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
531static jit_word_t
532_bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
533# define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
534static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
535# define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
536static jit_word_t
537_bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
538# define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
539static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
540# define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
541static jit_word_t
542_bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
543# define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
544static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
545# define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
546static jit_word_t
547_bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
548# define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
549static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
550# define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
551static jit_word_t
552_bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
553# define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
554static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
555#endif
556
557#if CODE
558static void
559_c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
560 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc)
561{
562 jit_instr_t i;
563 i.cc.b = cc;
564 i.fs.b = fs;
565 i.ft.b = ft;
566 i.fm.b = fm;
567 i.hc.b = MIPS_COP1;
568 ii(i.op);
569}
570
571# define fpr_opi(name, type, size) \
572static void \
573_##name##i_##type(jit_state_t *_jit, \
574 jit_int32_t r0, jit_int32_t r1, \
575 jit_float##size##_t *i0) \
576{ \
577 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
578 movi_##type(rn(reg), i0); \
579 name##r_##type(r0, r1, rn(reg)); \
580 jit_unget_reg(reg); \
581}
582# define fpr_bopi(name, type, size) \
583static jit_word_t \
584_b##name##i_##type(jit_state_t *_jit, \
585 jit_word_t i0, jit_int32_t r0, \
586 jit_float##size##_t *i1) \
587{ \
588 jit_word_t word; \
589 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
590 jit_class_nospill); \
591 movi_##type(rn(reg), i1); \
592 word = b##name##r_##type(i0, r0, rn(reg)); \
593 jit_unget_reg(reg); \
594 return (word); \
595}
596# define fopi(name) fpr_opi(name, f, 32)
597# define fbopi(name) fpr_bopi(name, f, 32)
598# define dopi(name) fpr_opi(name, d, 64)
599# define dbopi(name) fpr_bopi(name, d, 64)
600
601fopi(add)
602fopi(sub)
603fopi(rsb)
604fopi(mul)
605fopi(div)
606
607static void
608_movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
609{
610 union {
611 jit_int32_t i;
612 jit_float32_t f;
613 } data;
614
615 data.f = *i0;
616 movi(r0, data.i);
617}
618
619static void
620_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
621{
622 jit_int32_t t0;
623 t0 = jit_get_reg(jit_class_fpr);
624# if __WORDSIZE == 32
625 MTC1(r1, rn(t0));
626 CVT_S_W(r0, rn(t0));
627# else
628 DMTC1(r1, rn(t0));
629 CVT_S_L(r0, rn(t0));
630# endif
631 jit_unget_reg(t0);
632}
633
634static void
635_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
636{
637 jit_int32_t t0;
638 t0 = jit_get_reg(jit_class_fpr);
639 TRUNC_W_S(rn(t0), r1);
640 MFC1(r0, rn(t0));
641 jit_unget_reg(t0);
642}
643
644# if __WORDSIZE == 64
645static void
646_truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
647{
648 jit_int32_t t0;
649 t0 = jit_get_reg(jit_class_fpr);
650 TRUNC_L_S(rn(t0), r1);
651 DMFC1(r0, rn(t0));
652 jit_unget_reg(t0);
653}
654# endif
655
656static void
657_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
658{
659 jit_int32_t reg;
660 if (can_sign_extend_short_p(i0))
661 LWC1(r0, i0, _ZERO_REGNO);
662 else {
663 reg = jit_get_reg(jit_class_gpr);
664 movi(rn(reg), i0);
665 ldr_f(r0, rn(reg));
666 jit_unget_reg(reg);
667 }
668}
669
670static void
671_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
672{
673 jit_int32_t reg;
674 reg = jit_get_reg(jit_class_gpr);
675 addr(rn(reg), r1, r2);
676 ldr_f(r0, rn(reg));
677 jit_unget_reg(reg);
678}
679
680static void
681_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
682{
683 jit_int32_t reg;
684 if (can_sign_extend_short_p(i0))
685 LWC1(r0, i0, r1);
686 else {
687 reg = jit_get_reg(jit_class_gpr);
688 addi(rn(reg), r1, i0);
689 ldr_f(r0, rn(reg));
690 jit_unget_reg(reg);
691 }
692}
693
694static void
695_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
696{
697 jit_int32_t reg;
698 if (can_sign_extend_short_p(i0))
699 SWC1(r0, i0, _ZERO_REGNO);
700 else {
701 reg = jit_get_reg(jit_class_gpr);
702 movi(rn(reg), i0);
703 str_f(rn(reg), r0);
704 jit_unget_reg(reg);
705 }
706}
707
708static void
709_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
710{
711 jit_int32_t reg;
712 reg = jit_get_reg(jit_class_gpr);
713 addr(rn(reg), r0, r1);
714 str_f(rn(reg), r2);
715 jit_unget_reg(reg);
716}
717
718static void
719_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
720{
721 jit_int32_t reg;
722 if (can_sign_extend_short_p(i0))
723 SWC1(r1, i0, r0);
724 else {
725 reg = jit_get_reg(jit_class_gpr);
726 addi(rn(reg), r0, i0);
727 str_f(rn(reg), r1);
728 jit_unget_reg(reg);
729 }
730}
731
732static void
733_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
734{
735 if (r0 != r1)
736 MOV_S(r0, r1);
737}
738
739static void
740_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
741{
742 union {
743 jit_int32_t i;
744 jit_float32_t f;
745 } data;
746 jit_int32_t reg;
747
748 data.f = *i0;
749 if (data.i) {
750 if (_jitc->no_data) {
751 reg = jit_get_reg(jit_class_gpr);
752 movi(rn(reg), data.i);
753 MTC1(rn(reg), r0);
754 jit_unget_reg(reg);
755 }
756 else
757 ldi_f(r0, (jit_word_t)i0);
758 }
759 else
760 MTC1(_ZERO_REGNO, r0);
761}
762
763dopi(add)
764dopi(sub)
765dopi(rsb)
766dopi(mul)
767dopi(div)
768
769#if NEW_ABI
770/* n32 abi requires 64 bit cpu */
771static void
772_movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
773{
774 if (i0 == 0)
775 OR(r0, _ZERO_REGNO, _ZERO_REGNO);
776 else if (i0 >= -32678 && i0 <= 32767)
777 DADDIU(r0, _ZERO_REGNO, i0);
778 else if (i0 >= 0 && i0 <= 65535)
779 ORI(r0, _ZERO_REGNO, i0);
780 else {
781 if (i0 >= 0 && i0 <= 0x7fffffffLL)
782 LUI(r0, i0 >> 16);
783 else if (i0 >= 0 && i0 <= 0xffffffffLL) {
784 if (i0 & 0xffff0000LL) {
785 ORI(r0, _ZERO_REGNO, (jit_word_t)(i0 >> 16));
786 DSLL(r0, r0, 16);
787 }
788 }
789 else {
790 movi(r0, (jit_word_t)(i0 >> 32));
791 if (i0 & 0xffff0000LL) {
792 DSLL(r0, r0, 16);
793 ORI(r0, r0, (jit_word_t)(i0 >> 16));
794 DSLL(r0, r0, 16);
795 }
796 else
797 DSLL32(r0, r0, 0);
798 }
799 if ((jit_word_t)i0 & 0xffff)
800 ORI(r0, r0, (jit_word_t)i0 & 0xffff);
801 }
802}
803
804static void
805_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
806{
807 jit_word_t w;
808 union {
809 jit_int64_t l;
810 jit_float64_t d;
811 } data;
812 if (_jitc->no_data) {
813 data.d = *i0;
814 movi64(r0, data.l);
815 }
816 else {
817 w = (jit_word_t)i0;
818 if (can_sign_extend_short_p(w))
819 LD(r0, w, _ZERO_REGNO);
820 else {
821 movi(r0, w);
822 LD(r0, 0, r0);
823 }
824 }
825}
826
827#else
828static void
829_movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
830{
831 assert(r1 == r2 - 1);
832 MTC1(r1, r0 + BE_P);
833 MTC1(r2, r0 + LE_P);
834}
835
836static void
837_movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
838{
839 assert(r0 == r1 - 1);
840 MFC1(r0, r2 + BE_P);
841 MFC1(r1, r2 + LE_P);
842}
843
844static void
845_movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0)
846{
847 union {
848 jit_int32_t i[2];
849 jit_int64_t l;
850 jit_float64_t d;
851 } data;
852
853 data.d = *i0;
854 movi(r0, data.i[0]);
855 movi(r1, data.i[1]);
856}
857#endif
858
859static void
860_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
861{
862 jit_int32_t t0;
863 t0 = jit_get_reg(jit_class_fpr);
864# if __WORDSIZE == 32
865 MTC1(r1, rn(t0));
866 CVT_D_W(r0, rn(t0));
867# else
868 DMTC1(r1, rn(t0));
869 CVT_D_L(r0, rn(t0));
870# endif
871 jit_unget_reg(t0);
872}
873
874static void
875_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
876{
877 jit_int32_t t0;
878 t0 = jit_get_reg(jit_class_fpr);
879 TRUNC_W_D(rn(t0), r1);
880 MFC1(r0, rn(t0));
881 jit_unget_reg(t0);
882}
883
884# if __WORDSIZE == 64
885static void
886_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
887{
888 jit_int32_t t0;
889 t0 = jit_get_reg(jit_class_fpr);
890 TRUNC_L_D(rn(t0), r1);
891 DMFC1(r0, rn(t0));
892 jit_unget_reg(t0);
893}
894# endif
895
896static void
897_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
898{
899# if __WORDSIZE == 64 || NEW_ABI
900 LDC1(r0, 0, r1);
901# else
902 LWC1(r0 + BE_P, 0, r1);
903 LWC1(r0 + LE_P, 4, r1);
904# endif
905}
906
907static void
908_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
909{
910 jit_int32_t reg;
911# if __WORDSIZE == 64 || NEW_ABI
912 if (can_sign_extend_short_p(i0))
913 LDC1(r0, i0, _ZERO_REGNO);
914 else {
915 reg = jit_get_reg(jit_class_gpr);
916 movi(rn(reg), i0);
917 LDC1(r0, 0, rn(reg));
918 jit_unget_reg(reg);
919 }
920# else
921 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
922 LWC1(r0 + BE_P, i0, _ZERO_REGNO);
923 LWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
924 }
925 else {
926 reg = jit_get_reg(jit_class_gpr);
927 movi(rn(reg), i0);
928 LWC1(r0 + BE_P, 0, rn(reg));
929 LWC1(r0 + LE_P, 4, rn(reg));
930 jit_unget_reg(reg);
931 }
932# endif
933}
934
935static void
936_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
937{
938 jit_int32_t reg;
939 reg = jit_get_reg(jit_class_gpr);
940 addr(rn(reg), r1, r2);
941 ldr_d(r0, rn(reg));
942 jit_unget_reg(reg);
943}
944
945static void
946_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
947{
948 jit_int32_t reg;
949# if __WORDSIZE == 64 || NEW_ABI
950 if (can_sign_extend_short_p(i0))
951 LDC1(r0, i0, r1);
952# else
953 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
954 LWC1(r0 + BE_P, i0, r1);
955 LWC1(r0 + LE_P, i0 + 4, r1);
956 }
957# endif
958 else {
959 reg = jit_get_reg(jit_class_gpr);
960 addi(rn(reg), r1, i0);
961 ldr_d(r0, rn(reg));
962 jit_unget_reg(reg);
963 }
964}
965
966static void
967_str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1)
968{
969# if __WORDSIZE == 64 || NEW_ABI
970 SDC1(r1, 0, r0);
971# else
972 SWC1(r1 + BE_P, 0, r0);
973 SWC1(r1 + LE_P, 4, r0);
974# endif
975}
976
977static void
978_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
979{
980 jit_int32_t reg;
981# if __WORDSIZE == 64 || NEW_ABI
982 if (can_sign_extend_short_p(i0))
983 SDC1(r0, i0, _ZERO_REGNO);
984# else
985 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
986 SWC1(r0 + BE_P, i0, _ZERO_REGNO);
987 SWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
988 }
989# endif
990 else {
991 reg = jit_get_reg(jit_class_gpr);
992 movi(rn(reg), i0);
993 str_d(rn(reg), r0);
994 jit_unget_reg(reg);
995 }
996}
997
998static void
999_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1000{
1001 jit_int32_t reg;
1002 reg = jit_get_reg(jit_class_gpr);
1003 addr(rn(reg), r0, r1);
1004 str_d(rn(reg), r2);
1005 jit_unget_reg(reg);
1006}
1007
1008static void
1009_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1010{
1011 jit_int32_t reg;
1012# if __WORDSIZE == 64 || NEW_ABI
1013 if (can_sign_extend_short_p(i0))
1014 SDC1(r1, i0, r0);
1015# else
1016 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1017 SWC1(r1 + BE_P, i0, r0);
1018 SWC1(r1 + LE_P, i0 + 4, r0);
1019 }
1020# endif
1021 else {
1022 reg = jit_get_reg(jit_class_gpr);
1023 addi(rn(reg), r0, i0);
1024 str_d(rn(reg), r1);
1025 jit_unget_reg(reg);
1026 }
1027}
1028
1029static void
1030_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1031{
1032 if (r0 != r1)
1033 MOV_D(r0, r1);
1034}
1035
1036static void
1037_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
1038{
1039 union {
1040 jit_int32_t i[2];
1041 jit_int64_t l;
1042 jit_float64_t d;
1043 } data;
1044 jit_int32_t reg;
1045
1046 data.d = *i0;
1047# if __WORDSIZE == 64 || NEW_ABI
1048 if (data.l) {
1049 if (_jitc->no_data) {
1050 reg = jit_get_reg(jit_class_gpr);
1051 movi64(rn(reg), data.l);
1052 DMTC1(rn(reg), r0);
1053 jit_unget_reg(reg);
1054 }
1055 else
1056 ldi_d(r0, (jit_word_t)i0);
1057 }
1058 else
1059 DMTC1(_ZERO_REGNO, r0);
1060# else
1061 if (_jitc->no_data)
1062 reg = jit_get_reg(jit_class_gpr);
1063 if (data.i[0]) {
1064 if (_jitc->no_data) {
1065 movi(rn(reg), data.i[0]);
1066 MTC1(rn(reg), r0 + BE_P);
1067 }
1068 else
1069 ldi_f(r0 + BE_P, (jit_word_t)i0);
1070 }
1071 else
1072 MTC1(_ZERO_REGNO, r0 + BE_P);
1073 if (data.i[1]) {
1074 if (_jitc->no_data) {
1075 movi(rn(reg), data.i[1]);
1076 MTC1(rn(reg), r0 + LE_P);
1077 }
1078 else
1079 ldi_f(r0 + LE_P, ((jit_word_t)i0) + 4);
1080 }
1081 else
1082 MTC1(_ZERO_REGNO, r0 + LE_P);
1083 if (_jitc->no_data)
1084 jit_unget_reg(reg);
1085# endif
1086}
1087
1088static void
1089_ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1090{
1091 jit_word_t w;
1092 C_OLT_S(r1, r2);
1093 w = _jit->pc.w;
1094 BC1T(0);
1095 /* delay slot */
1096 movi(r0, 1);
1097 movi(r0, 0);
1098 patch_at(w, _jit->pc.w);
1099}
1100fopi(lt)
1101
1102static void
1103_ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1104{
1105 jit_word_t w;
1106 C_OLE_S(r1, r2);
1107 w = _jit->pc.w;
1108 BC1T(0);
1109 /* delay slot */
1110 movi(r0, 1);
1111 movi(r0, 0);
1112 patch_at(w, _jit->pc.w);
1113}
1114fopi(le)
1115
1116static void
1117_eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1118{
1119 jit_word_t w;
1120 C_EQ_S(r1, r2);
1121 w = _jit->pc.w;
1122 BC1T(0);
1123 /* delay slot */
1124 movi(r0, 1);
1125 movi(r0, 0);
1126 patch_at(w, _jit->pc.w);
1127}
1128fopi(eq)
1129
1130static void
1131_ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1132{
1133 jit_word_t w;
1134 C_ULT_S(r1, r2);
1135 w = _jit->pc.w;
1136 BC1F(0);
1137 /* delay slot */
1138 movi(r0, 1);
1139 movi(r0, 0);
1140 patch_at(w, _jit->pc.w);
1141}
1142fopi(ge)
1143
1144static void
1145_gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1146{
1147 jit_word_t w;
1148 C_ULE_S(r1, r2);
1149 w = _jit->pc.w;
1150 BC1F(0);
1151 /* delay slot */
1152 movi(r0, 1);
1153 movi(r0, 0);
1154 patch_at(w, _jit->pc.w);
1155}
1156fopi(gt)
1157
1158static void
1159_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1160{
1161 jit_word_t w;
1162 C_EQ_S(r1, r2);
1163 w = _jit->pc.w;
1164 BC1F(0);
1165 /* delay slot */
1166 movi(r0, 1);
1167 movi(r0, 0);
1168 patch_at(w, _jit->pc.w);
1169}
1170fopi(ne)
1171
1172static void
1173_unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1174{
1175 jit_word_t w;
1176 C_ULT_S(r1, r2);
1177 w = _jit->pc.w;
1178 BC1T(0);
1179 /* delay slot */
1180 movi(r0, 1);
1181 movi(r0, 0);
1182 patch_at(w, _jit->pc.w);
1183}
1184fopi(unlt)
1185
1186static void
1187_unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1188{
1189 jit_word_t w;
1190 C_ULE_S(r1, r2);
1191 w = _jit->pc.w;
1192 BC1T(0);
1193 /* delay slot */
1194 movi(r0, 1);
1195 movi(r0, 0);
1196 patch_at(w, _jit->pc.w);
1197}
1198fopi(unle)
1199
1200static void
1201_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1202{
1203 jit_word_t w;
1204 C_UEQ_S(r1, r2);
1205 w = _jit->pc.w;
1206 BC1T(0);
1207 /* delay slot */
1208 movi(r0, 1);
1209 movi(r0, 0);
1210 patch_at(w, _jit->pc.w);
1211}
1212fopi(uneq)
1213
1214static void
1215_unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1216{
1217 jit_word_t w;
1218 C_OLT_S(r1, r2);
1219 w = _jit->pc.w;
1220 BC1F(0);
1221 /* delay slot */
1222 movi(r0, 1);
1223 movi(r0, 0);
1224 patch_at(w, _jit->pc.w);
1225}
1226fopi(unge)
1227
1228static void
1229_ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1230{
1231 jit_word_t w;
1232 C_OLE_S(r1, r2);
1233 w = _jit->pc.w;
1234 BC1F(0);
1235 /* delay slot */
1236 movi(r0, 1);
1237 movi(r0, 0);
1238 patch_at(w, _jit->pc.w);
1239}
1240fopi(ungt)
1241
1242static void
1243_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1244{
1245 jit_word_t w;
1246 C_UEQ_S(r1, r2);
1247 w = _jit->pc.w;
1248 BC1F(0);
1249 /* delay slot */
1250 movi(r0, 1);
1251 movi(r0, 0);
1252 patch_at(w, _jit->pc.w);
1253}
1254fopi(ltgt)
1255
1256static void
1257_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1258{
1259 jit_word_t w;
1260 C_UN_S(r1, r2);
1261 w = _jit->pc.w;
1262 BC1F(0);
1263 /* delay slot */
1264 movi(r0, 1);
1265 movi(r0, 0);
1266 patch_at(w, _jit->pc.w);
1267}
1268fopi(ord)
1269
1270static void
1271_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1272{
1273 jit_word_t w;
1274 C_UN_S(r1, r2);
1275 w = _jit->pc.w;
1276 BC1T(0);
1277 /* delay slot */
1278 movi(r0, 1);
1279 movi(r0, 0);
1280 patch_at(w, _jit->pc.w);
1281}
1282fopi(unord)
1283
1284static jit_word_t
1285_bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1286{
1287 jit_word_t w;
1288 C_OLT_S(r1, r2);
1289 w = _jit->pc.w;
1290 BC1T(((i0 - w) >> 2) - 1);
1291 NOP(1);
1292 return (w);
1293}
1294fbopi(lt)
1295
1296static jit_word_t
1297_bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1298{
1299 jit_word_t w;
1300 C_OLE_S(r1, r2);
1301 w = _jit->pc.w;
1302 BC1T(((i0 - w) >> 2) - 1);
1303 NOP(1);
1304 return (w);
1305}
1306fbopi(le)
1307
1308static jit_word_t
1309_beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1310{
1311 jit_word_t w;
1312 C_EQ_S(r1, r2);
1313 w = _jit->pc.w;
1314 BC1T(((i0 - w) >> 2) - 1);
1315 NOP(1);
1316 return (w);
1317}
1318fbopi(eq)
1319
1320static jit_word_t
1321_bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1322{
1323 jit_word_t w;
1324 C_ULT_S(r1, r2);
1325 w = _jit->pc.w;
1326 BC1F(((i0 - w) >> 2) - 1);
1327 NOP(1);
1328 return (w);
1329}
1330fbopi(ge)
1331
1332static jit_word_t
1333_bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1334{
1335 jit_word_t w;
1336 C_ULE_S(r1, r2);
1337 w = _jit->pc.w;
1338 BC1F(((i0 - w) >> 2) - 1);
1339 NOP(1);
1340 return (w);
1341}
1342fbopi(gt)
1343
1344static jit_word_t
1345_bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1346{
1347 jit_word_t w;
1348 C_EQ_S(r1, r2);
1349 w = _jit->pc.w;
1350 BC1F(((i0 - w) >> 2) - 1);
1351 NOP(1);
1352 return (w);
1353}
1354fbopi(ne)
1355
1356static jit_word_t
1357_bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1358{
1359 jit_word_t w;
1360 C_ULT_S(r1, r2);
1361 w = _jit->pc.w;
1362 BC1T(((i0 - w) >> 2) - 1);
1363 NOP(1);
1364 return (w);
1365}
1366fbopi(unlt)
1367
1368static jit_word_t
1369_bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1370{
1371 jit_word_t w;
1372 C_ULE_S(r1, r2);
1373 w = _jit->pc.w;
1374 BC1T(((i0 - w) >> 2) - 1);
1375 NOP(1);
1376 return (w);
1377}
1378fbopi(unle)
1379
1380static jit_word_t
1381_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1382{
1383 jit_word_t w;
1384 C_UEQ_S(r1, r2);
1385 w = _jit->pc.w;
1386 BC1T(((i0 - w) >> 2) - 1);
1387 NOP(1);
1388 return (w);
1389}
1390fbopi(uneq)
1391
1392static jit_word_t
1393_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1394{
1395 jit_word_t w;
1396 C_OLT_S(r1, r2);
1397 w = _jit->pc.w;
1398 BC1F(((i0 - w) >> 2) - 1);
1399 NOP(1);
1400 return (w);
1401}
1402fbopi(unge)
1403
1404static jit_word_t
1405_bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1406{
1407 jit_word_t w;
1408 C_OLE_S(r1, r2);
1409 w = _jit->pc.w;
1410 BC1F(((i0 - w) >> 2) - 1);
1411 NOP(1);
1412 return (w);
1413}
1414fbopi(ungt)
1415
1416static jit_word_t
1417_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1418{
1419 jit_word_t w;
1420 C_UEQ_S(r1, r2);
1421 w = _jit->pc.w;
1422 BC1F(((i0 - w) >> 2) - 1);
1423 NOP(1);
1424 return (w);
1425}
1426fbopi(ltgt)
1427
1428static jit_word_t
1429_bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1430{
1431 jit_word_t w;
1432 C_UN_S(r1, r2);
1433 w = _jit->pc.w;
1434 BC1F(((i0 - w) >> 2) - 1);
1435 NOP(1);
1436 return (w);
1437}
1438fbopi(ord)
1439
1440static jit_word_t
1441_bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1442{
1443 jit_word_t w;
1444 C_UN_S(r1, r2);
1445 w = _jit->pc.w;
1446 BC1T(((i0 - w) >> 2) - 1);
1447 NOP(1);
1448 return (w);
1449}
1450fbopi(unord)
1451
1452static void
1453_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1454{
1455 jit_word_t w;
1456 C_OLT_D(r1, r2);
1457 w = _jit->pc.w;
1458 BC1T(0);
1459 /* delay slot */
1460 movi(r0, 1);
1461 movi(r0, 0);
1462 patch_at(w, _jit->pc.w);
1463}
1464dopi(lt)
1465
1466static void
1467_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1468{
1469 jit_word_t w;
1470 C_OLE_D(r1, r2);
1471 w = _jit->pc.w;
1472 BC1T(0);
1473 /* delay slot */
1474 movi(r0, 1);
1475 movi(r0, 0);
1476 patch_at(w, _jit->pc.w);
1477}
1478dopi(le)
1479
1480static void
1481_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1482{
1483 jit_word_t w;
1484 C_EQ_D(r1, r2);
1485 w = _jit->pc.w;
1486 BC1T(0);
1487 /* delay slot */
1488 movi(r0, 1);
1489 movi(r0, 0);
1490 patch_at(w, _jit->pc.w);
1491}
1492dopi(eq)
1493
1494static void
1495_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1496{
1497 jit_word_t w;
1498 C_ULT_D(r1, r2);
1499 w = _jit->pc.w;
1500 BC1F(0);
1501 /* delay slot */
1502 movi(r0, 1);
1503 movi(r0, 0);
1504 patch_at(w, _jit->pc.w);
1505}
1506dopi(ge)
1507
1508static void
1509_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1510{
1511 jit_word_t w;
1512 C_ULE_D(r1, r2);
1513 w = _jit->pc.w;
1514 BC1F(0);
1515 /* delay slot */
1516 movi(r0, 1);
1517 movi(r0, 0);
1518 patch_at(w, _jit->pc.w);
1519}
1520dopi(gt)
1521
1522static void
1523_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1524{
1525 jit_word_t w;
1526 C_EQ_D(r1, r2);
1527 w = _jit->pc.w;
1528 BC1F(0);
1529 /* delay slot */
1530 movi(r0, 1);
1531 movi(r0, 0);
1532 patch_at(w, _jit->pc.w);
1533}
1534dopi(ne)
1535
1536static void
1537_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1538{
1539 jit_word_t w;
1540 C_ULT_D(r1, r2);
1541 w = _jit->pc.w;
1542 BC1T(0);
1543 /* delay slot */
1544 movi(r0, 1);
1545 movi(r0, 0);
1546 patch_at(w, _jit->pc.w);
1547}
1548dopi(unlt)
1549
1550static void
1551_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1552{
1553 jit_word_t w;
1554 C_ULE_D(r1, r2);
1555 w = _jit->pc.w;
1556 BC1T(0);
1557 /* delay slot */
1558 movi(r0, 1);
1559 movi(r0, 0);
1560 patch_at(w, _jit->pc.w);
1561}
1562dopi(unle)
1563
1564static void
1565_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1566{
1567 jit_word_t w;
1568 C_UEQ_D(r1, r2);
1569 w = _jit->pc.w;
1570 BC1T(0);
1571 /* delay slot */
1572 movi(r0, 1);
1573 movi(r0, 0);
1574 patch_at(w, _jit->pc.w);
1575}
1576dopi(uneq)
1577
1578static void
1579_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1580{
1581 jit_word_t w;
1582 C_OLT_D(r1, r2);
1583 w = _jit->pc.w;
1584 BC1F(0);
1585 /* delay slot */
1586 movi(r0, 1);
1587 movi(r0, 0);
1588 patch_at(w, _jit->pc.w);
1589}
1590dopi(unge)
1591
1592static void
1593_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1594{
1595 jit_word_t w;
1596 C_OLE_D(r1, r2);
1597 w = _jit->pc.w;
1598 BC1F(0);
1599 /* delay slot */
1600 movi(r0, 1);
1601 movi(r0, 0);
1602 patch_at(w, _jit->pc.w);
1603}
1604dopi(ungt)
1605
1606static void
1607_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1608{
1609 jit_word_t w;
1610 C_UEQ_D(r1, r2);
1611 w = _jit->pc.w;
1612 BC1F(0);
1613 /* delay slot */
1614 movi(r0, 1);
1615 movi(r0, 0);
1616 patch_at(w, _jit->pc.w);
1617}
1618dopi(ltgt)
1619
1620static void
1621_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1622{
1623 jit_word_t w;
1624 C_UN_D(r1, r2);
1625 w = _jit->pc.w;
1626 BC1F(0);
1627 /* delay slot */
1628 movi(r0, 1);
1629 movi(r0, 0);
1630 patch_at(w, _jit->pc.w);
1631}
1632dopi(ord)
1633
1634static void
1635_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1636{
1637 jit_word_t w;
1638 C_UN_D(r1, r2);
1639 w = _jit->pc.w;
1640 BC1T(0);
1641 /* delay slot */
1642 movi(r0, 1);
1643 movi(r0, 0);
1644 patch_at(w, _jit->pc.w);
1645}
1646dopi(unord)
1647
1648static jit_word_t
1649_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1650{
1651 jit_word_t w;
1652 C_OLT_D(r1, r2);
1653 w = _jit->pc.w;
1654 BC1T(((i0 - w) >> 2) - 1);
1655 NOP(1);
1656 return (w);
1657}
1658dbopi(lt)
1659
1660static jit_word_t
1661_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1662{
1663 jit_word_t w;
1664 C_OLE_D(r1, r2);
1665 w = _jit->pc.w;
1666 BC1T(((i0 - w) >> 2) - 1);
1667 NOP(1);
1668 return (w);
1669}
1670dbopi(le)
1671
1672static jit_word_t
1673_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1674{
1675 jit_word_t w;
1676 C_EQ_D(r1, r2);
1677 w = _jit->pc.w;
1678 BC1T(((i0 - w) >> 2) - 1);
1679 NOP(1);
1680 return (w);
1681}
1682dbopi(eq)
1683
1684static jit_word_t
1685_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1686{
1687 jit_word_t w;
1688 C_ULT_D(r1, r2);
1689 w = _jit->pc.w;
1690 BC1F(((i0 - w) >> 2) - 1);
1691 NOP(1);
1692 return (w);
1693}
1694dbopi(ge)
1695
1696static jit_word_t
1697_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1698{
1699 jit_word_t w;
1700 C_ULE_D(r1, r2);
1701 w = _jit->pc.w;
1702 BC1F(((i0 - w) >> 2) - 1);
1703 NOP(1);
1704 return (w);
1705}
1706dbopi(gt)
1707
1708static jit_word_t
1709_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1710{
1711 jit_word_t w;
1712 C_EQ_D(r1, r2);
1713 w = _jit->pc.w;
1714 BC1F(((i0 - w) >> 2) - 1);
1715 NOP(1);
1716 return (w);
1717}
1718dbopi(ne)
1719
1720static jit_word_t
1721_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1722{
1723 jit_word_t w;
1724 C_ULT_D(r1, r2);
1725 w = _jit->pc.w;
1726 BC1T(((i0 - w) >> 2) - 1);
1727 NOP(1);
1728 return (w);
1729}
1730dbopi(unlt)
1731
1732static jit_word_t
1733_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1734{
1735 jit_word_t w;
1736 C_ULE_D(r1, r2);
1737 w = _jit->pc.w;
1738 BC1T(((i0 - w) >> 2) - 1);
1739 NOP(1);
1740 return (w);
1741}
1742dbopi(unle)
1743
1744static jit_word_t
1745_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1746{
1747 jit_word_t w;
1748 C_UEQ_D(r1, r2);
1749 w = _jit->pc.w;
1750 BC1T(((i0 - w) >> 2) - 1);
1751 NOP(1);
1752 return (w);
1753}
1754dbopi(uneq)
1755
1756static jit_word_t
1757_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1758{
1759 jit_word_t w;
1760 C_OLT_D(r1, r2);
1761 w = _jit->pc.w;
1762 BC1F(((i0 - w) >> 2) - 1);
1763 NOP(1);
1764 return (w);
1765}
1766dbopi(unge)
1767
1768static jit_word_t
1769_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1770{
1771 jit_word_t w;
1772 C_OLE_D(r1, r2);
1773 w = _jit->pc.w;
1774 BC1F(((i0 - w) >> 2) - 1);
1775 NOP(1);
1776 return (w);
1777}
1778dbopi(ungt)
1779
1780static jit_word_t
1781_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1782{
1783 jit_word_t w;
1784 C_UEQ_D(r1, r2);
1785 w = _jit->pc.w;
1786 BC1F(((i0 - w) >> 2) - 1);
1787 NOP(1);
1788 return (w);
1789}
1790dbopi(ltgt)
1791
1792static jit_word_t
1793_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1794{
1795 jit_word_t w;
1796 C_UN_D(r1, r2);
1797 w = _jit->pc.w;
1798 BC1F(((i0 - w) >> 2) - 1);
1799 NOP(1);
1800 return (w);
1801}
1802dbopi(ord)
1803
1804static jit_word_t
1805_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1806{
1807 jit_word_t w;
1808 C_UN_D(r1, r2);
1809 w = _jit->pc.w;
1810 BC1T(((i0 - w) >> 2) - 1);
1811 NOP(1);
1812 return (w);
1813}
1814dbopi(unord)
1815
1816static void
1817_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1818{
1819#if !NEW_ABI
1820 jit_int32_t reg;
1821#endif
1822 assert(_jitc->function->self.call & jit_call_varargs);
1823#if !NEW_ABI
1824 /* Align, if required. */
1825 reg = jit_get_reg(jit_class_gpr);
1826 andi(rn(reg), r1, 7);
1827 addr(r1, r1, rn(reg));
1828 jit_unget_reg(reg);
1829#endif
1830
1831 /* Load argument. */
1832 ldr_d(r0, r1);
1833
1834 /* Update va_list. */
1835 addi(r1, r1, sizeof(jit_float64_t));
1836}
1837
1838# undef fopi
1839# undef fbopi
1840# undef dopi
1841# undef dbopi
1842# undef fpr_bopi
1843# undef fpr_opi
1844#endif