2 * Copyright (C) 2022-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 FADD_S(fd, fj, fk) orrr(0x201, fk, fj, fd)
22 # define FADD_D(fd, fj, fk) orrr(0x202, fk, fj, fd)
23 # define FSUB_S(fd, fj, fk) orrr(0x205, fk, fj, fd)
24 # define FSUB_D(fd, fj, fk) orrr(0x206, fk, fj, fd)
25 # define FMUL_S(fd, fj, fk) orrr(0x209, fk, fj, fd)
26 # define FMUL_D(fd, fj, fk) orrr(0x20a, fk, fj, fd)
27 # define FDIV_S(fd, fj, fk) orrr(0x20d, fk, fj, fd)
28 # define FDIV_D(fd, fj, fk) orrr(0x20e, fk, fj, fd)
29 # define FMAX_S(fd, fj, fk) orrr(0x211, fk, fj, fd)
30 # define FMAX_D(fd, fj, fk) orrr(0x212, fk, fj, fd)
31 # define FMIN_S(fd, fj, fk) orrr(0x215, fk, fj, fd)
32 # define FMIN_D(fd, fj, fk) orrr(0x216, fk, fj, fd)
33 # define FMAXA_S(fd, fj, fk) orrr(0x219, fk, fj, fd)
34 # define FMAXA_D(fd, fj, fk) orrr(0x21a, fk, fj, fd)
35 # define FMINA_S(fd, fj, fk) orrr(0x21d, fk, fj, fd)
36 # define FMINA_D(fd, fj, fk) orrr(0x21e, fk, fj, fd)
37 # define FSCALEB_S(fd, fj, fk) orrr(0x221, fk, fj, fd)
38 # define FSCALEB_D(fd, fj, fk) orrr(0x222, fk, fj, fd)
39 # define FCOPYSIGN_S(fd, fj, fk) orrr(0x225, fk, fj, fd)
40 # define FCOPYSIGN_D(fd, fj, fk) orrr(0x226, fk, fj, fd)
41 # define FABS_S(fd, fj) ou5rr(0x228, 0x01, fj, fd)
42 # define FABS_D(fd, fj) ou5rr(0x228, 0x02, fj, fd)
43 # define FNEG_S(fd, fj) ou5rr(0x228, 0x05, fj, fd)
44 # define FNEG_D(fd, fj) ou5rr(0x228, 0x06, fj, fd)
45 # define FGLOB_S(fd, fj) ou5rr(0x228, 0x09, fj, fd)
46 # define FGLOB_D(fd, fj) ou5rr(0x228, 0x0a, fj, fd)
47 # define FCLASS_S(fd, fj) ou5rr(0x228, 0x0d, fj, fd)
48 # define FCLASS_D(fd, fj) ou5rr(0x228, 0x0e, fj, fd)
49 # define FSQRT_S(fd, fj) ou5rr(0x228, 0x11, fj, fd)
50 # define FSQRT_D(fd, fj) ou5rr(0x228, 0x12, fj, fd)
51 # define FRECIP_S(fd, fj) ou5rr(0x228, 0x15, fj, fd)
52 # define FRECIP_D(fd, fj) ou5rr(0x228, 0x16, fj, fd)
53 # define FRSQRT_S(fd, fj) ou5rr(0x228, 0x19, fj, fd)
54 # define FRSQRT_D(fd, fj) ou5rr(0x228, 0x1a, fj, fd)
55 # define FMOV_S(fd, fj) ou5rr(0x229, 0x05, fj, fd)
56 # define FMOV_D(fd, fj) ou5rr(0x229, 0x06, fj, fd)
57 # define MOVGR2FR_W(fd, rj) ou5rr(0x229, 0x09, rj, fd)
58 # define MOVGR2FR_D(fd, rj) ou5rr(0x229, 0x0a, rj, fd)
59 # define MOVGR2FRH_W(fd, rj) ou5rr(0x229, 0x0b, rj, fd)
60 # define MOVFR2GR_S(rd, fj) ou5rr(0x229, 0x0d, fj, rd)
61 # define MOVFR2GR_D(rd, fj) ou5rr(0x229, 0x0e, fj, rd)
62 # define MOVFRH2GR_S(rd, fj) ou5rr(0x229, 0x0f, fj, rd)
63 # define MOVGR2FCSR(fc, rj) ou5rr(0x229, 0x10, rj, fc)
64 # define MOVFCSR2GR(rd, fc) ou5rr(0x229, 0x12, fc, rd)
65 # define MOVFR2CF(cd, fj) o5r23(0x229, 0x14, fj, 0, cd)
66 # define MOVCF2FR(fd, cj) o523r(0x229, 0x15, 0, cj, fd)
67 # define MOVGR2CF(cd, fj) o5r23(0x229, 0x16, fj, 0, cd)
68 # define MOVCF2GR(fd, cj) o523r(0x229, 0x17, 0, cj, fd)
69 # define FCVT_S_D(fd, fj) ou5rr(0x232, 0x06, fj, fd)
70 # define FCVT_D_S(fd, fj) ou5rr(0x232, 0x09, fj, fd)
71 # define FTINTRM_W_S(fd, fj) ou5rr(0x234, 0x01, fj, fd)
72 # define FTINTRM_W_D(fd, fj) ou5rr(0x234, 0x02, fj, fd)
73 # define FTINTRM_L_S(fd, fj) ou5rr(0x234, 0x09, fj, fd)
74 # define FTINTRM_L_D(fd, fj) ou5rr(0x234, 0x0a, fj, fd)
75 # define FTINTRP_W_S(fd, fj) ou5rr(0x234, 0x11, fj, fd)
76 # define FTINTRP_W_D(fd, fj) ou5rr(0x234, 0x12, fj, fd)
77 # define FTINTRP_L_S(fd, fj) ou5rr(0x234, 0x19, fj, fd)
78 # define FTINTRP_L_D(fd, fj) ou5rr(0x234, 0x1a, fj, fd)
79 # define FTINTRZ_W_S(fd, fj) ou5rr(0x235, 0x01, fj, fd)
80 # define FTINTRZ_W_D(fd, fj) ou5rr(0x235, 0x02, fj, fd)
81 # define FTINTRZ_L_S(fd, fj) ou5rr(0x235, 0x09, fj, fd)
82 # define FTINTRZ_L_D(fd, fj) ou5rr(0x235, 0x0a, fj, fd)
83 # define FTINTRNE_W_S(fd, fj) ou5rr(0x235, 0x11, fj, fd)
84 # define FTINTRNE_W_D(fd, fj) ou5rr(0x235, 0x12, fj, fd)
85 # define FTINTRNE_L_S(fd, fj) ou5rr(0x235, 0x19, fj, fd)
86 # define FTINTRNE_L_D(fd, fj) ou5rr(0x235, 0x1a, fj, fd)
87 # define FTINT_W_S(fd, fj) ou5rr(0x236, 0x01, fj, fd)
88 # define FTINT_W_D(fd, fj) ou5rr(0x236, 0x02, fj, fd)
89 # define FTINT_L_S(fd, fj) ou5rr(0x236, 0x09, fj, fd)
90 # define FTINT_L_D(fd, fj) ou5rr(0x236, 0x0a, fj, fd)
91 # define FFINT_S_W(fd, fj) ou5rr(0x23a, 0x04, fj, fd)
92 # define FFINT_S_L(fd, fj) ou5rr(0x23a, 0x06, fj, fd)
93 # define FFINT_D_W(fd, fj) ou5rr(0x23a, 0x08, fj, fd)
94 # define FFINT_D_L(fd, fj) ou5rr(0x23a, 0x0a, fj, fd)
95 # define FRINT_S(fd, fj) ou5rr(0x23c, 0x11, fj, fd)
96 # define FRINT_D(fd, fj) ou5rr(0x23c, 0x12, fj, fd)
97 # define FMADD_S(fd, fj, fk, fa) orrrr(0x081, fa, fk, fj, fd)
98 # define FMADD_D(fd, fj, fk, fa) orrrr(0x082, fa, fk, fj, fd)
99 # define FMSUB_S(fd, fj, fk, fa) orrrr(0x085, fa, fk, fj, fd)
100 # define FMSUB_D(fd, fj, fk, fa) orrrr(0x086, fa, fk, fj, fd)
101 # define FNMADD_S(fd, fj, fk, fa) orrrr(0x089, fa, fk, fj, fd)
102 # define FNMADD_D(fd, fj, fk, fa) orrrr(0x08a, fa, fk, fj, fd)
103 # define FNMSUB_S(fd, fj, fk, fa) orrrr(0x08d, fa, fk, fj, fd)
104 # define FNMSUB_D(fd, fj, fk, fa) orrrr(0x08e, fa, fk, fj, fd)
105 /* No QNaN exception */
129 # define FCMP_cond_S(cc, cd, fj, fk) ou5rru2u3(0x0c1, cc, fk, fj, 0, cd)
130 # define FCMP_CAF_S(cd, fj, fk) FCMP_cond_S( _CAF, cd, fj, fk)
131 # define FCMP_CUN_S(cd, fj, fk) FCMP_cond_S( _CUN, cd, fj, fk)
132 # define FCMP_CEQ_S(cd, fj, fk) FCMP_cond_S( _CEQ, cd, fj, fk)
133 # define FCMP_CUEQ_S(cd, fj, fk) FCMP_cond_S(_CUEQ, cd, fj, fk)
134 # define FCMP_CLT_S(cd, fj, fk) FCMP_cond_S( _CLT, cd, fj, fk)
135 # define FCMP_CULT_S(cd, fj, fk) FCMP_cond_S(_CULT, cd, fj, fk)
136 # define FCMP_CLE_S(cd, fj, fk) FCMP_cond_S( _CLE, cd, fj, fk)
137 # define FCMP_CULE_S(cd, fj, fk) FCMP_cond_S(_CULE, cd, fj, fk)
138 # define FCMP_CNE_S(cd, fj, fk) FCMP_cond_S( _CNE, cd, fj, fk)
139 # define FCMP_COR_S(cd, fj, fk) FCMP_cond_S( _COR, cd, fj, fk)
140 # define FCMP_CUNE_S(cd, fj, fk) FCMP_cond_S(_CUNE, cd, fj, fk)
141 # define FCMP_SAF_S(cd, fj, fk) FCMP_cond_S( _CAF, cd, fj, fk)
142 # define FCMP_SUN_S(cd, fj, fk) FCMP_cond_S( _CUN, cd, fj, fk)
143 # define FCMP_SEQ_S(cd, fj, fk) FCMP_cond_S( _CEQ, cd, fj, fk)
144 # define FCMP_SUEQ_S(cd, fj, fk) FCMP_cond_S(_CUEQ, cd, fj, fk)
145 # define FCMP_SLT_S(cd, fj, fk) FCMP_cond_S( _CLT, cd, fj, fk)
146 # define FCMP_SULT_S(cd, fj, fk) FCMP_cond_S(_CULT, cd, fj, fk)
147 # define FCMP_SLE_S(cd, fj, fk) FCMP_cond_S( _CLE, cd, fj, fk)
148 # define FCMP_SULE_S(cd, fj, fk) FCMP_cond_S(_CULE, cd, fj, fk)
149 # define FCMP_SNE_S(cd, fj, fk) FCMP_cond_S( _CNE, cd, fj, fk)
150 # define FCMP_SOR_S(cd, fj, fk) FCMP_cond_S( _COR, cd, fj, fk)
151 # define FCMP_SUNE_S(cd, fj, fk) FCMP_cond_S(_CUNE, cd, fj, fk)
152 # define FCMP_cond_D(cc, cd, fj, fk) ou5rru2u3(0x0c2, cc, fk, fj, 0, cd)
153 # define FCMP_CAF_D(cd, fj, fk) FCMP_cond_D( _CAF, cd, fj, fk)
154 # define FCMP_CUN_D(cd, fj, fk) FCMP_cond_D( _CUN, cd, fj, fk)
155 # define FCMP_CEQ_D(cd, fj, fk) FCMP_cond_D( _CEQ, cd, fj, fk)
156 # define FCMP_CUEQ_D(cd, fj, fk) FCMP_cond_D(_CUEQ, cd, fj, fk)
157 # define FCMP_CLT_D(cd, fj, fk) FCMP_cond_D( _CLT, cd, fj, fk)
158 # define FCMP_CULT_D(cd, fj, fk) FCMP_cond_D(_CULT, cd, fj, fk)
159 # define FCMP_CLE_D(cd, fj, fk) FCMP_cond_D( _CLE, cd, fj, fk)
160 # define FCMP_CULE_D(cd, fj, fk) FCMP_cond_D(_CULE, cd, fj, fk)
161 # define FCMP_CNE_D(cd, fj, fk) FCMP_cond_D( _CNE, cd, fj, fk)
162 # define FCMP_COR_D(cd, fj, fk) FCMP_cond_D( _COR, cd, fj, fk)
163 # define FCMP_CUNE_D(cd, fj, fk) FCMP_cond_D(_CUNE, cd, fj, fk)
164 # define FCMP_SAF_D(cd, fj, fk) FCMP_cond_D( _CAF, cd, fj, fk)
165 # define FCMP_SUN_D(cd, fj, fk) FCMP_cond_D( _CUN, cd, fj, fk)
166 # define FCMP_SEQ_D(cd, fj, fk) FCMP_cond_D( _CEQ, cd, fj, fk)
167 # define FCMP_SUEQ_D(cd, fj, fk) FCMP_cond_D(_CUEQ, cd, fj, fk)
168 # define FCMP_SLT_D(cd, fj, fk) FCMP_cond_D( _CLT, cd, fj, fk)
169 # define FCMP_SULT_D(cd, fj, fk) FCMP_cond_D(_CULT, cd, fj, fk)
170 # define FCMP_SLE_D(cd, fj, fk) FCMP_cond_D( _CLE, cd, fj, fk)
171 # define FCMP_SULE_D(cd, fj, fk) FCMP_cond_D(_CULE, cd, fj, fk)
172 # define FCMP_SNE_D(cd, fj, fk) FCMP_cond_D( _CNE, cd, fj, fk)
173 # define FCMP_SOR_D(cd, fj, fk) FCMP_cond_D( _COR, cd, fj, fk)
174 # define FCMP_SUNE_D(cd, fj, fk) FCMP_cond_D(_CUNE, cd, fj, fk)
175 # define FSEL(fd, fj, fk, u3) ou3rrr(0x340, u3, fk, fj, fd)
176 # define FLD_S(fd, rj, si12) os12rr(0x0ac, si12, rj, fd)
177 # define FST_S(fd, rj, si12) os12rr(0x0ad, si12, rj, fd)
178 # define FLD_D(fd, rj, si12) os12rr(0x0ae, si12, rj, fd)
179 # define FST_D(fd, rj, si12) os12rr(0x0af, si12, rj, fd)
180 # define FLDX_S(fd, rj, rk) orrr(0x7060, rk, rj, fd)
181 # define FLDX_D(fd, rj, rk) orrr(0x7068, rk, rj, fd)
182 # define FSTX_S(fd, rj, rk) orrr(0x7070, rk, rj, fd)
183 # define FSTX_D(fd, rj, rk) orrr(0x7078, rk, rj, fd)
184 # define FLDGT_S(fd, rj, rk) orrr(0x70e8, rk, rj, fd)
185 # define FLDGT_D(fd, rj, rk) orrr(0x70e9, rk, rj, fd)
186 # define FLDLE_S(fd, rj, rk) orrr(0x70ea, rk, rj, fd)
187 # define FLDLE_D(fd, rj, rk) orrr(0x70eb, rk, rj, fd)
188 # define FSTGT_S(fd, rj, rk) orrr(0x70ec, rk, rj, fd)
189 # define FSTGT_D(fd, rj, rk) orrr(0x70ed, rk, rj, fd)
190 # define FSTLE_S(fd, rj, rk) orrr(0x70ee, rk, rj, fd)
191 # define FSTLE_D(fd, rj, rk) orrr(0x70ef, rk, rj, fd)
192 # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1)
193 static void _truncr_f_i(jit_state_t*, jit_int32_t, jit_int32_t);
194 # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1)
195 static void _truncr_d_i(jit_state_t*, jit_int32_t, jit_int32_t);
196 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1)
197 static void _truncr_f_l(jit_state_t*, jit_int32_t, jit_int32_t);
198 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1)
199 static void _truncr_d_l(jit_state_t*, jit_int32_t, jit_int32_t);
200 # define addr_f(r0, r1, r2) FADD_S(r0, r1, r2)
201 # define addi_f(r0, r1, i0) _addi_f(_jit, r0, r1, i0)
202 static void _addi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
203 # define subr_f(r0, r1, r2) FSUB_S(r0, r1, r2)
204 # define subi_f(r0, r1, i0) _subi_f(_jit, r0, r1, i0)
205 static void _subi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
206 # define rsbr_f(r0, r1, r2) FSUB_S(r0, r2, r1)
207 # define rsbi_f(r0, r1, i0) _rsbi_f(_jit, r0, r1, i0)
208 static void _rsbi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
209 # define mulr_f(r0, r1, r2) FMUL_S(r0, r1, r2)
210 # define muli_f(r0, r1, i0) _muli_f(_jit, r0, r1, i0)
211 static void _muli_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
212 # define divr_f(r0, r1, r2) FDIV_S(r0, r1, r2)
213 # define divi_f(r0, r1, i0) _divi_f(_jit, r0, r1, i0)
214 static void _divi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
215 # define absr_f(r0, r1) FABS_S(r0, r1)
216 # define negr_f(r0, r1) FNEG_S(r0, r1)
217 # define sqrtr_f(r0, r1) FSQRT_S(r0, r1)
218 # define fmar_f(r0, r1, r2, r3) FMADD_S(r0, r1, r2, r3)
219 # define fmsr_f(r0, r1, r2, r3) FMSUB_S(r0, r1, r2, r3)
220 # define fnmar_f(r0, r1, r2, r3) FNMADD_S(r0, r1, r2, r3)
221 # define fnmsr_f(r0, r1, r2, r3) FNMSUB_S(r0, r1, r2, r3)
222 # define extr_f(r0, r1) _extr_f(_jit, r0, r1)
223 static void _extr_f(jit_state_t*, jit_int32_t, jit_int32_t);
224 # define ldr_f(r0, r1) FLD_S(r0, r1, 0)
225 # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
226 static void _ldi_f(jit_state_t*, jit_int32_t, jit_word_t);
227 # define ldxr_f(r0, r1, r2) FLDX_S(r0, r1, r2)
228 # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
229 static void _ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
230 # define unldr_x(r0, r1, i0) _unldr_x(_jit, r0, r1, i0)
231 static void _unldr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
232 # define unldi_x(r0, i0, i1) _unldi_x(_jit, r0, i0, i1)
233 static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
234 # define str_f(r0, r1) FST_S(r1, r0, 0)
235 # define sti_f(i0, r0) _sti_f(_jit, i0, r0)
236 static void _sti_f(jit_state_t*, jit_word_t, jit_int32_t);
237 # define stxr_f(r0, r1, r2) FSTX_S(r2, r1, r0)
238 # define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
239 static void _stxi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
240 #define unstr_x(r0, r1, i0) _unstr_x(_jit, r0, r1, i0)
241 static void _unstr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
242 #define unsti_x(i0, r0, i1) _unsti_x(_jit, i0, r0, i1)
243 static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t);
244 # define movr_f(r0, r1) FMOV_S(r0, r1)
245 # define movi_f(r0, i0) _movi_f(_jit, r0, i0)
246 static void _movi_f(jit_state_t*, jit_int32_t, jit_float32_t);
247 # define movr_f_w(r0, r1) MOVFR2GR_S(r0, r1)
248 # define movr_w_f(r0, r1) MOVGR2FR_W(r0, r1)
249 #define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0)
250 static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
251 # define extr_d_f(r0, r1) FCVT_S_D(r0, r1)
252 # define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
253 static void _ltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
254 # define lti_f(r0, r1, i0) _lti_f(_jit, r0, r1, i0)
255 static void _lti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
256 # define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
257 static void _ler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
258 # define lei_f(r0, r1, i0) _lei_f(_jit, r0, r1, i0)
259 static void _lei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
260 # define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
261 static void _eqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
262 # define eqi_f(r0, r1, i0) _eqi_f(_jit, r0, r1, i0)
263 static void _eqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
264 # define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
265 static void _ger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
266 # define gei_f(r0, r1, i0) _gei_f(_jit, r0, r1, i0)
267 static void _gei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
268 # define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
269 static void _gtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
270 # define gti_f(r0, r1, i0) _gti_f(_jit, r0, r1, i0)
271 static void _gti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
272 # define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
273 static void _ner_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
274 # define nei_f(r0, r1, i0) _nei_f(_jit, r0, r1, i0)
275 static void _nei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
276 # define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
277 static void _unltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
278 # define unlti_f(r0, r1, i0) _unlti_f(_jit, r0, r1, i0)
279 static void _unlti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
280 # define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
281 static void _unler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
282 # define unlei_f(r0, r1, i1) _unlei_f(_jit, r0, r1, i1)
283 static void _unlei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
284 # define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
285 static void _uneqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
286 # define uneqi_f(r0, r1, i0) _uneqi_f(_jit, r0, r1, i0)
287 static void _uneqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
288 # define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
289 static void _unger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
290 # define ungei_f(r0, r1, i0) _ungei_f(_jit, r0, r1, i0)
291 static void _ungei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
292 # define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
293 static void _ungtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
294 # define ungti_f(r0, r1, i0) _ungti_f(_jit, r0, r1, i0)
295 static void _ungti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
296 # define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
297 static void _ltgtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
298 # define ltgti_f(r0, r1, i0) _ltgti_f(_jit, r0, r1, i0)
299 static void _ltgti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
300 # define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
301 static void _ordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
302 # define ordi_f(r0, r1, i0) _ordi_f(_jit, r0, r1, i0)
303 static void _ordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
304 # define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
305 static void _unordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
306 # define unordi_f(r0, r1, i0) _unordi_f(_jit, r0, r1, i0)
307 static void _unordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
308 # define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
309 static jit_word_t _bltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
310 # define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
311 static jit_word_t _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
312 # define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
313 static jit_word_t _bler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
314 # define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
315 static jit_word_t _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
316 # define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
317 static jit_word_t _beqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
318 # define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
319 static jit_word_t _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
320 # define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
321 static jit_word_t _bger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
322 # define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
323 static jit_word_t _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
324 # define bgtr_f(i0, r0, r1) _bgtr_f(_jit,i0, r0, r1)
325 static jit_word_t _bgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
326 # define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
327 static jit_word_t _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
328 # define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
329 static jit_word_t _bner_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
330 # define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
331 static jit_word_t _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
332 # define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
333 static jit_word_t _bunltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
334 # define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
335 static jit_word_t _bunlti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
336 # define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
337 static jit_word_t _bunler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
338 # define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
339 static jit_word_t _bunlei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
340 # define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
341 static jit_word_t _buneqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
342 # define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
343 static jit_word_t _buneqi_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
344 # define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
345 static jit_word_t _bunger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
346 # define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
347 static jit_word_t _bungei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
348 # define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
349 static jit_word_t _bungtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
350 # define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
351 static jit_word_t _bungti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
352 # define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
353 static jit_word_t _bltgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
354 # define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
355 static jit_word_t _bltgti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
356 # define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
357 static jit_word_t _bordr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
358 # define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
359 static jit_word_t _bordi_f(jit_state_t*, jit_word_t, jit_int32_t,jit_float32_t);
360 # define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
361 static jit_word_t _bunordr_f(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
362 # define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0,r0, i1)
363 static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t);
364 # define addr_d(r0, r1, r2) FADD_D(r0, r1, r2)
365 # define addi_d(r0, r1, i0) _addi_d(_jit, r0, r1, i0)
366 static void _addi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
367 # define subr_d(r0, r1, r2) FSUB_D(r0, r1, r2)
368 # define subi_d(r0, r1, i0) _subi_d(_jit, r0, r1, i0)
369 static void _subi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
370 # define rsbr_d(r0, r1, r2) FSUB_D(r0, r2, r1)
371 # define rsbi_d(r0, r1, i0) _rsbi_d(_jit, r0, r1, i0)
372 static void _rsbi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
373 # define mulr_d(r0, r1, r2) FMUL_D(r0, r1, r2)
374 # define muli_d(r0, r1, i0) _muli_d(_jit, r0, r1, i0)
375 static void _muli_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
376 # define divr_d(r0, r1, r2) FDIV_D(r0, r1, r2)
377 # define divi_d(r0, r1, i0) _divi_d(_jit, r0, r1, i0)
378 static void _divi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
379 # define absr_d(r0, r1) FABS_D(r0, r1)
380 # define negr_d(r0, r1) FNEG_D(r0, r1)
381 # define sqrtr_d(r0, r1) FSQRT_D(r0, r1)
382 # define fmar_d(r0, r1, r2, r3) FMADD_D(r0, r1, r2, r3)
383 # define fmsr_d(r0, r1, r2, r3) FMSUB_D(r0, r1, r2, r3)
384 # define fnmar_d(r0, r1, r2, r3) FNMADD_D(r0, r1, r2, r3)
385 # define fnmsr_d(r0, r1, r2, r3) FNMSUB_D(r0, r1, r2, r3)
386 # define extr_d(r0, r1) _extr_d(_jit, r0, r1)
387 static void _extr_d(jit_state_t*, jit_int32_t, jit_int32_t);
388 # define ldr_d(r0, r1) FLD_D(r0, r1, 0)
389 # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
390 static void _ldi_d(jit_state_t*, jit_int32_t, jit_word_t);
391 # define ldxr_d(r0, r1, r2) FLDX_D(r0, r1, r2)
392 # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
393 static void _ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
394 # define str_d(r0, r1) FST_D(r1, r0, 0)
395 # define sti_d(i0, r0) _sti_d(_jit, i0, r0)
396 static void _sti_d(jit_state_t*, jit_word_t, jit_int32_t);
397 # define stxr_d(r0, r1, r2) FSTX_D(r2, r1, r0)
398 # define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
399 static void _stxi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
400 # define movr_d(r0, r1) FMOV_D(r0, r1)
401 # define movi_d(r0, i0) _movi_d(_jit, r0, i0)
402 static void _movi_d(jit_state_t*, jit_int32_t, jit_float64_t);
403 # define movr_d_w(r0, r1) MOVFR2GR_D(r0, r1)
404 # define movr_w_d(r0, r1) MOVGR2FR_D(r0, r1)
405 #define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0)
406 static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
407 # define extr_f_d(r0, r1) FCVT_D_S(r0, r1)
408 # define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
409 static void _ltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
410 # define lti_d(r0, r1, i0) _lti_d(_jit, r0, r1, i0)
411 static void _lti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
412 # define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
413 static void _ler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
414 # define lei_d(r0, r1, i0) _lei_d(_jit, r0, r1, i0)
415 static void _lei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
416 # define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
417 static void _eqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
418 # define eqi_d(r0, r1, i0) _eqi_d(_jit, r0, r1, i0)
419 static void _eqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
420 # define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
421 static void _ger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
422 # define gei_d(r0, r1, i0) _gei_d(_jit, r0, r1, i0)
423 static void _gei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
424 # define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
425 static void _gtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
426 # define gti_d(r0, r1, i0) _gti_d(_jit, r0, r1, i0)
427 static void _gti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
428 # define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
429 static void _ner_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
430 # define nei_d(r0, r1, i0) _nei_d(_jit, r0, r1, i0)
431 static void _nei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
432 # define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
433 static void _unltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
434 # define unlti_d(r0, r1, i0) _unlti_d(_jit, r0, r1, i0)
435 static void _unlti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
436 # define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
437 static void _unler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
438 # define unlei_d(r0, r1, i0) _unlei_d(_jit, r0, r1, i0)
439 static void _unlei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
440 # define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
441 static void _uneqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
442 # define uneqi_d(r0, r1, i0) _uneqi_d(_jit, r0, r1, i0)
443 static void _uneqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
444 # define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
445 static void _unger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
446 # define ungei_d(r0, r1, i0) _ungei_d(_jit, r0, r1, i0)
447 static void _ungei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
448 # define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
449 static void _ungtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
450 # define ungti_d(r0, r1, i0) _ungti_d(_jit, r0, r1, i0)
451 static void _ungti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
452 # define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
453 static void _ltgtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
454 # define ltgti_d(r0, r1, i0) _ltgti_d(_jit, r0, r1, i0)
455 static void _ltgti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
456 # define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
457 static void _ordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
458 # define ordi_d(r0, r1, i0) _ordi_d(_jit, r0, r1, i0)
459 static void _ordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
460 # define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
461 static void _unordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
462 # define unordi_d(r0, r1, i0) _unordi_d(_jit, r0, r1, i0)
463 static void _unordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
464 # define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
465 static jit_word_t _bltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
466 # define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
467 static jit_word_t _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
468 # define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
469 static jit_word_t _bler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
470 # define blei_d(i0, r0, i1) _blei_d(_jit, i0,r0, i1)
471 static jit_word_t _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
472 # define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
473 static jit_word_t _beqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
474 # define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
475 static jit_word_t _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
476 # define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
477 static jit_word_t _bger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
478 # define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
479 static jit_word_t _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
480 # define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
481 static jit_word_t _bgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
482 # define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
483 static jit_word_t _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
484 # define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
485 static jit_word_t _bner_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
486 # define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
487 static jit_word_t _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
488 # define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
489 static jit_word_t _bunltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
490 # define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
491 static jit_word_t _bunlti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
492 # define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
493 static jit_word_t _bunler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
494 # define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
495 static jit_word_t _bunlei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
496 # define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
497 static jit_word_t _buneqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
498 # define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0,r0, i1)
499 static jit_word_t _buneqi_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
500 # define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
501 static jit_word_t _bunger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
502 # define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
503 static jit_word_t _bungei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
504 # define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
505 static jit_word_t _bungtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
506 # define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
507 static jit_word_t _bungti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
508 # define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
509 static jit_word_t _bltgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
510 # define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
511 static jit_word_t _bltgti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
512 # define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
513 static jit_word_t _bordr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
514 # define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
515 static jit_word_t _bordi_d(jit_state_t*, jit_word_t, jit_int32_t,jit_float64_t);
516 # define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
517 static jit_word_t _bunordr_d(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
518 # define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
519 static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t);
520 # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
521 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
526 _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
528 jit_int32_t reg = jit_get_reg(jit_class_fpr);
529 FTINTRZ_W_S(rn(reg), r1);
530 MOVFR2GR_S(r0, rn(reg));
535 _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
537 jit_int32_t reg = jit_get_reg(jit_class_fpr);
538 FTINTRZ_W_D(rn(reg), r1);
539 MOVFR2GR_S(r0, rn(reg));
544 _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
546 jit_int32_t reg = jit_get_reg(jit_class_fpr);
547 FTINTRZ_L_S(rn(reg), r1);
548 MOVFR2GR_D(r0, rn(reg));
553 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
555 jit_int32_t reg = jit_get_reg(jit_class_fpr);
556 FTINTRZ_L_D(rn(reg), r1);
557 MOVFR2GR_D(r0, rn(reg));
561 # define fpr_opi(name, type, size) \
563 _##name##i_##type(jit_state_t *_jit, \
564 jit_int32_t r0, jit_int32_t r1, \
565 jit_float##size##_t i0) \
567 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
568 movi_##type(rn(reg), i0); \
569 name##r_##type(r0, r1, rn(reg)); \
570 jit_unget_reg(reg); \
572 # define fopi(name) fpr_opi(name, f, 32)
573 # define dopi(name) fpr_opi(name, d, 64)
575 # define fpr_bopi(name, type, size) \
577 _b##name##i_##type(jit_state_t *_jit, \
578 jit_word_t i0, jit_int32_t r0, \
579 jit_float##size##_t i1) \
582 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
583 jit_class_nospill); \
584 movi_##type(rn(reg), i1); \
585 word = b##name##r_##type(i0, r0, rn(reg)); \
586 jit_unget_reg(reg); \
589 # define fbopi(name) fpr_bopi(name, f, 32)
590 # define dbopi(name) fpr_bopi(name, d, 64)
599 _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
606 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
609 if (can_sign_extend_si12_p(i0))
610 FLD_S(r0, _ZERO_REGNO, i0);
612 t0 = jit_get_reg(jit_class_gpr);
620 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
623 if (can_sign_extend_si12_p(i0))
626 t0 = jit_get_reg(jit_class_gpr);
628 ldxr_f(r0, r1, rn(t0));
634 _unldr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
636 if (jit_unaligned_p())
637 fallback_unldr_x(r0, r1, i0);
639 generic_unldr_x(r0, r1, i0);
643 _unldi_x(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
645 if (jit_unaligned_p())
646 fallback_unldi_x(r0, i0, i1);
648 generic_unldi_x(r0, i0, i1);
652 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
655 if (can_sign_extend_si12_p(i0))
656 FST_S(r0, _ZERO_REGNO, i0);
658 t0 = jit_get_reg(jit_class_gpr);
666 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
669 if (can_sign_extend_si12_p(i0))
672 t0 = jit_get_reg(jit_class_gpr);
674 stxr_f(rn(t0), r0, r1);
680 _unstr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
682 if (jit_unaligned_p())
683 fallback_unstr_x(r0, r1, i0);
685 generic_unstr_x(r0, r1, i0);
689 _unsti_x(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
691 if (jit_unaligned_p())
692 fallback_unsti_x(i0, r0, i1);
694 fallback_unsti_x(i0, r0, i1);
698 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
707 movr_w_f(r0, _ZERO_REGNO);
709 reg = jit_get_reg(jit_class_gpr);
710 movi(rn(reg), data.i);
711 movr_w_f(r0, rn(reg));
717 _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
720 reg = jit_get_reg(jit_class_gpr);
722 movr_w_f(r0, rn(reg));
727 _ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
729 FCMP_SLT_S(0, r1, r2);
735 _ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
737 FCMP_SLE_S(0, r1, r2);
743 _eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
745 FCMP_CEQ_S(0, r1, r2);
751 _ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
753 FCMP_SLE_S(0, r2, r1);
759 _gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
761 FCMP_SLT_S(0, r2, r1);
767 _ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
769 FCMP_CUNE_S(0, r1, r2);
775 _unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
777 FCMP_CULT_S(0, r1, r2);
783 _unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
785 FCMP_CULE_S(0, r1, r2);
791 _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
793 FCMP_CUEQ_S(0, r1, r2);
799 _unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
801 FCMP_CULE_S(0, r2, r1);
807 _ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
809 FCMP_CULT_S(0, r2, r1);
815 _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
817 FCMP_CNE_S(0, r1, r2);
823 _ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
825 FCMP_COR_S(0, r1, r2);
831 _unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
833 FCMP_COR_S(0, r1, r2);
840 _bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
843 FCMP_SLT_S(0, r1, r2);
845 BCNEZ(0, (i0 - w) >> 2);
851 _bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
854 FCMP_SLE_S(0, r1, r2);
856 BCNEZ(0, (i0 - w) >> 2);
862 _beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
865 FCMP_CEQ_S(0, r1, r2);
867 BCNEZ(0, (i0 - w) >> 2);
873 _bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
876 FCMP_SLE_S(0, r2, r1);
878 BCNEZ(0, (i0 - w) >> 2);
884 _bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
887 FCMP_SLT_S(0, r2, r1);
889 BCNEZ(0, (i0 - w) >> 2);
895 _bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
898 FCMP_CUNE_S(0, r1, r2);
900 BCNEZ(0, (i0 - w) >> 2);
906 _bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
909 FCMP_CULT_S(0, r1, r2);
911 BCNEZ(0, (i0 - w) >> 2);
917 _bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
920 FCMP_CULE_S(0, r1, r2);
922 BCNEZ(0, (i0 - w) >> 2);
928 _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
931 FCMP_CUEQ_S(0, r1, r2);
933 BCNEZ(0, (i0 - w) >> 2);
939 _bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
942 FCMP_CULE_S(0, r2, r1);
944 BCNEZ(0, (i0 - w) >> 2);
950 _bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
953 FCMP_CULT_S(0, r2, r1);
955 BCNEZ(0, (i0 - w) >> 2);
961 _bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
964 FCMP_CNE_S(0, r2, r1);
966 BCNEZ(0, (i0 - w) >> 2);
972 _bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
975 FCMP_COR_S(0, r2, r1);
977 BCNEZ(0, (i0 - w) >> 2);
983 _bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
986 FCMP_COR_S(0, r2, r1);
988 BCEQZ(0, (i0 - w) >> 2);
1000 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1007 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1010 if (can_sign_extend_si12_p(i0))
1011 FLD_D(r0, _ZERO_REGNO, i0);
1013 t0 = jit_get_reg(jit_class_gpr);
1021 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1024 if (can_sign_extend_si12_p(i0))
1027 t0 = jit_get_reg(jit_class_gpr);
1029 ldxr_d(r0, r1, rn(t0));
1035 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1038 if (can_sign_extend_si12_p(i0))
1039 FST_D(r0, _ZERO_REGNO, i0);
1041 t0 = jit_get_reg(jit_class_gpr);
1049 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1052 if (can_sign_extend_si12_p(i0))
1055 t0 = jit_get_reg(jit_class_gpr);
1057 stxr_d(rn(t0), r0, r1);
1063 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
1072 movr_w_d(r0, _ZERO_REGNO);
1074 reg = jit_get_reg(jit_class_gpr);
1075 movi(rn(reg), data.w);
1076 movr_w_d(r0, rn(reg));
1082 _movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1085 reg = jit_get_reg(jit_class_gpr);
1087 movr_w_d(r0, rn(reg));
1092 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1094 FCMP_SLT_D(0, r1, r2);
1100 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1102 FCMP_SLE_D(0, r1, r2);
1108 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1110 FCMP_CEQ_D(0, r1, r2);
1116 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1118 FCMP_SLE_D(0, r2, r1);
1124 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1126 FCMP_SLT_D(0, r2, r1);
1132 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1134 FCMP_CUNE_D(0, r1, r2);
1140 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1142 FCMP_CULT_D(0, r1, r2);
1148 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1150 FCMP_CULE_D(0, r1, r2);
1156 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1158 FCMP_CUEQ_D(0, r1, r2);
1164 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1166 FCMP_CULE_D(0, r2, r1);
1172 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1174 FCMP_CULT_D(0, r2, r1);
1180 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1182 FCMP_CNE_D(0, r1, r2);
1188 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1190 FCMP_COR_D(0, r1, r2);
1196 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1198 FCMP_COR_D(0, r1, r2);
1205 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1208 FCMP_SLT_D(0, r1, r2);
1210 BCNEZ(0, (i0 - w) >> 2);
1216 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1219 FCMP_SLE_D(0, r1, r2);
1221 BCNEZ(0, (i0 - w) >> 2);
1227 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1230 FCMP_CEQ_D(0, r1, r2);
1232 BCNEZ(0, (i0 - w) >> 2);
1238 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1241 FCMP_SLE_D(0, r2, r1);
1243 BCNEZ(0, (i0 - w) >> 2);
1249 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1252 FCMP_SLT_D(0, r2, r1);
1254 BCNEZ(0, (i0 - w) >> 2);
1260 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1263 FCMP_CUNE_D(0, r1, r2);
1265 BCNEZ(0, (i0 - w) >> 2);
1271 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1274 FCMP_CULT_D(0, r1, r2);
1276 BCNEZ(0, (i0 - w) >> 2);
1282 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1285 FCMP_CULE_D(0, r1, r2);
1287 BCNEZ(0, (i0 - w) >> 2);
1293 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1296 FCMP_CUEQ_D(0, r1, r2);
1298 BCNEZ(0, (i0 - w) >> 2);
1304 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1307 FCMP_CULE_D(0, r2, r1);
1309 BCNEZ(0, (i0 - w) >> 2);
1315 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1318 FCMP_CULT_D(0, r2, r1);
1320 BCNEZ(0, (i0 - w) >> 2);
1326 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1329 FCMP_CNE_D(0, r2, r1);
1331 BCNEZ(0, (i0 - w) >> 2);
1337 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1340 FCMP_COR_D(0, r2, r1);
1342 BCNEZ(0, (i0 - w) >> 2);
1348 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1351 FCMP_COR_D(0, r2, r1);
1353 BCEQZ(0, (i0 - w) >> 2);
1359 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1361 assert(_jitc->function->self.call & jit_call_varargs);
1362 /* Load argument. */
1364 /* Update va_list. */
1365 addi(r1, r1, sizeof(jit_float64_t));