git subrepo pull (merge) --force deps/lightning
[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 fmar_f(r0, r1, r2, r3)         FMADD_S(r0, r1, r2, r3)
219 # define fmsr_f(r0, r1, r2, r3)         FMSUB_S(r0, r1, r2, r3)
220 # define fnmar_f(r0, r1, r2, r3)        FNMADD_S(r0, r1, r2, r3)
221 # define fnmsr_f(r0, r1, r2, r3)        FNMSUB_S(r0, r1, r2, r3)
222 # define extr_f(r0, r1)                 _extr_f(_jit, r0, r1)
223 static void _extr_f(jit_state_t*, jit_int32_t, jit_int32_t);
224 # define ldr_f(r0, r1)                  FLD_S(r0, r1, 0)
225 # define ldi_f(r0, i0)                  _ldi_f(_jit, r0, i0)
226 static void _ldi_f(jit_state_t*, jit_int32_t, jit_word_t);
227 # define ldxr_f(r0, r1, r2)             FLDX_S(r0, r1, r2)
228 # define ldxi_f(r0, r1, i0)             _ldxi_f(_jit, r0, r1, i0)
229 static void _ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
230 #  define unldr_x(r0, r1, i0)           _unldr_x(_jit, r0, r1, i0)
231 static void _unldr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
232 #  define unldi_x(r0, i0, i1)           _unldi_x(_jit, r0, i0, i1)
233 static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
234 # define str_f(r0, r1)                  FST_S(r1, r0, 0)
235 # define sti_f(i0, r0)                  _sti_f(_jit, i0, r0)
236 static void _sti_f(jit_state_t*, jit_word_t, jit_int32_t);
237 # define stxr_f(r0, r1, r2)             FSTX_S(r2, r1, r0)
238 # define stxi_f(i0, r0, r1)             _stxi_f(_jit, i0, r0, r1)
239 static void _stxi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
240 #define unstr_x(r0, r1, i0)             _unstr_x(_jit, r0, r1, i0)
241 static void _unstr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
242 #define unsti_x(i0, r0, i1)             _unsti_x(_jit, i0, r0, i1)
243 static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t);
244 # define movr_f(r0, r1)                 FMOV_S(r0, r1)
245 # define movi_f(r0, i0)                 _movi_f(_jit, r0, i0)
246 static void _movi_f(jit_state_t*, jit_int32_t, jit_float32_t);
247 #  define movr_f_w(r0, r1)              MOVFR2GR_S(r0, r1)
248 #  define movr_w_f(r0, r1)              MOVGR2FR_W(r0, r1)
249 #define movi_w_f(r0, i0)                _movi_w_f(_jit, r0, i0)
250 static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
251 # define extr_d_f(r0, r1)               FCVT_S_D(r0, r1)
252 # define ltr_f(r0, r1, r2)              _ltr_f(_jit, r0, r1, r2)
253 static void _ltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
254 # define lti_f(r0, r1, i0)              _lti_f(_jit, r0, r1, i0)
255 static void _lti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
256 # define ler_f(r0, r1, r2)              _ler_f(_jit, r0, r1, r2)
257 static void _ler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
258 # define lei_f(r0, r1, i0)              _lei_f(_jit, r0, r1, i0)
259 static void _lei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
260 # define eqr_f(r0, r1, r2)              _eqr_f(_jit, r0, r1, r2)
261 static void _eqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
262 # define eqi_f(r0, r1, i0)              _eqi_f(_jit, r0, r1, i0)
263 static void _eqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
264 # define ger_f(r0, r1, r2)              _ger_f(_jit, r0, r1, r2)
265 static void _ger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
266 # define gei_f(r0, r1, i0)              _gei_f(_jit, r0, r1, i0)
267 static void _gei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
268 # define gtr_f(r0, r1, r2)              _gtr_f(_jit, r0, r1, r2)
269 static void _gtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
270 # define gti_f(r0, r1, i0)              _gti_f(_jit, r0, r1, i0)
271 static void _gti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
272 # define ner_f(r0, r1, r2)              _ner_f(_jit, r0, r1, r2)
273 static void _ner_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
274 # define nei_f(r0, r1, i0)              _nei_f(_jit, r0, r1, i0)
275 static void _nei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
276 # define unltr_f(r0, r1, r2)            _unltr_f(_jit, r0, r1, r2)
277 static void _unltr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
278 # define unlti_f(r0, r1, i0)            _unlti_f(_jit, r0, r1, i0)
279 static void _unlti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
280 # define unler_f(r0, r1, r2)            _unler_f(_jit, r0, r1, r2)
281 static void _unler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
282 # define unlei_f(r0, r1, i1)            _unlei_f(_jit, r0, r1, i1)
283 static void _unlei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
284 # define uneqr_f(r0, r1, r2)            _uneqr_f(_jit, r0, r1, r2)
285 static void _uneqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
286 # define uneqi_f(r0, r1, i0)            _uneqi_f(_jit, r0, r1, i0)
287 static void _uneqi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
288 # define unger_f(r0, r1, r2)            _unger_f(_jit, r0, r1, r2)
289 static void _unger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
290 # define ungei_f(r0, r1, i0)            _ungei_f(_jit, r0, r1, i0)
291 static void _ungei_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
292 # define ungtr_f(r0, r1, r2)            _ungtr_f(_jit, r0, r1, r2)
293 static void _ungtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
294 # define ungti_f(r0, r1, i0)            _ungti_f(_jit, r0, r1, i0)
295 static void _ungti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
296 # define ltgtr_f(r0, r1, r2)            _ltgtr_f(_jit, r0, r1, r2)
297 static void _ltgtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
298 # define ltgti_f(r0, r1, i0)            _ltgti_f(_jit, r0, r1, i0)
299 static void _ltgti_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
300 # define ordr_f(r0, r1, r2)             _ordr_f(_jit, r0, r1, r2)
301 static void _ordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
302 # define ordi_f(r0, r1, i0)             _ordi_f(_jit, r0, r1, i0)
303 static void _ordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
304 # define unordr_f(r0, r1, r2)           _unordr_f(_jit, r0, r1, r2)
305 static void _unordr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
306 # define unordi_f(r0, r1, i0)           _unordi_f(_jit, r0, r1, i0)
307 static void _unordi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_float32_t);
308 # define bltr_f(i0, r0, r1)             _bltr_f(_jit, i0, r0, r1)
309 static jit_word_t _bltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
310 # define blti_f(i0, r0, i1)             _blti_f(_jit, i0, r0, i1)
311 static jit_word_t _blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
312 # define bler_f(i0, r0, r1)             _bler_f(_jit, i0, r0, r1)
313 static jit_word_t _bler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
314 # define blei_f(i0, r0, i1)             _blei_f(_jit, i0, r0, i1)
315 static jit_word_t _blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
316 # define beqr_f(i0, r0, r1)             _beqr_f(_jit, i0, r0, r1)
317 static jit_word_t _beqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
318 # define beqi_f(i0, r0, i1)             _beqi_f(_jit, i0, r0, i1)
319 static jit_word_t _beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
320 # define bger_f(i0, r0, r1)             _bger_f(_jit, i0, r0, r1)
321 static jit_word_t _bger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
322 # define bgei_f(i0, r0, i1)             _bgei_f(_jit, i0, r0, i1)
323 static jit_word_t _bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
324 # define bgtr_f(i0, r0, r1)             _bgtr_f(_jit,i0, r0, r1)
325 static jit_word_t _bgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
326 # define bgti_f(i0, r0, i1)             _bgti_f(_jit, i0, r0, i1)
327 static jit_word_t _bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
328 # define bner_f(i0, r0, r1)             _bner_f(_jit, i0, r0, r1)
329 static jit_word_t _bner_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
330 # define bnei_f(i0, r0, i1)             _bnei_f(_jit, i0, r0, i1)
331 static jit_word_t _bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t);
332 # define bunltr_f(i0, r0, r1)           _bunltr_f(_jit, i0, r0, r1)
333 static jit_word_t _bunltr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
334 # define bunlti_f(i0, r0, i1)           _bunlti_f(_jit, i0, r0, i1)
335 static jit_word_t _bunlti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
336 # define bunler_f(i0, r0, r1)           _bunler_f(_jit, i0, r0, r1)
337 static jit_word_t _bunler_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
338 # define bunlei_f(i0, r0, i1)           _bunlei_f(_jit, i0, r0, i1)
339 static jit_word_t _bunlei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
340 # define buneqr_f(i0, r0, r1)           _buneqr_f(_jit, i0, r0, r1)
341 static jit_word_t _buneqr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
342 # define buneqi_f(i0, r0, i1)           _buneqi_f(_jit, i0, r0, i1)
343 static jit_word_t _buneqi_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
344 # define bunger_f(i0, r0, r1)           _bunger_f(_jit, i0, r0, r1)
345 static jit_word_t _bunger_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
346 # define bungei_f(i0, r0, i1)           _bungei_f(_jit, i0, r0, i1)
347 static jit_word_t _bungei_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
348 # define bungtr_f(i0, r0, r1)           _bungtr_f(_jit, i0, r0, r1)
349 static jit_word_t _bungtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
350 # define bungti_f(i0, r0, i1)           _bungti_f(_jit, i0, r0, i1)
351 static jit_word_t _bungti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
352 # define bltgtr_f(i0, r0, r1)           _bltgtr_f(_jit, i0, r0, r1)
353 static jit_word_t _bltgtr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
354 # define bltgti_f(i0, r0, i1)           _bltgti_f(_jit, i0, r0, i1)
355 static jit_word_t _bltgti_f(jit_state_t*, jit_word_t,jit_int32_t,jit_float32_t);
356 # define bordr_f(i0, r0, r1)            _bordr_f(_jit, i0, r0, r1)
357 static jit_word_t _bordr_f(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
358 # define bordi_f(i0, r0, i1)            _bordi_f(_jit, i0, r0, i1)
359 static jit_word_t _bordi_f(jit_state_t*, jit_word_t, jit_int32_t,jit_float32_t);
360 # define bunordr_f(i0, r0, r1)          _bunordr_f(_jit, i0, r0, r1)
361 static jit_word_t _bunordr_f(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
362 # define bunordi_f(i0, r0, i1)          _bunordi_f(_jit, i0,r0, i1)
363 static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t);
364 # define addr_d(r0, r1, r2)             FADD_D(r0, r1, r2)
365 # define addi_d(r0, r1, i0)             _addi_d(_jit, r0, r1, i0)
366 static void _addi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
367 # define subr_d(r0, r1, r2)             FSUB_D(r0, r1, r2)
368 # define subi_d(r0, r1, i0)             _subi_d(_jit, r0, r1, i0)
369 static void _subi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
370 # define rsbr_d(r0, r1, r2)             FSUB_D(r0, r2, r1)
371 # define rsbi_d(r0, r1, i0)             _rsbi_d(_jit, r0, r1, i0)
372 static void _rsbi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
373 # define mulr_d(r0, r1, r2)             FMUL_D(r0, r1, r2)
374 # define muli_d(r0, r1, i0)             _muli_d(_jit, r0, r1, i0)
375 static void _muli_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
376 # define divr_d(r0, r1, r2)             FDIV_D(r0, r1, r2)
377 # define divi_d(r0, r1, i0)             _divi_d(_jit, r0, r1, i0)
378 static void _divi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
379 # define absr_d(r0, r1)                 FABS_D(r0, r1)
380 # define negr_d(r0, r1)                 FNEG_D(r0, r1)
381 # define sqrtr_d(r0, r1)                FSQRT_D(r0, r1)
382 # define fmar_d(r0, r1, r2, r3)         FMADD_D(r0, r1, r2, r3)
383 # define fmsr_d(r0, r1, r2, r3)         FMSUB_D(r0, r1, r2, r3)
384 # define fnmar_d(r0, r1, r2, r3)        FNMADD_D(r0, r1, r2, r3)
385 # define fnmsr_d(r0, r1, r2, r3)        FNMSUB_D(r0, r1, r2, r3)
386 # define extr_d(r0, r1)                 _extr_d(_jit, r0, r1)
387 static void _extr_d(jit_state_t*, jit_int32_t, jit_int32_t);
388 # define ldr_d(r0, r1)                  FLD_D(r0, r1, 0)
389 # define ldi_d(r0, i0)                  _ldi_d(_jit, r0, i0)
390 static void _ldi_d(jit_state_t*, jit_int32_t, jit_word_t);
391 # define ldxr_d(r0, r1, r2)             FLDX_D(r0, r1, r2)
392 # define ldxi_d(r0, r1, i0)             _ldxi_d(_jit, r0, r1, i0)
393 static void _ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t);
394 # define str_d(r0, r1)                  FST_D(r1, r0, 0)
395 # define sti_d(i0, r0)                  _sti_d(_jit, i0, r0)
396 static void _sti_d(jit_state_t*, jit_word_t, jit_int32_t);
397 # define stxr_d(r0, r1, r2)             FSTX_D(r2, r1, r0)
398 # define stxi_d(i0, r0, r1)             _stxi_d(_jit, i0, r0, r1)
399 static void _stxi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
400 # define movr_d(r0, r1)                 FMOV_D(r0, r1)
401 # define movi_d(r0, i0)                 _movi_d(_jit, r0, i0)
402 static void _movi_d(jit_state_t*, jit_int32_t, jit_float64_t);
403 #  define movr_d_w(r0, r1)              MOVFR2GR_D(r0, r1)
404 #  define movr_w_d(r0, r1)              MOVGR2FR_D(r0, r1)
405 #define movi_w_d(r0, i0)                _movi_w_d(_jit, r0, i0)
406 static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
407 # define extr_f_d(r0, r1)               FCVT_D_S(r0, r1)
408 # define ltr_d(r0, r1, r2)              _ltr_d(_jit, r0, r1, r2)
409 static void _ltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
410 # define lti_d(r0, r1, i0)              _lti_d(_jit, r0, r1, i0)
411 static void _lti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
412 # define ler_d(r0, r1, r2)              _ler_d(_jit, r0, r1, r2)
413 static void _ler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
414 # define lei_d(r0, r1, i0)              _lei_d(_jit, r0, r1, i0)
415 static void _lei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
416 # define eqr_d(r0, r1, r2)              _eqr_d(_jit, r0, r1, r2)
417 static void _eqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
418 # define eqi_d(r0, r1, i0)              _eqi_d(_jit, r0, r1, i0)
419 static void _eqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
420 # define ger_d(r0, r1, r2)              _ger_d(_jit, r0, r1, r2)
421 static void _ger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
422 # define gei_d(r0, r1, i0)              _gei_d(_jit, r0, r1, i0)
423 static void _gei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
424 # define gtr_d(r0, r1, r2)              _gtr_d(_jit, r0, r1, r2)
425 static void _gtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
426 # define gti_d(r0, r1, i0)              _gti_d(_jit, r0, r1, i0)
427 static void _gti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
428 # define ner_d(r0, r1, r2)              _ner_d(_jit, r0, r1, r2)
429 static void _ner_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
430 # define nei_d(r0, r1, i0)              _nei_d(_jit, r0, r1, i0)
431 static void _nei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
432 # define unltr_d(r0, r1, r2)            _unltr_d(_jit, r0, r1, r2)
433 static void _unltr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
434 # define unlti_d(r0, r1, i0)            _unlti_d(_jit, r0, r1, i0)
435 static void _unlti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
436 # define unler_d(r0, r1, r2)            _unler_d(_jit, r0, r1, r2)
437 static void _unler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
438 # define unlei_d(r0, r1, i0)            _unlei_d(_jit, r0, r1, i0)
439 static void _unlei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
440 # define uneqr_d(r0, r1, r2)            _uneqr_d(_jit, r0, r1, r2)
441 static void _uneqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
442 # define uneqi_d(r0, r1, i0)            _uneqi_d(_jit, r0, r1, i0)
443 static void _uneqi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
444 # define unger_d(r0, r1, r2)            _unger_d(_jit, r0, r1, r2)
445 static void _unger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
446 # define ungei_d(r0, r1, i0)            _ungei_d(_jit, r0, r1, i0)
447 static void _ungei_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
448 # define ungtr_d(r0, r1, r2)            _ungtr_d(_jit, r0, r1, r2)
449 static void _ungtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
450 # define ungti_d(r0, r1, i0)            _ungti_d(_jit, r0, r1, i0)
451 static void _ungti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
452 # define ltgtr_d(r0, r1, r2)            _ltgtr_d(_jit, r0, r1, r2)
453 static void _ltgtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
454 # define ltgti_d(r0, r1, i0)            _ltgti_d(_jit, r0, r1, i0)
455 static void _ltgti_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
456 # define ordr_d(r0, r1, r2)             _ordr_d(_jit, r0, r1, r2)
457 static void _ordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
458 # define ordi_d(r0, r1, i0)             _ordi_d(_jit, r0, r1, i0)
459 static void _ordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
460 # define unordr_d(r0, r1, r2)           _unordr_d(_jit, r0, r1, r2)
461 static void _unordr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
462 # define unordi_d(r0, r1, i0)           _unordi_d(_jit, r0, r1, i0)
463 static void _unordi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
464 # define bltr_d(i0, r0, r1)             _bltr_d(_jit, i0, r0, r1)
465 static jit_word_t _bltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
466 # define blti_d(i0, r0, i1)             _blti_d(_jit, i0, r0, i1)
467 static jit_word_t _blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
468 # define bler_d(i0, r0, r1)             _bler_d(_jit, i0, r0, r1)
469 static jit_word_t _bler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
470 # define blei_d(i0, r0, i1)             _blei_d(_jit, i0,r0, i1)
471 static jit_word_t _blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
472 # define beqr_d(i0, r0, r1)             _beqr_d(_jit, i0, r0, r1)
473 static jit_word_t _beqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
474 # define beqi_d(i0, r0, i1)             _beqi_d(_jit, i0, r0, i1)
475 static jit_word_t _beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
476 # define bger_d(i0, r0, r1)             _bger_d(_jit, i0, r0, r1)
477 static jit_word_t _bger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
478 # define bgei_d(i0, r0, i1)             _bgei_d(_jit, i0, r0, i1)
479 static jit_word_t _bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
480 # define bgtr_d(i0, r0, r1)             _bgtr_d(_jit, i0, r0, r1)
481 static jit_word_t _bgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
482 # define bgti_d(i0, r0, i1)             _bgti_d(_jit, i0, r0, i1)
483 static jit_word_t _bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
484 # define bner_d(i0, r0, r1)             _bner_d(_jit, i0, r0, r1)
485 static jit_word_t _bner_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
486 # define bnei_d(i0, r0, i1)             _bnei_d(_jit, i0, r0, i1)
487 static jit_word_t _bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t);
488 # define bunltr_d(i0, r0, r1)           _bunltr_d(_jit, i0, r0, r1)
489 static jit_word_t _bunltr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
490 # define bunlti_d(i0, r0, i1)           _bunlti_d(_jit, i0, r0, i1)
491 static jit_word_t _bunlti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
492 # define bunler_d(i0, r0, r1)           _bunler_d(_jit, i0, r0, r1)
493 static jit_word_t _bunler_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
494 # define bunlei_d(i0, r0, i1)           _bunlei_d(_jit, i0, r0, i1)
495 static jit_word_t _bunlei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
496 # define buneqr_d(i0, r0, r1)           _buneqr_d(_jit, i0, r0, r1)
497 static jit_word_t _buneqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
498 # define buneqi_d(i0, r0, i1)           _buneqi_d(_jit, i0,r0, i1)
499 static jit_word_t _buneqi_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
500 # define bunger_d(i0, r0, r1)           _bunger_d(_jit, i0, r0, r1)
501 static jit_word_t _bunger_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
502 # define bungei_d(i0, r0, i1)           _bungei_d(_jit, i0, r0, i1)
503 static jit_word_t _bungei_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
504 # define bungtr_d(i0, r0, r1)           _bungtr_d(_jit, i0, r0, r1)
505 static jit_word_t _bungtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
506 # define bungti_d(i0, r0, i1)           _bungti_d(_jit, i0, r0, i1)
507 static jit_word_t _bungti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
508 # define bltgtr_d(i0, r0, r1)           _bltgtr_d(_jit, i0, r0, r1)
509 static jit_word_t _bltgtr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
510 # define bltgti_d(i0, r0, i1)           _bltgti_d(_jit, i0, r0, i1)
511 static jit_word_t _bltgti_d(jit_state_t*, jit_word_t,jit_int32_t,jit_float64_t);
512 # define bordr_d(i0, r0, r1)            _bordr_d(_jit, i0, r0, r1)
513 static jit_word_t _bordr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t);
514 # define bordi_d(i0, r0, i1)            _bordi_d(_jit, i0, r0, i1)
515 static jit_word_t _bordi_d(jit_state_t*, jit_word_t, jit_int32_t,jit_float64_t);
516 # define bunordr_d(i0, r0, r1)          _bunordr_d(_jit, i0, r0, r1)
517 static jit_word_t _bunordr_d(jit_state_t*, jit_word_t, jit_int32_t,jit_int32_t);
518 # define bunordi_d(i0, r0, i1)          _bunordi_d(_jit, i0, r0, i1)
519 static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t);
520 # define vaarg_d(r0, r1)                _vaarg_d(_jit, r0, r1)
521 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
522 #endif /* PROTO */
523
524 #if CODE
525 static 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
534 static 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
543 static 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
552 static 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)                                     \
562 static 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)                                    \
576 static 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
592 fopi(add)
593 fopi(sub)
594 fopi(rsb)
595 fopi(mul)
596 fopi(div)
597
598 static 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
605 static 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
619 static 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
633 static 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
642 static 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
651 static 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
665 static 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
679 static 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
688 static 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
697 static 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
716 static void
717 _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
718 {
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);
724 }
725
726 static 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 }
732 fopi(lt)
733
734 static 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 }
740 fopi(le)
741
742 static 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 }
748 fopi(eq)
749
750 static 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 }
756 fopi(ge)
757
758 static 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 }
764 fopi(gt)
765
766 static 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 }
772 fopi(ne)
773
774 static 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 }
780 fopi(unlt)
781
782 static 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 }
788 fopi(unle)
789
790 static 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 }
796 fopi(uneq)
797
798 static 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 }
804 fopi(unge)
805
806 static 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 }
812 fopi(ungt)
813
814 static 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 }
820 fopi(ltgt)
821
822 static 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 }
828 fopi(ord)
829
830 static 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 }
837 fopi(unord)
838
839 static 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 }
848 fbopi(lt)
849
850 static 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 }
859 fbopi(le)
860
861 static 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 }
870 fbopi(eq)
871
872 static 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 }
881 fbopi(ge)
882
883 static 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 }
892 fbopi(gt)
893
894 static 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 }
903 fbopi(ne)
904
905 static 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 }
914 fbopi(unlt)
915
916 static 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 }
925 fbopi(unle)
926
927 static 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 }
936 fbopi(uneq)
937
938 static 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 }
947 fbopi(unge)
948
949 static 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 }
958 fbopi(ungt)
959
960 static 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 }
969 fbopi(ltgt)
970
971 static 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 }
980 fbopi(ord)
981
982 static 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 }
991 fbopi(unord)
992
993 dopi(add)
994 dopi(sub)
995 dopi(rsb)
996 dopi(mul)
997 dopi(div)
998
999 static 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
1006 static 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
1020 static 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
1034 static 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
1048 static 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
1062 static 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
1081 static void
1082 _movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1083 {
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);
1089 }
1090
1091 static 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 }
1097 dopi(lt)
1098
1099 static 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 }
1105 dopi(le)
1106
1107 static 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 }
1113 dopi(eq)
1114
1115 static 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 }
1121 dopi(ge)
1122
1123 static 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 }
1129 dopi(gt)
1130
1131 static 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 }
1137 dopi(ne)
1138
1139 static 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 }
1145 dopi(unlt)
1146
1147 static 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 }
1153 dopi(unle)
1154
1155 static 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 }
1161 dopi(uneq)
1162
1163 static 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 }
1169 dopi(unge)
1170
1171 static 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 }
1177 dopi(ungt)
1178
1179 static 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 }
1185 dopi(ltgt)
1186
1187 static 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 }
1193 dopi(ord)
1194
1195 static 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 }
1202 dopi(unord)
1203
1204 static 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 }
1213 dbopi(lt)
1214
1215 static 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 }
1224 dbopi(le)
1225
1226 static 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 }
1235 dbopi(eq)
1236
1237 static 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 }
1246 dbopi(ge)
1247
1248 static 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 }
1257 dbopi(gt)
1258
1259 static 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 }
1268 dbopi(ne)
1269
1270 static 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 }
1279 dbopi(unlt)
1280
1281 static 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 }
1290 dbopi(unle)
1291
1292 static 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 }
1301 dbopi(uneq)
1302
1303 static 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 }
1312 dbopi(unge)
1313
1314 static 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 }
1323 dbopi(ungt)
1324
1325 static 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 }
1334 dbopi(ltgt)
1335
1336 static 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 }
1345 dbopi(ord)
1346
1347 static 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 }
1356 dbopi(unord)
1357
1358 static 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 */