git subrepo pull (merge) --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / lib / jit_alpha-fpu.c
1 /*
2  * Copyright (C) 2014-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 _F2_REGNO                     0x02
22 #  define _F3_REGNO                     0x03
23 #  define _F4_REGNO                     0x04
24 #  define _F5_REGNO                     0x05
25 #  define _F6_REGNO                     0x06
26 #  define _F7_REGNO                     0x07
27 #  define _F8_REGNO                     0x08
28 #  define _F9_REGNO                     0x09
29 #  define F_P(o,ra,rb,f,rc)             _Opr(_jit,o,ra,rb,f,rc)
30 static void _Opr(jit_state_t*,int,int,int,unsigned int,int);
31 #  define ADDF(ra,rb,rc)                F_P(0x15,ra,rb,0x080,rc)
32 #  define ADDG(ra,rb,rc)                F_P(0x15,ra,rb,0x0a0,rc)
33 #  define ADDS(ra,rb,rc)                F_P(0x16,ra,rb,0x080,rc)
34 #  define ADDS_C(ra,rb,rc)              F_P(0x16,ra,rb,0x000,rc)
35 #  define ADDS_M(ra,rb,rc)              F_P(0x16,ra,rb,0x040,rc)
36 #  define ADDS_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0c0,rc)
37 #  define ADDS_U(ra,rb,rc)              F_P(0x16,ra,rb,0x180,rc)
38 #  define ADDS_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x100,rc)
39 #  define ADDS_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x140,rc)
40 #  define ADDS_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1c0,rc)
41 #  define ADDS_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x580,rc)
42 #  define ADDS_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x500,rc)
43 #  define ADDS_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x540,rc)
44 #  define ADDS_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5c0,rc)
45 #  define ADDS_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x780,rc)
46 #  define ADDS_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x700,rc)
47 #  define ADDS_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x740,rc)
48 #  define ADDS_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7c0,rc)
49 #  define ADDT(ra,rb,rc)                F_P(0x16,ra,rb,0x0a0,rc)
50 #  define ADDT_C(ra,rb,rc)              F_P(0x16,ra,rb,0x020,rc)
51 #  define ADDT_M(ra,rb,rc)              F_P(0x16,ra,rb,0x060,rc)
52 #  define ADDT_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0e0,rc)
53 #  define ADDT_U(ra,rb,rc)              F_P(0x16,ra,rb,0x1a0,rc)
54 #  define ADDT_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x120,rc)
55 #  define ADDT_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x160,rc)
56 #  define ADDT_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1e0,rc)
57 #  define ADDT_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x5a0,rc)
58 #  define ADDT_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x520,rc)
59 #  define ADDT_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x560,rc)
60 #  define ADDT_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5e0,rc)
61 #  define ADDT_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x7a0,rc)
62 #  define ADDT_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x720,rc)
63 #  define ADDT_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x760,rc)
64 #  define ADDT_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7e0,rc)
65 #  define CMPGEQ(ra,rb,rc)              F_P(0x15,ra,rb,0x0a5,rc)
66 #  define CMPGLE(ra,rb,rc)              F_P(0x15,ra,rb,0x0a7,rc)
67 #  define CMPTEQ(ra,rb,rc)              F_P(0x16,ra,rb,0x0a5,rc)
68 #  define CMPTEQ_SU(ra,rb,rc)           F_P(0x16,ra,rb,0x5a5,rc)
69 #  define CMPTLE(ra,rb,rc)              F_P(0x16,ra,rb,0x0a7,rc)
70 #  define CMPTLE_SU(ra,rb,rc)           F_P(0x16,ra,rb,0x5a7,rc)
71 #  define CMPTLT(ra,rb,rc)              F_P(0x16,ra,rb,0x0a6,rc)
72 #  define CMPTLT_SU(ra,rb,rc)           F_P(0x16,ra,rb,0x5a6,rc)
73 #  define CMPTUN(ra,rb,rc)              F_P(0x16,ra,rb,0x0a4,rc)
74 #  define CMPTUN_SU(ra,rb,rc)           F_P(0x16,ra,rb,0x5a4,rc)
75 #  define CPYS(ra,rb,rc)                F_P(0x17,ra,rb,0x020,rc)
76 #  define CPYSE(ra,rb,rc)               F_P(0x17,ra,rb,0x022,rc)
77 #  define CPYSN(ra,rb,rc)               F_P(0x17,ra,rb,0x021,rc)
78 #  define DIVF(ra,rb,rc)                F_P(0x15,ra,rb,0x083,rc)
79 #  define DIVG(ra,rb,rc)                F_P(0x15,ra,rb,0x0a3,rc)
80 #  define DIVS(ra,rb,rc)                F_P(0x16,ra,rb,0x083,rc)
81 #  define DIVS_C(ra,rb,rc)              F_P(0x16,ra,rb,0x003,rc)
82 #  define DIVS_M(ra,rb,rc)              F_P(0x16,ra,rb,0x043,rc)
83 #  define DIVS_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0c3,rc)
84 #  define DIVS_U(ra,rb,rc)              F_P(0x16,ra,rb,0x183,rc)
85 #  define DIVS_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x103,rc)
86 #  define DIVS_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x143,rc)
87 #  define DIVS_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1c3,rc)
88 #  define DIVS_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x583,rc)
89 #  define DIVS_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x503,rc)
90 #  define DIVS_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x543,rc)
91 #  define DIVS_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5c3,rc)
92 #  define DIVS_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x783,rc)
93 #  define DIVS_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x703,rc)
94 #  define DIVS_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x743,rc)
95 #  define DIVS_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7c3,rc)
96 #  define DIVT(ra,rb,rc)                F_P(0x16,ra,rb,0x0a3,rc)
97 #  define DIVT_C(ra,rb,rc)              F_P(0x16,ra,rb,0x023,rc)
98 #  define DIVT_M(ra,rb,rc)              F_P(0x16,ra,rb,0x063,rc)
99 #  define DIVT_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0e3,rc)
100 #  define DIVT_U(ra,rb,rc)              F_P(0x16,ra,rb,0x1a3,rc)
101 #  define DIVT_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x123,rc)
102 #  define DIVT_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x163,rc)
103 #  define DIVT_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1e3,rc)
104 #  define DIVT_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x5a3,rc)
105 #  define DIVT_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x523,rc)
106 #  define DIVT_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x563,rc)
107 #  define DIVT_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5e3,rc)
108 #  define DIVT_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x7a3,rc)
109 #  define DIVT_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x723,rc)
110 #  define DIVT_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x7a3,rc)
111 #  define DIVT_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7e3,rc)
112 #  define CVTDG(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x09e,rc)
113 #  define CVTGD(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x0ad,rc)
114 #  define CVTGF(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x0ac,rc)
115 #  define CVTGQ(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x0af,rc)
116 #  define CVTLQ(rb,rc)                  F_P(0x17,_R31_REGNO,rb,0x010,rc)
117 #  define CVTQF(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x0bc,rc)
118 #  define CVTQG(rb,rc)                  F_P(0x15,_R31_REGNO,rb,0x0be,rc)
119 #  define CVTQL(rb,rc)                  F_P(0x17,_R31_REGNO,rb,0x030,rc)
120 #  define CVTQS(rb,rc)                  F_P(0x16,_R31_REGNO,rb,0x0bc,rc)
121 #  define CVTQS_C(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x03c,rc)
122 #  define CVTQS_M(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x07c,rc)
123 #  define CVTQS_D(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x0fc,rc)
124 #  define CVTQS_SUI(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x7bc,rc)
125 #  define CVTQS_SUIC(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x73c,rc)
126 #  define CVTQS_SUIM(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x77c,rc)
127 #  define CVTQS_SUID(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x7fc,rc)
128 #  define CVTQT(rb,rc)                  F_P(0x16,_R31_REGNO,rb,0x0be,rc)
129 #  define CVTQT_C(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x03e,rc)
130 #  define CVTQT_M(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x0te,rc)
131 #  define CVTQT_D(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x0fe,rc)
132 #  define CVTQT_SUI(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x7be,rc)
133 #  define CVTQT_SUIC(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x73e,rc)
134 #  define CVTQT_SUIM(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x77e,rc)
135 #  define CVTQT_SUID(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x7fe,rc)
136 #  define CVTST(rb,rc)                  F_P(0x16,_R31_REGNO,rb,0x2ac,rc)
137 #  define CVTST_S(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x6ac,rc)
138 #  define CVTTQ(rb,rc)                  F_P(0x16,_R31_REGNO,rb,0x0af,rc)
139 #  define CVTTQ_C(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x02f,rc)
140 #  define CVTTQ_V(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x1af,rc)
141 #  define CVTTQ_VC(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x12f,rc)
142 #  define CVTTQ_SV(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x5af,rc)
143 #  define CVTTQ_SVC(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x52f,rc)
144 #  define CVTTQ_SVI(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x7af,rc)
145 #  define CVTTQ_SVIC(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x72f,rc)
146 #  define CVTTQ_D(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x0ef,rc)
147 #  define CVTTQ_VD(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x1ef,rc)
148 #  define CVTTQ_SVD(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x5ef,rc)
149 #  define CVTTQ_SVID(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x7ef,rc)
150 #  define CVTTQ_M(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x06f,rc)
151 #  define CVTTQ_VM(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x16f,rc)
152 #  define CVTTQ_SVM(rb,rc)              F_P(0x16,_R31_REGNO,rb,0x56f,rc)
153 #  define CVTTQ_SVIM(rb,rc)             F_P(0x16,_R31_REGNO,rb,0x76f,rc)
154 #  define CVTTS(rb,rc)                  F_P(0x16,_R31_REGNO,rb,0x0ac,rc)
155 #  define CVTTS_C(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x02c,rc)
156 #  define CVTTS_M(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x06c,rc)
157 #  define CVTTS_D(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x0ec,rc)
158 #  define CVTTS_U(rb,rc)                F_P(0x16,_R31_REGNO,rb,0x1ac,rc)
159 #  define CVTTS_UC(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x12c,rc)
160 #  define CVTTS_UM(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x16c,rc)
161 #  define CVTTS_UD(rb,rc)               F_P(0x16,_R31_REGNO,rb,0x1ec,rc)
162 #  define FBEQ(ra,d)                    Bra(0x31,ra,d)
163 #  define FBGE(ra,d)                    Bra(0x36,ra,d)
164 #  define FBGT(ra,d)                    Bra(0x37,ra,d)
165 #  define FBLE(ra,d)                    Bra(0x33,ra,d)
166 #  define FBLT(ra,d)                    Bra(0x32,ra,d)
167 #  define FBNE(ra,d)                    Bra(0x35,ra,d)
168 #  define FCMOVEQ(ra,rb,rc)             F_P(0x17,ra,rb,0x02a,rc)
169 #  define FCMOVGE(ra,rb,rc)             F_P(0x17,ra,rb,0x02d,rc)
170 #  define FCMOVGT(ra,rb,rc)             F_P(0x17,ra,rb,0x02f,rc)
171 #  define FCMOVLE(ra,rb,rc)             F_P(0x17,ra,rb,0x02e,rc)
172 #  define FCMOVLT(ra,rb,rc)             F_P(0x17,ra,rb,0x02c,rc)
173 #  define FCMOVNE(ra,rb,rc)             F_P(0x17,ra,rb,0x02b,rc)
174 #  define FTOIS(ra,rc)                  F_P(0x1c,ra,_R31_REGNO,0x078,rc)
175 #  define FTOIT(ra,rc)                  F_P(0x1c,ra,_R31_REGNO,0x070,rc)
176 #  define ITOFF(ra,rc)                  F_P(0x14,ra,_R31_REGNO,0x014,rc)
177 #  define ITOFS(ra,rc)                  F_P(0x14,ra,_R31_REGNO,0x004,rc)
178 #  define ITOFT(ra,rc)                  F_P(0x14,ra,_R31_REGNO,0x024,rc)
179 #  define LDF(ra,rb,d)                  Mem(0x20,ra,rb,d)
180 #  define LDG(ra,rb,d)                  Mem(0x21,ra,rb,d)
181 #  define LDS(ra,rb,d)                  Mem(0x22,ra,rb,d)
182 #  define LDT(ra,rb,d)                  Mem(0x23,ra,rb,d)
183 #  define MF_FPCR(ra)                   F_P(0x17,ra,ra,0x025,ra)
184 #  define MT_FPCR(ra)                   F_P(0x17,ra,ra,0x024,ra)
185 #  define MULF(ra,rb,rc)                F_P(0x15,ra,rb,0x082,rc)
186 #  define MULG(ra,rb,rc)                F_P(0x15,ra,rb,0x0a2,rc)
187 #  define MULS(ra,rb,rc)                F_P(0x16,ra,rb,0x082,rc)
188 #  define MULS_C(ra,rb,rc)              F_P(0x16,ra,rb,0x002,rc)
189 #  define MULS_M(ra,rb,rc)              F_P(0x16,ra,rb,0x042,rc)
190 #  define MULS_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0c2,rc)
191 #  define MULS_U(ra,rb,rc)              F_P(0x16,ra,rb,0x182,rc)
192 #  define MULS_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x102,rc)
193 #  define MULS_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x142,rc)
194 #  define MULS_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1c2,rc)
195 #  define MULS_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x582,rc)
196 #  define MULS_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x502,rc)
197 #  define MULS_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x642,rc)
198 #  define MULS_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5c2,rc)
199 #  define MULS_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x782,rc)
200 #  define MULS_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x702,rc)
201 #  define MULS_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x742,rc)
202 #  define MULS_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7c2,rc)
203 #  define MULT(ra,rb,rc)                F_P(0x16,ra,rb,0x0a2,rc)
204 #  define MULT_C(ra,rb,rc)              F_P(0x16,ra,rb,0x022,rc)
205 #  define MULT_M(ra,rb,rc)              F_P(0x16,ra,rb,0x062,rc)
206 #  define MULT_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0e2,rc)
207 #  define MULT_U(ra,rb,rc)              F_P(0x16,ra,rb,0x1a2,rc)
208 #  define MULT_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x122,rc)
209 #  define MULT_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x162,rc)
210 #  define MULT_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1e2,rc)
211 #  define MULT_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x5a2,rc)
212 #  define MULT_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x522,rc)
213 #  define MULT_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x562,rc)
214 #  define MULT_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5e2,rc)
215 #  define MULT_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x7a2,rc)
216 #  define MULT_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x722,rc)
217 #  define MULT_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x762,rc)
218 #  define MULT_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7e2,rc)
219 #  define SQRTF(rb,rc)                  F_P(0x14,_R31_REGNO,rb,0x08a,rc)
220 #  define SQRTG(rb,rc)                  F_P(0x14,_R31_REGNO,rb,0x0aa,rc)
221 #  define SQRTS(rb,rc)                  F_P(0x14,_R31_REGNO,rb,0x08b,rc)
222 #  define SQRTS_C(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x00b,rc)
223 #  define SQRTS_M(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x04b,rc)
224 #  define SQRTS_D(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x0cb,rc)
225 #  define SQRTS_U(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x18b,rc)
226 #  define SQRTS_UC(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x10b,rc)
227 #  define SQRTS_UM(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x14b,rc)
228 #  define SQRTS_UD(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x1cb,rc)
229 #  define SQRTS_SU(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x58b,rc)
230 #  define SQRTS_SUC(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x50b,rc)
231 #  define SQRTS_SUM(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x54b,rc)
232 #  define SQRTS_SUD(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x5cb,rc)
233 #  define SQRTS_SUI(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x78b,rc)
234 #  define SQRTS_SUIC(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x70b,rc)
235 #  define SQRTS_SUIM(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x74b,rc)
236 #  define SQRTS_SUID(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x7cb,rc)
237 #  define SQRTT(rb,rc)                  F_P(0x14,_R31_REGNO,rb,0x0ab,rc)
238 #  define SQRTT_C(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x02b,rc)
239 #  define SQRTT_M(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x06b,rc)
240 #  define SQRTT_D(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x0eb,rc)
241 #  define SQRTT_U(rb,rc)                F_P(0x14,_R31_REGNO,rb,0x1ab,rc)
242 #  define SQRTT_UC(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x12b,rc)
243 #  define SQRTT_UM(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x16b,rc)
244 #  define SQRTT_UD(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x1eb,rc)
245 #  define SQRTT_SU(rb,rc)               F_P(0x14,_R31_REGNO,rb,0x5ab,rc)
246 #  define SQRTT_SUC(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x52b,rc)
247 #  define SQRTT_SUM(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x56b,rc)
248 #  define SQRTT_SUD(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x5eb,rc)
249 #  define SQRTT_SUI(rb,rc)              F_P(0x14,_R31_REGNO,rb,0x7ab,rc)
250 #  define SQRTT_SUIC(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x72b,rc)
251 #  define SQRTT_SUIM(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x76b,rc)
252 #  define SQRTT_SUID(rb,rc)             F_P(0x14,_R31_REGNO,rb,0x7eb,rc)
253 #  define STF(ra,rb,d)                  Mem(0x24,ra,rb,d)
254 #  define STG(ra,rb,d)                  Mem(0x25,ra,rb,d)
255 #  define STS(ra,rb,d)                  Mem(0x26,ra,rb,d)
256 #  define STT(ra,rb,d)                  Mem(0x27,ra,rb,d)
257 #  define SUBF(ra,rb,rc)                F_P(0x15,ra,rb,0x081,rc)
258 #  define SUBG(ra,rb,rc)                F_P(0x15,ra,rb,0x0a1,rc)
259 #  define SUBS(ra,rb,rc)                F_P(0x16,ra,rb,0x081,rc)
260 #  define SUBS_C(ra,rb,rc)              F_P(0x16,ra,rb,0x001,rc)
261 #  define SUBS_M(ra,rb,rc)              F_P(0x16,ra,rb,0x041,rc)
262 #  define SUBS_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0c1,rc)
263 #  define SUBS_U(ra,rb,rc)              F_P(0x16,ra,rb,0x181,rc)
264 #  define SUBS_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x101,rc)
265 #  define SUBS_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x141,rc)
266 #  define SUBS_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1c1,rc)
267 #  define SUBS_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x581,rc)
268 #  define SUBS_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x501,rc)
269 #  define SUBS_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x541,rc)
270 #  define SUBS_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5c1,rc)
271 #  define SUBS_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x781,rc)
272 #  define SUBS_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x701,rc)
273 #  define SUBS_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x741,rc)
274 #  define SUBS_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7c1,rc)
275 #  define SUBT(ra,rb,rc)                F_P(0x16,ra,rb,0x0a1,rc)
276 #  define SUBT_C(ra,rb,rc)              F_P(0x16,ra,rb,0x021,rc)
277 #  define SUBT_M(ra,rb,rc)              F_P(0x16,ra,rb,0x061,rc)
278 #  define SUBT_D(ra,rb,rc)              F_P(0x16,ra,rb,0x0e1,rc)
279 #  define SUBT_U(ra,rb,rc)              F_P(0x16,ra,rb,0x1a1,rc)
280 #  define SUBT_UC(ra,rb,rc)             F_P(0x16,ra,rb,0x121,rc)
281 #  define SUBT_UM(ra,rb,rc)             F_P(0x16,ra,rb,0x161,rc)
282 #  define SUBT_UD(ra,rb,rc)             F_P(0x16,ra,rb,0x1e1,rc)
283 #  define SUBT_SU(ra,rb,rc)             F_P(0x16,ra,rb,0x5a1,rc)
284 #  define SUBT_SUC(ra,rb,rc)            F_P(0x16,ra,rb,0x521,rc)
285 #  define SUBT_SUM(ra,rb,rc)            F_P(0x16,ra,rb,0x561,rc)
286 #  define SUBT_SUD(ra,rb,rc)            F_P(0x16,ra,rb,0x5e1,rc)
287 #  define SUBT_SUI(ra,rb,rc)            F_P(0x16,ra,rb,0x7a1,rc)
288 #  define SUBT_SUIC(ra,rb,rc)           F_P(0x16,ra,rb,0x721,rc)
289 #  define SUBT_SUIM(ra,rb,rc)           F_P(0x16,ra,rb,0x761,rc)
290 #  define SUBT_SUID(ra,rb,rc)           F_P(0x16,ra,rb,0x7e1,rc)
291 #  define FABS(ra,rc)                   CPYS(_R31_REGNO,ra,rc)
292 #  define FMOV(ra,rc)                   CPYS(ra,ra,rc)
293 #  define NEGF(ra,rc)                   SUBF(_R31_REGNO,ra,rc)
294 #  define NEGG(ra,rc)                   SUBG(_R31_REGNO,ra,rc)
295 #  define NEGS(ra,rc)                   SUBS(_R31_REGNO,ra,rc)
296 #  define NEGT(ra,rc)                   SUBT(_R31_REGNO,ra,rc)
297 #  define FNEGF(ra,rc)                  CPYSN(ra,ra,rc)
298 #  define FNEGG(ra,rc)                  CPYSN(ra,ra,rc)
299 #  define FNEGS(ra,rc)                  CPYSN(ra,ra,rc)
300 #  define FNEGT(ra,rc)                  CPYSN(ra,ra,rc)
301 #  define movr_f(r0,r1)                 movr_d(r0,r1)
302 #  define movr_d(r0,r1)                 _movr_d(_jit,r0,r1)
303 static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
304 #  define movi_f(r0,i0)                 _movi_f(_jit,r0,i0)
305 static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
306 #  define movi_w_f(r0, i0)              _movi_w_f(_jit, r0, i0)
307 static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
308 #  define movi_d(r0,i0)                 _movi_d(_jit,r0,i0)
309 static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
310 #  define movi_w_d(r0, i0)              _movi_w_d(_jit, r0, i0)
311 static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
312 #  define absr_f(r0,r1)                 FABS(r1,r0)
313 #  define absr_d(r0,r1)                 FABS(r1,r0)
314 #  define negr_f(r0,r1)                 FNEGS(r1,r0)
315 #  define negr_d(r0,r1)                 FNEGT(r1,r0)
316 #  define sqrtr_f(r0,r1)                _sqrtr_f(_jit,r0,r1)
317 static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t);
318 #  define fmar_f(r0,r1,r2,r3)           _fmar_f(_jit,r0,r1,r2,r3)
319 static void _fmar_f(jit_state_t*,
320                     jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
321 #  define fmsr_f(r0,r1,r2,r3)           _fmsr_f(_jit,r0,r1,r2,r3)
322 static void _fmsr_f(jit_state_t*,
323                     jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
324 #  define fnmar_f(r0,r1,r2,r3)          _fnmar_f(_jit,r0,r1,r2,r3)
325 static void _fnmar_f(jit_state_t*,
326                      jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
327 #  define fnmsr_f(r0,r1,r2,r3)          _fnmsr_f(_jit,r0,r1,r2,r3)
328 static void _fnmsr_f(jit_state_t*,
329                      jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
330 #  define sqrtr_d(r0,r1)                _sqrtr_d(_jit,r0,r1)
331 static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t);
332 #  define fmar_d(r0,r1,r2,r3)           _fmar_d(_jit,r0,r1,r2,r3)
333 static void _fmar_d(jit_state_t*,
334                     jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
335 #  define fmsr_d(r0,r1,r2,r3)           _fmsr_d(_jit,r0,r1,r2,r3)
336 static void _fmsr_d(jit_state_t*,
337                     jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
338 #  define fnmar_d(r0,r1,r2,r3)          _fnmar_d(_jit,r0,r1,r2,r3)
339 static void _fnmar_d(jit_state_t*,
340                      jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
341 #  define fnmsr_d(r0,r1,r2,r3)          _fnmsr_d(_jit,r0,r1,r2,r3)
342 static void _fnmsr_d(jit_state_t*,
343                      jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
344 #  define extr_f_d(r0,r1)               movr_d(r0,r1)
345 #  define extr_d_f(r0,r1)               movr_f(r0,r1)
346 #  define truncr_f_i(r0,r1)             truncr_d_i(r0,r1)
347 #  define truncr_f_l(r0,r1)             truncr_d_l(r0,r1)
348 #  define truncr_d_i(r0,r1)             truncr_d_l(r0,r1)
349 #  define truncr_d_l(r0,r1)             _truncr_d_l(_jit,r0,r1)
350 static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
351 #  define extr_f(r0,r1)                 _extr_f(_jit,r0,r1)
352 static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
353 #  define extr_d(r0,r1)                 _extr_d(_jit,r0,r1)
354 static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
355 #  define addr_f(r0,r1,r2)              _addr_f(_jit,r0,r1,r2)
356 static void _addr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
357 #  define addi_f(r0,r1,i0)              _addi_f(_jit,r0,r1,i0)
358 static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
359 #  define addr_d(r0,r1,r2)              _addr_d(_jit,r0,r1,r2)
360 static void _addr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
361 #  define addi_d(r0,r1,i0)              _addi_d(_jit,r0,r1,i0)
362 static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
363 #  define subr_f(r0,r1,r2)              _subr_f(_jit,r0,r1,r2)
364 static void _subr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
365 #  define subi_f(r0,r1,i0)              _subi_f(_jit,r0,r1,i0)
366 static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
367 #  define subr_d(r0,r1,r2)              _subr_d(_jit,r0,r1,r2)
368 static void _subr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
369 #  define subi_d(r0,r1,i0)              _subi_d(_jit,r0,r1,i0)
370 static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
371 #  define rsbr_f(r0, r1, r2)            subr_f(r0, r2, r1)
372 #  define rsbi_f(r0, r1, i0)            _rsbi_f(_jit, r0, r1, i0)
373 static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
374 #  define rsbr_d(r0, r1, r2)            subr_d(r0, r2, r1)
375 #  define rsbi_d(r0, r1, i0)            _rsbi_d(_jit, r0, r1, i0)
376 static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
377 #  define mulr_f(r0,r1,r2)              _mulr_f(_jit,r0,r1,r2)
378 static void _mulr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
379 #  define muli_f(r0,r1,i0)              _muli_f(_jit,r0,r1,i0)
380 static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
381 #  define mulr_d(r0,r1,r2)              _mulr_d(_jit,r0,r1,r2)
382 static void _mulr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
383 #  define muli_d(r0,r1,i0)              _muli_d(_jit,r0,r1,i0)
384 static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
385 #  define divr_f(r0,r1,r2)              _divr_f(_jit,r0,r1,r2)
386 static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
387 #  define divi_f(r0,r1,i0)              _divi_f(_jit,r0,r1,i0)
388 static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
389 #  define divr_d(r0,r1,r2)              _divr_d(_jit,r0,r1,r2)
390 static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
391 #  define divi_d(r0,r1,i0)              _divi_d(_jit,r0,r1,i0)
392 static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
393 #  define ltr_f(r0,r1,r2)               ltr_d(r0,r1,r2)
394 #  define ltr_d(r0,r1,r2)               _ltr_d(_jit,r0,r1,r2)
395 static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
396 #  define lti_f(r0,r1,i0)               _lti_f(_jit,r0,r1,i0)
397 static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
398 #  define lti_d(r0,r1,i0)               _lti_d(_jit,r0,r1,i0)
399 static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
400 #  define ler_f(r0,r1,r2)               ler_d(r0,r1,r2)
401 #  define ler_d(r0,r1,r2)               _ler_d(_jit,r0,r1,r2)
402 static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
403 #  define lei_f(r0,r1,i0)               _lei_f(_jit,r0,r1,i0)
404 static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
405 #  define lei_d(r0,r1,i0)               _lei_d(_jit,r0,r1,i0)
406 static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
407 #  define eqr_f(r0,r1,r2)               eqr_d(r0,r1,r2)
408 #  define eqr_d(r0,r1,r2)               _eqr_d(_jit,r0,r1,r2)
409 static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
410 #  define eqi_f(r0,r1,i0)               _eqi_f(_jit,r0,r1,i0)
411 static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
412 #  define eqi_d(r0,r1,i0)               _eqi_d(_jit,r0,r1,i0)
413 static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
414 #  define ger_f(r0,r1,r2)               ger_d(r0,r1,r2)
415 #  define ger_d(r0,r1,r2)               _ger_d(_jit,r0,r1,r2)
416 static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
417 #  define gei_f(r0,r1,i0)               _gei_f(_jit,r0,r1,i0)
418 static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
419 #  define gei_d(r0,r1,i0)               _gei_d(_jit,r0,r1,i0)
420 static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
421 #  define gtr_f(r0,r1,r2)               gtr_d(r0,r1,r2)
422 #  define gtr_d(r0,r1,r2)               _gtr_d(_jit,r0,r1,r2)
423 static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
424 #  define gti_f(r0,r1,i0)               _gti_f(_jit,r0,r1,i0)
425 static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_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_f(r0,r1,r2)               ner_d(r0,r1,r2)
429 #  define ner_d(r0,r1,r2)               _ner_d(_jit,r0,r1,r2)
430 static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
431 #  define nei_f(r0,r1,i0)               _nei_f(_jit,r0,r1,i0)
432 static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
433 #  define nei_d(r0,r1,i0)               _nei_d(_jit,r0,r1,i0)
434 static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
435 #  define unltr_f(r0,r1,r2)             unltr_d(r0,r1,r2)
436 #  define unltr_d(r0,r1,r2)             _unltr_d(_jit,r0,r1,r2)
437 static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
438 #  define unlti_f(r0,r1,i0)             _unlti_f(_jit,r0,r1,i0)
439 static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
440 #  define unlti_d(r0,r1,i0)             _unlti_d(_jit,r0,r1,i0)
441 static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
442 #  define unler_f(r0,r1,r2)             unler_d(r0,r1,r2)
443 #  define unler_d(r0,r1,r2)             _unler_d(_jit,r0,r1,r2)
444 static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
445 #  define unlei_f(r0,r1,i0)             _unlei_f(_jit,r0,r1,i0)
446 static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
447 #  define unlei_d(r0,r1,i0)             _unlei_d(_jit,r0,r1,i0)
448 static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
449 #  define uneqr_f(r0,r1,r2)             uneqr_d(r0,r1,r2)
450 #  define uneqr_d(r0,r1,r2)             _uneqr_d(_jit,r0,r1,r2)
451 static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
452 #  define uneqi_f(r0,r1,i0)             _uneqi_f(_jit,r0,r1,i0)
453 static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
454 #  define uneqi_d(r0,r1,i0)             _uneqi_d(_jit,r0,r1,i0)
455 static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
456 #  define unger_f(r0,r1,r2)             unger_d(r0,r1,r2)
457 #  define unger_d(r0,r1,r2)             _unger_d(_jit,r0,r1,r2)
458 static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
459 #  define ungei_f(r0,r1,i0)             _ungei_f(_jit,r0,r1,i0)
460 static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
461 #  define ungei_d(r0,r1,i0)             _ungei_d(_jit,r0,r1,i0)
462 static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
463 #  define ungtr_f(r0,r1,r2)             ungtr_d(r0,r1,r2)
464 #  define ungtr_d(r0,r1,r2)             _ungtr_d(_jit,r0,r1,r2)
465 static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
466 #  define ungti_f(r0,r1,i0)             _ungti_f(_jit,r0,r1,i0)
467 static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
468 #  define ungti_d(r0,r1,i0)             _ungti_d(_jit,r0,r1,i0)
469 static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
470 #  define ltgtr_f(r0,r1,r2)             ltgtr_d(r0,r1,r2)
471 #  define ltgtr_d(r0,r1,r2)             _ltgtr_d(_jit,r0,r1,r2)
472 static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
473 #  define ltgti_f(r0,r1,i0)             _ltgti_f(_jit,r0,r1,i0)
474 static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
475 #  define ltgti_d(r0,r1,i0)             _ltgti_d(_jit,r0,r1,i0)
476 static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
477 #  define ordr_f(r0,r1,r2)              ordr_d(r0,r1,r2)
478 #  define ordr_d(r0,r1,r2)              _ordr_d(_jit,r0,r1,r2)
479 static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
480 #  define ordi_f(r0,r1,i0)              _ordi_f(_jit,r0,r1,i0)
481 static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
482 #  define ordi_d(r0,r1,i0)              _ordi_d(_jit,r0,r1,i0)
483 static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
484 #  define unordr_f(r0,r1,r2)            unordr_d(r0,r1,r2)
485 #  define unordr_d(r0,r1,r2)            _unordr_d(_jit,r0,r1,r2)
486 static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
487 #  define unordi_f(r0,r1,i0)            _unordi_f(_jit,r0,r1,i0)
488 static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
489 #  define unordi_d(r0,r1,i0)            _unordi_d(_jit,r0,r1,i0)
490 static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
491 #  define bltr_f(i0,r0,r1)              bltr_d(i0,r0,r1)
492 #  define bltr_d(i0,r0,r1)              _bltr_d(_jit,i0,r0,r1)
493 static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
494 #  define blti_f(i0,r0,i1)              _blti_f(_jit,i0,r0,i1)
495 static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
496 #  define blti_d(i0,r0,i1)              _blti_d(_jit,i0,r0,i1)
497 static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
498 #  define bler_f(i0,r0,r1)              bler_d(i0,r0,r1)
499 #  define bler_d(i0,r0,r1)              _bler_d(_jit,i0,r0,r1)
500 static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
501 #  define blei_f(i0,r0,i1)              _blei_f(_jit,i0,r0,i1)
502 static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
503 #  define blei_d(i0,r0,i1)              _blei_d(_jit,i0,r0,i1)
504 static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
505 #  define beqr_f(i0,r0,r1)              beqr_d(i0,r0,r1)
506 #  define beqr_d(i0,r0,r1)              _beqr_d(_jit,i0,r0,r1)
507 static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
508 #  define beqi_f(i0,r0,i1)              _beqi_f(_jit,i0,r0,i1)
509 static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
510 #  define beqi_d(i0,r0,i1)              _beqi_d(_jit,i0,r0,i1)
511 static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
512 #  define bger_f(i0,r0,r1)              bger_d(i0,r0,r1)
513 #  define bger_d(i0,r0,r1)              _bger_d(_jit,i0,r0,r1)
514 static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
515 #  define bgei_f(i0,r0,i1)              _bgei_f(_jit,i0,r0,i1)
516 static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
517 #  define bgei_d(i0,r0,i1)              _bgei_d(_jit,i0,r0,i1)
518 static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
519 #  define bgtr_f(i0,r0,r1)              bgtr_d(i0,r0,r1)
520 #  define bgtr_d(i0,r0,r1)              _bgtr_d(_jit,i0,r0,r1)
521 static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
522 #  define bgti_f(i0,r0,i1)              _bgti_f(_jit,i0,r0,i1)
523 static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
524 #  define bgti_d(i0,r0,i1)              _bgti_d(_jit,i0,r0,i1)
525 static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
526 #  define bner_f(i0,r0,r1)              bner_d(i0,r0,r1)
527 #  define bner_d(i0,r0,r1)              _bner_d(_jit,i0,r0,r1)
528 static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
529 #  define bnei_f(i0,r0,i1)              _bnei_f(_jit,i0,r0,i1)
530 static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
531 #  define bnei_d(i0,r0,i1)              _bnei_d(_jit,i0,r0,i1)
532 static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
533 #  define bunltr_f(i0,r0,r1)            bunltr_d(i0,r0,r1)
534 #  define bunltr_d(i0,r0,r1)            _bunltr_d(_jit,i0,r0,r1)
535 static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
536 #  define bunlti_f(i0,r0,i1)            _bunlti_f(_jit,i0,r0,i1)
537 static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
538 #  define bunlti_d(i0,r0,i1)            _bunlti_d(_jit,i0,r0,i1)
539 static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
540 #  define bunler_f(i0,r0,r1)            bunler_d(i0,r0,r1)
541 #  define bunler_d(i0,r0,r1)            _bunler_d(_jit,i0,r0,r1)
542 static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
543 #  define bunlei_f(i0,r0,i1)            _bunlei_f(_jit,i0,r0,i1)
544 static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
545 #  define bunlei_d(i0,r0,i1)            _bunlei_d(_jit,i0,r0,i1)
546 static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
547 #  define buneqr_f(i0,r0,r1)            buneqr_d(i0,r0,r1)
548 #  define buneqr_d(i0,r0,r1)            _buneqr_d(_jit,i0,r0,r1)
549 static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
550 #  define buneqi_f(i0,r0,i1)            _buneqi_f(_jit,i0,r0,i1)
551 static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
552 #  define buneqi_d(i0,r0,i1)            _buneqi_d(_jit,i0,r0,i1)
553 static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
554 #  define bunger_f(i0,r0,r1)            bunger_d(i0,r0,r1)
555 #  define bunger_d(i0,r0,r1)            _bunger_d(_jit,i0,r0,r1)
556 static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
557 #  define bungei_f(i0,r0,i1)            _bungei_f(_jit,i0,r0,i1)
558 static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
559 #  define bungei_d(i0,r0,i1)            _bungei_d(_jit,i0,r0,i1)
560 static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
561 #  define bungtr_f(i0,r0,r1)            bungtr_d(i0,r0,r1)
562 #  define bungtr_d(i0,r0,r1)            _bungtr_d(_jit,i0,r0,r1)
563 static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
564 #  define bungti_f(i0,r0,i1)            _bungti_f(_jit,i0,r0,i1)
565 static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
566 #  define bungti_d(i0,r0,i1)            _bungti_d(_jit,i0,r0,i1)
567 static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
568 #  define bltgtr_f(i0,r0,r1)            bltgtr_d(i0,r0,r1)
569 #  define bltgtr_d(i0,r0,r1)            _bltgtr_d(_jit,i0,r0,r1)
570 static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
571 #  define bltgti_f(i0,r0,i1)            _bltgti_f(_jit,i0,r0,i1)
572 static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
573 #  define bltgti_d(i0,r0,i1)            _bltgti_d(_jit,i0,r0,i1)
574 static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
575 #  define bordr_f(i0,r0,r1)             bordr_d(i0,r0,r1)
576 #  define bordr_d(i0,r0,r1)             _bordr_d(_jit,i0,r0,r1)
577 static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
578 #  define bordi_f(i0,r0,i1)             _bordi_f(_jit,i0,r0,i1)
579 static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
580 #  define bordi_d(i0,r0,i1)             _bordi_d(_jit,i0,r0,i1)
581 static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
582 #  define bunordr_f(i0,r0,r1)           bunordr_d(i0,r0,r1)
583 #  define bunordr_d(i0,r0,r1)           _bunordr_d(_jit,i0,r0,r1)
584 static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
585 #  define bunordi_f(i0,r0,i1)           _bunordi_f(_jit,i0,r0,i1)
586 static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
587 #  define bunordi_d(i0,r0,i1)           _bunordi_d(_jit,i0,r0,i1)
588 static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
589 #  define ldr_f(r0,r1)                  LDS(r0,r1,0)
590 #  define ldi_f(r0,i0)                  _ldi_f(_jit,r0,i0)
591 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
592 #  define ldr_d(r0,r1)                  LDT(r0,r1,0)
593 #  define ldi_d(r0,i0)                  _ldi_d(_jit,r0,i0)
594 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
595 #  define ldxr_f(r0,r1,r2)              _ldxr_f(_jit,r0,r1,r2)
596 static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
597 #  define ldxi_f(r0,r1,i0)              _ldxi_f(_jit,r0,r1,i0)
598 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
599 #  define ldxr_d(r0,r1,r2)              _ldxr_d(_jit,r0,r1,r2)
600 static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
601 #  define ldxi_d(r0,r1,i0)              _ldxi_d(_jit,r0,r1,i0)
602 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
603 #  define str_f(r0,r1)                  STS(r1,r0,0)
604 #  define sti_f(i0,r0)                  _sti_f(_jit,i0,r0)
605 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
606 #  define str_d(r0,r1)                  STT(r1,r0,0)
607 #  define sti_d(i0,r0)                  _sti_d(_jit,i0,r0)
608 static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
609 #  define stxr_f(r0,r1,r2)              _stxr_f(_jit,r0,r1,r2)
610 static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
611 #  define stxi_f(i0,r0,r1)              _stxi_f(_jit,i0,r0,r1)
612 static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
613 #  define stxr_d(r0,r1,r2)              _stxr_d(_jit,r0,r1,r2)
614 static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
615 #  define stxi_d(i0,r0,r1)              _stxi_d(_jit,i0,r0,r1)
616 static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
617 #  define vaarg_d(r0, r1)               _vaarg_d(_jit, r0, r1)
618 static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
619 #endif
620
621 #if CODE
622 #  define fpr_opi(name, type, size)                                     \
623 static void                                                             \
624 _##name##i_##type(jit_state_t *_jit,                                    \
625                   jit_int32_t r0, jit_int32_t r1,                       \
626                   jit_float##size##_t *i0)                              \
627 {                                                                       \
628     jit_int32_t         reg = jit_get_reg(jit_class_fpr);               \
629     movi_##type(rn(reg), i0);                                           \
630     name##r_##type(r0, r1, rn(reg));                                    \
631     jit_unget_reg(reg);                                                 \
632 }
633 #  define fpr_bopi(name, type, size)                                    \
634 static jit_word_t                                                       \
635 _b##name##i_##type(jit_state_t *_jit,                                   \
636                   jit_word_t i0, jit_int32_t r0,                        \
637                   jit_float##size##_t *i1)                              \
638 {                                                                       \
639     jit_word_t          word;                                           \
640     jit_int32_t         reg = jit_get_reg(jit_class_fpr|jit_class_nospill);\
641     movi_##type(rn(reg), i1);                                           \
642     word = b##name##r_##type(i0, r0, rn(reg));                          \
643     jit_unget_reg(reg);                                                 \
644     return (word);                                                      \
645 }
646 #  define fopi(name)                    fpr_opi(name, f, 32)
647 #  define fbopi(name)                   fpr_bopi(name, f, 32)
648 #  define dopi(name)                    fpr_opi(name, d, 64)
649 #  define dbopi(name)                   fpr_bopi(name, d, 64)
650
651 static void
652 _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
653 {
654     if (r0 != r1)
655         FMOV(r1, r0);
656 }
657
658 static void
659 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
660 {
661     union {
662         jit_int32_t      i;
663         jit_float32_t    f;
664     } data;
665     jit_int32_t          reg;
666
667     if (_jitc->no_data) {
668         data.f = *i0;
669         reg = jit_get_reg(jit_class_gpr);
670         movi(rn(reg), data.i & 0xffffffff);
671         stxi_i(-8, _FP_REGNO, rn(reg));
672         jit_unget_reg(reg);
673         ldxi_f(r0, _FP_REGNO, -8);
674     }
675     else
676         ldi_f(r0, (jit_word_t)i0);
677 }
678
679 static void
680 _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
681 {
682     jit_int32_t         reg;
683     reg = jit_get_reg(jit_class_gpr);
684     movi(rn(reg), i0);
685     stxi_i(-8, _FP_REGNO, rn(reg));
686     jit_unget_reg(reg);
687     ldxi_f(r0, _FP_REGNO, -8);
688 }
689
690 static void
691 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
692 {
693     union {
694         jit_word_t       w;
695         jit_float64_t    d;
696     } data;
697     jit_int32_t          reg;
698
699     if (_jitc->no_data) {
700         data.d = *i0;
701         reg = jit_get_reg(jit_class_gpr);
702         movi(rn(reg), data.w);
703         stxi_l(-8, _FP_REGNO, rn(reg));
704         jit_unget_reg(reg);
705         ldxi_d(r0, _FP_REGNO, -8);
706     }
707     else
708         ldi_d(r0, (jit_word_t)i0);
709 }
710
711 static void
712 _movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
713 {
714     jit_int32_t         reg;
715     reg = jit_get_reg(jit_class_gpr);
716     movi(rn(reg), i0);
717     stxi(-8, _FP_REGNO, rn(reg));
718     jit_unget_reg(reg);
719     ldxi_d(r0, _FP_REGNO, -8);
720 }
721
722 static void
723 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
724 {
725     jit_int32_t         reg;
726     reg = jit_get_reg(jit_class_fpr);
727     CVTTQ_SVC(r1, rn(reg));
728     TRAPB();
729     stxi_d(-8, _FP_REGNO, rn(reg));
730     ldxi(r0, _FP_REGNO, -8);
731     jit_unget_reg(reg);
732 }
733
734 static void
735 _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
736 {
737     SQRTS_SU(r1, r0);
738     TRAPB();
739 }
740
741
742 static void
743 _fmar_f(jit_state_t *_jit,
744         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
745 {
746     jit_int32_t         t0;
747     if (r0 != r3) {
748         mulr_f(r0, r1, r2);
749         addr_f(r0, r0, r3);
750     }
751     else {
752         t0 = jit_get_reg(jit_class_fpr);
753         mulr_f(rn(t0), r1, r2);
754         addr_f(r0, rn(t0), r3);
755         jit_unget_reg(t0);
756     }
757 }
758
759 static void
760 _fmsr_f(jit_state_t *_jit,
761         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
762 {
763     jit_int32_t         t0;
764     if (r0 != r3) {
765         mulr_f(r0, r1, r2);
766         subr_f(r0, r0, r3);
767     }
768     else {
769         t0 = jit_get_reg(jit_class_fpr);
770         mulr_f(rn(t0), r1, r2);
771         subr_f(r0, rn(t0), r3);
772         jit_unget_reg(t0);
773     }
774 }
775
776 static void
777 _fnmar_f(jit_state_t *_jit,
778         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
779 {
780     jit_int32_t         t0;
781     t0 = jit_get_reg(jit_class_fpr);
782     negr_f(rn(t0), r1);
783     mulr_f(rn(t0), rn(t0), r2);
784     subr_f(r0, rn(t0), r3);
785     jit_unget_reg(t0);
786 }
787
788 static void
789 _fnmsr_f(jit_state_t *_jit,
790         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
791 {
792     jit_int32_t         t0;
793     t0 = jit_get_reg(jit_class_fpr);
794     negr_f(rn(t0), r1);
795     mulr_f(rn(t0), rn(t0), r2);
796     addr_f(r0, rn(t0), r3);
797     jit_unget_reg(t0);
798 }
799
800 static void
801 _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
802 {
803     SQRTT_SU(r1, r0);
804     TRAPB();
805 }
806
807 static void
808 _fmar_d(jit_state_t *_jit,
809         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
810 {
811     jit_int32_t         t0;
812     if (r0 != r3) {
813         mulr_d(r0, r1, r2);
814         addr_d(r0, r0, r3);
815     }
816     else {
817         t0 = jit_get_reg(jit_class_fpr);
818         mulr_d(rn(t0), r1, r2);
819         addr_d(r0, rn(t0), r3);
820         jit_unget_reg(t0);
821     }
822 }
823
824 static void
825 _fmsr_d(jit_state_t *_jit,
826         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
827 {
828     jit_int32_t         t0;
829     if (r0 != r3) {
830         mulr_d(r0, r1, r2);
831         subr_d(r0, r0, r3);
832     }
833     else {
834         t0 = jit_get_reg(jit_class_fpr);
835         mulr_d(rn(t0), r1, r2);
836         subr_d(r0, rn(t0), r3);
837         jit_unget_reg(t0);
838     }
839 }
840
841 static void
842 _fnmar_d(jit_state_t *_jit,
843         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
844 {
845     jit_int32_t         t0;
846     t0 = jit_get_reg(jit_class_fpr);
847     negr_d(rn(t0), r1);
848     mulr_d(rn(t0), rn(t0), r2);
849     subr_d(r0, rn(t0), r3);
850     jit_unget_reg(t0);
851 }
852
853 static void
854 _fnmsr_d(jit_state_t *_jit,
855         jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
856 {
857     jit_int32_t         t0;
858     t0 = jit_get_reg(jit_class_fpr);
859     negr_d(rn(t0), r1);
860     mulr_d(rn(t0), rn(t0), r2);
861     addr_d(r0, rn(t0), r3);
862     jit_unget_reg(t0);
863 }
864
865 static void
866 _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
867 {
868     stxi_l(-8, _FP_REGNO, r1);
869     ldxi_d(r0, _FP_REGNO, -8);
870     CVTQS(r0, r0);
871 }
872
873 static void
874 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
875 {
876     stxi_l(-8, _FP_REGNO, r1);
877     ldxi_d(r0, _FP_REGNO, -8);
878     CVTQT(r0, r0);
879 }
880
881 static void
882 _addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
883 {
884     ADDS_SU(r1, r2, r0);
885     TRAPB();
886 }
887 fopi(add)
888
889 static void
890 _addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
891 {
892     ADDT_SU(r1, r2, r0);
893     TRAPB();
894 }
895 dopi(add)
896
897 static void
898 _subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
899 {
900     SUBS_SU(r1, r2, r0);
901     TRAPB();
902 }
903 fopi(sub)
904 fopi(rsb)
905
906 static void
907 _subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
908 {
909     SUBT_SU(r1, r2, r0);
910     TRAPB();
911 }
912 dopi(sub)
913 dopi(rsb)
914
915 static void
916 _mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
917 {
918     MULS_SU(r1, r2, r0);
919     TRAPB();
920 }
921 fopi(mul)
922
923 static void
924 _mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
925 {
926     MULT_SU(r1, r2, r0);
927     TRAPB();
928 }
929 dopi(mul)
930
931 static void
932 _divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
933 {
934     DIVS_SU(r1, r2, r0);
935     TRAPB();
936 }
937 fopi(div)
938
939 static void
940 _divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
941 {
942     DIVT_SU(r1, r2, r0);
943     TRAPB();
944 }
945 dopi(div)
946
947 static void
948 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
949 {
950     jit_int32_t         reg;
951     jit_word_t          v, w;
952     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
953     movi(r0, 0);
954     CMPTUN_SU(r1, r2, rn(reg));
955     TRAPB();
956     v = _jit->pc.w;
957     FBNE(rn(reg), 4);
958     CMPTLT_SU(r1, r2, rn(reg));
959     TRAPB();
960     w = _jit->pc.w;
961     FBEQ(rn(reg), 1);
962     movi(r0, 1);
963     patch_at(v, _jit->pc.w);
964     patch_at(w, _jit->pc.w);
965     jit_unget_reg(reg);
966 }
967 fopi(lt);
968 dopi(lt);
969
970 static void
971 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
972 {
973     jit_int32_t         reg;
974     jit_word_t          v, w;
975     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
976     movi(r0, 0);
977     CMPTUN_SU(r1, r2, rn(reg));
978     TRAPB();
979     v = _jit->pc.w;
980     FBNE(rn(reg), 4);
981     CMPTLE_SU(r1, r2, rn(reg));
982     TRAPB();
983     w = _jit->pc.w;
984     FBEQ(rn(reg), 1);
985     movi(r0, 1);
986     patch_at(v, _jit->pc.w);
987     patch_at(w, _jit->pc.w);
988     jit_unget_reg(reg);
989 }
990 fopi(le);
991 dopi(le);
992
993 static void
994 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
995 {
996     jit_int32_t         reg;
997     jit_word_t          v, w;
998     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
999     movi(r0, 0);
1000     CMPTUN_SU(r1, r2, rn(reg));
1001     TRAPB();
1002     v = _jit->pc.w;
1003     FBNE(rn(reg), 4);
1004     CMPTEQ_SU(r1, r2, rn(reg));
1005     TRAPB();
1006     w = _jit->pc.w;
1007     FBEQ(rn(reg), 1);
1008     movi(r0, 1);
1009     patch_at(v, _jit->pc.w);
1010     patch_at(w, _jit->pc.w);
1011     jit_unget_reg(reg);
1012 }
1013 fopi(eq);
1014 dopi(eq);
1015
1016 static void
1017 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1018 {
1019     jit_int32_t         reg;
1020     jit_word_t          v, w;
1021     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1022     movi(r0, 0);
1023     CMPTUN_SU(r1, r2, rn(reg));
1024     TRAPB();
1025     v = _jit->pc.w;
1026     FBNE(rn(reg), 4);
1027     CMPTLT_SU(r1, r2, rn(reg));
1028     TRAPB();
1029     w = _jit->pc.w;
1030     FBNE(rn(reg), 1);
1031     movi(r0, 1);
1032     patch_at(v, _jit->pc.w);
1033     patch_at(w, _jit->pc.w);
1034     jit_unget_reg(reg);
1035 }
1036 fopi(ge);
1037 dopi(ge);
1038
1039 static void
1040 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1041 {
1042     jit_int32_t         reg;
1043     jit_word_t          v, w;
1044     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1045     movi(r0, 0);
1046     CMPTUN_SU(r1, r2, rn(reg));
1047     TRAPB();
1048     v = _jit->pc.w;
1049     FBNE(rn(reg), 4);
1050     CMPTLE_SU(r1, r2, rn(reg));
1051     TRAPB();
1052     w = _jit->pc.w;
1053     FBNE(rn(reg), 1);
1054     movi(r0, 1);
1055     patch_at(v, _jit->pc.w);
1056     patch_at(w, _jit->pc.w);
1057     jit_unget_reg(reg);
1058 }
1059 fopi(gt);
1060 dopi(gt);
1061
1062 static void
1063 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1064 {
1065     jit_int32_t         reg;
1066     jit_word_t          v, w;
1067     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1068     movi(r0, 1);
1069     CMPTUN_SU(r1, r2, rn(reg));
1070     TRAPB();
1071     v = _jit->pc.w;
1072     FBNE(rn(reg), 3);
1073     CMPTEQ_SU(r1, r2, rn(reg));
1074     TRAPB();
1075     w = _jit->pc.w;
1076     FBEQ(rn(reg), 1);
1077     movi(r0, 0);
1078     patch_at(v, _jit->pc.w);
1079     patch_at(w, _jit->pc.w);
1080     jit_unget_reg(reg);
1081 }
1082 fopi(ne);
1083 dopi(ne);
1084
1085 static void
1086 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1087 {
1088     jit_int32_t         reg;
1089     jit_word_t          v, w;
1090     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1091     movi(r0, 1);
1092     CMPTUN_SU(r1, r2, rn(reg));
1093     TRAPB();
1094     v = _jit->pc.w;
1095     FBNE(rn(reg), 4);
1096     CMPTLT_SU(r1, r2, rn(reg));
1097     TRAPB();
1098     w = _jit->pc.w;
1099     FBNE(rn(reg), 1);
1100     movi(r0, 0);
1101     patch_at(v, _jit->pc.w);
1102     patch_at(w, _jit->pc.w);
1103     jit_unget_reg(reg);
1104 }
1105 fopi(unlt);
1106 dopi(unlt);
1107
1108 static void
1109 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1110 {
1111     jit_int32_t         reg;
1112     jit_word_t          v, w;
1113     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1114     movi(r0, 1);
1115     CMPTUN_SU(r1, r2, rn(reg));
1116     TRAPB();
1117     v = _jit->pc.w;
1118     FBNE(rn(reg), 4);
1119     CMPTLE_SU(r1, r2, rn(reg));
1120     TRAPB();
1121     w = _jit->pc.w;
1122     FBNE(rn(reg), 1);
1123     movi(r0, 0);
1124     patch_at(v, _jit->pc.w);
1125     patch_at(w, _jit->pc.w);
1126     jit_unget_reg(reg);
1127 }
1128 fopi(unle);
1129 dopi(unle);
1130
1131 static void
1132 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1133 {
1134     jit_int32_t         reg;
1135     jit_word_t          v, w;
1136     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1137     movi(r0, 1);
1138     CMPTUN_SU(r1, r2, rn(reg));
1139     TRAPB();
1140     v = _jit->pc.w;
1141     FBNE(rn(reg), 4);
1142     CMPTEQ_SU(r1, r2, rn(reg));
1143     TRAPB();
1144     w = _jit->pc.w;
1145     FBNE(rn(reg), 1);
1146     movi(r0, 0);
1147     patch_at(v, _jit->pc.w);
1148     patch_at(w, _jit->pc.w);
1149     jit_unget_reg(reg);
1150 }
1151 fopi(uneq);
1152 dopi(uneq);
1153
1154 static void
1155 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1156 {
1157     jit_int32_t         reg;
1158     jit_word_t          v, w;
1159     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1160     movi(r0, 1);
1161     CMPTUN_SU(r1, r2, rn(reg));
1162     TRAPB();
1163     v = _jit->pc.w;
1164     FBNE(rn(reg), 4);
1165     CMPTLT_SU(r1, r2, rn(reg));
1166     TRAPB();
1167     w = _jit->pc.w;
1168     FBEQ(rn(reg), 1);
1169     movi(r0, 0);
1170     patch_at(v, _jit->pc.w);
1171     patch_at(w, _jit->pc.w);
1172     jit_unget_reg(reg);
1173 }
1174 fopi(unge);
1175 dopi(unge);
1176
1177 static void
1178 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1179 {
1180     jit_int32_t         reg;
1181     jit_word_t          v, w;
1182     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1183     movi(r0, 1);
1184     CMPTUN_SU(r1, r2, rn(reg));
1185     TRAPB();
1186     v = _jit->pc.w;
1187     FBNE(rn(reg), 4);
1188     CMPTLE_SU(r1, r2, rn(reg));
1189     TRAPB();
1190     w = _jit->pc.w;
1191     FBEQ(rn(reg), 1);
1192     movi(r0, 0);
1193     patch_at(v, _jit->pc.w);
1194     patch_at(w, _jit->pc.w);
1195     jit_unget_reg(reg);
1196 }
1197 fopi(ungt);
1198 dopi(ungt);
1199
1200 static void
1201 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1202 {
1203     jit_int32_t         reg;
1204     jit_word_t          v, w;
1205     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1206     movi(r0, 0);
1207     CMPTUN_SU(r1, r2, rn(reg));
1208     TRAPB();
1209     v = _jit->pc.w;
1210     FBNE(rn(reg), 4);
1211     CMPTEQ_SU(r1, r2, rn(reg));
1212     TRAPB();
1213     w = _jit->pc.w;
1214     FBNE(rn(reg), 1);
1215     movi(r0, 1);
1216     patch_at(v, _jit->pc.w);
1217     patch_at(w, _jit->pc.w);
1218     jit_unget_reg(reg);
1219 }
1220 fopi(ltgt);
1221 dopi(ltgt);
1222
1223 static void
1224 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1225 {
1226     jit_word_t          w;
1227     jit_int32_t         reg;
1228     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1229     movi(r0, 0);
1230     CMPTUN_SU(r1, r2, rn(reg));
1231     TRAPB();
1232     w = _jit->pc.w;
1233     FBNE(rn(reg), 1);
1234     movi(r0, 1);
1235     patch_at(w, _jit->pc.w);
1236     jit_unget_reg(reg);
1237 }
1238 fopi(ord);
1239 dopi(ord);
1240
1241 static void
1242 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1243 {
1244     jit_word_t          w;
1245     jit_int32_t         reg;
1246     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1247     movi(r0, 1);
1248     CMPTUN_SU(r1, r2, rn(reg));
1249     TRAPB();
1250     w = _jit->pc.w;
1251     FBNE(rn(reg), 1);
1252     jit_unget_reg(reg);
1253     movi(r0, 0);
1254     patch_at(w, _jit->pc.w);
1255 }
1256 fopi(unord);
1257 dopi(unord);
1258
1259 static jit_word_t
1260 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1261 {
1262     jit_int32_t         reg;
1263     jit_word_t          v, w;
1264     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1265     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1266     TRAPB();
1267     v = _jit->pc.w;
1268     FBNE(rn(reg), 3);
1269     CMPTLT_SU(r0, r1, rn(reg));         /* lt satisfy condition */
1270     TRAPB();
1271     w = _jit->pc.w;
1272     FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1273     patch_at(v, _jit->pc.w);
1274     jit_unget_reg(reg);
1275     return (w);
1276 }
1277 fbopi(lt);
1278 dbopi(lt);
1279
1280 static jit_word_t
1281 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1282 {
1283     jit_int32_t         reg;
1284     jit_word_t          v, w;
1285     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1286     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1287     TRAPB();
1288     v = _jit->pc.w;
1289     FBNE(rn(reg), 3);
1290     CMPTLE_SU(r0, r1, rn(reg));         /* le satisfy condition */
1291     TRAPB();
1292     w = _jit->pc.w;
1293     FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1294     patch_at(v, _jit->pc.w);
1295     jit_unget_reg(reg);
1296     return (w);
1297 }
1298 fbopi(le);
1299 dbopi(le);
1300
1301 static jit_word_t
1302 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1303 {
1304     jit_int32_t         reg;
1305     jit_word_t          v, w;
1306     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1307     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1308     TRAPB();
1309     v = _jit->pc.w;
1310     FBNE(rn(reg), 3);
1311     CMPTEQ_SU(r0, r1, rn(reg));         /* eq satisfy condition */
1312     TRAPB();
1313     w = _jit->pc.w;
1314     FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1315     patch_at(v, _jit->pc.w);
1316     jit_unget_reg(reg);
1317     return (w);
1318 }
1319 fbopi(eq);
1320 dbopi(eq);
1321
1322 static jit_word_t
1323 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1324 {
1325     jit_int32_t         reg;
1326     jit_word_t          v, w;
1327     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1328     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1329     TRAPB();
1330     v = _jit->pc.w;
1331     FBNE(rn(reg), 3);
1332     CMPTLT_SU(r0, r1, rn(reg));         /* ge satisfy condition */
1333     TRAPB();
1334     w = _jit->pc.w;
1335     FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1336     patch_at(v, _jit->pc.w);
1337     jit_unget_reg(reg);
1338     return (w);
1339 }
1340 fbopi(ge);
1341 dbopi(ge);
1342
1343 static jit_word_t
1344 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1345 {
1346     jit_int32_t         reg;
1347     jit_word_t          v, w;
1348     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1349     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1350     TRAPB();
1351     v = _jit->pc.w;
1352     FBNE(rn(reg), 3);
1353     CMPTLE_SU(r0, r1, rn(reg));         /* gt satisfy condition */
1354     TRAPB();
1355     w = _jit->pc.w;
1356     FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1357     patch_at(v, _jit->pc.w);
1358     jit_unget_reg(reg);
1359     return (w);
1360 }
1361 fbopi(gt);
1362 dbopi(gt);
1363
1364 static jit_word_t
1365 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1366 {
1367     jit_int32_t         reg;
1368     jit_word_t          u, v, w;
1369     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1370     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1371     TRAPB();
1372     u = _jit->pc.w;
1373     FBNE(rn(reg), 4);
1374     CMPTEQ_SU(r0, r1, rn(reg));         /* ne satisfy condition */
1375     TRAPB();
1376     v = _jit->pc.w;
1377     FBNE(rn(reg), 1);
1378     patch_at(u, _jit->pc.w);
1379     w = _jit->pc.w;
1380     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1381     patch_at(v, _jit->pc.w);
1382     jit_unget_reg(reg);
1383     return (w);
1384 }
1385 fbopi(ne);
1386 dbopi(ne);
1387
1388 static jit_word_t
1389 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1390 {
1391     jit_int32_t         reg;
1392     jit_word_t          u, v, w;
1393     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1394     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1395     TRAPB();
1396     u = _jit->pc.w;
1397     FBNE(rn(reg), 4);
1398     CMPTLT_SU(r0, r1, rn(reg));         /* lt satisfy condition */
1399     TRAPB();
1400     v = _jit->pc.w;
1401     FBEQ(rn(reg), 1);
1402     w = _jit->pc.w;
1403     patch_at(u, _jit->pc.w);
1404     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1405     patch_at(v, _jit->pc.w);
1406     jit_unget_reg(reg);
1407     return (w);
1408 }
1409 fbopi(unlt);
1410 dbopi(unlt);
1411
1412 static jit_word_t
1413 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1414 {
1415     jit_int32_t         reg;
1416     jit_word_t          u, v, w;
1417     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1418     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1419     TRAPB();
1420     u = _jit->pc.w;
1421     FBNE(rn(reg), 4);
1422     CMPTLE_SU(r0, r1, rn(reg));         /* le satisfy condition */
1423     TRAPB();
1424     v = _jit->pc.w;
1425     FBEQ(rn(reg), 1);
1426     w = _jit->pc.w;
1427     patch_at(u, _jit->pc.w);
1428     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1429     patch_at(v, _jit->pc.w);
1430     jit_unget_reg(reg);
1431     return (w);
1432 }
1433 fbopi(unle);
1434 dbopi(unle);
1435
1436 static jit_word_t
1437 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1438 {
1439     jit_int32_t         reg;
1440     jit_word_t          u, v, w;
1441     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1442     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1443     TRAPB();
1444     u = _jit->pc.w;
1445     FBNE(rn(reg), 4);
1446     CMPTEQ_SU(r0, r1, rn(reg));         /* eq satisfy condition */
1447     TRAPB();
1448     v = _jit->pc.w;
1449     FBEQ(rn(reg), 1);
1450     w = _jit->pc.w;
1451     patch_at(u, _jit->pc.w);
1452     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1453     patch_at(v, _jit->pc.w);
1454     jit_unget_reg(reg);
1455     return (w);
1456 }
1457 fbopi(uneq);
1458 dbopi(uneq);
1459
1460 static jit_word_t
1461 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1462 {
1463     jit_int32_t         reg;
1464     jit_word_t          u, v, w;
1465     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1466     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1467     TRAPB();
1468     u = _jit->pc.w;
1469     FBNE(rn(reg), 4);
1470     CMPTLT_SU(r0, r1, rn(reg));         /* ge satisfy condition */
1471     TRAPB();
1472     v = _jit->pc.w;
1473     FBNE(rn(reg), 1);
1474     w = _jit->pc.w;
1475     patch_at(u, _jit->pc.w);
1476     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1477     patch_at(v, _jit->pc.w);
1478     jit_unget_reg(reg);
1479     return (w);
1480 }
1481 fbopi(unge);
1482 dbopi(unge);
1483
1484 static jit_word_t
1485 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1486 {
1487     jit_int32_t         reg;
1488     jit_word_t          u, v, w;
1489     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1490     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1491     TRAPB();
1492     u = _jit->pc.w;
1493     FBNE(rn(reg), 4);
1494     CMPTLE_SU(r0, r1, rn(reg));         /* gt does satisfy condition */
1495     TRAPB();
1496     v = _jit->pc.w;
1497     FBNE(rn(reg), 1);
1498     w = _jit->pc.w;
1499     patch_at(u, _jit->pc.w);
1500     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1501     patch_at(v, _jit->pc.w);
1502     jit_unget_reg(reg);
1503     return (w);
1504 }
1505 fbopi(ungt);
1506 dbopi(ungt);
1507
1508 static jit_word_t
1509 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1510 {
1511     jit_word_t          u, v, w;
1512     jit_int32_t         reg;
1513     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1514     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1515     TRAPB();
1516     u = _jit->pc.w;
1517     FBNE(rn(reg), 4);
1518     CMPTEQ_SU(r1, r0, rn(reg));
1519     TRAPB();
1520     v = _jit->pc.w;                     /* eq does not satisfy condition */
1521     FBNE(rn(reg), 1);
1522     w = _jit->pc.w;
1523     BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1524     patch_at(u, _jit->pc.w);
1525     patch_at(v, _jit->pc.w);
1526     jit_unget_reg(reg);
1527     return (w);
1528 }
1529 fbopi(ltgt);
1530 dbopi(ltgt);
1531
1532 static jit_word_t
1533 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1534 {
1535     jit_word_t          w;
1536     jit_int32_t         reg;
1537     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1538     CMPTUN_SU(r0, r1, rn(reg));         /* unord does not satisfy condition */
1539     TRAPB();
1540     w = _jit->pc.w;
1541     FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1542     jit_unget_reg(reg);
1543     return (w);
1544 }
1545 fbopi(ord);
1546 dbopi(ord);
1547
1548 static jit_word_t
1549 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1550 {
1551     jit_word_t          w;
1552     jit_int32_t         reg;
1553     reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1554     CMPTUN_SU(r0, r1, rn(reg));         /* unord satisfy condition */
1555     TRAPB();
1556     w = _jit->pc.w;
1557     FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1558     jit_unget_reg(reg);
1559     return (w);
1560 }
1561 fbopi(unord);
1562 dbopi(unord);
1563
1564 static void
1565 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1566 {
1567     jit_word_t          reg;
1568     if (_s16_p(i0))
1569         LDS(r0, _R31_REGNO, _u16(i0));
1570     else {
1571         reg = jit_get_reg(jit_class_gpr);
1572         movi(rn(reg), i0);
1573         ldr_f(r0, rn(reg));
1574         jit_unget_reg(reg);
1575     }
1576 }
1577
1578 static void
1579 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1580 {
1581     jit_word_t          reg;
1582     if (_s16_p(i0))
1583         LDT(r0, _R31_REGNO, _u16(i0));
1584     else {
1585         reg = jit_get_reg(jit_class_gpr);
1586         movi(rn(reg), i0);
1587         ldr_d(r0, rn(reg));
1588         jit_unget_reg(reg);
1589     }
1590 }
1591
1592 static void
1593 _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1594 {
1595     jit_word_t          reg;
1596     reg = jit_get_reg(jit_class_gpr);
1597     addr(rn(reg), r1, r2);
1598     ldr_f(r0, rn(reg));
1599     jit_unget_reg(reg);
1600 }
1601
1602 static void
1603 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1604 {
1605     jit_word_t          reg;
1606     if (_s16_p(i0))
1607         LDS(r0, r1, _u16(i0));
1608     else {
1609         reg = jit_get_reg(jit_class_gpr);
1610         addi(rn(reg), r1, i0);
1611         ldr_f(r0, rn(reg));
1612         jit_unget_reg(reg);
1613     }
1614 }
1615
1616 static void
1617 _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1618 {
1619     jit_word_t          reg;
1620     reg = jit_get_reg(jit_class_gpr);
1621     addr(rn(reg), r1, r2);
1622     ldr_d(r0, rn(reg));
1623     jit_unget_reg(reg);
1624 }
1625
1626 static void
1627 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1628 {
1629     jit_word_t          reg;
1630     if (_s16_p(i0))
1631         LDT(r0, r1, _u16(i0));
1632     else {
1633         reg = jit_get_reg(jit_class_gpr);
1634         addi(rn(reg), r1, i0);
1635         ldr_d(r0, rn(reg));
1636         jit_unget_reg(reg);
1637     }
1638 }
1639
1640 static void
1641 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1642 {
1643     jit_word_t          reg;
1644     if (_s16_p(i0))
1645         STS(r0, _R31_REGNO, _u16(i0));
1646     else {
1647         reg = jit_get_reg(jit_class_gpr);
1648         movi(rn(reg), i0);
1649         str_f(rn(reg), r0);
1650         jit_unget_reg(reg);
1651     }
1652 }
1653
1654 static void
1655 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1656 {
1657     jit_word_t          reg;
1658     if (_s16_p(i0))
1659         STT(r0, _R31_REGNO, _u16(i0));
1660     else {
1661         reg = jit_get_reg(jit_class_gpr);
1662         movi(rn(reg), i0);
1663         str_d(rn(reg), r0);
1664         jit_unget_reg(reg);
1665     }
1666 }
1667
1668 static void
1669 _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1670 {
1671     jit_word_t          reg;
1672     reg = jit_get_reg(jit_class_gpr);
1673     addr(rn(reg), r0, r1);
1674     str_f(rn(reg), r2);
1675     jit_unget_reg(reg);
1676 }
1677
1678 static void
1679 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1680 {
1681     jit_word_t          reg;
1682     if (_s16_p(i0))
1683         STS(r1, r0, _u16(i0));
1684     else {
1685         reg = jit_get_reg(jit_class_gpr);
1686         addi(rn(reg), r0, i0);
1687         str_f(rn(reg), r1);
1688         jit_unget_reg(reg);
1689     }
1690 }
1691
1692 static void
1693 _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1694 {
1695     jit_word_t          reg;
1696     reg = jit_get_reg(jit_class_gpr);
1697     addr(rn(reg), r0, r1);
1698     str_d(rn(reg), r2);
1699     jit_unget_reg(reg);
1700 }
1701
1702 static void
1703 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1704 {
1705     jit_word_t          reg;
1706     if (_s16_p(i0))
1707         STT(r1, r0, _u16(i0));
1708     else {
1709         reg = jit_get_reg(jit_class_gpr);
1710         addi(rn(reg), r0, i0);
1711         str_d(rn(reg), r1);
1712         jit_unget_reg(reg);
1713     }
1714 }
1715
1716 static void
1717 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1718 {
1719     jit_word_t          ge_code;
1720     jit_int32_t         rg0, rg1, rg2;
1721
1722     assert(_jitc->function->self.call & jit_call_varargs);
1723
1724     rg0 = jit_get_reg(jit_class_gpr);
1725     rg1 = jit_get_reg(jit_class_gpr);
1726     rg2 = jit_get_reg(jit_class_gpr);
1727
1728     /* Load the base in first temporary. */
1729     ldxi(rn(rg0), r1, offsetof(jit_va_list_t, base));
1730
1731     /* Load the offset in the second temporary. */
1732     ldxi(rn(rg1), r1, offsetof(jit_va_list_t, offset));
1733
1734     /* Remember absolute offset */
1735     movr(rn(rg2), rn(rg1));
1736
1737     /* Jump if overflowed register saved area. */
1738     ge_code = bgei(_jit->pc.w, rn(rg1), 48);
1739     /* Otherwise load from the float registers save area. */
1740     subi(rn(rg1), rn(rg1), 48);
1741     patch_at(ge_code, _jit->pc.w);
1742
1743     /* Load the argument */
1744     ldxr_d(r0, rn(rg0), rn(rg1));
1745
1746     /* No longer needed. */
1747     jit_unget_reg(rg1);
1748     jit_unget_reg(rg0);
1749
1750     /* Update offset. */
1751     addi(rn(rg2), rn(rg2), 8);
1752     stxi(offsetof(jit_va_list_t, offset), r1, rn(rg2));
1753     jit_unget_reg(rg2);
1754 }
1755 #endif