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_ALNV_PS 0x1e
57 # define MIPS_CVT_fmt_S 0x20
58 # define MIPS_CVT_fmt_D 0x21
59 # define MIPS_CVT_fmt_W 0x24
60 # define MIPS_CVT_fmt_L 0x25
61 # define MIPS_PLL 0x2c
62 # define MIPS_PLU 0x2d
63 # define MIPS_PUL 0x2e
64 # define MIPS_PUU 0x2f
65 # define MIPS_MADD_fmt_S (0x20 | MIPS_fmt_S)
66 # define MIPS_MADD_fmt_D (0x20 | MIPS_fmt_D)
67 # define MIPS_MADD_fmt_PS (0x20 | MIPS_fmt_PS)
68 # define MIPS_MSUB_fmt_S (0x28 | MIPS_fmt_S)
69 # define MIPS_MSUB_fmt_D (0x28 | MIPS_fmt_D)
70 # define MIPS_MSUB_fmt_PS (0x28 | MIPS_fmt_PS)
71 # define MIPS_NMADD_fmt_S (0x30 | MIPS_fmt_S)
72 # define MIPS_NMADD_fmt_D (0x30 | MIPS_fmt_D)
73 # define MIPS_NMADD_fmt_PS (0x30 | MIPS_fmt_PS)
74 # define MIPS_NMSUB_fmt_S (0x38 | MIPS_fmt_S)
75 # define MIPS_NMSUB_fmt_D (0x38 | MIPS_fmt_D)
76 # define MIPS_NMSUB_fmt_PS (0x38 | MIPS_fmt_PS)
77 # define MIPS_cond_F 0x30
78 # define MIPS_cond_UN 0x31
79 # define MIPS_cond_EQ 0x32
80 # define MIPS_cond_UEQ 0x33
81 # define MIPS_cond_OLT 0x34
82 # define MIPS_cond_ULT 0x35
83 # define MIPS_cond_OLE 0x36
84 # define MIPS_cond_ULE 0x37
85 # define MIPS_cond_SF 0x38
86 # define MIPS_cond_NGLE 0x39
87 # define MIPS_cond_SEQ 0x3a
88 # define MIPS_cond_NGL 0x3b
89 # define MIPS_cond_LT 0x3c
90 # define MIPS_cond_NGE 0x3d
91 # define MIPS_cond_LE 0x3e
92 # define MIPS_cond_UGT 0x3f
94 # define MIPS_cmp_AF 0x00
95 # define MIPS_cmp_UN 0x01
96 # define MIPS_cmp_EQ 0x02
97 # define MIPS_cmp_UEQ 0x03
98 # define MIPS_cmp_LT 0x04
99 # define MIPS_cmp_ULT 0x05
100 # define MIPS_cmp_LE 0x06
101 # define MIPS_cmp_ULE 0x07
102 # define MIPS_cmp_SAF 0x08
103 # define MIPS_cmp_SUN 0x09
104 # define MIPS_cmp_SEQ 0x0a
105 # define MIPS_cmp_SUEQ 0x0b
106 # define MIPS_cmp_SLT 0x0c
107 # define MIPS_cmp_SULT 0x0d
108 # define MIPS_cmp_SLE 0x0e
109 # define MIPS_cmp_SULE 0x0f
110 # define ADD_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_ADD_fmt)
111 # define ADD_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_ADD_fmt)
112 # define SUB_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_SUB_fmt)
113 # define SUB_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_SUB_fmt)
114 # define MUL_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MUL_fmt)
115 # define MUL_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MUL_fmt)
116 # define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
117 # define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
118 # define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
119 # define ABS_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
120 # define NEG_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
121 # define NEG_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
122 # define SQRT_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
123 # define SQRT_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
124 # define MFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
125 # define MFHC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MFH,rt,fs,0,0)
126 # define MTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
127 # define MTHC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MTH,rt,fs,0,0)
128 # define DMFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
129 # define DMTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMT,rt,fs,0,0)
130 # define CVT_D_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_D)
131 # define CVT_D_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_D)
132 # define CVT_D_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_D)
133 # define CVT_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_L)
134 # define CVT_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_L)
135 # define CVT_PS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_PS)
136 # define CVT_S_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_S)
137 # define CVT_S_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_S)
138 # define CVT_S_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_S)
139 # define CVT_S_PL(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PL)
140 # define CVT_S_PU(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PU)
141 # define CVT_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_W)
142 # define CVT_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_W)
143 # define TRUNC_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_L)
144 # define TRUNC_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_L)
145 # define TRUNC_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_W)
146 # define TRUNC_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_W)
147 # define LWC1(rt, of, rb) hrri(MIPS_LWC1, rb, rt, of)
148 # define SWC1(rt, of, rb) hrri(MIPS_SWC1, rb, rt, of)
149 # define LDC1(rt, of, rb) hrri(MIPS_LDC1, rb, rt, of)
150 # define SDC1(rt, of, rb) hrri(MIPS_SDC1, rb, rt, of)
151 # define MOV_S(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_MOV_fmt)
152 # define MOV_D(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_MOV_fmt)
153 # define BC1F(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCF,im)
154 # define BC1EQZ(ft,im) hrri(MIPS_COP1,MIPS_BC1EQZ,ft,im)
155 # define BC1T(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCT,im)
156 # define BC1NEZ(ft,im) hrri(MIPS_COP1,MIPS_BC1NEZ,ft,im)
157 # define C_F_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_F)
158 # define C_F_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_F)
159 # define C_F_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_F)
160 # define C_UN_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UN)
161 # define C_UN_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UN)
162 # define C_UN_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UN)
163 # define C_EQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_EQ)
164 # define C_EQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_EQ)
165 # define C_EQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_EQ)
166 # define C_UEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UEQ)
167 # define C_UEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UEQ)
168 # define C_UEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UEQ)
169 # define C_OLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLT)
170 # define C_OLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLT)
171 # define C_OLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLT)
172 # define C_ULT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULT)
173 # define C_ULT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULT)
174 # define C_ULT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULT)
175 # define C_OLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLE)
176 # define C_OLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLE)
177 # define C_OLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLE)
178 # define C_ULE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULE)
179 # define C_ULE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULE)
180 # define C_ULE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULE)
181 # define C_SF_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SF)
182 # define C_SF_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SF)
183 # define C_SF_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SF)
184 # define C_NGLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGLE)
185 # define C_NGLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGLE)
186 # define C_NGLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGLE)
187 # define C_SEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SEQ)
188 # define C_SEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SEQ)
189 # define C_SEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SEQ)
190 # define C_NGL_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGL)
191 # define C_NGL_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGL)
192 # define C_NGL_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGL)
193 # define C_NLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLT)
194 # define C_NLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLT)
195 # define C_NLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLT)
196 # define C_NGE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGE)
197 # define C_NGE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGE)
198 # define C_NGE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGE)
199 # define C_NLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLE)
200 # define C_NLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLE)
201 # define C_NLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLE)
202 # define C_UGT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UGT)
203 # define C_UGT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UGT)
204 # define C_UGT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UGT)
205 # define c_cond_fmt(fm,ft,fs,cc) _c_cond_fmt(_jit,fm,ft,fs,cc)
207 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
208 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc);
209 # define CMP_AF_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_AF)
210 # define CMP_AF_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_AF)
211 # define CMP_UN_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_UN)
212 # define CMP_UN_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_UN)
213 # define CMP_EQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_EQ)
214 # define CMP_EQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_EQ)
215 # define CMP_UEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_UEQ)
216 # define CMP_UEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_UEQ)
217 # define CMP_LT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_LT)
218 # define CMP_LT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_LT)
219 # define CMP_ULT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_ULT)
220 # define CMP_ULT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_ULT)
221 # define CMP_LE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_LE)
222 # define CMP_LE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_LE)
223 # define CMP_ULE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_ULE)
224 # define CMP_ULE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_ULE)
225 # define CMP_SAF_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SAF)
226 # define CMP_SAF_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SAF)
227 # define CMP_SUN_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SUN)
228 # define CMP_SUN_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SUN)
229 # define CMP_SEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SEQ)
230 # define CMP_SEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SEQ)
231 # define CMP_SUEQ_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SUEQ)
232 # define CMP_SUEQ_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SUEQ)
233 # define CMP_SLT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SLT)
234 # define CMP_SLT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SLT)
235 # define CMP_SULT_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SULT)
236 # define CMP_SULT_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SULT)
237 # define CMP_SLE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SLE)
238 # define CMP_SLE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SLE)
239 # define CMP_SULE_S(fd,fs,ft) cmp_cond_fmt(MIPS_condn_S,fd,ft,fs,MIPS_cmp_SULE)
240 # define CMP_SULE_D(fd,fs,ft) cmp_cond_fmt(MIPS_condn_D,fd,ft,fs,MIPS_cmp_SULE)
241 # define cmp_cond_fmt(fm,fd,ft,fs,cn) _cmp_cond_fmt(_jit,fm,fd,ft,fs,cn)
243 _cmp_cond_fmt(jit_state_t *_jit, jit_int32_t fm, jit_int32_t fd,
244 jit_int32_t ft, jit_int32_t fs, jit_int32_t cn);
245 # define addr_f(r0,r1,r2) ADD_S(r0,r1,r2)
246 # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
247 static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
248 # define addr_d(r0,r1,r2) ADD_D(r0,r1,r2)
249 # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
250 static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
251 # define subr_f(r0,r1,r2) SUB_S(r0,r1,r2)
252 # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
253 static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
254 # define subr_d(r0,r1,r2) SUB_D(r0,r1,r2)
255 # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
256 static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
257 # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
258 # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
259 static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
260 # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
261 # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
262 static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
263 # define mulr_f(r0,r1,r2) MUL_S(r0,r1,r2)
264 # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
265 static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
266 # define mulr_d(r0,r1,r2) MUL_D(r0,r1,r2)
267 # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
268 static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
269 # define divr_f(r0,r1,r2) DIV_S(r0,r1,r2)
270 # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
271 static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
272 # define divr_d(r0,r1,r2) DIV_D(r0,r1,r2)
273 # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
274 static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
275 # define absr_f(r0,r1) ABS_S(r0,r1)
276 # define absr_d(r0,r1) ABS_D(r0,r1)
277 # define negr_f(r0,r1) NEG_S(r0,r1)
278 # define negr_d(r0,r1) NEG_D(r0,r1)
279 # define sqrtr_f(r0,r1) SQRT_S(r0,r1)
280 # define sqrtr_d(r0,r1) SQRT_D(r0,r1)
281 # define movr_w_f(r0, r1) MTC1(r1, r0)
282 # define movr_f_w(r0, r1) MFC1(r0, r1)
283 # define movi_f_w(r0, i0) _movi_f_w(_jit, r0, i0)
284 static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*);
285 # define extr_f(r0, r1) _extr_f(_jit, r0, r1)
286 static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
287 # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1)
288 static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
289 # if __WORDSIZE == 64
290 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1)
291 static void _truncr_f_l(jit_state_t*,jit_int32_t,jit_int32_t);
293 # define extr_d_f(r0, r1) CVT_S_D(r0, r1)
294 # define ldr_f(r0, r1) LWC1(r0, 0, r1)
295 # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
296 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
297 # define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2)
298 static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
299 # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
300 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
301 # define str_f(r0, r1) SWC1(r1, 0, r0)
302 # define sti_f(i0, r0) _sti_f(_jit, i0, r0)
303 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
304 # define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2)
305 static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
306 # define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
307 static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
308 # define movr_f(r0, r1) _movr_f(_jit, r0, r1)
309 static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t);
310 # define movi_f(r0, i0) _movi_f(_jit, r0, i0)
311 static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
313 # if __WORDSIZE == 32
314 # define movi64(r0, i0) _movi64(_jit, r0, i0)
315 static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t);
317 # define movi64(r0, i0) movi(r0, i0)
319 # define movr_w_d(r0, r1) DMTC1(r1, r0)
320 # define movr_d_w(r0, r1) DMFC1(r0, r1)
321 # define movi_d_w(r0, i0) _movi_d_w(_jit,r0,i0)
322 static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t*);
324 # define movr_ww_d(r0, r1, r2) _movr_ww_d(_jit, r0, r1, r2)
325 static void _movr_ww_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
326 # define movr_d_ww(r0, r1, r2) _movr_d_ww(_jit, r0, r1, r2)
327 static void _movr_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
328 # define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0)
329 static void _movi_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
331 # define extr_d(r0, r1) _extr_d(_jit, r0, r1)
332 static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
333 # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1)
334 static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
335 # if __WORDSIZE == 64
336 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1)
337 static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
339 # define ldr_d(r0, r1) _ldr_d(_jit, r0, r1)
340 static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t);
341 # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
342 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
343 # define ldxr_d(r0, r1, r2) _ldxr_d(_jit, r0, r1, r2)
344 static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
345 # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
346 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
347 # define str_d(r0, r1) _str_d(_jit, r0, r1)
348 static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t);
349 # define sti_d(i0, r0) _sti_d(_jit, i0, r0)
350 static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
351 # define stxr_d(r0, r1, r2) _stxr_d(_jit, r0, r1, r2)
352 static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
353 # define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
354 static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
355 # define movr_d(r0, r1) _movr_d(_jit, r0, r1)
356 static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
357 # define movi_d(r0, i0) _movi_d(_jit, r0, i0)
358 static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
359 # define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
360 static void _ltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
361 # define lti_f(r0, r1, i2) _lti_f(_jit, r0, r1, i2)
362 static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
363 # define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
364 static void _ler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
365 # define lei_f(r0, r1, i2) _lei_f(_jit, r0, r1, i2)
366 static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
367 # define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
368 static void _eqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
369 # define eqi_f(r0, r1, i2) _eqi_f(_jit, r0, r1, i2)
370 static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
371 # define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
372 static void _ger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
373 # define gei_f(r0, r1, i2) _gei_f(_jit, r0, r1, i2)
374 static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
375 # define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
376 static void _gtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
377 # define gti_f(r0, r1, i2) _gti_f(_jit, r0, r1, i2)
378 static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
379 # define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
380 static void _ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
381 # define nei_f(r0, r1, i2) _nei_f(_jit, r0, r1, i2)
382 static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
383 # define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
384 static void _unltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
385 # define unlti_f(r0, r1, i2) _unlti_f(_jit, r0, r1, i2)
386 static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
387 # define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
388 static void _unler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
389 # define unlei_f(r0, r1, i2) _unlei_f(_jit, r0, r1, i2)
390 static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
391 # define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
392 static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
393 # define uneqi_f(r0, r1, i2) _uneqi_f(_jit, r0, r1, i2)
394 static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
395 # define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
396 static void _unger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
397 # define ungei_f(r0, r1, i2) _ungei_f(_jit, r0, r1, i2)
398 static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
399 # define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
400 static void _ungtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
401 # define ungti_f(r0, r1, i2) _ungti_f(_jit, r0, r1, i2)
402 static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
403 # define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
404 static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
405 # define ltgti_f(r0, r1, i2) _ltgti_f(_jit, r0, r1, i2)
406 static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
407 # define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
408 static void _ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
409 # define ordi_f(r0, r1, i2) _ordi_f(_jit, r0, r1, i2)
410 static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
411 # define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
412 static void _unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
413 # define unordi_f(r0, r1, i2) _unordi_f(_jit, r0, r1, i2)
414 static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
415 # define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
416 static jit_word_t _bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
417 # define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
419 _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
420 # define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
421 static jit_word_t _bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
422 # define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
424 _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
425 # define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
426 static jit_word_t _beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
427 # define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
429 _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
430 # define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
431 static jit_word_t _bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
432 # define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
434 _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
435 # define bgtr_f(i0, r0, r1) _bgtr_f(_jit, i0, r0, r1)
436 static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
437 # define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
439 _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
440 # define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
441 static jit_word_t _bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
442 # define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
444 _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
445 # define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
446 static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
447 # define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
449 _bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
450 # define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
451 static jit_word_t _bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
452 # define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
454 _bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
455 # define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
456 static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
457 # define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
459 _buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
460 # define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
461 static jit_word_t _bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
462 # define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
464 _bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
465 # define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
466 static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
467 # define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
469 _bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
470 # define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
471 static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
472 # define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
474 _bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
475 # define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
476 static jit_word_t _bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
477 # define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
479 _bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
480 # define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
481 static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
482 # define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0, r0, i1)
484 _bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
485 # define extr_f_d(r0, r1) CVT_D_S(r0, r1)
486 # define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
487 static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
488 # define lti_d(r0, r1, i2) _lti_d(_jit, r0, r1, i2)
489 static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
490 # define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
491 static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
492 # define lei_d(r0, r1, i2) _lei_d(_jit, r0, r1, i2)
493 static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
494 # define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
495 static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
496 # define eqi_d(r0, r1, i2) _eqi_d(_jit, r0, r1, i2)
497 static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
498 # define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
499 static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
500 # define gei_d(r0, r1, i2) _gei_d(_jit, r0, r1, i2)
501 static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
502 # define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
503 static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
504 # define gti_d(r0, r1, i2) _gti_d(_jit, r0, r1, i2)
505 static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
506 # define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
507 static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
508 # define nei_d(r0, r1, i2) _nei_d(_jit, r0, r1, i2)
509 static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
510 # define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
511 static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
512 # define unlti_d(r0, r1, i2) _unlti_d(_jit, r0, r1, i2)
513 static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
514 # define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
515 static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
516 # define unlei_d(r0, r1, i2) _unlei_d(_jit, r0, r1, i2)
517 static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
518 # define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
519 static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
520 # define uneqi_d(r0, r1, i2) _uneqi_d(_jit, r0, r1, i2)
521 static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
522 # define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
523 static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
524 # define ungei_d(r0, r1, i2) _ungei_d(_jit, r0, r1, i2)
525 static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
526 # define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
527 static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
528 # define ungti_d(r0, r1, i2) _ungti_d(_jit, r0, r1, i2)
529 static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
530 # define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
531 static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
532 # define ltgti_d(r0, r1, i2) _ltgti_d(_jit, r0, r1, i2)
533 static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
534 # define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
535 static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
536 # define ordi_d(r0, r1, i2) _ordi_d(_jit, r0, r1, i2)
537 static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
538 # define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
539 static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
540 # define unordi_d(r0, r1, i2) _unordi_d(_jit, r0, r1, i2)
541 static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
542 # define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
543 static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
544 # define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
546 _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
547 # define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
548 static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
549 # define blei_d(i0, r0, i1) _blei_d(_jit, i0, r0, i1)
551 _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
552 # define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
553 static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
554 # define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
556 _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
557 # define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
558 static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
559 # define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
561 _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
562 # define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
563 static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
564 # define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
566 _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
567 # define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
568 static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
569 # define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
571 _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
572 # define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
573 static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
574 # define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
576 _bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
577 # define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
578 static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
579 # define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
581 _bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
582 # define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
583 static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
584 # define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0, r0, i1)
586 _buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
587 # define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
588 static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
589 # define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
591 _bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
592 # define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
593 static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
594 # define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
596 _bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
597 # define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
598 static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
599 # define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
601 _bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
602 # define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
603 static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
604 # define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
606 _bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
607 # define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
608 static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
609 # define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
611 _bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
612 # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
613 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
618 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
619 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc)
631 _cmp_cond_fmt(jit_state_t *_jit, jit_int32_t fm, jit_int32_t fd,
632 jit_int32_t ft, jit_int32_t fs, jit_int32_t cn)
635 i.op = 0; /* must have bit 6 zero ed */
645 # define fpr_opi(name, type, size) \
647 _##name##i_##type(jit_state_t *_jit, \
648 jit_int32_t r0, jit_int32_t r1, \
649 jit_float##size##_t *i0) \
651 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
652 movi_##type(rn(reg), i0); \
653 name##r_##type(r0, r1, rn(reg)); \
654 jit_unget_reg(reg); \
656 # define fpr_bopi(name, type, size) \
658 _b##name##i_##type(jit_state_t *_jit, \
659 jit_word_t i0, jit_int32_t r0, \
660 jit_float##size##_t *i1) \
663 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
664 jit_class_nospill); \
665 movi_##type(rn(reg), i1); \
666 word = b##name##r_##type(i0, r0, rn(reg)); \
667 jit_unget_reg(reg); \
670 # define fopi(name) fpr_opi(name, f, 32)
671 # define fbopi(name) fpr_bopi(name, f, 32)
672 # define dopi(name) fpr_opi(name, d, 64)
673 # define dbopi(name) fpr_bopi(name, d, 64)
682 _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
694 _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
697 t0 = jit_get_reg(jit_class_fpr);
698 # if __WORDSIZE == 32
709 _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
712 t0 = jit_get_reg(jit_class_fpr);
713 TRUNC_W_S(rn(t0), r1);
718 # if __WORDSIZE == 64
720 _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
723 t0 = jit_get_reg(jit_class_fpr);
724 TRUNC_L_S(rn(t0), r1);
731 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
734 if (can_sign_extend_short_p(i0))
735 LWC1(r0, i0, _ZERO_REGNO);
737 reg = jit_get_reg(jit_class_gpr);
745 _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
748 reg = jit_get_reg(jit_class_gpr);
749 addr(rn(reg), r1, r2);
755 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
758 if (can_sign_extend_short_p(i0))
761 reg = jit_get_reg(jit_class_gpr);
762 addi(rn(reg), r1, i0);
769 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
772 if (can_sign_extend_short_p(i0))
773 SWC1(r0, i0, _ZERO_REGNO);
775 reg = jit_get_reg(jit_class_gpr);
783 _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
786 reg = jit_get_reg(jit_class_gpr);
787 addr(rn(reg), r0, r1);
793 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
796 if (can_sign_extend_short_p(i0))
799 reg = jit_get_reg(jit_class_gpr);
800 addi(rn(reg), r0, i0);
807 _movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
814 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
824 if (_jitc->no_data) {
825 reg = jit_get_reg(jit_class_gpr);
826 movi(rn(reg), data.i);
831 ldi_f(r0, (jit_word_t)i0);
834 MTC1(_ZERO_REGNO, r0);
844 /* n32 abi requires 64 bit cpu */
846 _movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
849 OR(r0, _ZERO_REGNO, _ZERO_REGNO);
850 else if (i0 >= -32678 && i0 <= 32767)
851 DADDIU(r0, _ZERO_REGNO, i0);
852 else if (i0 >= 0 && i0 <= 65535)
853 ORI(r0, _ZERO_REGNO, i0);
855 if (i0 >= 0 && i0 <= 0x7fffffffLL)
857 else if (i0 >= 0 && i0 <= 0xffffffffLL) {
858 if (i0 & 0xffff0000LL) {
859 ORI(r0, _ZERO_REGNO, (jit_word_t)(i0 >> 16));
864 movi(r0, (jit_word_t)(i0 >> 32));
865 if (i0 & 0xffff0000LL) {
867 ORI(r0, r0, (jit_word_t)(i0 >> 16));
873 if ((jit_word_t)i0 & 0xffff)
874 ORI(r0, r0, (jit_word_t)i0 & 0xffff);
879 _movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
886 if (_jitc->no_data) {
892 if (can_sign_extend_short_p(w))
893 LD(r0, w, _ZERO_REGNO);
903 _movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
905 assert(r1 == r2 - 1);
917 _movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
919 assert(r0 == r1 - 1);
931 _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0)
946 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
949 t0 = jit_get_reg(jit_class_fpr);
950 # if __WORDSIZE == 32
961 _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
964 t0 = jit_get_reg(jit_class_fpr);
965 TRUNC_W_D(rn(t0), r1);
970 # if __WORDSIZE == 64
972 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
975 t0 = jit_get_reg(jit_class_fpr);
976 TRUNC_L_D(rn(t0), r1);
983 _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
985 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI)
988 LWC1(r0 + BE_P, 0, r1);
989 LWC1(r0 + LE_P, 4, r1);
994 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
997 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
998 if (can_sign_extend_short_p(i0))
999 LDC1(r0, i0, _ZERO_REGNO);
1001 reg = jit_get_reg(jit_class_gpr);
1003 LDC1(r0, 0, rn(reg));
1008 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1009 LWC1(r0 + BE_P, i0, _ZERO_REGNO);
1010 LWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
1013 reg = jit_get_reg(jit_class_gpr);
1022 _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1025 reg = jit_get_reg(jit_class_gpr);
1026 addr(rn(reg), r1, r2);
1032 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1035 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1036 if (can_sign_extend_short_p(i0))
1042 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1043 LWC1(r0 + BE_P, i0, r1);
1044 LWC1(r0 + LE_P, i0 + 4, r1);
1048 reg = jit_get_reg(jit_class_gpr);
1049 addi(rn(reg), r1, i0);
1057 _str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1)
1059 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI)
1062 SWC1(r1 + BE_P, 0, r0);
1063 SWC1(r1 + LE_P, 4, r0);
1068 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1071 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1072 if (can_sign_extend_short_p(i0))
1073 SDC1(r0, i0, _ZERO_REGNO);
1078 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1079 SWC1(r0 + BE_P, i0, _ZERO_REGNO);
1080 SWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
1084 reg = jit_get_reg(jit_class_gpr);
1093 _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1096 reg = jit_get_reg(jit_class_gpr);
1097 addr(rn(reg), r0, r1);
1103 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1106 if (jit_mips6_p() || __WORDSIZE == 64 || NEW_ABI) {
1107 if (can_sign_extend_short_p(i0))
1113 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1114 SWC1(r1 + BE_P, i0, r0);
1115 SWC1(r1 + LE_P, i0 + 4, r0);
1119 reg = jit_get_reg(jit_class_gpr);
1120 addi(rn(reg), r0, i0);
1128 _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1135 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
1145 # if __WORDSIZE == 64 || NEW_ABI
1147 if (_jitc->no_data) {
1148 reg = jit_get_reg(jit_class_gpr);
1149 movi64(rn(reg), data.l);
1154 ldi_d(r0, (jit_word_t)i0);
1157 DMTC1(_ZERO_REGNO, r0);
1159 if (jit_mips6_p()) {
1160 if (_jitc->no_data) {
1161 reg = jit_get_reg(jit_class_gpr);
1162 # if __WORDSIZE == 64
1163 movi(rn(reg), data.l);
1166 movi(rn(reg), data.i[0 + BE_P]);
1168 movi(rn(reg), data.i[0 + LE_P]);
1174 ldi_d(r0, (jit_word_t)i0);
1178 reg = jit_get_reg(jit_class_gpr);
1180 if (_jitc->no_data) {
1181 movi(rn(reg), data.i[0]);
1182 MTC1(rn(reg), r0 + BE_P);
1185 ldi_f(r0 + BE_P, (jit_word_t)i0);
1188 MTC1(_ZERO_REGNO, r0 + BE_P);
1190 if (_jitc->no_data) {
1191 movi(rn(reg), data.i[1]);
1192 MTC1(rn(reg), r0 + LE_P);
1195 ldi_f(r0 + LE_P, ((jit_word_t)i0) + 4);
1198 MTC1(_ZERO_REGNO, r0 + LE_P);
1206 _ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1210 if (jit_mips6_p()) {
1211 reg = jit_get_reg(jit_class_fpr);
1212 CMP_LT_S(rn(reg), r1, r2);
1219 /* cannot optimize delay slot */
1227 patch_at(w, _jit->pc.w);
1233 _ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1237 if (jit_mips6_p()) {
1238 reg = jit_get_reg(jit_class_fpr);
1239 CMP_LE_S(rn(reg), r1, r2);
1246 /* cannot optimize delay slot */
1254 patch_at(w, _jit->pc.w);
1260 _eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1264 if (jit_mips6_p()) {
1265 reg = jit_get_reg(jit_class_fpr);
1266 CMP_EQ_S(rn(reg), r1, r2);
1273 /* cannot optimize delay slot */
1281 patch_at(w, _jit->pc.w);
1287 _ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1291 if (jit_mips6_p()) {
1292 reg = jit_get_reg(jit_class_fpr);
1293 CMP_ULT_S(rn(reg), r1, r2);
1300 /* cannot optimize delay slot */
1308 patch_at(w, _jit->pc.w);
1314 _gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1318 if (jit_mips6_p()) {
1319 reg = jit_get_reg(jit_class_fpr);
1320 CMP_ULE_S(rn(reg), r1, r2);
1327 /* cannot optimize delay slot */
1335 patch_at(w, _jit->pc.w);
1341 _ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1345 if (jit_mips6_p()) {
1346 reg = jit_get_reg(jit_class_fpr);
1347 CMP_EQ_S(rn(reg), r1, r2);
1354 /* cannot optimize delay slot */
1362 patch_at(w, _jit->pc.w);
1368 _unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1372 if (jit_mips6_p()) {
1373 reg = jit_get_reg(jit_class_fpr);
1374 CMP_ULT_S(rn(reg), r1, r2);
1381 /* cannot optimize delay slot */
1389 patch_at(w, _jit->pc.w);
1395 _unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1399 if (jit_mips6_p()) {
1400 reg = jit_get_reg(jit_class_fpr);
1401 CMP_ULE_S(rn(reg), r1, r2);
1408 /* cannot optimize delay slot */
1416 patch_at(w, _jit->pc.w);
1422 _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1426 if (jit_mips6_p()) {
1427 reg = jit_get_reg(jit_class_fpr);
1428 CMP_UEQ_S(rn(reg), r1, r2);
1435 /* cannot optimize delay slot */
1443 patch_at(w, _jit->pc.w);
1449 _unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1453 if (jit_mips6_p()) {
1454 reg = jit_get_reg(jit_class_fpr);
1455 CMP_LT_S(rn(reg), r1, r2);
1462 /* cannot optimize delay slot */
1470 patch_at(w, _jit->pc.w);
1476 _ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1480 if (jit_mips6_p()) {
1481 reg = jit_get_reg(jit_class_fpr);
1482 CMP_LE_S(rn(reg), r1, r2);
1489 /* cannot optimize delay slot */
1497 patch_at(w, _jit->pc.w);
1503 _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1507 if (jit_mips6_p()) {
1508 reg = jit_get_reg(jit_class_fpr);
1509 CMP_UEQ_S(rn(reg), r1, r2);
1516 /* cannot optimize delay slot */
1524 patch_at(w, _jit->pc.w);
1530 _ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1534 if (jit_mips6_p()) {
1535 reg = jit_get_reg(jit_class_fpr);
1536 CMP_UN_S(rn(reg), r1, r2);
1544 /* cannot optimize delay slot */
1551 patch_at(w, _jit->pc.w);
1557 _unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1561 if (jit_mips6_p()) {
1562 reg = jit_get_reg(jit_class_fpr);
1563 CMP_UN_S(rn(reg), r1, r2);
1570 /* cannot optimize delay slot */
1578 patch_at(w, _jit->pc.w);
1584 _bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1587 jit_int32_t op, reg;
1588 if (jit_mips6_p()) {
1589 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1591 CMP_LT_S(rn(reg), r1, r2);
1594 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1597 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1602 BC1T(((i0 - w) >> 2) - 1);
1611 _bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1614 jit_int32_t op, reg;
1615 if (jit_mips6_p()) {
1616 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1618 CMP_LE_S(rn(reg), r1, r2);
1621 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1624 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1629 BC1T(((i0 - w) >> 2) - 1);
1638 _beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1641 jit_int32_t op, reg;
1642 if (jit_mips6_p()) {
1643 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1645 CMP_EQ_S(rn(reg), r1, r2);
1648 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1651 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1656 BC1T(((i0 - w) >> 2) - 1);
1665 _bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1668 jit_int32_t op, reg;
1669 if (jit_mips6_p()) {
1670 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1672 CMP_ULT_S(rn(reg), r1, r2);
1675 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1678 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1683 BC1F(((i0 - w) >> 2) - 1);
1692 _bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1695 jit_int32_t op, reg;
1696 if (jit_mips6_p()) {
1697 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1699 CMP_ULE_S(rn(reg), r1, r2);
1702 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1705 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1710 BC1F(((i0 - w) >> 2) - 1);
1719 _bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1722 jit_int32_t op, reg;
1723 if (jit_mips6_p()) {
1724 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1726 CMP_EQ_S(rn(reg), r1, r2);
1729 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1732 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1737 BC1F(((i0 - w) >> 2) - 1);
1746 _bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1749 jit_int32_t op, reg;
1750 if (jit_mips6_p()) {
1751 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1753 CMP_ULT_S(rn(reg), r1, r2);
1756 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1759 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1764 BC1T(((i0 - w) >> 2) - 1);
1773 _bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1776 jit_int32_t op, reg;
1777 if (jit_mips6_p()) {
1778 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1780 CMP_ULE_S(rn(reg), r1, r2);
1783 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1786 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1791 BC1T(((i0 - w) >> 2) - 1);
1800 _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1803 jit_int32_t op, reg;
1804 if (jit_mips6_p()) {
1805 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1807 CMP_UEQ_S(rn(reg), r1, r2);
1810 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1813 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1818 BC1T(((i0 - w) >> 2) - 1);
1827 _bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1830 jit_int32_t op, reg;
1831 if (jit_mips6_p()) {
1832 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1834 CMP_LT_S(rn(reg), r1, r2);
1837 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1840 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1845 BC1F(((i0 - w) >> 2) - 1);
1854 _bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1857 jit_int32_t op, reg;
1858 if (jit_mips6_p()) {
1859 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1861 CMP_LE_S(rn(reg), r1, r2);
1864 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1867 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1872 BC1F(((i0 - w) >> 2) - 1);
1881 _bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1884 jit_int32_t op, reg;
1885 if (jit_mips6_p()) {
1886 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1888 CMP_UEQ_S(rn(reg), r1, r2);
1891 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1894 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1899 BC1F(((i0 - w) >> 2) - 1);
1908 _bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1911 jit_int32_t op, reg;
1912 if (jit_mips6_p()) {
1913 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1915 CMP_UN_S(rn(reg), r1, r2);
1918 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
1921 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1926 BC1F(((i0 - w) >> 2) - 1);
1935 _bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1938 jit_int32_t op, reg;
1939 if (jit_mips6_p()) {
1940 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
1942 CMP_UN_S(rn(reg), r1, r2);
1945 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
1948 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
1953 BC1T(((i0 - w) >> 2) - 1);
1962 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1966 if (jit_mips6_p()) {
1967 reg = jit_get_reg(jit_class_fpr);
1968 CMP_LT_D(rn(reg), r1, r2);
1975 /* cannot optimize delay slot */
1983 patch_at(w, _jit->pc.w);
1989 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1993 if (jit_mips6_p()) {
1994 reg = jit_get_reg(jit_class_fpr);
1995 CMP_LE_D(rn(reg), r1, r2);
2002 /* cannot optimize delay slot */
2010 patch_at(w, _jit->pc.w);
2016 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2020 if (jit_mips6_p()) {
2021 reg = jit_get_reg(jit_class_fpr);
2022 CMP_EQ_D(rn(reg), r1, r2);
2029 /* cannot optimize delay slot */
2037 patch_at(w, _jit->pc.w);
2043 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2047 if (jit_mips6_p()) {
2048 reg = jit_get_reg(jit_class_fpr);
2049 CMP_ULT_D(rn(reg), r1, r2);
2056 /* cannot optimize delay slot */
2064 patch_at(w, _jit->pc.w);
2070 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2074 if (jit_mips6_p()) {
2075 reg = jit_get_reg(jit_class_fpr);
2076 CMP_ULE_D(rn(reg), r1, r2);
2083 /* cannot optimize delay slot */
2091 patch_at(w, _jit->pc.w);
2097 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2101 if (jit_mips6_p()) {
2102 reg = jit_get_reg(jit_class_fpr);
2103 CMP_EQ_D(rn(reg), r1, r2);
2110 /* cannot optimize delay slot */
2118 patch_at(w, _jit->pc.w);
2124 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2128 if (jit_mips6_p()) {
2129 reg = jit_get_reg(jit_class_fpr);
2130 CMP_ULT_D(rn(reg), r1, r2);
2137 /* cannot optimize delay slot */
2145 patch_at(w, _jit->pc.w);
2151 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2155 if (jit_mips6_p()) {
2156 reg = jit_get_reg(jit_class_fpr);
2157 CMP_ULE_D(rn(reg), r1, r2);
2164 /* cannot optimize delay slot */
2172 patch_at(w, _jit->pc.w);
2178 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2182 if (jit_mips6_p()) {
2183 reg = jit_get_reg(jit_class_fpr);
2184 CMP_UEQ_D(rn(reg), r1, r2);
2191 /* cannot optimize delay slot */
2199 patch_at(w, _jit->pc.w);
2205 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2209 if (jit_mips6_p()) {
2210 reg = jit_get_reg(jit_class_fpr);
2211 CMP_LT_D(rn(reg), r1, r2);
2218 /* cannot optimize delay slot */
2226 patch_at(w, _jit->pc.w);
2232 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2236 if (jit_mips6_p()) {
2237 reg = jit_get_reg(jit_class_fpr);
2238 CMP_LE_D(rn(reg), r1, r2);
2245 /* cannot optimize delay slot */
2253 patch_at(w, _jit->pc.w);
2259 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2263 if (jit_mips6_p()) {
2264 reg = jit_get_reg(jit_class_fpr);
2265 CMP_UEQ_D(rn(reg), r1, r2);
2272 /* cannot optimize delay slot */
2280 patch_at(w, _jit->pc.w);
2286 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2290 if (jit_mips6_p()) {
2291 reg = jit_get_reg(jit_class_fpr);
2292 CMP_UN_D(rn(reg), r1, r2);
2299 /* cannot optimize delay slot */
2307 patch_at(w, _jit->pc.w);
2313 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2317 if (jit_mips6_p()) {
2318 reg = jit_get_reg(jit_class_fpr);
2319 CMP_UN_D(rn(reg), r1, r2);
2326 /* cannot optimize delay slot */
2334 patch_at(w, _jit->pc.w);
2340 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2343 jit_int32_t op, reg;
2344 if (jit_mips6_p()) {
2345 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2347 CMP_LT_D(rn(reg), r1, r2);
2350 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2353 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2358 BC1T(((i0 - w) >> 2) - 1);
2367 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2370 jit_int32_t op, reg;
2371 if (jit_mips6_p()) {
2372 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2374 CMP_LE_D(rn(reg), r1, r2);
2377 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2380 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2385 BC1T(((i0 - w) >> 2) - 1);
2394 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2397 jit_int32_t op, reg;
2398 if (jit_mips6_p()) {
2399 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2401 CMP_EQ_D(rn(reg), r1, r2);
2404 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2407 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2412 BC1T(((i0 - w) >> 2) - 1);
2421 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2424 jit_int32_t op, reg;
2425 if (jit_mips6_p()) {
2426 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2428 CMP_ULT_D(rn(reg), r1, r2);
2431 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2434 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2439 BC1F(((i0 - w) >> 2) - 1);
2448 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2451 jit_int32_t op, reg;
2452 if (jit_mips6_p()) {
2453 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2455 CMP_ULE_D(rn(reg), r1, r2);
2458 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2461 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2466 BC1F(((i0 - w) >> 2) - 1);
2475 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2478 jit_int32_t op, reg;
2479 if (jit_mips6_p()) {
2480 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2482 CMP_EQ_D(rn(reg), r1, r2);
2485 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2488 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2493 BC1F(((i0 - w) >> 2) - 1);
2502 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2505 jit_int32_t op, reg;
2506 if (jit_mips6_p()) {
2507 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2509 CMP_ULT_D(rn(reg), r1, r2);
2512 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2515 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2520 BC1T(((i0 - w) >> 2) - 1);
2529 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2532 jit_int32_t op, reg;
2533 if (jit_mips6_p()) {
2534 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2536 CMP_ULE_D(rn(reg), r1, r2);
2539 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2542 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2547 BC1T(((i0 - w) >> 2) - 1);
2556 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2559 jit_int32_t op, reg;
2560 if (jit_mips6_p()) {
2561 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2563 CMP_UEQ_D(rn(reg), r1, r2);
2566 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2569 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2574 BC1T(((i0 - w) >> 2) - 1);
2583 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2586 jit_int32_t op, reg;
2587 if (jit_mips6_p()) {
2588 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2590 CMP_LT_D(rn(reg), r1, r2);
2593 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2596 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2601 BC1F(((i0 - w) >> 2) - 1);
2610 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2613 jit_int32_t op, reg;
2614 if (jit_mips6_p()) {
2615 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2617 CMP_LE_D(rn(reg), r1, r2);
2620 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2623 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2628 BC1F(((i0 - w) >> 2) - 1);
2637 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2640 jit_int32_t op, reg;
2641 if (jit_mips6_p()) {
2642 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2644 CMP_UEQ_D(rn(reg), r1, r2);
2647 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2650 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2655 BC1F(((i0 - w) >> 2) - 1);
2664 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2667 jit_int32_t op, reg;
2668 if (jit_mips6_p()) {
2669 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2671 CMP_UN_D(rn(reg), r1, r2);
2674 BC1EQZ(rn(reg), ((i0 - w) >> 2) - 1);
2677 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2682 BC1F(((i0 - w) >> 2) - 1);
2691 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
2694 jit_int32_t op, reg;
2695 if (jit_mips6_p()) {
2696 reg = jit_get_reg_for_delay_slot(jit_class_fpr, r1, r2);
2698 CMP_UN_D(rn(reg), r1, r2);
2701 BC1NEZ(rn(reg), ((i0 - w) >> 2) - 1);
2704 reg = jit_get_reg_for_delay_slot(jit_class_fpr|jit_class_chk, r1, r2);
2709 BC1T(((i0 - w) >> 2) - 1);
2718 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2723 assert(_jitc->function->self.call & jit_call_varargs);
2725 /* Align, if required. */
2726 reg = jit_get_reg(jit_class_gpr);
2727 andi(rn(reg), r1, 7);
2728 addr(r1, r1, rn(reg));
2732 /* Load argument. */
2735 /* Update va_list. */
2736 addi(r1, r1, sizeof(jit_float64_t));