Merge pull request #718 from pcercuei/update-lightrec-20230224
[pcsx_rearmed.git] / deps / lightning / lib / jit_loongarch-fpu.c
CommitLineData
24d91c0d 1/*
79bfeef6 2 * Copyright (C) 2022-2023 Free Software Foundation, Inc.
24d91c0d
PC
3 *
4 * This file is part of GNU lightning.
5 *
6 * GNU lightning is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation; either version 3, or (at your option)
9 * any later version.
10 *
11 * GNU lightning is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 * License for more details.
15 *
16 * Authors:
17 * Paulo Cesar Pereira de Andrade
18 */
19
20#if PROTO
21# define 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 */
106# define _CAF 0x00
107# define _CUN 0x08
108# define _CEQ 0x04
109# define _CUEQ 0x0c
110# define _CLT 0x02
111# define _CULT 0x0a
112# define _CLE 0x06
113# define _CULE 0x0e
114# define _CNE 0x10
115# define _COR 0x14
116# define _CUNE 0x18
117/* QNaN exception */
118# define _SAF 0x01
119# define _SUN 0x09
120# define _SEQ 0x05
121# define _SUEQ 0x0D
122# define _SLT 0x03
123# define _SULT 0x0B
124# define _SLE 0x07
125# define _SULE 0x0F
126# define _SNE 0x11
127# define _SOR 0x15
128# define _SUNE 0x19
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)
193static 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)
195static 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)
197static 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)
199static 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)
202static 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)
205static 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)
208static 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)
211static 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)
214static 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 extr_f(r0, r1) _extr_f(_jit, r0, r1)
219static void _extr_f(jit_state_t*, jit_int32_t, jit_int32_t);
220# define ldr_f(r0, r1) FLD_S(r0, r1, 0)
221# define ldi_f(r0, i0) _ldi_f(_jit, r0, i0)
222static void _ldi_f(jit_state_t*, jit_int32_t, jit_word_t);
223# define ldxr_f(r0, r1, r2) FLDX_S(r0, r1, r2)
224# define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0)
225static void _ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
226# define str_f(r0, r1) FST_S(r1, r0, 0)
227# define sti_f(i0, r0) _sti_f(_jit, i0, r0)
228static void _sti_f(jit_state_t*, jit_word_t, jit_int32_t);
229# define stxr_f(r0, r1, r2) FSTX_S(r2, r1, r0)
230# define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1)
231static void _stxi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
232# define movr_f(r0, r1) FMOV_S(r0, r1)
233# define movi_f(r0, i0) _movi_f(_jit, r0, i0)
234static void _movi_f(jit_state_t*, jit_int32_t, jit_float32_t);
235# define movr_f_w(r0, r1) MOVFR2GR_S(r0, r1)
236# define movi_f_w(r0, im) _movi_f_w(_jit, r0, im)
237static void _movi_f_w(jit_state_t*, jit_int32_t, jit_float32_t);
238# define movr_w_f(r0, r1) MOVGR2FR_W(r0, r1)
239# define extr_d_f(r0, r1) FCVT_S_D(r0, r1)
240# define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2)
241static void _ltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
242# define lti_f(r0, r1, i0) _lti_f(_jit, r0, r1, i0)
243static void _lti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
244# define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2)
245static void _ler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
246# define lei_f(r0, r1, i0) _lei_f(_jit, r0, r1, i0)
247static void _lei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
248# define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2)
249static void _eqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
250# define eqi_f(r0, r1, i0) _eqi_f(_jit, r0, r1, i0)
251static void _eqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
252# define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2)
253static void _ger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
254# define gei_f(r0, r1, i0) _gei_f(_jit, r0, r1, i0)
255static void _gei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
256# define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2)
257static void _gtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
258# define gti_f(r0, r1, i0) _gti_f(_jit, r0, r1, i0)
259static void _gti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
260# define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2)
261static void _ner_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
262# define nei_f(r0, r1, i0) _nei_f(_jit, r0, r1, i0)
263static void _nei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
264# define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2)
265static void _unltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
266# define unlti_f(r0, r1, i0) _unlti_f(_jit, r0, r1, i0)
267static void _unlti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
268# define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2)
269static void _unler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
270# define unlei_f(r0, r1, i1) _unlei_f(_jit, r0, r1, i1)
271static void _unlei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
272# define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2)
273static void _uneqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
274# define uneqi_f(r0, r1, i0) _uneqi_f(_jit, r0, r1, i0)
275static void _uneqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
276# define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2)
277static void _unger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
278# define ungei_f(r0, r1, i0) _ungei_f(_jit, r0, r1, i0)
279static void _ungei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
280# define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2)
281static void _ungtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
282# define ungti_f(r0, r1, i0) _ungti_f(_jit, r0, r1, i0)
283static void _ungti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
284# define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2)
285static void _ltgtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
286# define ltgti_f(r0, r1, i0) _ltgti_f(_jit, r0, r1, i0)
287static void _ltgti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
288# define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2)
289static void _ordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
290# define ordi_f(r0, r1, i0) _ordi_f(_jit, r0, r1, i0)
291static void _ordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
292# define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2)
293static void _unordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
294# define unordi_f(r0, r1, i0) _unordi_f(_jit, r0, r1, i0)
295static void _unordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
296# define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1)
297static jit_word_t _bltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
298# define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1)
299static jit_word_t _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
300# define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1)
301static jit_word_t _bler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
302# define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1)
303static jit_word_t _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
304# define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1)
305static jit_word_t _beqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
306# define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1)
307static jit_word_t _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
308# define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1)
309static jit_word_t _bger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
310# define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1)
311static jit_word_t _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
312# define bgtr_f(i0, r0, r1) _bgtr_f(_jit,i0, r0, r1)
313static jit_word_t _bgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
314# define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1)
315static jit_word_t _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
316# define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1)
317static jit_word_t _bner_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
318# define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1)
319static jit_word_t _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
320# define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1)
321static jit_word_t _bunltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
322# define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1)
323static jit_word_t _bunlti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
324# define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1)
325static jit_word_t _bunler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
326# define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1)
327static jit_word_t _bunlei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
328# define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1)
329static jit_word_t _buneqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
330# define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1)
331static jit_word_t _buneqi_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
332# define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1)
333static jit_word_t _bunger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
334# define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1)
335static jit_word_t _bungei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
336# define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1)
337static jit_word_t _bungtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
338# define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1)
339static jit_word_t _bungti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
340# define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1)
341static jit_word_t _bltgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
342# define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1)
343static jit_word_t _bltgti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
344# define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1)
345static jit_word_t _bordr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
346# define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1)
347static jit_word_t _bordi_f(jit_state_t*, jit_word_t, jit_int32_t,jit_float32_t);
348# define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1)
349static jit_word_t _bunordr_f(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
350# define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0,r0, i1)
351static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t);
352# define addr_d(r0, r1, r2) FADD_D(r0, r1, r2)
353# define addi_d(r0, r1, i0) _addi_d(_jit, r0, r1, i0)
354static void _addi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
355# define subr_d(r0, r1, r2) FSUB_D(r0, r1, r2)
356# define subi_d(r0, r1, i0) _subi_d(_jit, r0, r1, i0)
357static void _subi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
358# define rsbr_d(r0, r1, r2) FSUB_D(r0, r2, r1)
359# define rsbi_d(r0, r1, i0) _rsbi_d(_jit, r0, r1, i0)
360static void _rsbi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
361# define mulr_d(r0, r1, r2) FMUL_D(r0, r1, r2)
362# define muli_d(r0, r1, i0) _muli_d(_jit, r0, r1, i0)
363static void _muli_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
364# define divr_d(r0, r1, r2) FDIV_D(r0, r1, r2)
365# define divi_d(r0, r1, i0) _divi_d(_jit, r0, r1, i0)
366static void _divi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
367# define absr_d(r0, r1) FABS_D(r0, r1)
368# define negr_d(r0, r1) FNEG_D(r0, r1)
369# define sqrtr_d(r0, r1) FSQRT_D(r0, r1)
370# define extr_d(r0, r1) _extr_d(_jit, r0, r1)
371static void _extr_d(jit_state_t*, jit_int32_t, jit_int32_t);
372# define ldr_d(r0, r1) FLD_D(r0, r1, 0)
373# define ldi_d(r0, i0) _ldi_d(_jit, r0, i0)
374static void _ldi_d(jit_state_t*, jit_int32_t, jit_word_t);
375# define ldxr_d(r0, r1, r2) FLDX_D(r0, r1, r2)
376# define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0)
377static void _ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
378# define str_d(r0, r1) FST_D(r1, r0, 0)
379# define sti_d(i0, r0) _sti_d(_jit, i0, r0)
380static void _sti_d(jit_state_t*, jit_word_t, jit_int32_t);
381# define stxr_d(r0, r1, r2) FSTX_D(r2, r1, r0)
382# define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1)
383static void _stxi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
384# define movr_d(r0, r1) FMOV_D(r0, r1)
385# define movi_d(r0, i0) _movi_d(_jit, r0, i0)
386static void _movi_d(jit_state_t*, jit_int32_t, jit_float64_t);
387# define movr_d_w(r0, r1) MOVFR2GR_D(r0, r1)
388# define movi_d_w(r0, im) _movi_d_w(_jit, r0, im)
389static void _movi_d_w(jit_state_t*, jit_int32_t, jit_float64_t);
390# define movr_w_d(r0, r1) MOVGR2FR_D(r0, r1)
391# define extr_f_d(r0, r1) FCVT_D_S(r0, r1)
392# define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2)
393static void _ltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
394# define lti_d(r0, r1, i0) _lti_d(_jit, r0, r1, i0)
395static void _lti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
396# define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2)
397static void _ler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
398# define lei_d(r0, r1, i0) _lei_d(_jit, r0, r1, i0)
399static void _lei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
400# define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2)
401static void _eqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
402# define eqi_d(r0, r1, i0) _eqi_d(_jit, r0, r1, i0)
403static void _eqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
404# define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2)
405static void _ger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
406# define gei_d(r0, r1, i0) _gei_d(_jit, r0, r1, i0)
407static void _gei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
408# define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2)
409static void _gtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
410# define gti_d(r0, r1, i0) _gti_d(_jit, r0, r1, i0)
411static void _gti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
412# define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2)
413static void _ner_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
414# define nei_d(r0, r1, i0) _nei_d(_jit, r0, r1, i0)
415static void _nei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
416# define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2)
417static void _unltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
418# define unlti_d(r0, r1, i0) _unlti_d(_jit, r0, r1, i0)
419static void _unlti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
420# define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2)
421static void _unler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
422# define unlei_d(r0, r1, i0) _unlei_d(_jit, r0, r1, i0)
423static void _unlei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
424# define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2)
425static void _uneqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
426# define uneqi_d(r0, r1, i0) _uneqi_d(_jit, r0, r1, i0)
427static void _uneqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
428# define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2)
429static void _unger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
430# define ungei_d(r0, r1, i0) _ungei_d(_jit, r0, r1, i0)
431static void _ungei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
432# define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2)
433static void _ungtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
434# define ungti_d(r0, r1, i0) _ungti_d(_jit, r0, r1, i0)
435static void _ungti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
436# define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2)
437static void _ltgtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
438# define ltgti_d(r0, r1, i0) _ltgti_d(_jit, r0, r1, i0)
439static void _ltgti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
440# define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2)
441static void _ordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
442# define ordi_d(r0, r1, i0) _ordi_d(_jit, r0, r1, i0)
443static void _ordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
444# define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2)
445static void _unordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
446# define unordi_d(r0, r1, i0) _unordi_d(_jit, r0, r1, i0)
447static void _unordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
448# define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1)
449static jit_word_t _bltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
450# define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1)
451static jit_word_t _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
452# define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1)
453static jit_word_t _bler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
454# define blei_d(i0, r0, i1) _blei_d(_jit, i0,r0, i1)
455static jit_word_t _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
456# define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1)
457static jit_word_t _beqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
458# define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1)
459static jit_word_t _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
460# define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1)
461static jit_word_t _bger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
462# define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1)
463static jit_word_t _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
464# define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1)
465static jit_word_t _bgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
466# define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1)
467static jit_word_t _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
468# define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1)
469static jit_word_t _bner_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
470# define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1)
471static jit_word_t _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
472# define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1)
473static jit_word_t _bunltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
474# define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1)
475static jit_word_t _bunlti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
476# define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1)
477static jit_word_t _bunler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
478# define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1)
479static jit_word_t _bunlei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
480# define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1)
481static jit_word_t _buneqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
482# define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0,r0, i1)
483static jit_word_t _buneqi_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
484# define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1)
485static jit_word_t _bunger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
486# define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1)
487static jit_word_t _bungei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
488# define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1)
489static jit_word_t _bungtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
490# define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1)
491static jit_word_t _bungti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
492# define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1)
493static jit_word_t _bltgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
494# define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1)
495static jit_word_t _bltgti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
496# define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1)
497static jit_word_t _bordr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
498# define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1)
499static jit_word_t _bordi_d(jit_state_t*, jit_word_t, jit_int32_t,jit_float64_t);
500# define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1)
501static jit_word_t _bunordr_d(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
502# define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1)
503static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t);
504# define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
505static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
506#endif /* PROTO */
507
508#if CODE
509static void
510_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
511{
512 jit_int32_t reg = jit_get_reg(jit_class_fpr);
513 FTINTRZ_W_S(rn(reg), r1);
514 MOVFR2GR_S(r0, rn(reg));
515 jit_unget_reg(reg);
516}
517
518static void
519_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
520{
521 jit_int32_t reg = jit_get_reg(jit_class_fpr);
522 FTINTRZ_W_D(rn(reg), r1);
523 MOVFR2GR_S(r0, rn(reg));
524 jit_unget_reg(reg);
525}
526
527static void
528_truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
529{
530 jit_int32_t reg = jit_get_reg(jit_class_fpr);
531 FTINTRZ_L_S(rn(reg), r1);
532 MOVFR2GR_D(r0, rn(reg));
533 jit_unget_reg(reg);
534}
535
536static void
537_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
538{
539 jit_int32_t reg = jit_get_reg(jit_class_fpr);
540 FTINTRZ_L_D(rn(reg), r1);
541 MOVFR2GR_D(r0, rn(reg));
542 jit_unget_reg(reg);
543}
544
545# define fpr_opi(name, type, size) \
546static void \
547_##name##i_##type(jit_state_t *_jit, \
548 jit_int32_t r0, jit_int32_t r1, \
549 jit_float##size##_t i0) \
550{ \
551 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
552 movi_##type(rn(reg), i0); \
553 name##r_##type(r0, r1, rn(reg)); \
554 jit_unget_reg(reg); \
555}
556# define fopi(name) fpr_opi(name, f, 32)
557# define dopi(name) fpr_opi(name, d, 64)
558
559# define fpr_bopi(name, type, size) \
560static jit_word_t \
561_b##name##i_##type(jit_state_t *_jit, \
562 jit_word_t i0, jit_int32_t r0, \
563 jit_float##size##_t i1) \
564{ \
565 jit_word_t word; \
566 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
567 jit_class_nospill); \
568 movi_##type(rn(reg), i1); \
569 word = b##name##r_##type(i0, r0, rn(reg)); \
570 jit_unget_reg(reg); \
571 return (word); \
572}
573# define fbopi(name) fpr_bopi(name, f, 32)
574# define dbopi(name) fpr_bopi(name, d, 64)
575
576fopi(add)
577fopi(sub)
578fopi(rsb)
579fopi(mul)
580fopi(div)
581
582static void
583_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
584{
585 MOVGR2FR_D(r0, r1);
586 FFINT_S_L(r0, r0);
587}
588
589static void
590_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
591{
592 jit_int32_t t0;
593 if (can_sign_extend_si12_p(i0))
594 FLD_S(r0, _ZERO_REGNO, i0);
595 else {
596 t0 = jit_get_reg(jit_class_gpr);
597 movi(rn(t0), i0);
598 ldr_f(r0, rn(t0));
599 jit_unget_reg(t0);
600 }
601}
602
603static void
604_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
605{
606 jit_int32_t t0;
607 if (can_sign_extend_si12_p(i0))
608 FLD_S(r0, r1, i0);
609 else {
610 t0 = jit_get_reg(jit_class_gpr);
611 movi(rn(t0), i0);
612 ldxr_f(r0, r1, rn(t0));
613 jit_unget_reg(t0);
614 }
615}
616
617static void
618_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
619{
620 jit_int32_t t0;
621 if (can_sign_extend_si12_p(i0))
622 FST_S(r0, _ZERO_REGNO, i0);
623 else {
624 t0 = jit_get_reg(jit_class_gpr);
625 movi(rn(t0), i0);
626 str_f(rn(t0), r0);
627 jit_unget_reg(t0);
628 }
629}
630
631static void
632_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
633{
634 jit_int32_t t0;
635 if (can_sign_extend_si12_p(i0))
636 FST_S(r1, r0, i0);
637 else {
638 t0 = jit_get_reg(jit_class_gpr);
639 movi(rn(t0), i0);
640 stxr_f(rn(t0), r0, r1);
641 jit_unget_reg(t0);
642 }
643}
644
645static void
646_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
647{
648 union {
649 jit_int32_t i;
650 jit_float32_t f;
651 } data;
652 jit_int32_t reg;
653 data.f = i0;
654 if (data.i == 0)
655 movr_w_f(r0, _ZERO_REGNO);
656 else {
657 reg = jit_get_reg(jit_class_gpr);
658 movi(rn(reg), data.i);
659 movr_w_f(r0, rn(reg));
660 jit_unget_reg(reg);
661 }
662}
663
664static void
665_movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
666{
667 union {
668 jit_int32_t i;
669 jit_float32_t f;
670 } data;
671 data.f = i0;
672 movi(r0, data.i);
673}
674
675static void
676_ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
677{
678 FCMP_SLT_S(0, r1, r2);
679 MOVCF2GR(r0, 0);
680}
681fopi(lt)
682
683static void
684_ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
685{
686 FCMP_SLE_S(0, r1, r2);
687 MOVCF2GR(r0, 0);
688}
689fopi(le)
690
691static void
692_eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
693{
694 FCMP_CEQ_S(0, r1, r2);
695 MOVCF2GR(r0, 0);
696}
697fopi(eq)
698
699static void
700_ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
701{
702 FCMP_SLE_S(0, r2, r1);
703 MOVCF2GR(r0, 0);
704}
705fopi(ge)
706
707static void
708_gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
709{
710 FCMP_SLT_S(0, r2, r1);
711 MOVCF2GR(r0, 0);
712}
713fopi(gt)
714
715static void
716_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
717{
718 FCMP_CUNE_S(0, r1, r2);
719 MOVCF2GR(r0, 0);
720}
721fopi(ne)
722
723static void
724_unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
725{
726 FCMP_CULT_S(0, r1, r2);
727 MOVCF2GR(r0, 0);
728}
729fopi(unlt)
730
731static void
732_unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
733{
734 FCMP_CULE_S(0, r1, r2);
735 MOVCF2GR(r0, 0);
736}
737fopi(unle)
738
739static void
740_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
741{
742 FCMP_CUEQ_S(0, r1, r2);
743 MOVCF2GR(r0, 0);
744}
745fopi(uneq)
746
747static void
748_unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
749{
750 FCMP_CULE_S(0, r2, r1);
751 MOVCF2GR(r0, 0);
752}
753fopi(unge)
754
755static void
756_ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
757{
758 FCMP_CULT_S(0, r2, r1);
759 MOVCF2GR(r0, 0);
760}
761fopi(ungt)
762
763static void
764_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
765{
766 FCMP_CNE_S(0, r1, r2);
767 MOVCF2GR(r0, 0);
768}
769fopi(ltgt)
770
771static void
772_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
773{
774 FCMP_COR_S(0, r1, r2);
775 MOVCF2GR(r0, 0);
776}
777fopi(ord)
778
779static void
780_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
781{
782 FCMP_COR_S(0, r1, r2);
783 MOVCF2GR(r0, 0);
784 XORI(r0, r0, 1);
785}
786fopi(unord)
787
788static jit_word_t
789_bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
790{
791 jit_word_t w;
792 FCMP_SLT_S(0, r1, r2);
793 w = _jit->pc.w;
794 BCNEZ(0, (i0 - w) >> 2);
795 return (w);
796}
797fbopi(lt)
798
799static jit_word_t
800_bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
801{
802 jit_word_t w;
803 FCMP_SLE_S(0, r1, r2);
804 w = _jit->pc.w;
805 BCNEZ(0, (i0 - w) >> 2);
806 return (w);
807}
808fbopi(le)
809
810static jit_word_t
811_beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
812{
813 jit_word_t w;
814 FCMP_CEQ_S(0, r1, r2);
815 w = _jit->pc.w;
816 BCNEZ(0, (i0 - w) >> 2);
817 return (w);
818}
819fbopi(eq)
820
821static jit_word_t
822_bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
823{
824 jit_word_t w;
825 FCMP_SLE_S(0, r2, r1);
826 w = _jit->pc.w;
827 BCNEZ(0, (i0 - w) >> 2);
828 return (w);
829}
830fbopi(ge)
831
832static jit_word_t
833_bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
834{
835 jit_word_t w;
836 FCMP_SLT_S(0, r2, r1);
837 w = _jit->pc.w;
838 BCNEZ(0, (i0 - w) >> 2);
839 return (w);
840}
841fbopi(gt)
842
843static jit_word_t
844_bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
845{
846 jit_word_t w;
847 FCMP_CUNE_S(0, r1, r2);
848 w = _jit->pc.w;
849 BCNEZ(0, (i0 - w) >> 2);
850 return (w);
851}
852fbopi(ne)
853
854static jit_word_t
855_bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
856{
857 jit_word_t w;
858 FCMP_CULT_S(0, r1, r2);
859 w = _jit->pc.w;
860 BCNEZ(0, (i0 - w) >> 2);
861 return (w);
862}
863fbopi(unlt)
864
865static jit_word_t
866_bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
867{
868 jit_word_t w;
869 FCMP_CULE_S(0, r1, r2);
870 w = _jit->pc.w;
871 BCNEZ(0, (i0 - w) >> 2);
872 return (w);
873}
874fbopi(unle)
875
876static jit_word_t
877_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
878{
879 jit_word_t w;
880 FCMP_CUEQ_S(0, r1, r2);
881 w = _jit->pc.w;
882 BCNEZ(0, (i0 - w) >> 2);
883 return (w);
884}
885fbopi(uneq)
886
887static jit_word_t
888_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
889{
890 jit_word_t w;
891 FCMP_CULE_S(0, r2, r1);
892 w = _jit->pc.w;
893 BCNEZ(0, (i0 - w) >> 2);
894 return (w);
895}
896fbopi(unge)
897
898static jit_word_t
899_bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
900{
901 jit_word_t w;
902 FCMP_CULT_S(0, r2, r1);
903 w = _jit->pc.w;
904 BCNEZ(0, (i0 - w) >> 2);
905 return (w);
906}
907fbopi(ungt)
908
909static jit_word_t
910_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
911{
912 jit_word_t w;
913 FCMP_CNE_S(0, r2, r1);
914 w = _jit->pc.w;
915 BCNEZ(0, (i0 - w) >> 2);
916 return (w);
917}
918fbopi(ltgt)
919
920static jit_word_t
921_bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
922{
923 jit_word_t w;
924 FCMP_COR_S(0, r2, r1);
925 w = _jit->pc.w;
926 BCNEZ(0, (i0 - w) >> 2);
927 return (w);
928}
929fbopi(ord)
930
931static jit_word_t
932_bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
933{
934 jit_word_t w;
935 FCMP_COR_S(0, r2, r1);
936 w = _jit->pc.w;
937 BCEQZ(0, (i0 - w) >> 2);
938 return (w);
939}
940fbopi(unord)
941
942dopi(add)
943dopi(sub)
944dopi(rsb)
945dopi(mul)
946dopi(div)
947
948static void
949_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
950{
951 MOVGR2FR_D(r0, r1);
952 FFINT_D_L(r0, r0);
953}
954
955static void
956_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
957{
958 jit_int32_t t0;
959 if (can_sign_extend_si12_p(i0))
960 FLD_D(r0, _ZERO_REGNO, i0);
961 else {
962 t0 = jit_get_reg(jit_class_gpr);
963 movi(rn(t0), i0);
964 ldr_d(r0, rn(t0));
965 jit_unget_reg(t0);
966 }
967}
968
969static void
970_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
971{
972 jit_int32_t t0;
973 if (can_sign_extend_si12_p(i0))
974 FLD_D(r0, r1, i0);
975 else {
976 t0 = jit_get_reg(jit_class_gpr);
977 movi(rn(t0), i0);
978 ldxr_d(r0, r1, rn(t0));
979 jit_unget_reg(t0);
980 }
981}
982
983static void
984_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
985{
986 jit_int32_t t0;
987 if (can_sign_extend_si12_p(i0))
988 FST_D(r0, _ZERO_REGNO, i0);
989 else {
990 t0 = jit_get_reg(jit_class_gpr);
991 movi(rn(t0), i0);
992 str_d(rn(t0), r0);
993 jit_unget_reg(t0);
994 }
995}
996
997static void
998_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
999{
1000 jit_int32_t t0;
1001 if (can_sign_extend_si12_p(i0))
1002 FST_D(r1, r0, i0);
1003 else {
1004 t0 = jit_get_reg(jit_class_gpr);
1005 movi(rn(t0), i0);
1006 stxr_d(rn(t0), r0, r1);
1007 jit_unget_reg(t0);
1008 }
1009}
1010
1011static void
1012_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
1013{
1014 union {
1015 jit_word_t w;
1016 jit_float64_t d;
1017 } data;
1018 jit_int32_t reg;
1019 data.d = i0;
1020 if (data.w == 0)
1021 movr_w_d(r0, _ZERO_REGNO);
1022 else {
1023 reg = jit_get_reg(jit_class_gpr);
1024 movi(rn(reg), data.w);
1025 movr_w_d(r0, rn(reg));
1026 jit_unget_reg(reg);
1027 }
1028}
1029
1030static void
1031_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
1032{
1033 union {
1034 jit_int64_t l;
1035 jit_float64_t d;
1036 } data;
1037 data.d = i0;
1038 movi(r0, data.l);
1039}
1040
1041static void
1042_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1043{
1044 FCMP_SLT_D(0, r1, r2);
1045 MOVCF2GR(r0, 0);
1046}
1047dopi(lt)
1048
1049static void
1050_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1051{
1052 FCMP_SLE_D(0, r1, r2);
1053 MOVCF2GR(r0, 0);
1054}
1055dopi(le)
1056
1057static void
1058_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1059{
1060 FCMP_CEQ_D(0, r1, r2);
1061 MOVCF2GR(r0, 0);
1062}
1063dopi(eq)
1064
1065static void
1066_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1067{
1068 FCMP_SLE_D(0, r2, r1);
1069 MOVCF2GR(r0, 0);
1070}
1071dopi(ge)
1072
1073static void
1074_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1075{
1076 FCMP_SLT_D(0, r2, r1);
1077 MOVCF2GR(r0, 0);
1078}
1079dopi(gt)
1080
1081static void
1082_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1083{
1084 FCMP_CUNE_D(0, r1, r2);
1085 MOVCF2GR(r0, 0);
1086}
1087dopi(ne)
1088
1089static void
1090_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1091{
1092 FCMP_CULT_D(0, r1, r2);
1093 MOVCF2GR(r0, 0);
1094}
1095dopi(unlt)
1096
1097static void
1098_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1099{
1100 FCMP_CULE_D(0, r1, r2);
1101 MOVCF2GR(r0, 0);
1102}
1103dopi(unle)
1104
1105static void
1106_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1107{
1108 FCMP_CUEQ_D(0, r1, r2);
1109 MOVCF2GR(r0, 0);
1110}
1111dopi(uneq)
1112
1113static void
1114_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1115{
1116 FCMP_CULE_D(0, r2, r1);
1117 MOVCF2GR(r0, 0);
1118}
1119dopi(unge)
1120
1121static void
1122_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1123{
1124 FCMP_CULT_D(0, r2, r1);
1125 MOVCF2GR(r0, 0);
1126}
1127dopi(ungt)
1128
1129static void
1130_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1131{
1132 FCMP_CNE_D(0, r1, r2);
1133 MOVCF2GR(r0, 0);
1134}
1135dopi(ltgt)
1136
1137static void
1138_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1139{
1140 FCMP_COR_D(0, r1, r2);
1141 MOVCF2GR(r0, 0);
1142}
1143dopi(ord)
1144
1145static void
1146_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1147{
1148 FCMP_COR_D(0, r1, r2);
1149 MOVCF2GR(r0, 0);
1150 XORI(r0, r0, 1);
1151}
1152dopi(unord)
1153
1154static jit_word_t
1155_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1156{
1157 jit_word_t w;
1158 FCMP_SLT_D(0, r1, r2);
1159 w = _jit->pc.w;
1160 BCNEZ(0, (i0 - w) >> 2);
1161 return (w);
1162}
1163dbopi(lt)
1164
1165static jit_word_t
1166_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1167{
1168 jit_word_t w;
1169 FCMP_SLE_D(0, r1, r2);
1170 w = _jit->pc.w;
1171 BCNEZ(0, (i0 - w) >> 2);
1172 return (w);
1173}
1174dbopi(le)
1175
1176static jit_word_t
1177_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1178{
1179 jit_word_t w;
1180 FCMP_CEQ_D(0, r1, r2);
1181 w = _jit->pc.w;
1182 BCNEZ(0, (i0 - w) >> 2);
1183 return (w);
1184}
1185dbopi(eq)
1186
1187static jit_word_t
1188_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1189{
1190 jit_word_t w;
1191 FCMP_SLE_D(0, r2, r1);
1192 w = _jit->pc.w;
1193 BCNEZ(0, (i0 - w) >> 2);
1194 return (w);
1195}
1196dbopi(ge)
1197
1198static jit_word_t
1199_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1200{
1201 jit_word_t w;
1202 FCMP_SLT_D(0, r2, r1);
1203 w = _jit->pc.w;
1204 BCNEZ(0, (i0 - w) >> 2);
1205 return (w);
1206}
1207dbopi(gt)
1208
1209static jit_word_t
1210_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1211{
1212 jit_word_t w;
1213 FCMP_CUNE_D(0, r1, r2);
1214 w = _jit->pc.w;
1215 BCNEZ(0, (i0 - w) >> 2);
1216 return (w);
1217}
1218dbopi(ne)
1219
1220static jit_word_t
1221_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1222{
1223 jit_word_t w;
1224 FCMP_CULT_D(0, r1, r2);
1225 w = _jit->pc.w;
1226 BCNEZ(0, (i0 - w) >> 2);
1227 return (w);
1228}
1229dbopi(unlt)
1230
1231static jit_word_t
1232_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1233{
1234 jit_word_t w;
1235 FCMP_CULE_D(0, r1, r2);
1236 w = _jit->pc.w;
1237 BCNEZ(0, (i0 - w) >> 2);
1238 return (w);
1239}
1240dbopi(unle)
1241
1242static jit_word_t
1243_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1244{
1245 jit_word_t w;
1246 FCMP_CUEQ_D(0, r1, r2);
1247 w = _jit->pc.w;
1248 BCNEZ(0, (i0 - w) >> 2);
1249 return (w);
1250}
1251dbopi(uneq)
1252
1253static jit_word_t
1254_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1255{
1256 jit_word_t w;
1257 FCMP_CULE_D(0, r2, r1);
1258 w = _jit->pc.w;
1259 BCNEZ(0, (i0 - w) >> 2);
1260 return (w);
1261}
1262dbopi(unge)
1263
1264static jit_word_t
1265_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1266{
1267 jit_word_t w;
1268 FCMP_CULT_D(0, r2, r1);
1269 w = _jit->pc.w;
1270 BCNEZ(0, (i0 - w) >> 2);
1271 return (w);
1272}
1273dbopi(ungt)
1274
1275static jit_word_t
1276_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1277{
1278 jit_word_t w;
1279 FCMP_CNE_D(0, r2, r1);
1280 w = _jit->pc.w;
1281 BCNEZ(0, (i0 - w) >> 2);
1282 return (w);
1283}
1284dbopi(ltgt)
1285
1286static jit_word_t
1287_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1288{
1289 jit_word_t w;
1290 FCMP_COR_D(0, r2, r1);
1291 w = _jit->pc.w;
1292 BCNEZ(0, (i0 - w) >> 2);
1293 return (w);
1294}
1295dbopi(ord)
1296
1297static jit_word_t
1298_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1299{
1300 jit_word_t w;
1301 FCMP_COR_D(0, r2, r1);
1302 w = _jit->pc.w;
1303 BCEQZ(0, (i0 - w) >> 2);
1304 return (w);
1305}
1306dbopi(unord)
1307
1308static void
1309_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1310{
1311 assert(_jitc->function->self.call & jit_call_varargs);
1312 /* Load argument. */
1313 ldr_d(r0, r1);
1314 /* Update va_list. */
1315 addi(r1, r1, sizeof(jit_float64_t));
1316}
1317
1318#endif /* CODE */