Merge pull request #718 from pcercuei/update-lightrec-20230224
[pcsx_rearmed.git] / deps / lightning / lib / jit_loongarch-fpu.c
1 /*
2  * Copyright (C) 2022-2023  Free Software Foundation, Inc.
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)
193 static void _truncr_f_i(jit_state_t*, jit_int32_t, jit_int32_t);
194 # define truncr_d_i(r0, r1)             _truncr_d_i(_jit, r0, r1)
195 static void _truncr_d_i(jit_state_t*, jit_int32_t, jit_int32_t);
196 # define truncr_f_l(r0, r1)             _truncr_f_l(_jit, r0, r1)
197 static void _truncr_f_l(jit_state_t*, jit_int32_t, jit_int32_t);
198 # define truncr_d_l(r0, r1)             _truncr_d_l(_jit, r0, r1)
199 static void _truncr_d_l(jit_state_t*, jit_int32_t, jit_int32_t);
200 # define addr_f(r0, r1, r2)             FADD_S(r0, r1, r2)
201 # define addi_f(r0, r1, i0)             _addi_f(_jit, r0, r1, i0)
202 static void _addi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
203 # define subr_f(r0, r1, r2)             FSUB_S(r0, r1, r2)
204 # define subi_f(r0, r1, i0)             _subi_f(_jit, r0, r1, i0)
205 static void _subi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
206 # define rsbr_f(r0, r1, r2)             FSUB_S(r0, r2, r1)
207 # define rsbi_f(r0, r1, i0)             _rsbi_f(_jit, r0, r1, i0)
208 static void _rsbi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
209 # define mulr_f(r0, r1, r2)             FMUL_S(r0, r1, r2)
210 # define muli_f(r0, r1, i0)             _muli_f(_jit, r0, r1, i0)
211 static void _muli_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
212 # define divr_f(r0, r1, r2)             FDIV_S(r0, r1, r2)
213 # define divi_f(r0, r1, i0)             _divi_f(_jit, r0, r1, i0)
214 static void _divi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
215 # define absr_f(r0, r1)                 FABS_S(r0, r1)
216 # define negr_f(r0, r1)                 FNEG_S(r0, r1)
217 # define sqrtr_f(r0, r1)                FSQRT_S(r0, r1)
218 # define extr_f(r0, r1)                 _extr_f(_jit, r0, r1)
219 static 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)
222 static 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)
225 static 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)
228 static 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)
231 static 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)
234 static 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)
237 static 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)
241 static 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)
243 static 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)
245 static 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)
247 static 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)
249 static 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)
251 static 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)
253 static 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)
255 static 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)
257 static 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)
259 static 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)
261 static 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)
263 static 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)
265 static 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)
267 static 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)
269 static 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)
271 static 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)
273 static 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)
275 static 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)
277 static 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)
279 static 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)
281 static 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)
283 static 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)
285 static 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)
287 static 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)
289 static 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)
291 static 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)
293 static 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)
295 static 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)
297 static 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)
299 static 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)
301 static 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)
303 static 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)
305 static 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)
307 static 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)
309 static 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)
311 static 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)
313 static 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)
315 static 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)
317 static 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)
319 static 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)
321 static 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)
323 static 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)
325 static 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)
327 static 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)
329 static 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)
331 static 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)
333 static 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)
335 static 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)
337 static 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)
339 static 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)
341 static 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)
343 static 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)
345 static 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)
347 static 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)
349 static 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)
351 static 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)
354 static 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)
357 static 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)
360 static 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)
363 static 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)
366 static 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)
371 static 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)
374 static 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)
377 static 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)
380 static 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)
383 static 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)
386 static 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)
389 static 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)
393 static 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)
395 static 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)
397 static 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)
399 static 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)
401 static 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)
403 static 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)
405 static 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)
407 static 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)
409 static 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)
411 static 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)
413 static 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)
415 static 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)
417 static 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)
419 static 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)
421 static 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)
423 static 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)
425 static 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)
427 static 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)
429 static 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)
431 static 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)
433 static 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)
435 static 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)
437 static 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)
439 static 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)
441 static 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)
443 static 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)
445 static 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)
447 static 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)
449 static 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)
451 static 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)
453 static 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)
455 static 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)
457 static 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)
459 static 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)
461 static 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)
463 static 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)
465 static 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)
467 static 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)
469 static 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)
471 static 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)
473 static 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)
475 static 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)
477 static 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)
479 static 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)
481 static 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)
483 static 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)
485 static 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)
487 static 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)
489 static 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)
491 static 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)
493 static 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)
495 static 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)
497 static 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)
499 static 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)
501 static 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)
503 static 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)
505 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
506 #endif /* PROTO */
507
508 #if CODE
509 static 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
518 static 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
527 static 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
536 static 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)                                     \
546 static 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)                                    \
560 static 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
576 fopi(add)
577 fopi(sub)
578 fopi(rsb)
579 fopi(mul)
580 fopi(div)
581
582 static 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
589 static 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
603 static 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
617 static 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
631 static 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
645 static 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
664 static 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
675 static 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 }
681 fopi(lt)
682
683 static 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 }
689 fopi(le)
690
691 static 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 }
697 fopi(eq)
698
699 static 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 }
705 fopi(ge)
706
707 static 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 }
713 fopi(gt)
714
715 static 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 }
721 fopi(ne)
722
723 static 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 }
729 fopi(unlt)
730
731 static 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 }
737 fopi(unle)
738
739 static 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 }
745 fopi(uneq)
746
747 static 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 }
753 fopi(unge)
754
755 static 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 }
761 fopi(ungt)
762
763 static 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 }
769 fopi(ltgt)
770
771 static 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 }
777 fopi(ord)
778
779 static 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 }
786 fopi(unord)
787
788 static 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 }
797 fbopi(lt)
798
799 static 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 }
808 fbopi(le)
809
810 static 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 }
819 fbopi(eq)
820
821 static 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 }
830 fbopi(ge)
831
832 static 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 }
841 fbopi(gt)
842
843 static 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 }
852 fbopi(ne)
853
854 static 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 }
863 fbopi(unlt)
864
865 static 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 }
874 fbopi(unle)
875
876 static 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 }
885 fbopi(uneq)
886
887 static 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 }
896 fbopi(unge)
897
898 static 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 }
907 fbopi(ungt)
908
909 static 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 }
918 fbopi(ltgt)
919
920 static 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 }
929 fbopi(ord)
930
931 static 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 }
940 fbopi(unord)
941
942 dopi(add)
943 dopi(sub)
944 dopi(rsb)
945 dopi(mul)
946 dopi(div)
947
948 static 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
955 static 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
969 static 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
983 static 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
997 static 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
1011 static 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
1030 static 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
1041 static 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 }
1047 dopi(lt)
1048
1049 static 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 }
1055 dopi(le)
1056
1057 static 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 }
1063 dopi(eq)
1064
1065 static 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 }
1071 dopi(ge)
1072
1073 static 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 }
1079 dopi(gt)
1080
1081 static 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 }
1087 dopi(ne)
1088
1089 static 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 }
1095 dopi(unlt)
1096
1097 static 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 }
1103 dopi(unle)
1104
1105 static 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 }
1111 dopi(uneq)
1112
1113 static 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 }
1119 dopi(unge)
1120
1121 static 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 }
1127 dopi(ungt)
1128
1129 static 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 }
1135 dopi(ltgt)
1136
1137 static 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 }
1143 dopi(ord)
1144
1145 static 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 }
1152 dopi(unord)
1153
1154 static 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 }
1163 dbopi(lt)
1164
1165 static 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 }
1174 dbopi(le)
1175
1176 static 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 }
1185 dbopi(eq)
1186
1187 static 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 }
1196 dbopi(ge)
1197
1198 static 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 }
1207 dbopi(gt)
1208
1209 static 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 }
1218 dbopi(ne)
1219
1220 static 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 }
1229 dbopi(unlt)
1230
1231 static 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 }
1240 dbopi(unle)
1241
1242 static 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 }
1251 dbopi(uneq)
1252
1253 static 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 }
1262 dbopi(unge)
1263
1264 static 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 }
1273 dbopi(ungt)
1274
1275 static 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 }
1284 dbopi(ltgt)
1285
1286 static 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 }
1295 dbopi(ord)
1296
1297 static 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 }
1306 dbopi(unord)
1307
1308 static 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 */