Merge pull request #750 from pcercuei/lightrec-update-20230826
[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)
ba86ff93
PC
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)
24d91c0d
PC
222# define extr_f(r0, r1) _extr_f(_jit, r0, r1)
223static 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)
226static 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)
229static void _ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
ba86ff93
PC
230# define unldr_x(r0, r1, i0) _unldr_x(_jit, r0, r1, i0)
231static 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)
233static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
24d91c0d
PC
234# define str_f(r0, r1) FST_S(r1, r0, 0)
235# define sti_f(i0, r0) _sti_f(_jit, i0, r0)
236static 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)
239static void _stxi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
ba86ff93
PC
240#define unstr_x(r0, r1, i0) _unstr_x(_jit, r0, r1, i0)
241static 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)
243static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t);
24d91c0d
PC
244# define movr_f(r0, r1) FMOV_S(r0, r1)
245# define movi_f(r0, i0) _movi_f(_jit, r0, i0)
246static void _movi_f(jit_state_t*, jit_int32_t, jit_float32_t);
247# define movr_f_w(r0, r1) MOVFR2GR_S(r0, r1)
24d91c0d 248# define movr_w_f(r0, r1) MOVGR2FR_W(r0, r1)
ba86ff93
PC
249#define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0)
250static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
24d91c0d
PC
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)
253static 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)
255static 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)
257static 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)
259static 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)
261static 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)
263static 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)
265static 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)
267static 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)
269static 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)
271static 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)
273static 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)
275static 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)
277static 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)
279static 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)
281static 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)
283static 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)
285static 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)
287static 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)
289static 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)
291static 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)
293static 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)
295static 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)
297static 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)
299static 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)
301static 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)
303static 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)
305static 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)
307static 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)
309static 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)
311static 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)
313static 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)
315static 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)
317static 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)
319static 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)
321static 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)
323static 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)
325static 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)
327static 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)
329static 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)
331static 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)
333static 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)
335static 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)
337static 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)
339static 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)
341static 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)
343static 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)
345static 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)
347static 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)
349static 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)
351static 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)
353static 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)
355static 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)
357static 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)
359static 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)
361static 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)
363static 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)
366static 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)
369static 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)
372static 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)
375static 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)
378static 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)
ba86ff93
PC
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)
24d91c0d
PC
386# define extr_d(r0, r1) _extr_d(_jit, r0, r1)
387static 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)
390static 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)
393static 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)
396static 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)
399static 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)
402static void _movi_d(jit_state_t*, jit_int32_t, jit_float64_t);
403# define movr_d_w(r0, r1) MOVFR2GR_D(r0, r1)
24d91c0d 404# define movr_w_d(r0, r1) MOVGR2FR_D(r0, r1)
ba86ff93
PC
405#define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0)
406static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
24d91c0d
PC
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)
409static 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)
411static 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)
413static 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)
415static 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)
417static 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)
419static 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)
421static 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)
423static 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)
425static 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)
427static 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)
429static 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)
431static 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)
433static 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)
435static 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)
437static 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)
439static 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)
441static 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)
443static 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)
445static 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)
447static 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)
449static 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)
451static 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)
453static 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)
455static 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)
457static 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)
459static 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)
461static 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)
463static 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)
465static 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)
467static 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)
469static 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)
471static 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)
473static 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)
475static 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)
477static 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)
479static 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)
481static 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)
483static 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)
485static 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)
487static 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)
489static 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)
491static 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)
493static 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)
495static 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)
497static 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)
499static 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)
501static 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)
503static 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)
505static 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)
507static 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)
509static 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)
511static 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)
513static 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)
515static 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)
517static 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)
519static 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)
521static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
522#endif /* PROTO */
523
524#if CODE
525static void
526_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
527{
528 jit_int32_t reg = jit_get_reg(jit_class_fpr);
529 FTINTRZ_W_S(rn(reg), r1);
530 MOVFR2GR_S(r0, rn(reg));
531 jit_unget_reg(reg);
532}
533
534static void
535_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
536{
537 jit_int32_t reg = jit_get_reg(jit_class_fpr);
538 FTINTRZ_W_D(rn(reg), r1);
539 MOVFR2GR_S(r0, rn(reg));
540 jit_unget_reg(reg);
541}
542
543static void
544_truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
545{
546 jit_int32_t reg = jit_get_reg(jit_class_fpr);
547 FTINTRZ_L_S(rn(reg), r1);
548 MOVFR2GR_D(r0, rn(reg));
549 jit_unget_reg(reg);
550}
551
552static void
553_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
554{
555 jit_int32_t reg = jit_get_reg(jit_class_fpr);
556 FTINTRZ_L_D(rn(reg), r1);
557 MOVFR2GR_D(r0, rn(reg));
558 jit_unget_reg(reg);
559}
560
561# define fpr_opi(name, type, size) \
562static void \
563_##name##i_##type(jit_state_t *_jit, \
564 jit_int32_t r0, jit_int32_t r1, \
565 jit_float##size##_t i0) \
566{ \
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); \
571}
572# define fopi(name) fpr_opi(name, f, 32)
573# define dopi(name) fpr_opi(name, d, 64)
574
575# define fpr_bopi(name, type, size) \
576static jit_word_t \
577_b##name##i_##type(jit_state_t *_jit, \
578 jit_word_t i0, jit_int32_t r0, \
579 jit_float##size##_t i1) \
580{ \
581 jit_word_t word; \
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); \
587 return (word); \
588}
589# define fbopi(name) fpr_bopi(name, f, 32)
590# define dbopi(name) fpr_bopi(name, d, 64)
591
592fopi(add)
593fopi(sub)
594fopi(rsb)
595fopi(mul)
596fopi(div)
597
598static void
599_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
600{
601 MOVGR2FR_D(r0, r1);
602 FFINT_S_L(r0, r0);
603}
604
605static void
606_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
607{
608 jit_int32_t t0;
609 if (can_sign_extend_si12_p(i0))
610 FLD_S(r0, _ZERO_REGNO, i0);
611 else {
612 t0 = jit_get_reg(jit_class_gpr);
613 movi(rn(t0), i0);
614 ldr_f(r0, rn(t0));
615 jit_unget_reg(t0);
616 }
617}
618
619static void
620_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
621{
622 jit_int32_t t0;
623 if (can_sign_extend_si12_p(i0))
624 FLD_S(r0, r1, i0);
625 else {
626 t0 = jit_get_reg(jit_class_gpr);
627 movi(rn(t0), i0);
628 ldxr_f(r0, r1, rn(t0));
629 jit_unget_reg(t0);
630 }
631}
632
ba86ff93
PC
633static void
634_unldr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
635{
636 if (jit_unaligned_p())
637 fallback_unldr_x(r0, r1, i0);
638 else
639 generic_unldr_x(r0, r1, i0);
640}
641
642static void
643_unldi_x(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
644{
645 if (jit_unaligned_p())
646 fallback_unldi_x(r0, i0, i1);
647 else
648 generic_unldi_x(r0, i0, i1);
649}
650
24d91c0d
PC
651static void
652_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
653{
654 jit_int32_t t0;
655 if (can_sign_extend_si12_p(i0))
656 FST_S(r0, _ZERO_REGNO, i0);
657 else {
658 t0 = jit_get_reg(jit_class_gpr);
659 movi(rn(t0), i0);
660 str_f(rn(t0), r0);
661 jit_unget_reg(t0);
662 }
663}
664
665static void
666_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
667{
668 jit_int32_t t0;
669 if (can_sign_extend_si12_p(i0))
670 FST_S(r1, r0, i0);
671 else {
672 t0 = jit_get_reg(jit_class_gpr);
673 movi(rn(t0), i0);
674 stxr_f(rn(t0), r0, r1);
675 jit_unget_reg(t0);
676 }
677}
678
ba86ff93
PC
679static void
680_unstr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
681{
682 if (jit_unaligned_p())
683 fallback_unstr_x(r0, r1, i0);
684 else
685 generic_unstr_x(r0, r1, i0);
686}
687
688static void
689_unsti_x(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
690{
691 if (jit_unaligned_p())
692 fallback_unsti_x(i0, r0, i1);
693 else
694 fallback_unsti_x(i0, r0, i1);
695}
696
24d91c0d
PC
697static void
698_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
699{
700 union {
701 jit_int32_t i;
702 jit_float32_t f;
703 } data;
704 jit_int32_t reg;
705 data.f = i0;
706 if (data.i == 0)
707 movr_w_f(r0, _ZERO_REGNO);
708 else {
709 reg = jit_get_reg(jit_class_gpr);
710 movi(rn(reg), data.i);
711 movr_w_f(r0, rn(reg));
712 jit_unget_reg(reg);
713 }
714}
715
716static void
ba86ff93 717_movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
24d91c0d 718{
ba86ff93
PC
719 jit_int32_t reg;
720 reg = jit_get_reg(jit_class_gpr);
721 movi(rn(reg), i0);
722 movr_w_f(r0, rn(reg));
723 jit_unget_reg(reg);
24d91c0d
PC
724}
725
726static void
727_ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
728{
729 FCMP_SLT_S(0, r1, r2);
730 MOVCF2GR(r0, 0);
731}
732fopi(lt)
733
734static void
735_ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
736{
737 FCMP_SLE_S(0, r1, r2);
738 MOVCF2GR(r0, 0);
739}
740fopi(le)
741
742static void
743_eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
744{
745 FCMP_CEQ_S(0, r1, r2);
746 MOVCF2GR(r0, 0);
747}
748fopi(eq)
749
750static void
751_ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
752{
753 FCMP_SLE_S(0, r2, r1);
754 MOVCF2GR(r0, 0);
755}
756fopi(ge)
757
758static void
759_gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
760{
761 FCMP_SLT_S(0, r2, r1);
762 MOVCF2GR(r0, 0);
763}
764fopi(gt)
765
766static void
767_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
768{
769 FCMP_CUNE_S(0, r1, r2);
770 MOVCF2GR(r0, 0);
771}
772fopi(ne)
773
774static void
775_unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
776{
777 FCMP_CULT_S(0, r1, r2);
778 MOVCF2GR(r0, 0);
779}
780fopi(unlt)
781
782static void
783_unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
784{
785 FCMP_CULE_S(0, r1, r2);
786 MOVCF2GR(r0, 0);
787}
788fopi(unle)
789
790static void
791_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
792{
793 FCMP_CUEQ_S(0, r1, r2);
794 MOVCF2GR(r0, 0);
795}
796fopi(uneq)
797
798static void
799_unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
800{
801 FCMP_CULE_S(0, r2, r1);
802 MOVCF2GR(r0, 0);
803}
804fopi(unge)
805
806static void
807_ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
808{
809 FCMP_CULT_S(0, r2, r1);
810 MOVCF2GR(r0, 0);
811}
812fopi(ungt)
813
814static void
815_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
816{
817 FCMP_CNE_S(0, r1, r2);
818 MOVCF2GR(r0, 0);
819}
820fopi(ltgt)
821
822static void
823_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
824{
825 FCMP_COR_S(0, r1, r2);
826 MOVCF2GR(r0, 0);
827}
828fopi(ord)
829
830static void
831_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
832{
833 FCMP_COR_S(0, r1, r2);
834 MOVCF2GR(r0, 0);
835 XORI(r0, r0, 1);
836}
837fopi(unord)
838
839static jit_word_t
840_bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
841{
842 jit_word_t w;
843 FCMP_SLT_S(0, r1, r2);
844 w = _jit->pc.w;
845 BCNEZ(0, (i0 - w) >> 2);
846 return (w);
847}
848fbopi(lt)
849
850static jit_word_t
851_bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
852{
853 jit_word_t w;
854 FCMP_SLE_S(0, r1, r2);
855 w = _jit->pc.w;
856 BCNEZ(0, (i0 - w) >> 2);
857 return (w);
858}
859fbopi(le)
860
861static jit_word_t
862_beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
863{
864 jit_word_t w;
865 FCMP_CEQ_S(0, r1, r2);
866 w = _jit->pc.w;
867 BCNEZ(0, (i0 - w) >> 2);
868 return (w);
869}
870fbopi(eq)
871
872static jit_word_t
873_bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
874{
875 jit_word_t w;
876 FCMP_SLE_S(0, r2, r1);
877 w = _jit->pc.w;
878 BCNEZ(0, (i0 - w) >> 2);
879 return (w);
880}
881fbopi(ge)
882
883static jit_word_t
884_bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
885{
886 jit_word_t w;
887 FCMP_SLT_S(0, r2, r1);
888 w = _jit->pc.w;
889 BCNEZ(0, (i0 - w) >> 2);
890 return (w);
891}
892fbopi(gt)
893
894static jit_word_t
895_bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
896{
897 jit_word_t w;
898 FCMP_CUNE_S(0, r1, r2);
899 w = _jit->pc.w;
900 BCNEZ(0, (i0 - w) >> 2);
901 return (w);
902}
903fbopi(ne)
904
905static jit_word_t
906_bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
907{
908 jit_word_t w;
909 FCMP_CULT_S(0, r1, r2);
910 w = _jit->pc.w;
911 BCNEZ(0, (i0 - w) >> 2);
912 return (w);
913}
914fbopi(unlt)
915
916static jit_word_t
917_bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
918{
919 jit_word_t w;
920 FCMP_CULE_S(0, r1, r2);
921 w = _jit->pc.w;
922 BCNEZ(0, (i0 - w) >> 2);
923 return (w);
924}
925fbopi(unle)
926
927static jit_word_t
928_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
929{
930 jit_word_t w;
931 FCMP_CUEQ_S(0, r1, r2);
932 w = _jit->pc.w;
933 BCNEZ(0, (i0 - w) >> 2);
934 return (w);
935}
936fbopi(uneq)
937
938static jit_word_t
939_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
940{
941 jit_word_t w;
942 FCMP_CULE_S(0, r2, r1);
943 w = _jit->pc.w;
944 BCNEZ(0, (i0 - w) >> 2);
945 return (w);
946}
947fbopi(unge)
948
949static jit_word_t
950_bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
951{
952 jit_word_t w;
953 FCMP_CULT_S(0, r2, r1);
954 w = _jit->pc.w;
955 BCNEZ(0, (i0 - w) >> 2);
956 return (w);
957}
958fbopi(ungt)
959
960static jit_word_t
961_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
962{
963 jit_word_t w;
964 FCMP_CNE_S(0, r2, r1);
965 w = _jit->pc.w;
966 BCNEZ(0, (i0 - w) >> 2);
967 return (w);
968}
969fbopi(ltgt)
970
971static jit_word_t
972_bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
973{
974 jit_word_t w;
975 FCMP_COR_S(0, r2, r1);
976 w = _jit->pc.w;
977 BCNEZ(0, (i0 - w) >> 2);
978 return (w);
979}
980fbopi(ord)
981
982static jit_word_t
983_bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
984{
985 jit_word_t w;
986 FCMP_COR_S(0, r2, r1);
987 w = _jit->pc.w;
988 BCEQZ(0, (i0 - w) >> 2);
989 return (w);
990}
991fbopi(unord)
992
993dopi(add)
994dopi(sub)
995dopi(rsb)
996dopi(mul)
997dopi(div)
998
999static void
1000_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1001{
1002 MOVGR2FR_D(r0, r1);
1003 FFINT_D_L(r0, r0);
1004}
1005
1006static void
1007_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1008{
1009 jit_int32_t t0;
1010 if (can_sign_extend_si12_p(i0))
1011 FLD_D(r0, _ZERO_REGNO, i0);
1012 else {
1013 t0 = jit_get_reg(jit_class_gpr);
1014 movi(rn(t0), i0);
1015 ldr_d(r0, rn(t0));
1016 jit_unget_reg(t0);
1017 }
1018}
1019
1020static void
1021_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1022{
1023 jit_int32_t t0;
1024 if (can_sign_extend_si12_p(i0))
1025 FLD_D(r0, r1, i0);
1026 else {
1027 t0 = jit_get_reg(jit_class_gpr);
1028 movi(rn(t0), i0);
1029 ldxr_d(r0, r1, rn(t0));
1030 jit_unget_reg(t0);
1031 }
1032}
1033
1034static void
1035_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1036{
1037 jit_int32_t t0;
1038 if (can_sign_extend_si12_p(i0))
1039 FST_D(r0, _ZERO_REGNO, i0);
1040 else {
1041 t0 = jit_get_reg(jit_class_gpr);
1042 movi(rn(t0), i0);
1043 str_d(rn(t0), r0);
1044 jit_unget_reg(t0);
1045 }
1046}
1047
1048static void
1049_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1050{
1051 jit_int32_t t0;
1052 if (can_sign_extend_si12_p(i0))
1053 FST_D(r1, r0, i0);
1054 else {
1055 t0 = jit_get_reg(jit_class_gpr);
1056 movi(rn(t0), i0);
1057 stxr_d(rn(t0), r0, r1);
1058 jit_unget_reg(t0);
1059 }
1060}
1061
1062static void
1063_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
1064{
1065 union {
1066 jit_word_t w;
1067 jit_float64_t d;
1068 } data;
1069 jit_int32_t reg;
1070 data.d = i0;
1071 if (data.w == 0)
1072 movr_w_d(r0, _ZERO_REGNO);
1073 else {
1074 reg = jit_get_reg(jit_class_gpr);
1075 movi(rn(reg), data.w);
1076 movr_w_d(r0, rn(reg));
1077 jit_unget_reg(reg);
1078 }
1079}
1080
1081static void
ba86ff93 1082_movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
24d91c0d 1083{
ba86ff93
PC
1084 jit_int32_t reg;
1085 reg = jit_get_reg(jit_class_gpr);
1086 movi(rn(reg), i0);
1087 movr_w_d(r0, rn(reg));
1088 jit_unget_reg(reg);
24d91c0d
PC
1089}
1090
1091static void
1092_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1093{
1094 FCMP_SLT_D(0, r1, r2);
1095 MOVCF2GR(r0, 0);
1096}
1097dopi(lt)
1098
1099static void
1100_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1101{
1102 FCMP_SLE_D(0, r1, r2);
1103 MOVCF2GR(r0, 0);
1104}
1105dopi(le)
1106
1107static void
1108_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1109{
1110 FCMP_CEQ_D(0, r1, r2);
1111 MOVCF2GR(r0, 0);
1112}
1113dopi(eq)
1114
1115static void
1116_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1117{
1118 FCMP_SLE_D(0, r2, r1);
1119 MOVCF2GR(r0, 0);
1120}
1121dopi(ge)
1122
1123static void
1124_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1125{
1126 FCMP_SLT_D(0, r2, r1);
1127 MOVCF2GR(r0, 0);
1128}
1129dopi(gt)
1130
1131static void
1132_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1133{
1134 FCMP_CUNE_D(0, r1, r2);
1135 MOVCF2GR(r0, 0);
1136}
1137dopi(ne)
1138
1139static void
1140_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1141{
1142 FCMP_CULT_D(0, r1, r2);
1143 MOVCF2GR(r0, 0);
1144}
1145dopi(unlt)
1146
1147static void
1148_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1149{
1150 FCMP_CULE_D(0, r1, r2);
1151 MOVCF2GR(r0, 0);
1152}
1153dopi(unle)
1154
1155static void
1156_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1157{
1158 FCMP_CUEQ_D(0, r1, r2);
1159 MOVCF2GR(r0, 0);
1160}
1161dopi(uneq)
1162
1163static void
1164_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1165{
1166 FCMP_CULE_D(0, r2, r1);
1167 MOVCF2GR(r0, 0);
1168}
1169dopi(unge)
1170
1171static void
1172_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1173{
1174 FCMP_CULT_D(0, r2, r1);
1175 MOVCF2GR(r0, 0);
1176}
1177dopi(ungt)
1178
1179static void
1180_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1181{
1182 FCMP_CNE_D(0, r1, r2);
1183 MOVCF2GR(r0, 0);
1184}
1185dopi(ltgt)
1186
1187static void
1188_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1189{
1190 FCMP_COR_D(0, r1, r2);
1191 MOVCF2GR(r0, 0);
1192}
1193dopi(ord)
1194
1195static void
1196_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1197{
1198 FCMP_COR_D(0, r1, r2);
1199 MOVCF2GR(r0, 0);
1200 XORI(r0, r0, 1);
1201}
1202dopi(unord)
1203
1204static jit_word_t
1205_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1206{
1207 jit_word_t w;
1208 FCMP_SLT_D(0, r1, r2);
1209 w = _jit->pc.w;
1210 BCNEZ(0, (i0 - w) >> 2);
1211 return (w);
1212}
1213dbopi(lt)
1214
1215static jit_word_t
1216_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1217{
1218 jit_word_t w;
1219 FCMP_SLE_D(0, r1, r2);
1220 w = _jit->pc.w;
1221 BCNEZ(0, (i0 - w) >> 2);
1222 return (w);
1223}
1224dbopi(le)
1225
1226static jit_word_t
1227_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1228{
1229 jit_word_t w;
1230 FCMP_CEQ_D(0, r1, r2);
1231 w = _jit->pc.w;
1232 BCNEZ(0, (i0 - w) >> 2);
1233 return (w);
1234}
1235dbopi(eq)
1236
1237static jit_word_t
1238_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1239{
1240 jit_word_t w;
1241 FCMP_SLE_D(0, r2, r1);
1242 w = _jit->pc.w;
1243 BCNEZ(0, (i0 - w) >> 2);
1244 return (w);
1245}
1246dbopi(ge)
1247
1248static jit_word_t
1249_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1250{
1251 jit_word_t w;
1252 FCMP_SLT_D(0, r2, r1);
1253 w = _jit->pc.w;
1254 BCNEZ(0, (i0 - w) >> 2);
1255 return (w);
1256}
1257dbopi(gt)
1258
1259static jit_word_t
1260_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1261{
1262 jit_word_t w;
1263 FCMP_CUNE_D(0, r1, r2);
1264 w = _jit->pc.w;
1265 BCNEZ(0, (i0 - w) >> 2);
1266 return (w);
1267}
1268dbopi(ne)
1269
1270static jit_word_t
1271_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1272{
1273 jit_word_t w;
1274 FCMP_CULT_D(0, r1, r2);
1275 w = _jit->pc.w;
1276 BCNEZ(0, (i0 - w) >> 2);
1277 return (w);
1278}
1279dbopi(unlt)
1280
1281static jit_word_t
1282_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1283{
1284 jit_word_t w;
1285 FCMP_CULE_D(0, r1, r2);
1286 w = _jit->pc.w;
1287 BCNEZ(0, (i0 - w) >> 2);
1288 return (w);
1289}
1290dbopi(unle)
1291
1292static jit_word_t
1293_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1294{
1295 jit_word_t w;
1296 FCMP_CUEQ_D(0, r1, r2);
1297 w = _jit->pc.w;
1298 BCNEZ(0, (i0 - w) >> 2);
1299 return (w);
1300}
1301dbopi(uneq)
1302
1303static jit_word_t
1304_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1305{
1306 jit_word_t w;
1307 FCMP_CULE_D(0, r2, r1);
1308 w = _jit->pc.w;
1309 BCNEZ(0, (i0 - w) >> 2);
1310 return (w);
1311}
1312dbopi(unge)
1313
1314static jit_word_t
1315_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1316{
1317 jit_word_t w;
1318 FCMP_CULT_D(0, r2, r1);
1319 w = _jit->pc.w;
1320 BCNEZ(0, (i0 - w) >> 2);
1321 return (w);
1322}
1323dbopi(ungt)
1324
1325static jit_word_t
1326_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1327{
1328 jit_word_t w;
1329 FCMP_CNE_D(0, r2, r1);
1330 w = _jit->pc.w;
1331 BCNEZ(0, (i0 - w) >> 2);
1332 return (w);
1333}
1334dbopi(ltgt)
1335
1336static jit_word_t
1337_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1338{
1339 jit_word_t w;
1340 FCMP_COR_D(0, r2, r1);
1341 w = _jit->pc.w;
1342 BCNEZ(0, (i0 - w) >> 2);
1343 return (w);
1344}
1345dbopi(ord)
1346
1347static jit_word_t
1348_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2)
1349{
1350 jit_word_t w;
1351 FCMP_COR_D(0, r2, r1);
1352 w = _jit->pc.w;
1353 BCEQZ(0, (i0 - w) >> 2);
1354 return (w);
1355}
1356dbopi(unord)
1357
1358static void
1359_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1360{
1361 assert(_jitc->function->self.call & jit_call_varargs);
1362 /* Load argument. */
1363 ldr_d(r0, r1);
1364 /* Update va_list. */
1365 addi(r1, r1, sizeof(jit_float64_t));
1366}
1367
1368#endif /* CODE */