2 * Copyright (C) 2012-2019 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_ADD_fmt 0x00
31 # define MIPS_LWXC1 0x00
32 # define MIPS_SUB_fmt 0x01
33 # define MIPS_LDXC1 0x01
34 # define MIPS_MUL_fmt 0x02
35 # define MIPS_DIV_fmt 0x03
36 # define MIPS_SQRT_fmt 0x04
37 # define MIPS_ABS_fmt 0x05
38 # define MIPS_LUXC1 0x05
39 # define MIPS_MOV_fmt 0x06
40 # define MIPS_NEG_fmt 0x07
41 # define MIPS_SWXC1 0x08
42 # define MIPS_ROUND_fmt_L 0x08
43 # define MIPS_TRUNC_fmt_L 0x09
44 # define MIPS_SDXC1 0x09
45 # define MIPS_CEIL_fmt_L 0x0a
46 # define MIPS_FLOOR_fmt_L 0x0b
47 # define MIPS_ROUND_fmt_W 0x0c
48 # define MIPS_TRUNC_fmt_W 0x0d
49 # define MIPS_SUXC1 0x0d
50 # define MIPS_CEIL_fmt_W 0x0e
51 # define MIPS_FLOOR_fmt_W 0x0f
52 # define MIPS_RECIP 0x15
53 # define MIPS_RSQRT 0x16
54 # define MIPS_ALNV_PS 0x1e
55 # define MIPS_CVT_fmt_S 0x20
56 # define MIPS_CVT_fmt_D 0x21
57 # define MIPS_CVT_fmt_W 0x24
58 # define MIPS_CVT_fmt_L 0x25
59 # define MIPS_PLL 0x2c
60 # define MIPS_PLU 0x2d
61 # define MIPS_PUL 0x2e
62 # define MIPS_PUU 0x2f
63 # define MIPS_MADD_fmt_S (0x20 | MIPS_fmt_S)
64 # define MIPS_MADD_fmt_D (0x20 | MIPS_fmt_D)
65 # define MIPS_MADD_fmt_PS (0x20 | MIPS_fmt_PS)
66 # define MIPS_MSUB_fmt_S (0x28 | MIPS_fmt_S)
67 # define MIPS_MSUB_fmt_D (0x28 | MIPS_fmt_D)
68 # define MIPS_MSUB_fmt_PS (0x28 | MIPS_fmt_PS)
69 # define MIPS_NMADD_fmt_S (0x30 | MIPS_fmt_S)
70 # define MIPS_NMADD_fmt_D (0x30 | MIPS_fmt_D)
71 # define MIPS_NMADD_fmt_PS (0x30 | MIPS_fmt_PS)
72 # define MIPS_NMSUB_fmt_S (0x38 | MIPS_fmt_S)
73 # define MIPS_NMSUB_fmt_D (0x38 | MIPS_fmt_D)
74 # define MIPS_NMSUB_fmt_PS (0x38 | MIPS_fmt_PS)
75 # define MIPS_cond_F 0x30
76 # define MIPS_cond_UN 0x31
77 # define MIPS_cond_EQ 0x32
78 # define MIPS_cond_UEQ 0x33
79 # define MIPS_cond_OLT 0x34
80 # define MIPS_cond_ULT 0x35
81 # define MIPS_cond_OLE 0x36
82 # define MIPS_cond_ULE 0x37
83 # define MIPS_cond_SF 0x38
84 # define MIPS_cond_NGLE 0x39
85 # define MIPS_cond_SEQ 0x3a
86 # define MIPS_cond_NGL 0x3b
87 # define MIPS_cond_LT 0x3c
88 # define MIPS_cond_NGE 0x3d
89 # define MIPS_cond_LE 0x3e
90 # define MIPS_cond_UGT 0x3f
91 # define ADD_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_ADD_fmt)
92 # define ADD_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_ADD_fmt)
93 # define SUB_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_SUB_fmt)
94 # define SUB_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_SUB_fmt)
95 # define MUL_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_MUL_fmt)
96 # define MUL_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_MUL_fmt)
97 # define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
98 # define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
99 # define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
100 # define ABS_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
101 # define NEG_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
102 # define NEG_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
103 # define SQRT_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
104 # define SQRT_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
105 # define MFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
106 # define MTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
107 # define DMFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
108 # define DMTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMT,rt,fs,0,0)
109 # define CVT_D_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_D)
110 # define CVT_D_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_D)
111 # define CVT_D_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_D)
112 # define CVT_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_L)
113 # define CVT_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_L)
114 # define CVT_PS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_PS)
115 # define CVT_S_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_S)
116 # define CVT_S_W(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_W,0,fs,fd,MIPS_CVT_fmt_S)
117 # define CVT_S_L(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_L,0,fs,fd,MIPS_CVT_fmt_S)
118 # define CVT_S_PL(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PL)
119 # define CVT_S_PU(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_PS,0,fs,fd,MIPS_CVT_fmt_S_PU)
120 # define CVT_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_CVT_fmt_W)
121 # define CVT_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_CVT_fmt_W)
122 # define TRUNC_L_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_L)
123 # define TRUNC_L_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_L)
124 # define TRUNC_W_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_TRUNC_fmt_W)
125 # define TRUNC_W_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_TRUNC_fmt_W)
126 # define LWC1(rt, of, rb) hrri(MIPS_LWC1, rb, rt, of)
127 # define SWC1(rt, of, rb) hrri(MIPS_SWC1, rb, rt, of)
128 # define LDC1(rt, of, rb) hrri(MIPS_LDC1, rb, rt, of)
129 # define SDC1(rt, of, rb) hrri(MIPS_SDC1, rb, rt, of)
130 # define MOV_S(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_MOV_fmt)
131 # define MOV_D(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_MOV_fmt)
132 # define BC1F(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCF,im)
133 # define BC1T(im) hrri(MIPS_COP1,MIPS_BC,MIPS_BCT,im)
134 # define C_F_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_F)
135 # define C_F_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_F)
136 # define C_F_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_F)
137 # define C_UN_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UN)
138 # define C_UN_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UN)
139 # define C_UN_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UN)
140 # define C_EQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_EQ)
141 # define C_EQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_EQ)
142 # define C_EQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_EQ)
143 # define C_UEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UEQ)
144 # define C_UEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UEQ)
145 # define C_UEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UEQ)
146 # define C_OLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLT)
147 # define C_OLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLT)
148 # define C_OLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLT)
149 # define C_ULT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULT)
150 # define C_ULT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULT)
151 # define C_ULT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULT)
152 # define C_OLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_OLE)
153 # define C_OLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_OLE)
154 # define C_OLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_OLE)
155 # define C_ULE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_ULE)
156 # define C_ULE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_ULE)
157 # define C_ULE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_ULE)
158 # define C_SF_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SF)
159 # define C_SF_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SF)
160 # define C_SF_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SF)
161 # define C_NGLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGLE)
162 # define C_NGLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGLE)
163 # define C_NGLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGLE)
164 # define C_SEQ_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_SEQ)
165 # define C_SEQ_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_SEQ)
166 # define C_SEQ_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_SEQ)
167 # define C_NGL_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGL)
168 # define C_NGL_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGL)
169 # define C_NGL_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGL)
170 # define C_NLT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLT)
171 # define C_NLT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLT)
172 # define C_NLT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLT)
173 # define C_NGE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NGE)
174 # define C_NGE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NGE)
175 # define C_NGE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NGE)
176 # define C_NLE_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_NLE)
177 # define C_NLE_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_NLE)
178 # define C_NLE_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_NLE)
179 # define C_UGT_S(fs,ft) c_cond_fmt(MIPS_fmt_S,ft,fs,MIPS_cond_UGT)
180 # define C_UGT_D(fs,ft) c_cond_fmt(MIPS_fmt_D,ft,fs,MIPS_cond_UGT)
181 # define C_UGT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UGT)
182 # define c_cond_fmt(fm,ft,fs,cc) _c_cond_fmt(_jit,fm,ft,fs,cc)
184 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
185 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc);
186 # define addr_f(r0,r1,r2) ADD_S(r0,r1,r2)
187 # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
188 static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
189 # define addr_d(r0,r1,r2) ADD_D(r0,r1,r2)
190 # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
191 static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
192 # define subr_f(r0,r1,r2) SUB_S(r0,r1,r2)
193 # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
194 static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
195 # define subr_d(r0,r1,r2) SUB_D(r0,r1,r2)
196 # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
197 static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
198 # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
199 # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
200 static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
201 # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
202 # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
203 static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
204 # define mulr_f(r0,r1,r2) MUL_S(r0,r1,r2)
205 # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
206 static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
207 # define mulr_d(r0,r1,r2) MUL_D(r0,r1,r2)
208 # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
209 static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
210 # define divr_f(r0,r1,r2) DIV_S(r0,r1,r2)
211 # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
212 static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
213 # define divr_d(r0,r1,r2) DIV_D(r0,r1,r2)
214 # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
215 static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
216 # define absr_f(r0,r1) ABS_S(r0,r1)
217 # define absr_d(r0,r1) ABS_D(r0,r1)
218 # define negr_f(r0,r1) NEG_S(r0,r1)
219 # define negr_d(r0,r1) NEG_D(r0,r1)
220 # define sqrtr_f(r0,r1) SQRT_S(r0,r1)
221 # define sqrtr_d(r0,r1) SQRT_D(r0,r1)
222 # define movr_w_f(r0, r1) MTC1(r1, r0)
223 # define movr_f_w(r0, r1) MFC1(r1, r0)
224 # define movi_f_w(r0, i0) _movi_f_w(_jit, r0, i0)
225 static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*);
226 # define extr_f(r0, r1) _extr_f(_jit, r0, r1)
227 static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
228 # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1)
229 static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
230 # if __WORDSIZE == 64
231 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1)
232 static void _truncr_f_l(jit_state_t*,jit_int32_t,jit_int32_t);
234 # define extr_d_f(r0, r1) CVT_S_D(r0, r1)
235 # define ldr_f(r0, r1) LWC1(r0, 0, r1)
236 # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
237 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
238 # define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2)
239 static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
240 # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
241 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
242 # define str_f(r0, r1) SWC1(r1, 0, r0)
243 # define sti_f(i0, r0) _sti_f(_jit, i0, r0)
244 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
245 # define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2)
246 static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
247 # define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
248 static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
249 # define movr_f(r0, r1) _movr_f(_jit, r0, r1)
250 static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t);
251 # define movi_f(r0, i0) _movi_f(_jit, r0, i0)
252 static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
254 # if __WORDSIZE == 32
255 # define movi64(r0, i0) _movi64(_jit, r0, i0)
256 static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t);
258 # define movi64(r0, i0) movi(r0, i0)
260 # define movr_w_d(r0, r1) DMTC1(r1, r0)
261 # define movr_d_w(r0, r1) DMFC1(r0, r1)
262 # define movi_d_w(r0, i0) _movi_d_w(_jit,r0,i0)
263 static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t*);
265 # define movr_ww_d(r0, r1, r2) _movr_ww_d(_jit, r0, r1, r2)
266 static void _movr_ww_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
267 # define movr_d_ww(r0, r1, r2) _movr_d_ww(_jit, r0, r1, r2)
268 static void _movr_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
269 # define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0)
270 static void _movi_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
272 # define extr_d(r0, r1) _extr_d(_jit, r0, r1)
273 static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
274 # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1)
275 static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
276 # if __WORDSIZE == 64
277 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1)
278 static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
280 # define ldr_d(r0, r1) _ldr_d(_jit, r0, r1)
281 static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t);
282 # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
283 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
284 # define ldxr_d(r0, r1, r2) _ldxr_d(_jit, r0, r1, r2)
285 static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
286 # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
287 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
288 # define str_d(r0, r1) _str_d(_jit, r0, r1)
289 static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t);
290 # define sti_d(i0, r0) _sti_d(_jit, i0, r0)
291 static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
292 # define stxr_d(r0, r1, r2) _stxr_d(_jit, r0, r1, r2)
293 static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
294 # define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
295 static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
296 # define movr_d(r0, r1) _movr_d(_jit, r0, r1)
297 static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
298 # define movi_d(r0, i0) _movi_d(_jit, r0, i0)
299 static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
300 # define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
301 static void _ltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
302 # define lti_f(r0, r1, i2) _lti_f(_jit, r0, r1, i2)
303 static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
304 # define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
305 static void _ler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
306 # define lei_f(r0, r1, i2) _lei_f(_jit, r0, r1, i2)
307 static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
308 # define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
309 static void _eqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
310 # define eqi_f(r0, r1, i2) _eqi_f(_jit, r0, r1, i2)
311 static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
312 # define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
313 static void _ger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
314 # define gei_f(r0, r1, i2) _gei_f(_jit, r0, r1, i2)
315 static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
316 # define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
317 static void _gtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
318 # define gti_f(r0, r1, i2) _gti_f(_jit, r0, r1, i2)
319 static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
320 # define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
321 static void _ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
322 # define nei_f(r0, r1, i2) _nei_f(_jit, r0, r1, i2)
323 static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
324 # define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
325 static void _unltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
326 # define unlti_f(r0, r1, i2) _unlti_f(_jit, r0, r1, i2)
327 static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
328 # define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
329 static void _unler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
330 # define unlei_f(r0, r1, i2) _unlei_f(_jit, r0, r1, i2)
331 static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
332 # define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
333 static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
334 # define uneqi_f(r0, r1, i2) _uneqi_f(_jit, r0, r1, i2)
335 static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
336 # define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
337 static void _unger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
338 # define ungei_f(r0, r1, i2) _ungei_f(_jit, r0, r1, i2)
339 static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
340 # define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
341 static void _ungtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
342 # define ungti_f(r0, r1, i2) _ungti_f(_jit, r0, r1, i2)
343 static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
344 # define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
345 static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
346 # define ltgti_f(r0, r1, i2) _ltgti_f(_jit, r0, r1, i2)
347 static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
348 # define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
349 static void _ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
350 # define ordi_f(r0, r1, i2) _ordi_f(_jit, r0, r1, i2)
351 static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
352 # define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
353 static void _unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
354 # define unordi_f(r0, r1, i2) _unordi_f(_jit, r0, r1, i2)
355 static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
356 # define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
357 static jit_word_t _bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
358 # define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
360 _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
361 # define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
362 static jit_word_t _bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
363 # define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
365 _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
366 # define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
367 static jit_word_t _beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
368 # define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
370 _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
371 # define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
372 static jit_word_t _bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
373 # define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
375 _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
376 # define bgtr_f(i0, r0, r1) _bgtr_f(_jit, i0, r0, r1)
377 static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
378 # define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
380 _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
381 # define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
382 static jit_word_t _bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
383 # define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
385 _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
386 # define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
387 static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
388 # define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
390 _bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
391 # define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
392 static jit_word_t _bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
393 # define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
395 _bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
396 # define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
397 static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
398 # define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
400 _buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
401 # define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
402 static jit_word_t _bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
403 # define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
405 _bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
406 # define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
407 static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
408 # define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
410 _bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
411 # define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
412 static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
413 # define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
415 _bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
416 # define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
417 static jit_word_t _bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
418 # define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
420 _bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
421 # define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
422 static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
423 # define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0, r0, i1)
425 _bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*);
426 # define extr_f_d(r0, r1) CVT_D_S(r0, r1)
427 # define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
428 static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
429 # define lti_d(r0, r1, i2) _lti_d(_jit, r0, r1, i2)
430 static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
431 # define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
432 static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
433 # define lei_d(r0, r1, i2) _lei_d(_jit, r0, r1, i2)
434 static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
435 # define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
436 static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
437 # define eqi_d(r0, r1, i2) _eqi_d(_jit, r0, r1, i2)
438 static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
439 # define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
440 static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
441 # define gei_d(r0, r1, i2) _gei_d(_jit, r0, r1, i2)
442 static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
443 # define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
444 static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
445 # define gti_d(r0, r1, i2) _gti_d(_jit, r0, r1, i2)
446 static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
447 # define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
448 static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
449 # define nei_d(r0, r1, i2) _nei_d(_jit, r0, r1, i2)
450 static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
451 # define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
452 static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
453 # define unlti_d(r0, r1, i2) _unlti_d(_jit, r0, r1, i2)
454 static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
455 # define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
456 static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
457 # define unlei_d(r0, r1, i2) _unlei_d(_jit, r0, r1, i2)
458 static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
459 # define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
460 static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
461 # define uneqi_d(r0, r1, i2) _uneqi_d(_jit, r0, r1, i2)
462 static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
463 # define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
464 static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
465 # define ungei_d(r0, r1, i2) _ungei_d(_jit, r0, r1, i2)
466 static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
467 # define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
468 static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
469 # define ungti_d(r0, r1, i2) _ungti_d(_jit, r0, r1, i2)
470 static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
471 # define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
472 static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
473 # define ltgti_d(r0, r1, i2) _ltgti_d(_jit, r0, r1, i2)
474 static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
475 # define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
476 static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
477 # define ordi_d(r0, r1, i2) _ordi_d(_jit, r0, r1, i2)
478 static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
479 # define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
480 static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
481 # define unordi_d(r0, r1, i2) _unordi_d(_jit, r0, r1, i2)
482 static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
483 # define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
484 static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
485 # define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
487 _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
488 # define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
489 static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
490 # define blei_d(i0, r0, i1) _blei_d(_jit, i0, r0, i1)
492 _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
493 # define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
494 static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
495 # define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
497 _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
498 # define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
499 static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
500 # define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
502 _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
503 # define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
504 static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
505 # define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
507 _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
508 # define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
509 static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
510 # define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
512 _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
513 # define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
514 static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
515 # define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
517 _bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
518 # define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
519 static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
520 # define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
522 _bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
523 # define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
524 static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
525 # define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0, r0, i1)
527 _buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
528 # define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
529 static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
530 # define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
532 _bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
533 # define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
534 static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
535 # define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
537 _bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
538 # define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
539 static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
540 # define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
542 _bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
543 # define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
544 static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
545 # define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
547 _bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
548 # define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
549 static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
550 # define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
552 _bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*);
553 # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
554 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
559 _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm,
560 jit_int32_t ft, jit_int32_t fs, jit_int32_t cc)
571 # define fpr_opi(name, type, size) \
573 _##name##i_##type(jit_state_t *_jit, \
574 jit_int32_t r0, jit_int32_t r1, \
575 jit_float##size##_t *i0) \
577 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
578 movi_##type(rn(reg), i0); \
579 name##r_##type(r0, r1, rn(reg)); \
580 jit_unget_reg(reg); \
582 # define fpr_bopi(name, type, size) \
584 _b##name##i_##type(jit_state_t *_jit, \
585 jit_word_t i0, jit_int32_t r0, \
586 jit_float##size##_t *i1) \
589 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
590 jit_class_nospill); \
591 movi_##type(rn(reg), i1); \
592 word = b##name##r_##type(i0, r0, rn(reg)); \
593 jit_unget_reg(reg); \
596 # define fopi(name) fpr_opi(name, f, 32)
597 # define fbopi(name) fpr_bopi(name, f, 32)
598 # define dopi(name) fpr_opi(name, d, 64)
599 # define dbopi(name) fpr_bopi(name, d, 64)
608 _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
620 _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
623 t0 = jit_get_reg(jit_class_fpr);
624 # if __WORDSIZE == 32
635 _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
638 t0 = jit_get_reg(jit_class_fpr);
639 TRUNC_W_S(rn(t0), r1);
644 # if __WORDSIZE == 64
646 _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
649 t0 = jit_get_reg(jit_class_fpr);
650 TRUNC_L_S(rn(t0), r1);
657 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
660 if (can_sign_extend_short_p(i0))
661 LWC1(r0, i0, _ZERO_REGNO);
663 reg = jit_get_reg(jit_class_gpr);
671 _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
674 reg = jit_get_reg(jit_class_gpr);
675 addr(rn(reg), r1, r2);
681 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
684 if (can_sign_extend_short_p(i0))
687 reg = jit_get_reg(jit_class_gpr);
688 addi(rn(reg), r1, i0);
695 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
698 if (can_sign_extend_short_p(i0))
699 SWC1(r0, i0, _ZERO_REGNO);
701 reg = jit_get_reg(jit_class_gpr);
709 _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
712 reg = jit_get_reg(jit_class_gpr);
713 addr(rn(reg), r0, r1);
719 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
722 if (can_sign_extend_short_p(i0))
725 reg = jit_get_reg(jit_class_gpr);
726 addi(rn(reg), r0, i0);
733 _movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
740 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
750 if (_jitc->no_data) {
751 reg = jit_get_reg(jit_class_gpr);
752 movi(rn(reg), data.i);
757 ldi_f(r0, (jit_word_t)i0);
760 MTC1(_ZERO_REGNO, r0);
770 /* n32 abi requires 64 bit cpu */
772 _movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
775 OR(r0, _ZERO_REGNO, _ZERO_REGNO);
776 else if (i0 >= -32678 && i0 <= 32767)
777 DADDIU(r0, _ZERO_REGNO, i0);
778 else if (i0 >= 0 && i0 <= 65535)
779 ORI(r0, _ZERO_REGNO, i0);
781 if (i0 >= 0 && i0 <= 0x7fffffffLL)
783 else if (i0 >= 0 && i0 <= 0xffffffffLL) {
784 if (i0 & 0xffff0000LL) {
785 ORI(r0, _ZERO_REGNO, (jit_word_t)(i0 >> 16));
790 movi(r0, (jit_word_t)(i0 >> 32));
791 if (i0 & 0xffff0000LL) {
793 ORI(r0, r0, (jit_word_t)(i0 >> 16));
799 if ((jit_word_t)i0 & 0xffff)
800 ORI(r0, r0, (jit_word_t)i0 & 0xffff);
805 _movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
812 if (_jitc->no_data) {
818 if (can_sign_extend_short_p(w))
819 LD(r0, w, _ZERO_REGNO);
829 _movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
831 assert(r1 == r2 - 1);
837 _movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
839 assert(r0 == r1 - 1);
845 _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0)
860 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
863 t0 = jit_get_reg(jit_class_fpr);
864 # if __WORDSIZE == 32
875 _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
878 t0 = jit_get_reg(jit_class_fpr);
879 TRUNC_W_D(rn(t0), r1);
884 # if __WORDSIZE == 64
886 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
889 t0 = jit_get_reg(jit_class_fpr);
890 TRUNC_L_D(rn(t0), r1);
897 _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
899 # if __WORDSIZE == 64 || NEW_ABI
902 LWC1(r0 + BE_P, 0, r1);
903 LWC1(r0 + LE_P, 4, r1);
908 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
911 # if __WORDSIZE == 64 || NEW_ABI
912 if (can_sign_extend_short_p(i0))
913 LDC1(r0, i0, _ZERO_REGNO);
915 reg = jit_get_reg(jit_class_gpr);
917 LDC1(r0, 0, rn(reg));
921 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
922 LWC1(r0 + BE_P, i0, _ZERO_REGNO);
923 LWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
926 reg = jit_get_reg(jit_class_gpr);
928 LWC1(r0 + BE_P, 0, rn(reg));
929 LWC1(r0 + LE_P, 4, rn(reg));
936 _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
939 reg = jit_get_reg(jit_class_gpr);
940 addr(rn(reg), r1, r2);
946 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
949 # if __WORDSIZE == 64 || NEW_ABI
950 if (can_sign_extend_short_p(i0))
953 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
954 LWC1(r0 + BE_P, i0, r1);
955 LWC1(r0 + LE_P, i0 + 4, r1);
959 reg = jit_get_reg(jit_class_gpr);
960 addi(rn(reg), r1, i0);
967 _str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1)
969 # if __WORDSIZE == 64 || NEW_ABI
972 SWC1(r1 + BE_P, 0, r0);
973 SWC1(r1 + LE_P, 4, r0);
978 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
981 # if __WORDSIZE == 64 || NEW_ABI
982 if (can_sign_extend_short_p(i0))
983 SDC1(r0, i0, _ZERO_REGNO);
985 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
986 SWC1(r0 + BE_P, i0, _ZERO_REGNO);
987 SWC1(r0 + LE_P, i0 + 4, _ZERO_REGNO);
991 reg = jit_get_reg(jit_class_gpr);
999 _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1002 reg = jit_get_reg(jit_class_gpr);
1003 addr(rn(reg), r0, r1);
1009 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1012 # if __WORDSIZE == 64 || NEW_ABI
1013 if (can_sign_extend_short_p(i0))
1016 if (can_sign_extend_short_p(i0) && can_sign_extend_short_p(i0 + 4)) {
1017 SWC1(r1 + BE_P, i0, r0);
1018 SWC1(r1 + LE_P, i0 + 4, r0);
1022 reg = jit_get_reg(jit_class_gpr);
1023 addi(rn(reg), r0, i0);
1030 _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1037 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
1047 # if __WORDSIZE == 64 || NEW_ABI
1049 if (_jitc->no_data) {
1050 reg = jit_get_reg(jit_class_gpr);
1051 movi64(rn(reg), data.l);
1056 ldi_d(r0, (jit_word_t)i0);
1059 DMTC1(_ZERO_REGNO, r0);
1062 reg = jit_get_reg(jit_class_gpr);
1064 if (_jitc->no_data) {
1065 movi(rn(reg), data.i[0]);
1066 MTC1(rn(reg), r0 + BE_P);
1069 ldi_f(r0 + BE_P, (jit_word_t)i0);
1072 MTC1(_ZERO_REGNO, r0 + BE_P);
1074 if (_jitc->no_data) {
1075 movi(rn(reg), data.i[1]);
1076 MTC1(rn(reg), r0 + LE_P);
1079 ldi_f(r0 + LE_P, ((jit_word_t)i0) + 4);
1082 MTC1(_ZERO_REGNO, r0 + LE_P);
1089 _ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1098 patch_at(w, _jit->pc.w);
1103 _ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1112 patch_at(w, _jit->pc.w);
1117 _eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1126 patch_at(w, _jit->pc.w);
1131 _ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1140 patch_at(w, _jit->pc.w);
1145 _gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1154 patch_at(w, _jit->pc.w);
1159 _ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1168 patch_at(w, _jit->pc.w);
1173 _unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1182 patch_at(w, _jit->pc.w);
1187 _unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1196 patch_at(w, _jit->pc.w);
1201 _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1210 patch_at(w, _jit->pc.w);
1215 _unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1224 patch_at(w, _jit->pc.w);
1229 _ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1238 patch_at(w, _jit->pc.w);
1243 _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1252 patch_at(w, _jit->pc.w);
1257 _ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1266 patch_at(w, _jit->pc.w);
1271 _unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1280 patch_at(w, _jit->pc.w);
1285 _bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1290 BC1T(((i0 - w) >> 2) - 1);
1297 _bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1302 BC1T(((i0 - w) >> 2) - 1);
1309 _beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1314 BC1T(((i0 - w) >> 2) - 1);
1321 _bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1326 BC1F(((i0 - w) >> 2) - 1);
1333 _bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1338 BC1F(((i0 - w) >> 2) - 1);
1345 _bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1350 BC1F(((i0 - w) >> 2) - 1);
1357 _bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1362 BC1T(((i0 - w) >> 2) - 1);
1369 _bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1374 BC1T(((i0 - w) >> 2) - 1);
1381 _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1386 BC1T(((i0 - w) >> 2) - 1);
1393 _bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1398 BC1F(((i0 - w) >> 2) - 1);
1405 _bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1410 BC1F(((i0 - w) >> 2) - 1);
1417 _bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1422 BC1F(((i0 - w) >> 2) - 1);
1429 _bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1434 BC1F(((i0 - w) >> 2) - 1);
1441 _bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1446 BC1T(((i0 - w) >> 2) - 1);
1453 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1462 patch_at(w, _jit->pc.w);
1467 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1476 patch_at(w, _jit->pc.w);
1481 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1490 patch_at(w, _jit->pc.w);
1495 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1504 patch_at(w, _jit->pc.w);
1509 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1518 patch_at(w, _jit->pc.w);
1523 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1532 patch_at(w, _jit->pc.w);
1537 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1546 patch_at(w, _jit->pc.w);
1551 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1560 patch_at(w, _jit->pc.w);
1565 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1574 patch_at(w, _jit->pc.w);
1579 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1588 patch_at(w, _jit->pc.w);
1593 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1602 patch_at(w, _jit->pc.w);
1607 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1616 patch_at(w, _jit->pc.w);
1621 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1630 patch_at(w, _jit->pc.w);
1635 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1644 patch_at(w, _jit->pc.w);
1649 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1654 BC1T(((i0 - w) >> 2) - 1);
1661 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1666 BC1T(((i0 - w) >> 2) - 1);
1673 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1678 BC1T(((i0 - w) >> 2) - 1);
1685 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1690 BC1F(((i0 - w) >> 2) - 1);
1697 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1702 BC1F(((i0 - w) >> 2) - 1);
1709 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1714 BC1F(((i0 - w) >> 2) - 1);
1721 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1726 BC1T(((i0 - w) >> 2) - 1);
1733 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1738 BC1T(((i0 - w) >> 2) - 1);
1745 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1750 BC1T(((i0 - w) >> 2) - 1);
1757 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1762 BC1F(((i0 - w) >> 2) - 1);
1769 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1774 BC1F(((i0 - w) >> 2) - 1);
1781 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1786 BC1F(((i0 - w) >> 2) - 1);
1793 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1798 BC1F(((i0 - w) >> 2) - 1);
1805 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1810 BC1T(((i0 - w) >> 2) - 1);
1817 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1822 assert(_jitc->function->self.call & jit_call_varargs);
1824 /* Align, if required. */
1825 reg = jit_get_reg(jit_class_gpr);
1826 andi(rn(reg), r1, 7);
1827 addr(r1, r1, rn(reg));
1831 /* Load argument. */
1834 /* Update va_list. */
1835 addi(r1, r1, sizeof(jit_float64_t));