2 * Copyright (C) 2012-2023 Free Software Foundation, Inc.
4 * This file is part of GNU lightning.
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)
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.
17 * Paulo Cesar Pereira de Andrade
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_condn_S 0x14 /* release 6 */
31 # define MIPS_condn_D 0x15 /* release 6 */
32 # define MIPS_ADD_fmt 0x00
33 # define MIPS_LWXC1 0x00
34 # define MIPS_SUB_fmt 0x01
35 # define MIPS_LDXC1 0x01
36 # define MIPS_MUL_fmt 0x02
37 # define MIPS_DIV_fmt 0x03
38 # define MIPS_SQRT_fmt 0x04
39 # define MIPS_ABS_fmt 0x05
40 # define MIPS_LUXC1 0x05
41 # define MIPS_MOV_fmt 0x06
42 # define MIPS_NEG_fmt 0x07
43 # define MIPS_SWXC1 0x08
44 # define MIPS_ROUND_fmt_L 0x08
45 # define MIPS_TRUNC_fmt_L 0x09
46 # define MIPS_SDXC1 0x09
47 # define MIPS_CEIL_fmt_L 0x0a
48 # define MIPS_FLOOR_fmt_L 0x0b
49 # define MIPS_ROUND_fmt_W 0x0c
50 # define MIPS_TRUNC_fmt_W 0x0d
51 # define MIPS_SUXC1 0x0d
52 # define MIPS_CEIL_fmt_W 0x0e
53 # define MIPS_FLOOR_fmt_W 0x0f
54 # define MIPS_RECIP 0x15
55 # define MIPS_RSQRT 0x16
56 # define MIPS_MADDF 0x18
57 # define MIPS_MSUBF 0x19
58 # define MIPS_ALNV_PS 0x1e
59 # define MIPS_CVT_fmt_S 0x20
60 # define MIPS_CVT_fmt_D 0x21
61 # define MIPS_CVT_fmt_W 0x24
62 # define MIPS_CVT_fmt_L 0x25
63 # define MIPS_PLL 0x2c
64 # define MIPS_PLU 0x2d
65 # define MIPS_PUL 0x2e
66 # define MIPS_PUU 0x2f
67 # define MIPS_MADD_fmt_S 0x20
68 # define MIPS_MADD_fmt_D 0x21
69 # define MIPS_MADD_fmt_PS 0x22
70 # define MIPS_MSUB_fmt_S 0x28
71 # define MIPS_MSUB_fmt_D 0x29
72 # define MIPS_MSUB_fmt_PS 0x2a
73 # define MIPS_NMADD_fmt_S 0x30
74 # define MIPS_NMADD_fmt_D 0x31
75 # define MIPS_NMADD_fmt_PS 0x32
76 # define MIPS_NMSUB_fmt_S 0x38
77 # define MIPS_NMSUB_fmt_D 0x39
78 # define MIPS_NMSUB_fmt_PS 0x3a
79 # define MIPS_cond_F 0x30
80 # define MIPS_cond_UN 0x31
81 # define MIPS_cond_EQ 0x32
82 # define MIPS_cond_UEQ 0x33
83 # define MIPS_cond_OLT 0x34
84 # define MIPS_cond_ULT 0x35
85 # define MIPS_cond_OLE 0x36
86 # define MIPS_cond_ULE 0x37
87 # define MIPS_cond_SF 0x38
88 # define MIPS_cond_NGLE 0x39
89 # define MIPS_cond_SEQ 0x3a
90 # define MIPS_cond_NGL 0x3b
91 # define MIPS_cond_LT 0x3c
92 # define MIPS_cond_NGE 0x3d
93 # define MIPS_cond_LE 0x3e
94 # define MIPS_cond_UGT 0x3f
96 # define MIPS_cmp_AF 0x00
97 # define MIPS_cmp_UN 0x01
98 # define MIPS_cmp_EQ 0x02
99 # define MIPS_cmp_UEQ 0x03
100 # define MIPS_cmp_LT 0x04
101 # define MIPS_cmp_ULT 0x05
102 # define MIPS_cmp_LE 0x06
103 # define MIPS_cmp_ULE 0x07
104 # define MIPS_cmp_SAF 0x08
105 # define MIPS_cmp_SUN 0x09
106 # define MIPS_cmp_SEQ 0x0a
107 # define MIPS_cmp_SUEQ 0x0b
108 # define MIPS_cmp_SLT 0x0c
109 # define MIPS_cmp_SULT 0x0d
110 # define MIPS_cmp_SLE 0x0e
111 # define MIPS_cmp_SULE 0x0f
112 # define ADD_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_ADD_fmt)
113 # define ADD_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_ADD_fmt)
114 # define SUB_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_SUB_fmt)
115 # define SUB_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_SUB_fmt)
116 # define MUL_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MUL_fmt)
117 # define MUL_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MUL_fmt)
118 # define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
119 # define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
120 # define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
121 # define ABS_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
122 # define NEG_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
123 # define NEG_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
124 # define SQRT_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
125 # define SQRT_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
126 # define MFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
127 # define MFHC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MFH,rt,fs,0,0)
128 # define MTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
129 # define MTHC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MTH,rt,fs,0,0)
130 # define DMFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
131 # define DMTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMT,rt,fs,0,0)
132 # define CVT_D_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_D)
133 # define CVT_D_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_D)
134 # define CVT_D_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_D)
135 # define CVT_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_L)
136 # define CVT_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_L)
137 # define CVT_PS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_PS)
138 # define CVT_S_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_S)
139 # define CVT_S_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_S)
140 # define CVT_S_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_S)
141 # define CVT_S_PL(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PL)
142 # define CVT_S_PU(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PU)
143 # define CVT_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_W)
144 # define CVT_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_W)
145 # define TRUNC_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_L)
146 # define TRUNC_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_L)
147 # define TRUNC_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_W)
148 # define TRUNC_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_W)
149 # define MADD_S(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_MADD_fmt_S)
150 # define MADD_D(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_MADD_fmt_D)
151 # define MSUB_S(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_MSUB_fmt_S)
152 # define MSUB_D(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_MSUB_fmt_D)
153 # define NMADD_S(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_NMADD_fmt_S)
154 # define NMADD_D(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_NMADD_fmt_D)
155 # define NMSUB_S(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_NMSUB_fmt_S)
156 # define NMSUB_D(fd,fr,fs,ft) hrrrit(MIPS_COP1X,fr,ft,fs,fd,MIPS_NMSUB_fmt_D)
157 /* fd = fd + (fs * ft) */
158 # define MADDF_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MADDF)
159 # define MADDF_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MADDF)
160 /* fd = fd - (fs * ft) */
161 # define MSUBF_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MSUBF)
162 # define MSUBF_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MSUBF)
163 # define LWC1(rt, of, rb) hrri(MIPS_LWC1, rb, rt, of)
164 # define SWC1(rt, of, rb) hrri(MIPS_SWC1, rb, rt, of)
165 # define LDC1(rt, of, rb) hrri(MIPS_LDC1, rb, rt, of)
166 # define SDC1(rt, of, rb) hrri(MIPS_SDC1, rb, rt, of)
167 # define MOV_S(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_MOV_fmt)
168 # define MOV_D(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_MOV_fmt)
169 # define BC1F(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCF,im)
170 # define BC1EQZ(ft,im) hrri(MIPS_COP1,MIPS_BC1EQZ,ft,im)
171 # define BC1T(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCT,im)
172 # define BC1NEZ(ft,im) hrri(MIPS_COP1,MIPS_BC1NEZ,ft,im)
173 # define C_F_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_F)
174 # define C_F_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_F)
175 # define C_F_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_F)
176 # define C_UN_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UN)
177 # define C_UN_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UN)
178 # define C_UN_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UN)
179 # define C_EQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_EQ)
180 # define C_EQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_EQ)
181 # define C_EQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_EQ)
182 # define C_UEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UEQ)
183 # define C_UEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UEQ)
184 # define C_UEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UEQ)
185 # define C_OLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLT)
186 # define C_OLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLT)
187 # define C_OLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLT)
188 # define C_ULT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULT)
189 # define C_ULT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULT)
190 # define C_ULT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULT)
191 # define C_OLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLE)
192 # define C_OLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLE)
193 # define C_OLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLE)
194 # define C_ULE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULE)
195 # define C_ULE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULE)
196 # define C_ULE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULE)
197 # define C_SF_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SF)
198 # define C_SF_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SF)
199 # define C_SF_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SF)
200 # define C_NGLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGLE)
201 # define C_NGLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGLE)
202 # define C_NGLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGLE)
203 # define C_SEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SEQ)
204 # define C_SEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SEQ)
205 # define C_SEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SEQ)
206 # define C_NGL_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGL)
207 # define C_NGL_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGL)
208 # define C_NGL_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGL)
209 # define C_NLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLT)
210 # define C_NLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLT)
211 # define C_NLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLT)
212 # define C_NGE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGE)
213 # define C_NGE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGE)
214 # define C_NGE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGE)
215 # define C_NLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLE)
216 # define C_NLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLE)
217 # define C_NLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLE)
218 # define C_UGT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UGT)
219 # define C_UGT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UGT)
220 # define C_UGT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UGT)
221 # define c_cond_fmt(fm,ft,fs,cc) _c_cond_fmt(_jit,fm,ft,fs,cc)
223 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
224 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc);
225 # define CMP_AF_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_AF)
226 # define CMP_AF_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_AF)
227 # define CMP_UN_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_UN)
228 # define CMP_UN_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_UN)
229 # define CMP_EQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_EQ)
230 # define CMP_EQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_EQ)
231 # define CMP_UEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_UEQ)
232 # define CMP_UEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_UEQ)
233 # define CMP_LT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_LT)
234 # define CMP_LT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_LT)
235 # define CMP_ULT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_ULT)
236 # define CMP_ULT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_ULT)
237 # define CMP_LE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_LE)
238 # define CMP_LE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_LE)
239 # define CMP_ULE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_ULE)
240 # define CMP_ULE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_ULE)
241 # define CMP_SAF_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SAF)
242 # define CMP_SAF_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SAF)
243 # define CMP_SUN_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SUN)
244 # define CMP_SUN_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SUN)
245 # define CMP_SEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SEQ)
246 # define CMP_SEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SEQ)
247 # define CMP_SUEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SUEQ)
248 # define CMP_SUEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SUEQ)
249 # define CMP_SLT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SLT)
250 # define CMP_SLT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SLT)
251 # define CMP_SULT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SULT)
252 # define CMP_SULT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SULT)
253 # define CMP_SLE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SLE)
254 # define CMP_SLE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SLE)
255 # define CMP_SULE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SULE)
256 # define CMP_SULE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SULE)
257 # define cmp_cond_fmt(fm,fd,ft,fs,cn) _cmp_cond_fmt(_jit,fm,fd,ft,fs,cn)
259 _cmp_cond_fmt(jit_state_t *_jit, jit_int32_t fm, jit_int32_t fd,
260 jit_int32_t ft, jit_int32_t fs, jit_int32_t cn);
261 # define addr_f(r0,r1,r2) ADD_S(r0,r1,r2)
262 # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
263 static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
264 # define addr_d(r0,r1,r2) ADD_D(r0,r1,r2)
265 # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
266 static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
267 # define subr_f(r0,r1,r2) SUB_S(r0,r1,r2)
268 # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
269 static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
270 # define subr_d(r0,r1,r2) SUB_D(r0,r1,r2)
271 # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
272 static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
273 # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
274 # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
275 static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
276 # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
277 # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
278 static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
279 # define mulr_f(r0,r1,r2) MUL_S(r0,r1,r2)
280 # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
281 static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
282 # define mulr_d(r0,r1,r2) MUL_D(r0,r1,r2)
283 # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
284 static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
285 # define divr_f(r0,r1,r2) DIV_S(r0,r1,r2)
286 # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
287 static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
288 # define divr_d(r0,r1,r2) DIV_D(r0,r1,r2)
289 # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
290 static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
291 # define absr_f(r0,r1) ABS_S(r0,r1)
292 # define absr_d(r0,r1) ABS_D(r0,r1)
293 # define negr_f(r0,r1) NEG_S(r0,r1)
294 # define negr_d(r0,r1) NEG_D(r0,r1)
295 # define sqrtr_f(r0,r1) SQRT_S(r0,r1)
296 # define sqrtr_d(r0,r1) SQRT_D(r0,r1)
297 # define movr_w_f(r0, r1) MTC1(r1, r0)
298 # define movr_f_w(r0, r1) MFC1(r0, r1)
299 # define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0)
300 static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
301 # define extr_f(r0, r1) _extr_f(_jit, r0, r1)
302 static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
303 # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1)
304 static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
305 # if __WORDSIZE == 64
306 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1)
307 static void _truncr_f_l(jit_state_t*,jit_int32_t,jit_int32_t);
309 # define extr_d_f(r0, r1) CVT_S_D(r0, r1)
310 # define ldr_f(r0, r1) LWC1(r0, 0, r1)
311 # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
312 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
313 # define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2)
314 static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
315 # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
316 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
317 # define unldr_x(r0, r1, i0) _unldr_x(_jit, r0, r1, i0)
318 static void _unldr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
319 # define unldi_x(r0, i0, i1) _unldi_x(_jit, r0, i0, i1)
320 static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
321 # define str_f(r0, r1) SWC1(r1, 0, r0)
322 # define sti_f(i0, r0) _sti_f(_jit, i0, r0)
323 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
324 # define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2)
325 static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
326 # define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
327 static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
328 # define unstr_x(r0, r1, i0) _unstr_x(_jit, r0, r1, i0)
329 static void _unstr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
330 # define unsti_x(i0, r0, i1) _unsti_x(_jit, i0, r0, i1)
331 static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t);
332 # define fmar_f(r0, r1, r2, r3) _fmar_f(_jit, r0, r1, r2, r3)
333 static void _fmar_f(jit_state_t*,
334 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
335 # define fmsr_f(r0, r1, r2, r3) _fmsr_f(_jit, r0, r1, r2, r3)
336 static void _fmsr_f(jit_state_t*,
337 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
338 # define fnmar_f(r0, r1, r2, r3) _fnmar_f(_jit, r0, r1, r2, r3)
339 static void _fnmar_f(jit_state_t*,
340 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
341 # define fnmsr_f(r0, r1, r2, r3) _fnmsr_f(_jit, r0, r1, r2, r3)
342 static void _fnmsr_f(jit_state_t*,
343 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
344 # define movr_f(r0, r1) _movr_f(_jit, r0, r1)
345 static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t);
346 # define movi_f(r0, i0) _movi_f(_jit, r0, i0)
347 static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
348 # if NEW_ABI && __WORDSIZE == 32
349 # define movi64(r0, i0) _movi64(_jit, r0, i0)
350 static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t);
351 # define movi_d_w(r0, i0) _movi_d_w(_jit, r0, i0)
352 static void _movi_d_w(jit_state_t*,jit_int32_t,jit_int64_t);
353 # elif __WORDSIZE == 64
354 # define movi64(r0, i0) movi(r0, i0)
356 # if __WORDSIZE == 64 || NEW_ABI
357 # define movr_w_d(r0, r1) DMTC1(r1, r0)
358 # define movr_d_w(r0, r1) DMFC1(r0, r1)
359 # define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0)
360 static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
362 # if __WORDSIZE == 32
363 # define movr_ww_d(r0, r1, r2) _movr_ww_d(_jit, r0, r1, r2)
364 static void _movr_ww_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
365 # define movr_d_ww(r0, r1, r2) _movr_d_ww(_jit, r0, r1, r2)
366 static void _movr_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
367 # define movi_ww_d(r0, i0, i1) _movi_ww_d(_jit, r0, i0, i1)
368 static void _movi_ww_d(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
370 # define extr_d(r0, r1) _extr_d(_jit, r0, r1)
371 static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
372 # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1)
373 static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
374 # if __WORDSIZE == 64
375 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1)
376 static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
378 # define ldr_d(r0, r1) _ldr_d(_jit, r0, r1)
379 static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t);
380 # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
381 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
382 # define ldxr_d(r0, r1, r2) _ldxr_d(_jit, r0, r1, r2)
383 static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
384 # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
385 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
386 # define str_d(r0, r1) _str_d(_jit, r0, r1)
387 static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t);
388 # define sti_d(i0, r0) _sti_d(_jit, i0, r0)
389 static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
390 # define stxr_d(r0, r1, r2) _stxr_d(_jit, r0, r1, r2)
391 static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
392 # define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
393 static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
394 # define fmar_d(r0, r1, r2, r3) _fmar_d(_jit, r0, r1, r2, r3)
395 static void _fmar_d(jit_state_t*,
396 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
397 # define fmsr_d(r0, r1, r2, r3) _fmsr_d(_jit, r0, r1, r2, r3)
398 static void _fmsr_d(jit_state_t*,
399 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
400 # define fnmar_d(r0, r1, r2, r3) _fnmar_d(_jit, r0, r1, r2, r3)
401 static void _fnmar_d(jit_state_t*,
402 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
403 # define fnmsr_d(r0, r1, r2, r3) _fnmsr_d(_jit, r0, r1, r2, r3)
404 static void _fnmsr_d(jit_state_t*,
405 jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t);
406 # define movr_d(r0, r1) _movr_d(_jit, r0, r1)
407 static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
408 # define movi_d(r0, i0) _movi_d(_jit, r0, i0)
409 static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
410 # define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
411 static void _ltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
412 # define lti_f(r0, r1, i2) _lti_f(_jit, r0, r1, i2)
413 static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
414 # define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
415 static void _ler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
416 # define lei_f(r0, r1, i2) _lei_f(_jit, r0, r1, i2)
417 static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
418 # define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
419 static void _eqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
420 # define eqi_f(r0, r1, i2) _eqi_f(_jit, r0, r1, i2)
421 static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
422 # define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
423 static void _ger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
424 # define gei_f(r0, r1, i2) _gei_f(_jit, r0, r1, i2)
425 static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
426 # define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
427 static void _gtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
428 # define gti_f(r0, r1, i2) _gti_f(_jit, r0, r1, i2)
429 static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
430 # define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
431 static void _ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
432 # define nei_f(r0, r1, i2) _nei_f(_jit, r0, r1, i2)
433 static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
434 # define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
435 static void _unltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
436 # define unlti_f(r0, r1, i2) _unlti_f(_jit, r0, r1, i2)
437 static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
438 # define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
439 static void _unler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
440 # define unlei_f(r0, r1, i2) _unlei_f(_jit, r0, r1, i2)
441 static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
442 # define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
443 static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
444 # define uneqi_f(r0, r1, i2) _uneqi_f(_jit, r0, r1, i2)
445 static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
446 # define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
447 static void _unger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
448 # define ungei_f(r0, r1, i2) _ungei_f(_jit, r0, r1, i2)
449 static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
450 # define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
451 static void _ungtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
452 # define ungti_f(r0, r1, i2) _ungti_f(_jit, r0, r1, i2)
453 static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
454 # define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
455 static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
456 # define ltgti_f(r0, r1, i2) _ltgti_f(_jit, r0, r1, i2)
457 static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
458 # define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
459 static void _ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
460 # define ordi_f(r0, r1, i2) _ordi_f(_jit, r0, r1, i2)
461 static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
462 # define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
463 static void _unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
464 # define unordi_f(r0, r1, i2) _unordi_f(_jit, r0, r1, i2)
465 static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
466 # define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
467 static jit_word_t _bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
468 # define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
470 _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
471 # define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
472 static jit_word_t _bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
473 # define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
475 _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
476 # define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
477 static jit_word_t _beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
478 # define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
480 _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
481 # define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
482 static jit_word_t _bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
483 # define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
485 _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
486 # define bgtr_f(i0, r0, r1) _bgtr_f(_jit, i0, r0, r1)
487 static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
488 # define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
490 _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
491 # define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
492 static jit_word_t _bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
493 # define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
495 _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
496 # define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
497 static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
498 # define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
500 _bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
501 # define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
502 static jit_word_t _bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
503 # define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
505 _bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
506 # define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
507 static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
508 # define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
510 _buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
511 # define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
512 static jit_word_t _bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
513 # define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
515 _bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
516 # define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
517 static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
518 # define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
520 _bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
521 # define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
522 static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
523 # define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
525 _bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
526 # define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
527 static jit_word_t _bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
528 # define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
530 _bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
531 # define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
532 static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
533 # define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0, r0, i1)
535 _bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
536 # define extr_f_d(r0, r1) CVT_D_S(r0, r1)
537 # define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
538 static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
539 # define lti_d(r0, r1, i2) _lti_d(_jit, r0, r1, i2)
540 static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
541 # define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
542 static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
543 # define lei_d(r0, r1, i2) _lei_d(_jit, r0, r1, i2)
544 static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
545 # define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
546 static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
547 # define eqi_d(r0, r1, i2) _eqi_d(_jit, r0, r1, i2)
548 static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
549 # define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
550 static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
551 # define gei_d(r0, r1, i2) _gei_d(_jit, r0, r1, i2)
552 static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
553 # define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
554 static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
555 # define gti_d(r0, r1, i2) _gti_d(_jit, r0, r1, i2)
556 static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
557 # define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
558 static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
559 # define nei_d(r0, r1, i2) _nei_d(_jit, r0, r1, i2)
560 static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
561 # define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
562 static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
563 # define unlti_d(r0, r1, i2) _unlti_d(_jit, r0, r1, i2)
564 static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
565 # define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
566 static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
567 # define unlei_d(r0, r1, i2) _unlei_d(_jit, r0, r1, i2)
568 static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
569 # define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
570 static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
571 # define uneqi_d(r0, r1, i2) _uneqi_d(_jit, r0, r1, i2)
572 static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
573 # define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
574 static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
575 # define ungei_d(r0, r1, i2) _ungei_d(_jit, r0, r1, i2)
576 static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
577 # define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
578 static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
579 # define ungti_d(r0, r1, i2) _ungti_d(_jit, r0, r1, i2)
580 static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
581 # define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
582 static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
583 # define ltgti_d(r0, r1, i2) _ltgti_d(_jit, r0, r1, i2)
584 static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
585 # define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
586 static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
587 # define ordi_d(r0, r1, i2) _ordi_d(_jit, r0, r1, i2)
588 static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
589 # define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
590 static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
591 # define unordi_d(r0, r1, i2) _unordi_d(_jit, r0, r1, i2)
592 static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
593 # define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
594 static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
595 # define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
597 _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
598 # define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
599 static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
600 # define blei_d(i0, r0, i1) _blei_d(_jit, i0, r0, i1)
602 _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
603 # define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
604 static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
605 # define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
607 _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
608 # define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
609 static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
610 # define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
612 _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
613 # define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
614 static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
615 # define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
617 _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
618 # define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
619 static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
620 # define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
622 _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
623 # define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
624 static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
625 # define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
627 _bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
628 # define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
629 static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
630 # define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
632 _bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
633 # define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
634 static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
635 # define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0, r0, i1)
637 _buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
638 # define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
639 static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
640 # define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
642 _bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
643 # define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
644 static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
645 # define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
647 _bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
648 # define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
649 static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
650 # define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
652 _bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
653 # define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
654 static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
655 # define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
657 _bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
658 # define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
659 static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
660 # define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
662 _bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
663 # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
664 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
669 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
670 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc)
682 _cmp_cond_fmt(jit_state_t *_jit, jit_int32_t fm, jit_int32_t fd,
683 jit_int32_t ft, jit_int32_t fs, jit_int32_t cn)
686 i.op = 0; /* must have bit 6 zero ed */
696 # define fpr_opi(name, type, size) \
698 _##name##i_##type(jit_state_t *_jit, \
699 jit_int32_t r0, jit_int32_t r1, \
700 jit_float##size##_t *i0) \
702 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
703 movi_##type(rn(reg), i0); \
704 name##r_##type(r0, r1, rn(reg)); \
705 jit_unget_reg(reg); \
707 # define fpr_bopi(name, type, size) \
709 _b##name##i_##type(jit_state_t *_jit, \
710 jit_word_t i0, jit_int32_t r0, \
711 jit_float##size##_t *i1) \
714 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
715 jit_class_nospill); \
716 movi_##type(rn(reg), i1); \
717 word = b##name##r_##type(i0, r0, rn(reg)); \
718 jit_unget_reg(reg); \
721 # define fopi(name) fpr_opi(name, f, 32)
722 # define fbopi(name) fpr_bopi(name, f, 32)
723 # define dopi(name) fpr_opi(name, d, 64)
724 # define dbopi(name) fpr_bopi(name, d, 64)
733 _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
736 t0 = jit_get_reg(jit_class_fpr);
737 # if __WORDSIZE == 32
748 _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
751 t0 = jit_get_reg(jit_class_fpr);
752 TRUNC_W_S(rn(t0), r1);
757 # if __WORDSIZE == 64
759 _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
762 t0 = jit_get_reg(jit_class_fpr);
763 TRUNC_L_S(rn(t0), r1);
770 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
773 if (can_sign_extend_short_p(i0))
774 LWC1(r0, i0, _ZERO_REGNO);
776 reg = jit_get_reg(jit_class_gpr);
784 _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
787 reg = jit_get_reg(jit_class_gpr);
788 addr(rn(reg), r1, r2);
794 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
797 if (can_sign_extend_short_p(i0))
800 reg = jit_get_reg(jit_class_gpr);
801 addi(rn(reg), r1, i0);
808 _unldr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
811 # if __WORDSIZE == 32
814 if (jit_unaligned_p()) {
815 assert(i0 == 4 || i0 == 8);
816 t0 = jit_get_reg(jit_class_gpr);
823 # if __WORDSIZE == 32
824 t1 = jit_get_reg(jit_class_gpr);
826 # if __BYTE_ORDER == __LITTLE_ENDIAN
835 movr_ww_d(r0, r2, r3);
845 generic_unldr_x(r0, r1, i0);
849 _unldi_x(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
852 # if __WORDSIZE == 32
855 if (jit_unaligned_p()) {
856 assert(i1 == 4 || i1 == 8);
857 t0 = jit_get_reg(jit_class_gpr);
864 # if __WORDSIZE == 32
865 t1 = jit_get_reg(jit_class_gpr);
867 # if __BYTE_ORDER == __LITTLE_ENDIAN
869 unldi(r3, i0 + 4, 4);
872 unldi(r2, i0 + 4, 4);
874 movr_ww_d(r0, r3, r2);
884 generic_unldi_x(r0, i0, i1);
888 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
891 if (can_sign_extend_short_p(i0))
892 SWC1(r0, i0, _ZERO_REGNO);
894 reg = jit_get_reg(jit_class_gpr);
902 _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
905 reg = jit_get_reg(jit_class_gpr);
906 addr(rn(reg), r0, r1);
912 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
915 if (can_sign_extend_short_p(i0))
918 reg = jit_get_reg(jit_class_gpr);
919 addi(rn(reg), r0, i0);
926 _unstr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
928 if (jit_unaligned_p())
929 fallback_unstr_x(r0, r1, i0);
931 generic_unstr_x(r0, r1, i0);
935 _unsti_x(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
937 if (jit_unaligned_p())
938 fallback_unsti_x(i0, r0, i1);
940 fallback_unsti_x(i0, r0, i1);
945 _fmar_f(jit_state_t *_jit,
946 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
954 t0 = jit_get_reg(jit_class_fpr);
956 MADDF_S(rn(t0), r2, r1);
962 MADD_S(r0, r3, r2, r1);
970 t0 = jit_get_reg(jit_class_fpr);
971 mulr_f(rn(t0), r1, r2);
972 addr_f(r0, rn(t0), r3);
979 _fmsr_f(jit_state_t *_jit,
980 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
988 t0 = jit_get_reg(jit_class_fpr);
990 MSUBF_S(rn(t0), r2, r1);
997 MSUB_S(r0, r3, r2, r1);
1005 t0 = jit_get_reg(jit_class_fpr);
1006 mulr_f(rn(t0), r1, r2);
1007 subr_f(r0, rn(t0), r3);
1014 _fnmar_f(jit_state_t *_jit,
1015 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1018 if (jit_mips2_p()) {
1019 if (jit_mips6_p()) {
1021 MADDF_S(r0, r2, r1);
1023 t0 = jit_get_reg(jit_class_fpr);
1025 MADDF_S(rn(t0), r2, r1);
1032 NMADD_S(r0, r3, r2, r1);
1035 t0 = jit_get_reg(jit_class_fpr);
1037 mulr_f(rn(t0), rn(t0), r2);
1038 subr_f(r0, rn(t0), r3);
1044 _fnmsr_f(jit_state_t *_jit,
1045 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1048 if (jit_mips2_p()) {
1049 if (jit_mips6_p()) {
1051 MSUBF_S(r0, r2, r1);
1053 t0 = jit_get_reg(jit_class_fpr);
1055 MSUBF_S(rn(t0), r2, r1);
1061 NMSUB_S(r0, r3, r2, r1);
1064 t0 = jit_get_reg(jit_class_fpr);
1066 mulr_f(rn(t0), rn(t0), r2);
1067 addr_f(r0, rn(t0), r3);
1073 _movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1080 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
1090 if (_jitc->no_data) {
1091 reg = jit_get_reg(jit_class_gpr);
1092 movi(rn(reg), data.i);
1097 ldi_f(r0, (jit_word_t)i0);
1100 MTC1(_ZERO_REGNO, r0);
1104 _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1107 reg = jit_get_reg(jit_class_gpr);
1109 movr_w_f(r0, rn(reg));
1119 #if NEW_ABI && __WORDSIZE == 32
1120 /* n32 abi requires 64 bit cpu */
1122 _movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
1125 OR(r0, _ZERO_REGNO, _ZERO_REGNO);
1126 else if (i0 >= -32678 && i0 <= 32767)
1127 DADDIU(r0, _ZERO_REGNO, i0);
1128 else if (i0 >= 0 && i0 <= 65535)
1129 ORI(r0, _ZERO_REGNO, i0);
1131 if (i0 >= 0 && i0 <= 0x7fffffffLL)
1133 else if (i0 >= 0 && i0 <= 0xffffffffLL) {
1134 if (i0 & 0xffff0000LL) {
1135 ORI(r0, _ZERO_REGNO, (jit_word_t)(i0 >> 16));
1140 movi(r0, (jit_word_t)(i0 >> 32));
1141 if (i0 & 0xffff0000LL) {
1143 ORI(r0, r0, (jit_word_t)(i0 >> 16));
1149 if ((jit_word_t)i0 & 0xffff)
1150 ORI(r0, r0, (jit_word_t)i0 & 0xffff);
1155 _movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
1166 #if __WORDSIZE == 64 || NEW_ABI
1168 _movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1171 reg = jit_get_reg(jit_class_gpr);
1172 movi64(rn(reg), i0);
1173 movr_w_d(r0, rn(reg));
1178 #if __WORDSIZE == 32
1180 _movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1182 if (jit_mips6_p()) {
1187 MTC1(r1, r0 + BE_P);
1188 MTC1(r2, r0 + LE_P);
1193 _movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1195 if (jit_mips6_p()) {
1200 MFC1(r0, r2 + BE_P);
1201 MFC1(r1, r2 + LE_P);
1206 _movi_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
1209 t0 = jit_get_reg(jit_class_gpr);
1210 t1 = jit_get_reg(jit_class_gpr);
1214 MTC1(rn(t1), r0 + 1);
1221 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1224 t0 = jit_get_reg(jit_class_fpr);
1225 # if __WORDSIZE == 32
1227 CVT_D_W(r0, rn(t0));
1230 CVT_D_L(r0, rn(t0));
1236 _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1239 t0 = jit_get_reg(jit_class_fpr);
1240 TRUNC_W_D(rn(t0), r1);
1245 # if __WORDSIZE == 64
1247 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1250 t0 = jit_get_reg(jit_class_fpr);
1251 TRUNC_L_D(rn(t0), r1);
1258 _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1260 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI)
1263 LWC1(r0 + BE_P, 0, r1);
1264 LWC1(r0 + LE_P, 4, r1);
1269 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1272 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1273 if (can_sign_extend_short_p(i0))
1274 LDC1(r0, i0, _ZERO_REGNO);
1276 reg = jit_get_reg(jit_class_gpr);
1278 LDC1(r0, 0, rn(reg));
1283 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1284 LWC1(r0 + BE_P, i0, _ZERO_REGNO);
1285 LWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
1288 reg = jit_get_reg(jit_class_gpr);
1297 _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1300 reg = jit_get_reg(jit_class_gpr);
1301 addr(rn(reg), r1, r2);
1307 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1310 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1311 if (can_sign_extend_short_p(i0))
1317 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1318 LWC1(r0 + BE_P, i0, r1);
1319 LWC1(r0 + LE_P, i0 + 4, r1);
1323 reg = jit_get_reg(jit_class_gpr);
1324 addi(rn(reg), r1, i0);
1332 _str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1)
1334 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI)
1337 SWC1(r1 + BE_P, 0, r0);
1338 SWC1(r1 + LE_P, 4, r0);
1343 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1346 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1347 if (can_sign_extend_short_p(i0))
1348 SDC1(r0, i0, _ZERO_REGNO);
1353 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1354 SWC1(r0 + BE_P, i0, _ZERO_REGNO);
1355 SWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
1359 reg = jit_get_reg(jit_class_gpr);
1368 _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1371 reg = jit_get_reg(jit_class_gpr);
1372 addr(rn(reg), r0, r1);
1378 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1381 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1382 if (can_sign_extend_short_p(i0))
1388 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1389 SWC1(r1 + BE_P, i0, r0);
1390 SWC1(r1 + LE_P, i0 + 4, r0);
1394 reg = jit_get_reg(jit_class_gpr);
1395 addi(rn(reg), r0, i0);
1403 _fmar_d(jit_state_t *_jit,
1404 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1407 if (jit_mips2_p()) {
1408 if (jit_mips6_p()) {
1410 MADDF_D(r0, r2, r1);
1412 t0 = jit_get_reg(jit_class_fpr);
1414 MADDF_D(rn(t0), r2, r1);
1420 MADD_D(r0, r3, r2, r1);
1428 t0 = jit_get_reg(jit_class_fpr);
1429 mulr_d(rn(t0), r1, r2);
1430 addr_d(r0, rn(t0), r3);
1437 _fmsr_d(jit_state_t *_jit,
1438 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1441 if (jit_mips2_p()) {
1442 if (jit_mips6_p()) {
1444 MSUBF_D(r0, r2, r1);
1446 t0 = jit_get_reg(jit_class_fpr);
1448 MSUBF_D(rn(t0), r2, r1);
1455 MSUB_D(r0, r3, r2, r1);
1463 t0 = jit_get_reg(jit_class_fpr);
1464 mulr_d(rn(t0), r1, r2);
1465 subr_d(r0, rn(t0), r3);
1472 _fnmar_d(jit_state_t *_jit,
1473 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1476 if (jit_mips2_p()) {
1477 if (jit_mips6_p()) {
1479 MADDF_D(r0, r2, r1);
1481 t0 = jit_get_reg(jit_class_fpr);
1483 MADDF_D(rn(t0), r2, r1);
1490 NMADD_D(r0, r3, r2, r1);
1493 t0 = jit_get_reg(jit_class_fpr);
1495 mulr_d(rn(t0), rn(t0), r2);
1496 subr_d(r0, rn(t0), r3);
1502 _fnmsr_d(jit_state_t *_jit,
1503 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
1506 if (jit_mips2_p()) {
1507 if (jit_mips6_p()) {
1509 MSUBF_D(r0, r2, r1);
1511 t0 = jit_get_reg(jit_class_fpr);
1513 MSUBF_D(rn(t0), r2, r1);
1519 NMSUB_D(r0, r3, r2, r1);
1522 t0 = jit_get_reg(jit_class_fpr);
1524 mulr_d(rn(t0), rn(t0), r2);
1525 addr_d(r0, rn(t0), r3);
1531 _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1538 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
1548 # if __WORDSIZE == 64 || NEW_ABI
1550 if (_jitc->no_data) {
1551 reg = jit_get_reg(jit_class_gpr);
1552 movi64(rn(reg), data.l);
1557 ldi_d(r0, (jit_word_t)i0);
1560 DMTC1(_ZERO_REGNO, r0);
1562 if (jit_mips6_p()) {
1563 if (_jitc->no_data) {
1564 reg = jit_get_reg(jit_class_gpr);
1565 # if __WORDSIZE == 64
1566 movi(rn(reg), data.l);
1569 movi(rn(reg), data.i[0 + BE_P]);
1571 movi(rn(reg), data.i[0 + LE_P]);
1577 ldi_d(r0, (jit_word_t)i0);
1581 reg = jit_get_reg(jit_class_gpr);
1583 if (_jitc->no_data) {
1584 movi(rn(reg), data.i[0]);
1585 MTC1(rn(reg), r0 + BE_P);
1588 ldi_f(r0 + BE_P, (jit_word_t)i0);
1591 MTC1(_ZERO_REGNO, r0 + BE_P);
1593 if (_jitc->no_data) {
1594 movi(rn(reg), data.i[1]);
1595 MTC1(rn(reg), r0 + LE_P);
1598 ldi_f(r0 + LE_P, ((jit_word_t)i0) + 4);
1601 MTC1(_ZERO_REGNO, r0 + LE_P);
1609 _ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1613 if (jit_mips6_p()) {
1614 reg = jit_get_reg(jit_class_fpr);
1615 CMP_LT_S(rn(reg), r1, r2);
1622 /* cannot optimize delay slot */
1630 patch_at(w, _jit->pc.w);
1636 _ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1640 if (jit_mips6_p()) {
1641 reg = jit_get_reg(jit_class_fpr);
1642 CMP_LE_S(rn(reg), r1, r2);
1649 /* cannot optimize delay slot */
1657 patch_at(w, _jit->pc.w);
1663 _eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1667 if (jit_mips6_p()) {
1668 reg = jit_get_reg(jit_class_fpr);
1669 CMP_EQ_S(rn(reg), r1, r2);
1676 /* cannot optimize delay slot */
1684 patch_at(w, _jit->pc.w);
1690 _ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1694 if (jit_mips6_p()) {
1695 reg = jit_get_reg(jit_class_fpr);
1696 CMP_ULT_S(rn(reg), r1, r2);
1703 /* cannot optimize delay slot */
1711 patch_at(w, _jit->pc.w);
1717 _gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1721 if (jit_mips6_p()) {
1722 reg = jit_get_reg(jit_class_fpr);
1723 CMP_ULE_S(rn(reg), r1, r2);
1730 /* cannot optimize delay slot */
1738 patch_at(w, _jit->pc.w);
1744 _ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1748 if (jit_mips6_p()) {
1749 reg = jit_get_reg(jit_class_fpr);
1750 CMP_EQ_S(rn(reg), r1, r2);
1757 /* cannot optimize delay slot */
1765 patch_at(w, _jit->pc.w);
1771 _unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1775 if (jit_mips6_p()) {
1776 reg = jit_get_reg(jit_class_fpr);
1777 CMP_ULT_S(rn(reg), r1, r2);
1784 /* cannot optimize delay slot */
1792 patch_at(w, _jit->pc.w);
1798 _unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1802 if (jit_mips6_p()) {
1803 reg = jit_get_reg(jit_class_fpr);
1804 CMP_ULE_S(rn(reg), r1, r2);
1811 /* cannot optimize delay slot */
1819 patch_at(w, _jit->pc.w);
1825 _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1829 if (jit_mips6_p()) {
1830 reg = jit_get_reg(jit_class_fpr);
1831 CMP_UEQ_S(rn(reg), r1, r2);
1838 /* cannot optimize delay slot */
1846 patch_at(w, _jit->pc.w);
1852 _unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1856 if (jit_mips6_p()) {
1857 reg = jit_get_reg(jit_class_fpr);
1858 CMP_LT_S(rn(reg), r1, r2);
1865 /* cannot optimize delay slot */
1873 patch_at(w, _jit->pc.w);
1879 _ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1883 if (jit_mips6_p()) {
1884 reg = jit_get_reg(jit_class_fpr);
1885 CMP_LE_S(rn(reg), r1, r2);
1892 /* cannot optimize delay slot */
1900 patch_at(w, _jit->pc.w);
1906 _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1910 if (jit_mips6_p()) {
1911 reg = jit_get_reg(jit_class_fpr);
1912 CMP_UEQ_S(rn(reg), r1, r2);
1919 /* cannot optimize delay slot */
1927 patch_at(w, _jit->pc.w);
1933 _ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1937 if (jit_mips6_p()) {
1938 reg = jit_get_reg(jit_class_fpr);
1939 CMP_UN_S(rn(reg), r1, r2);
1947 /* cannot optimize delay slot */
1954 patch_at(w, _jit->pc.w);
1960 _unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1964 if (jit_mips6_p()) {
1965 reg = jit_get_reg(jit_class_fpr);
1966 CMP_UN_S(rn(reg), r1, r2);
1973 /* cannot optimize delay slot */
1981 patch_at(w, _jit->pc.w);
1987 _bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1990 jit_int32_t op, reg;
1991 if (jit_mips6_p()) {
1992 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1994 CMP_LT_S(rn(reg), r1, r2);
1997 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2000 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2005 BC1T(((i0 - w) >> 2) - 1);
2014 _bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2017 jit_int32_t op, reg;
2018 if (jit_mips6_p()) {
2019 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2021 CMP_LE_S(rn(reg), r1, r2);
2024 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2027 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2032 BC1T(((i0 - w) >> 2) - 1);
2041 _beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2044 jit_int32_t op, reg;
2045 if (jit_mips6_p()) {
2046 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2048 CMP_EQ_S(rn(reg), r1, r2);
2051 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2054 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2059 BC1T(((i0 - w) >> 2) - 1);
2068 _bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2071 jit_int32_t op, reg;
2072 if (jit_mips6_p()) {
2073 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2075 CMP_ULT_S(rn(reg), r1, r2);
2078 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2081 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2086 BC1F(((i0 - w) >> 2) - 1);
2095 _bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2098 jit_int32_t op, reg;
2099 if (jit_mips6_p()) {
2100 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2102 CMP_ULE_S(rn(reg), r1, r2);
2105 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2108 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2113 BC1F(((i0 - w) >> 2) - 1);
2122 _bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2125 jit_int32_t op, reg;
2126 if (jit_mips6_p()) {
2127 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2129 CMP_EQ_S(rn(reg), r1, r2);
2132 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2135 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2140 BC1F(((i0 - w) >> 2) - 1);
2149 _bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2152 jit_int32_t op, reg;
2153 if (jit_mips6_p()) {
2154 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2156 CMP_ULT_S(rn(reg), r1, r2);
2159 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2162 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2167 BC1T(((i0 - w) >> 2) - 1);
2176 _bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2179 jit_int32_t op, reg;
2180 if (jit_mips6_p()) {
2181 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2183 CMP_ULE_S(rn(reg), r1, r2);
2186 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2189 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2194 BC1T(((i0 - w) >> 2) - 1);
2203 _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2206 jit_int32_t op, reg;
2207 if (jit_mips6_p()) {
2208 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2210 CMP_UEQ_S(rn(reg), r1, r2);
2213 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2216 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2221 BC1T(((i0 - w) >> 2) - 1);
2230 _bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2233 jit_int32_t op, reg;
2234 if (jit_mips6_p()) {
2235 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2237 CMP_LT_S(rn(reg), r1, r2);
2240 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2243 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2248 BC1F(((i0 - w) >> 2) - 1);
2257 _bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2260 jit_int32_t op, reg;
2261 if (jit_mips6_p()) {
2262 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2264 CMP_LE_S(rn(reg), r1, r2);
2267 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2270 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2275 BC1F(((i0 - w) >> 2) - 1);
2284 _bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2287 jit_int32_t op, reg;
2288 if (jit_mips6_p()) {
2289 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2291 CMP_UEQ_S(rn(reg), r1, r2);
2294 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2297 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2302 BC1F(((i0 - w) >> 2) - 1);
2311 _bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2314 jit_int32_t op, reg;
2315 if (jit_mips6_p()) {
2316 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2318 CMP_UN_S(rn(reg), r1, r2);
2321 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2324 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2329 BC1F(((i0 - w) >> 2) - 1);
2338 _bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2341 jit_int32_t op, reg;
2342 if (jit_mips6_p()) {
2343 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2345 CMP_UN_S(rn(reg), r1, r2);
2348 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2351 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2356 BC1T(((i0 - w) >> 2) - 1);
2365 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2369 if (jit_mips6_p()) {
2370 reg = jit_get_reg(jit_class_fpr);
2371 CMP_LT_D(rn(reg), r1, r2);
2378 /* cannot optimize delay slot */
2386 patch_at(w, _jit->pc.w);
2392 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2396 if (jit_mips6_p()) {
2397 reg = jit_get_reg(jit_class_fpr);
2398 CMP_LE_D(rn(reg), r1, r2);
2405 /* cannot optimize delay slot */
2413 patch_at(w, _jit->pc.w);
2419 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2423 if (jit_mips6_p()) {
2424 reg = jit_get_reg(jit_class_fpr);
2425 CMP_EQ_D(rn(reg), r1, r2);
2432 /* cannot optimize delay slot */
2440 patch_at(w, _jit->pc.w);
2446 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2450 if (jit_mips6_p()) {
2451 reg = jit_get_reg(jit_class_fpr);
2452 CMP_ULT_D(rn(reg), r1, r2);
2459 /* cannot optimize delay slot */
2467 patch_at(w, _jit->pc.w);
2473 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2477 if (jit_mips6_p()) {
2478 reg = jit_get_reg(jit_class_fpr);
2479 CMP_ULE_D(rn(reg), r1, r2);
2486 /* cannot optimize delay slot */
2494 patch_at(w, _jit->pc.w);
2500 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2504 if (jit_mips6_p()) {
2505 reg = jit_get_reg(jit_class_fpr);
2506 CMP_EQ_D(rn(reg), r1, r2);
2513 /* cannot optimize delay slot */
2521 patch_at(w, _jit->pc.w);
2527 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2531 if (jit_mips6_p()) {
2532 reg = jit_get_reg(jit_class_fpr);
2533 CMP_ULT_D(rn(reg), r1, r2);
2540 /* cannot optimize delay slot */
2548 patch_at(w, _jit->pc.w);
2554 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2558 if (jit_mips6_p()) {
2559 reg = jit_get_reg(jit_class_fpr);
2560 CMP_ULE_D(rn(reg), r1, r2);
2567 /* cannot optimize delay slot */
2575 patch_at(w, _jit->pc.w);
2581 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2585 if (jit_mips6_p()) {
2586 reg = jit_get_reg(jit_class_fpr);
2587 CMP_UEQ_D(rn(reg), r1, r2);
2594 /* cannot optimize delay slot */
2602 patch_at(w, _jit->pc.w);
2608 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2612 if (jit_mips6_p()) {
2613 reg = jit_get_reg(jit_class_fpr);
2614 CMP_LT_D(rn(reg), r1, r2);
2621 /* cannot optimize delay slot */
2629 patch_at(w, _jit->pc.w);
2635 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2639 if (jit_mips6_p()) {
2640 reg = jit_get_reg(jit_class_fpr);
2641 CMP_LE_D(rn(reg), r1, r2);
2648 /* cannot optimize delay slot */
2656 patch_at(w, _jit->pc.w);
2662 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2666 if (jit_mips6_p()) {
2667 reg = jit_get_reg(jit_class_fpr);
2668 CMP_UEQ_D(rn(reg), r1, r2);
2675 /* cannot optimize delay slot */
2683 patch_at(w, _jit->pc.w);
2689 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2693 if (jit_mips6_p()) {
2694 reg = jit_get_reg(jit_class_fpr);
2695 CMP_UN_D(rn(reg), r1, r2);
2702 /* cannot optimize delay slot */
2710 patch_at(w, _jit->pc.w);
2716 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2720 if (jit_mips6_p()) {
2721 reg = jit_get_reg(jit_class_fpr);
2722 CMP_UN_D(rn(reg), r1, r2);
2729 /* cannot optimize delay slot */
2737 patch_at(w, _jit->pc.w);
2743 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2746 jit_int32_t op, reg;
2747 if (jit_mips6_p()) {
2748 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2750 CMP_LT_D(rn(reg), r1, r2);
2753 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2756 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2761 BC1T(((i0 - w) >> 2) - 1);
2770 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2773 jit_int32_t op, reg;
2774 if (jit_mips6_p()) {
2775 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2777 CMP_LE_D(rn(reg), r1, r2);
2780 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2783 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2788 BC1T(((i0 - w) >> 2) - 1);
2797 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2800 jit_int32_t op, reg;
2801 if (jit_mips6_p()) {
2802 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2804 CMP_EQ_D(rn(reg), r1, r2);
2807 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2810 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2815 BC1T(((i0 - w) >> 2) - 1);
2824 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2827 jit_int32_t op, reg;
2828 if (jit_mips6_p()) {
2829 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2831 CMP_ULT_D(rn(reg), r1, r2);
2834 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2837 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2842 BC1F(((i0 - w) >> 2) - 1);
2851 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2854 jit_int32_t op, reg;
2855 if (jit_mips6_p()) {
2856 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2858 CMP_ULE_D(rn(reg), r1, r2);
2861 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2864 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2869 BC1F(((i0 - w) >> 2) - 1);
2878 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2881 jit_int32_t op, reg;
2882 if (jit_mips6_p()) {
2883 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2885 CMP_EQ_D(rn(reg), r1, r2);
2888 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2891 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2896 BC1F(((i0 - w) >> 2) - 1);
2905 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2908 jit_int32_t op, reg;
2909 if (jit_mips6_p()) {
2910 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2912 CMP_ULT_D(rn(reg), r1, r2);
2915 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2918 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2923 BC1T(((i0 - w) >> 2) - 1);
2932 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2935 jit_int32_t op, reg;
2936 if (jit_mips6_p()) {
2937 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2939 CMP_ULE_D(rn(reg), r1, r2);
2942 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2945 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2950 BC1T(((i0 - w) >> 2) - 1);
2959 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2962 jit_int32_t op, reg;
2963 if (jit_mips6_p()) {
2964 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2966 CMP_UEQ_D(rn(reg), r1, r2);
2969 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2972 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2977 BC1T(((i0 - w) >> 2) - 1);
2986 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2989 jit_int32_t op, reg;
2990 if (jit_mips6_p()) {
2991 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2993 CMP_LT_D(rn(reg), r1, r2);
2996 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2999 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
3004 BC1F(((i0 - w) >> 2) - 1);
3013 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
3016 jit_int32_t op, reg;
3017 if (jit_mips6_p()) {
3018 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
3020 CMP_LE_D(rn(reg), r1, r2);
3023 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
3026 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
3031 BC1F(((i0 - w) >> 2) - 1);
3040 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
3043 jit_int32_t op, reg;
3044 if (jit_mips6_p()) {
3045 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
3047 CMP_UEQ_D(rn(reg), r1, r2);
3050 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
3053 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
3058 BC1F(((i0 - w) >> 2) - 1);
3067 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
3070 jit_int32_t op, reg;
3071 if (jit_mips6_p()) {
3072 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
3074 CMP_UN_D(rn(reg), r1, r2);
3077 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
3080 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
3085 BC1F(((i0 - w) >> 2) - 1);
3094 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
3097 jit_int32_t op, reg;
3098 if (jit_mips6_p()) {
3099 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
3101 CMP_UN_D(rn(reg), r1, r2);
3104 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
3107 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
3112 BC1T(((i0 - w) >> 2) - 1);
3121 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
3126 assert(_jitc->function->self.call & jit_call_varargs);
3128 /* Align, if required. */
3129 reg = jit_get_reg(jit_class_gpr);
3130 andi(rn(reg), r1, 7);
3131 addr(r1, r1, rn(reg));
3135 /* Load argument. */
3138 /* Update va_list. */
3139 addi(r1, r1, sizeof(jit_float64_t));