git subrepo pull --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / lib / jit_alpha-fpu.c
CommitLineData
4a71579b 1/*
c0c16242 2 * Copyright (C) 2014-2022 Free Software Foundation, Inc.
4a71579b
PC
3 *
4 * This file is part of GNU lightning.
5 *
6 * GNU lightning is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation; either version 3, or (at your option)
9 * any later version.
10 *
11 * GNU lightning is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 * License for more details.
15 *
16 * Authors:
17 * Paulo Cesar Pereira de Andrade
18 */
19
20#if PROTO
21# define _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)
30static 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)
303static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
304# define movi_f(r0,i0) _movi_f(_jit,r0,i0)
305static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
306# define movi_d(r0,i0) _movi_d(_jit,r0,i0)
307static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
308# define absr_f(r0,r1) FABS(r1,r0)
309# define absr_d(r0,r1) FABS(r1,r0)
310# define negr_f(r0,r1) FNEGS(r1,r0)
311# define negr_d(r0,r1) FNEGT(r1,r0)
312# define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1)
313static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t);
314# define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1)
315static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t);
316# define extr_f_d(r0,r1) movr_d(r0,r1)
317# define extr_d_f(r0,r1) movr_f(r0,r1)
318# define truncr_f_i(r0,r1) truncr_d_i(r0,r1)
319# define truncr_f_l(r0,r1) truncr_d_l(r0,r1)
320# define truncr_d_i(r0,r1) truncr_d_l(r0,r1)
321# define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1)
322static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
323# define extr_f(r0,r1) _extr_f(_jit,r0,r1)
324static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
325# define extr_d(r0,r1) _extr_d(_jit,r0,r1)
326static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
327# define addr_f(r0,r1,r2) _addr_f(_jit,r0,r1,r2)
328static void _addr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
329# define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
330static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
331# define addr_d(r0,r1,r2) _addr_d(_jit,r0,r1,r2)
332static void _addr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
333# define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
334static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
335# define subr_f(r0,r1,r2) _subr_f(_jit,r0,r1,r2)
336static void _subr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
337# define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
338static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
339# define subr_d(r0,r1,r2) _subr_d(_jit,r0,r1,r2)
340static void _subr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
341# define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
342static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
343# define rsbr_f(r0, r1, r2) subr_f(r0, r2, r1)
344# define rsbi_f(r0, r1, i0) _rsbi_f(_jit, r0, r1, i0)
345static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
346# define rsbr_d(r0, r1, r2) subr_d(r0, r2, r1)
347# define rsbi_d(r0, r1, i0) _rsbi_d(_jit, r0, r1, i0)
348static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
349# define mulr_f(r0,r1,r2) _mulr_f(_jit,r0,r1,r2)
350static void _mulr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
351# define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
352static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
353# define mulr_d(r0,r1,r2) _mulr_d(_jit,r0,r1,r2)
354static void _mulr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
355# define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
356static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
357# define divr_f(r0,r1,r2) _divr_f(_jit,r0,r1,r2)
358static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
359# define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
360static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
361# define divr_d(r0,r1,r2) _divr_d(_jit,r0,r1,r2)
362static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
363# define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
364static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
365# define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2)
366# define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2)
367static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
368# define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0)
369static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
370# define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0)
371static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
372# define ler_f(r0,r1,r2) ler_d(r0,r1,r2)
373# define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2)
374static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
375# define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0)
376static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
377# define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0)
378static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
379# define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2)
380# define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2)
381static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
382# define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0)
383static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
384# define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0)
385static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
386# define ger_f(r0,r1,r2) ger_d(r0,r1,r2)
387# define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2)
388static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
389# define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0)
390static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
391# define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0)
392static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
393# define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2)
394# define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2)
395static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
396# define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0)
397static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
398# define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0)
399static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
400# define ner_f(r0,r1,r2) ner_d(r0,r1,r2)
401# define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2)
402static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
403# define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0)
404static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
405# define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0)
406static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
407# define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2)
408# define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2)
409static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
410# define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0)
411static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
412# define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0)
413static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
414# define unler_f(r0,r1,r2) unler_d(r0,r1,r2)
415# define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2)
416static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
417# define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0)
418static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
419# define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0)
420static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
421# define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2)
422# define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2)
423static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
424# define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0)
425static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
426# define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0)
427static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
428# define unger_f(r0,r1,r2) unger_d(r0,r1,r2)
429# define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2)
430static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
431# define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0)
432static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
433# define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0)
434static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
435# define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2)
436# define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2)
437static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
438# define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0)
439static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
440# define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0)
441static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
442# define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2)
443# define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2)
444static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
445# define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0)
446static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
447# define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0)
448static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
449# define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2)
450# define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2)
451static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
452# define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0)
453static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
454# define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0)
455static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
456# define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2)
457# define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2)
458static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
459# define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0)
460static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
461# define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0)
462static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
463# define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1)
464# define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1)
465static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
466# define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1)
467static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
468# define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1)
469static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
470# define bler_f(i0,r0,r1) bler_d(i0,r0,r1)
471# define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1)
472static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
473# define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1)
474static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
475# define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1)
476static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
477# define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1)
478# define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1)
479static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
480# define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1)
481static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
482# define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1)
483static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
484# define bger_f(i0,r0,r1) bger_d(i0,r0,r1)
485# define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1)
486static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
487# define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1)
488static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
489# define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1)
490static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
491# define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1)
492# define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1)
493static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
494# define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1)
495static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
496# define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1)
497static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
498# define bner_f(i0,r0,r1) bner_d(i0,r0,r1)
499# define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1)
500static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
501# define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1)
502static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
503# define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1)
504static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
505# define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1)
506# define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1)
507static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
508# define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1)
509static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
510# define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1)
511static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
512# define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1)
513# define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1)
514static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
515# define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1)
516static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
517# define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1)
518static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
519# define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1)
520# define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1)
521static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
522# define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1)
523static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
524# define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1)
525static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
526# define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1)
527# define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1)
528static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
529# define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1)
530static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
531# define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1)
532static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
533# define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1)
534# define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1)
535static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
536# define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1)
537static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
538# define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1)
539static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
540# define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1)
541# define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1)
542static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
543# define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1)
544static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
545# define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1)
546static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
547# define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1)
548# define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1)
549static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
550# define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1)
551static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
552# define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1)
553static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
554# define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1)
555# define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1)
556static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
557# define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1)
558static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
559# define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1)
560static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
561# define ldr_f(r0,r1) LDS(r0,r1,0)
562# define ldi_f(r0,i0) _ldi_f(_jit,r0,i0)
563static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
564# define ldr_d(r0,r1) LDT(r0,r1,0)
565# define ldi_d(r0,i0) _ldi_d(_jit,r0,i0)
566static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
567# define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2)
568static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
569# define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0)
570static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
571# define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2)
572static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
573# define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0)
574static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
575# define str_f(r0,r1) STS(r1,r0,0)
576# define sti_f(i0,r0) _sti_f(_jit,i0,r0)
577static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
578# define str_d(r0,r1) STT(r1,r0,0)
579# define sti_d(i0,r0) _sti_d(_jit,i0,r0)
580static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
581# define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2)
582static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
583# define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1)
584static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
585# define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2)
586static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
587# define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1)
588static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
589# define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1)
590static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
591#endif
592
593#if CODE
594# define fpr_opi(name, type, size) \
595static void \
596_##name##i_##type(jit_state_t *_jit, \
597 jit_int32_t r0, jit_int32_t r1, \
598 jit_float##size##_t *i0) \
599{ \
600 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
601 movi_##type(rn(reg), i0); \
602 name##r_##type(r0, r1, rn(reg)); \
603 jit_unget_reg(reg); \
604}
605# define fpr_bopi(name, type, size) \
606static jit_word_t \
607_b##name##i_##type(jit_state_t *_jit, \
608 jit_word_t i0, jit_int32_t r0, \
609 jit_float##size##_t *i1) \
610{ \
611 jit_word_t word; \
612 jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_nospill);\
613 movi_##type(rn(reg), i1); \
614 word = b##name##r_##type(i0, r0, rn(reg)); \
615 jit_unget_reg(reg); \
616 return (word); \
617}
618# define fopi(name) fpr_opi(name, f, 32)
619# define fbopi(name) fpr_bopi(name, f, 32)
620# define dopi(name) fpr_opi(name, d, 64)
621# define dbopi(name) fpr_bopi(name, d, 64)
622
623static void
624_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
625{
626 if (r0 != r1)
627 FMOV(r1, r0);
628}
629
630static void
631_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
632{
633 union {
634 jit_int32_t i;
635 jit_float32_t f;
636 } data;
637 jit_int32_t reg;
638
639 if (_jitc->no_data) {
640 data.f = *i0;
641 reg = jit_get_reg(jit_class_gpr);
642 movi(rn(reg), data.i & 0xffffffff);
643 stxi_i(-8, _FP_REGNO, rn(reg));
644 jit_unget_reg(reg);
645 ldxi_f(r0, _FP_REGNO, -8);
646 }
647 else
648 ldi_f(r0, (jit_word_t)i0);
649}
650
651static void
652_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
653{
654 union {
655 jit_word_t w;
656 jit_float64_t d;
657 } data;
658 jit_int32_t reg;
659
660 if (_jitc->no_data) {
661 data.d = *i0;
662 reg = jit_get_reg(jit_class_gpr);
663 movi(rn(reg), data.w);
664 stxi_l(-8, _FP_REGNO, rn(reg));
665 jit_unget_reg(reg);
666 ldxi_d(r0, _FP_REGNO, -8);
667 }
668 else
669 ldi_d(r0, (jit_word_t)i0);
670}
671
672static void
673_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
674{
675 jit_int32_t reg;
676 reg = jit_get_reg(jit_class_fpr);
677 CVTTQ_SVC(r1, rn(reg));
678 TRAPB();
679 stxi_d(-8, _FP_REGNO, rn(reg));
680 ldxi(r0, _FP_REGNO, -8);
681 jit_unget_reg(reg);
682}
683
684static void
685_sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
686{
687 SQRTS_SU(r1, r0);
688 TRAPB();
689}
690
691static void
692_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
693{
694 SQRTT_SU(r1, r0);
695 TRAPB();
696}
697
698static void
699_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
700{
701 stxi_l(-8, _FP_REGNO, r1);
702 ldxi_d(r0, _FP_REGNO, -8);
703 CVTQS(r0, r0);
704}
705
706static void
707_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
708{
709 stxi_l(-8, _FP_REGNO, r1);
710 ldxi_d(r0, _FP_REGNO, -8);
711 CVTQT(r0, r0);
712}
713
714static void
715_addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
716{
717 ADDS_SU(r1, r2, r0);
718 TRAPB();
719}
720fopi(add)
721
722static void
723_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
724{
725 ADDT_SU(r1, r2, r0);
726 TRAPB();
727}
728dopi(add)
729
730static void
731_subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
732{
733 SUBS_SU(r1, r2, r0);
734 TRAPB();
735}
736fopi(sub)
737fopi(rsb)
738
739static void
740_subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
741{
742 SUBT_SU(r1, r2, r0);
743 TRAPB();
744}
745dopi(sub)
746dopi(rsb)
747
748static void
749_mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
750{
751 MULS_SU(r1, r2, r0);
752 TRAPB();
753}
754fopi(mul)
755
756static void
757_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
758{
759 MULT_SU(r1, r2, r0);
760 TRAPB();
761}
762dopi(mul)
763
764static void
765_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
766{
767 DIVS_SU(r1, r2, r0);
768 TRAPB();
769}
770fopi(div)
771
772static void
773_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
774{
775 DIVT_SU(r1, r2, r0);
776 TRAPB();
777}
778dopi(div)
779
780static void
781_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
782{
783 jit_int32_t reg;
784 jit_word_t v, w;
785 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
786 movi(r0, 0);
787 CMPTUN_SU(r1, r2, rn(reg));
788 TRAPB();
789 v = _jit->pc.w;
790 FBNE(rn(reg), 4);
791 CMPTLT_SU(r1, r2, rn(reg));
792 TRAPB();
793 w = _jit->pc.w;
794 FBEQ(rn(reg), 1);
795 movi(r0, 1);
796 patch_at(v, _jit->pc.w);
797 patch_at(w, _jit->pc.w);
798 jit_unget_reg(reg);
799}
800fopi(lt);
801dopi(lt);
802
803static void
804_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
805{
806 jit_int32_t reg;
807 jit_word_t v, w;
808 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
809 movi(r0, 0);
810 CMPTUN_SU(r1, r2, rn(reg));
811 TRAPB();
812 v = _jit->pc.w;
813 FBNE(rn(reg), 4);
814 CMPTLE_SU(r1, r2, rn(reg));
815 TRAPB();
816 w = _jit->pc.w;
817 FBEQ(rn(reg), 1);
818 movi(r0, 1);
819 patch_at(v, _jit->pc.w);
820 patch_at(w, _jit->pc.w);
821 jit_unget_reg(reg);
822}
823fopi(le);
824dopi(le);
825
826static void
827_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
828{
829 jit_int32_t reg;
830 jit_word_t v, w;
831 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
832 movi(r0, 0);
833 CMPTUN_SU(r1, r2, rn(reg));
834 TRAPB();
835 v = _jit->pc.w;
836 FBNE(rn(reg), 4);
837 CMPTEQ_SU(r1, r2, rn(reg));
838 TRAPB();
839 w = _jit->pc.w;
840 FBEQ(rn(reg), 1);
841 movi(r0, 1);
842 patch_at(v, _jit->pc.w);
843 patch_at(w, _jit->pc.w);
844 jit_unget_reg(reg);
845}
846fopi(eq);
847dopi(eq);
848
849static void
850_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
851{
852 jit_int32_t reg;
853 jit_word_t v, w;
854 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
855 movi(r0, 0);
856 CMPTUN_SU(r1, r2, rn(reg));
857 TRAPB();
858 v = _jit->pc.w;
859 FBNE(rn(reg), 4);
860 CMPTLT_SU(r1, r2, rn(reg));
861 TRAPB();
862 w = _jit->pc.w;
863 FBNE(rn(reg), 1);
864 movi(r0, 1);
865 patch_at(v, _jit->pc.w);
866 patch_at(w, _jit->pc.w);
867 jit_unget_reg(reg);
868}
869fopi(ge);
870dopi(ge);
871
872static void
873_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
874{
875 jit_int32_t reg;
876 jit_word_t v, w;
877 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
878 movi(r0, 0);
879 CMPTUN_SU(r1, r2, rn(reg));
880 TRAPB();
881 v = _jit->pc.w;
882 FBNE(rn(reg), 4);
883 CMPTLE_SU(r1, r2, rn(reg));
884 TRAPB();
885 w = _jit->pc.w;
886 FBNE(rn(reg), 1);
887 movi(r0, 1);
888 patch_at(v, _jit->pc.w);
889 patch_at(w, _jit->pc.w);
890 jit_unget_reg(reg);
891}
892fopi(gt);
893dopi(gt);
894
895static void
896_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
897{
898 jit_int32_t reg;
899 jit_word_t v, w;
900 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
901 movi(r0, 1);
902 CMPTUN_SU(r1, r2, rn(reg));
903 TRAPB();
904 v = _jit->pc.w;
905 FBNE(rn(reg), 3);
906 CMPTEQ_SU(r1, r2, rn(reg));
907 TRAPB();
908 w = _jit->pc.w;
909 FBEQ(rn(reg), 1);
910 movi(r0, 0);
911 patch_at(v, _jit->pc.w);
912 patch_at(w, _jit->pc.w);
913 jit_unget_reg(reg);
914}
915fopi(ne);
916dopi(ne);
917
918static void
919_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
920{
921 jit_int32_t reg;
922 jit_word_t v, w;
923 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
924 movi(r0, 1);
925 CMPTUN_SU(r1, r2, rn(reg));
926 TRAPB();
927 v = _jit->pc.w;
928 FBNE(rn(reg), 4);
929 CMPTLT_SU(r1, r2, rn(reg));
930 TRAPB();
931 w = _jit->pc.w;
932 FBNE(rn(reg), 1);
933 movi(r0, 0);
934 patch_at(v, _jit->pc.w);
935 patch_at(w, _jit->pc.w);
936 jit_unget_reg(reg);
937}
938fopi(unlt);
939dopi(unlt);
940
941static void
942_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
943{
944 jit_int32_t reg;
945 jit_word_t v, w;
946 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
947 movi(r0, 1);
948 CMPTUN_SU(r1, r2, rn(reg));
949 TRAPB();
950 v = _jit->pc.w;
951 FBNE(rn(reg), 4);
952 CMPTLE_SU(r1, r2, rn(reg));
953 TRAPB();
954 w = _jit->pc.w;
955 FBNE(rn(reg), 1);
956 movi(r0, 0);
957 patch_at(v, _jit->pc.w);
958 patch_at(w, _jit->pc.w);
959 jit_unget_reg(reg);
960}
961fopi(unle);
962dopi(unle);
963
964static void
965_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
966{
967 jit_int32_t reg;
968 jit_word_t v, w;
969 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
970 movi(r0, 1);
971 CMPTUN_SU(r1, r2, rn(reg));
972 TRAPB();
973 v = _jit->pc.w;
974 FBNE(rn(reg), 4);
975 CMPTEQ_SU(r1, r2, rn(reg));
976 TRAPB();
977 w = _jit->pc.w;
978 FBNE(rn(reg), 1);
979 movi(r0, 0);
980 patch_at(v, _jit->pc.w);
981 patch_at(w, _jit->pc.w);
982 jit_unget_reg(reg);
983}
984fopi(uneq);
985dopi(uneq);
986
987static void
988_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
989{
990 jit_int32_t reg;
991 jit_word_t v, w;
992 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
993 movi(r0, 1);
994 CMPTUN_SU(r1, r2, rn(reg));
995 TRAPB();
996 v = _jit->pc.w;
997 FBNE(rn(reg), 4);
998 CMPTLT_SU(r1, r2, rn(reg));
999 TRAPB();
1000 w = _jit->pc.w;
1001 FBEQ(rn(reg), 1);
1002 movi(r0, 0);
1003 patch_at(v, _jit->pc.w);
1004 patch_at(w, _jit->pc.w);
1005 jit_unget_reg(reg);
1006}
1007fopi(unge);
1008dopi(unge);
1009
1010static void
1011_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1012{
1013 jit_int32_t reg;
1014 jit_word_t v, w;
1015 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1016 movi(r0, 1);
1017 CMPTUN_SU(r1, r2, rn(reg));
1018 TRAPB();
1019 v = _jit->pc.w;
1020 FBNE(rn(reg), 4);
1021 CMPTLE_SU(r1, r2, rn(reg));
1022 TRAPB();
1023 w = _jit->pc.w;
1024 FBEQ(rn(reg), 1);
1025 movi(r0, 0);
1026 patch_at(v, _jit->pc.w);
1027 patch_at(w, _jit->pc.w);
1028 jit_unget_reg(reg);
1029}
1030fopi(ungt);
1031dopi(ungt);
1032
1033static void
1034_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1035{
1036 jit_int32_t reg;
1037 jit_word_t v, w;
1038 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1039 movi(r0, 0);
1040 CMPTUN_SU(r1, r2, rn(reg));
1041 TRAPB();
1042 v = _jit->pc.w;
1043 FBNE(rn(reg), 4);
1044 CMPTEQ_SU(r1, r2, rn(reg));
1045 TRAPB();
1046 w = _jit->pc.w;
1047 FBNE(rn(reg), 1);
1048 movi(r0, 1);
1049 patch_at(v, _jit->pc.w);
1050 patch_at(w, _jit->pc.w);
1051 jit_unget_reg(reg);
1052}
1053fopi(ltgt);
1054dopi(ltgt);
1055
1056static void
1057_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1058{
1059 jit_word_t w;
1060 jit_int32_t reg;
1061 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1062 movi(r0, 0);
1063 CMPTUN_SU(r1, r2, rn(reg));
1064 TRAPB();
1065 w = _jit->pc.w;
1066 FBNE(rn(reg), 1);
1067 movi(r0, 1);
1068 patch_at(w, _jit->pc.w);
1069 jit_unget_reg(reg);
1070}
1071fopi(ord);
1072dopi(ord);
1073
1074static void
1075_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1076{
1077 jit_word_t w;
1078 jit_int32_t reg;
1079 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1080 movi(r0, 1);
1081 CMPTUN_SU(r1, r2, rn(reg));
1082 TRAPB();
1083 w = _jit->pc.w;
1084 FBNE(rn(reg), 1);
1085 jit_unget_reg(reg);
1086 movi(r0, 0);
1087 patch_at(w, _jit->pc.w);
1088}
1089fopi(unord);
1090dopi(unord);
1091
1092static jit_word_t
1093_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1094{
1095 jit_int32_t reg;
1096 jit_word_t v, w;
1097 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1098 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1099 TRAPB();
1100 v = _jit->pc.w;
1101 FBNE(rn(reg), 3);
1102 CMPTLT_SU(r0, r1, rn(reg)); /* lt satisfy condition */
1103 TRAPB();
1104 w = _jit->pc.w;
1105 FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1106 patch_at(v, _jit->pc.w);
1107 jit_unget_reg(reg);
1108 return (w);
1109}
1110fbopi(lt);
1111dbopi(lt);
1112
1113static jit_word_t
1114_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1115{
1116 jit_int32_t reg;
1117 jit_word_t v, w;
1118 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1119 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1120 TRAPB();
1121 v = _jit->pc.w;
1122 FBNE(rn(reg), 3);
1123 CMPTLE_SU(r0, r1, rn(reg)); /* le satisfy condition */
1124 TRAPB();
1125 w = _jit->pc.w;
1126 FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1127 patch_at(v, _jit->pc.w);
1128 jit_unget_reg(reg);
1129 return (w);
1130}
1131fbopi(le);
1132dbopi(le);
1133
1134static jit_word_t
1135_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1136{
1137 jit_int32_t reg;
1138 jit_word_t v, w;
1139 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1140 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1141 TRAPB();
1142 v = _jit->pc.w;
1143 FBNE(rn(reg), 3);
1144 CMPTEQ_SU(r0, r1, rn(reg)); /* eq satisfy condition */
1145 TRAPB();
1146 w = _jit->pc.w;
1147 FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1148 patch_at(v, _jit->pc.w);
1149 jit_unget_reg(reg);
1150 return (w);
1151}
1152fbopi(eq);
1153dbopi(eq);
1154
1155static jit_word_t
1156_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1157{
1158 jit_int32_t reg;
1159 jit_word_t v, w;
1160 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1161 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1162 TRAPB();
1163 v = _jit->pc.w;
1164 FBNE(rn(reg), 3);
1165 CMPTLT_SU(r0, r1, rn(reg)); /* ge satisfy condition */
1166 TRAPB();
1167 w = _jit->pc.w;
1168 FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1169 patch_at(v, _jit->pc.w);
1170 jit_unget_reg(reg);
1171 return (w);
1172}
1173fbopi(ge);
1174dbopi(ge);
1175
1176static jit_word_t
1177_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1178{
1179 jit_int32_t reg;
1180 jit_word_t v, w;
1181 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1182 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1183 TRAPB();
1184 v = _jit->pc.w;
1185 FBNE(rn(reg), 3);
1186 CMPTLE_SU(r0, r1, rn(reg)); /* gt satisfy condition */
1187 TRAPB();
1188 w = _jit->pc.w;
1189 FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1190 patch_at(v, _jit->pc.w);
1191 jit_unget_reg(reg);
1192 return (w);
1193}
1194fbopi(gt);
1195dbopi(gt);
1196
1197static jit_word_t
1198_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1199{
1200 jit_int32_t reg;
1201 jit_word_t u, v, w;
1202 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1203 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1204 TRAPB();
1205 u = _jit->pc.w;
1206 FBNE(rn(reg), 4);
1207 CMPTEQ_SU(r0, r1, rn(reg)); /* ne satisfy condition */
1208 TRAPB();
1209 v = _jit->pc.w;
1210 FBNE(rn(reg), 1);
1211 patch_at(u, _jit->pc.w);
1212 w = _jit->pc.w;
1213 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1214 patch_at(v, _jit->pc.w);
1215 jit_unget_reg(reg);
1216 return (w);
1217}
1218fbopi(ne);
1219dbopi(ne);
1220
1221static jit_word_t
1222_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1223{
1224 jit_int32_t reg;
1225 jit_word_t u, v, w;
1226 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1227 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1228 TRAPB();
1229 u = _jit->pc.w;
1230 FBNE(rn(reg), 4);
1231 CMPTLT_SU(r0, r1, rn(reg)); /* lt satisfy condition */
1232 TRAPB();
1233 v = _jit->pc.w;
1234 FBEQ(rn(reg), 1);
1235 w = _jit->pc.w;
1236 patch_at(u, _jit->pc.w);
1237 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1238 patch_at(v, _jit->pc.w);
1239 jit_unget_reg(reg);
1240 return (w);
1241}
1242fbopi(unlt);
1243dbopi(unlt);
1244
1245static jit_word_t
1246_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1247{
1248 jit_int32_t reg;
1249 jit_word_t u, v, w;
1250 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1251 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1252 TRAPB();
1253 u = _jit->pc.w;
1254 FBNE(rn(reg), 4);
1255 CMPTLE_SU(r0, r1, rn(reg)); /* le satisfy condition */
1256 TRAPB();
1257 v = _jit->pc.w;
1258 FBEQ(rn(reg), 1);
1259 w = _jit->pc.w;
1260 patch_at(u, _jit->pc.w);
1261 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1262 patch_at(v, _jit->pc.w);
1263 jit_unget_reg(reg);
1264 return (w);
1265}
1266fbopi(unle);
1267dbopi(unle);
1268
1269static jit_word_t
1270_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1271{
1272 jit_int32_t reg;
1273 jit_word_t u, v, w;
1274 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1275 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1276 TRAPB();
1277 u = _jit->pc.w;
1278 FBNE(rn(reg), 4);
1279 CMPTEQ_SU(r0, r1, rn(reg)); /* eq satisfy condition */
1280 TRAPB();
1281 v = _jit->pc.w;
1282 FBEQ(rn(reg), 1);
1283 w = _jit->pc.w;
1284 patch_at(u, _jit->pc.w);
1285 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1286 patch_at(v, _jit->pc.w);
1287 jit_unget_reg(reg);
1288 return (w);
1289}
1290fbopi(uneq);
1291dbopi(uneq);
1292
1293static jit_word_t
1294_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1295{
1296 jit_int32_t reg;
1297 jit_word_t u, v, w;
1298 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1299 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1300 TRAPB();
1301 u = _jit->pc.w;
1302 FBNE(rn(reg), 4);
1303 CMPTLT_SU(r0, r1, rn(reg)); /* ge satisfy condition */
1304 TRAPB();
1305 v = _jit->pc.w;
1306 FBNE(rn(reg), 1);
1307 w = _jit->pc.w;
1308 patch_at(u, _jit->pc.w);
1309 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1310 patch_at(v, _jit->pc.w);
1311 jit_unget_reg(reg);
1312 return (w);
1313}
1314fbopi(unge);
1315dbopi(unge);
1316
1317static jit_word_t
1318_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1319{
1320 jit_int32_t reg;
1321 jit_word_t u, v, w;
1322 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1323 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1324 TRAPB();
1325 u = _jit->pc.w;
1326 FBNE(rn(reg), 4);
1327 CMPTLE_SU(r0, r1, rn(reg)); /* gt does satisfy condition */
1328 TRAPB();
1329 v = _jit->pc.w;
1330 FBNE(rn(reg), 1);
1331 w = _jit->pc.w;
1332 patch_at(u, _jit->pc.w);
1333 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1334 patch_at(v, _jit->pc.w);
1335 jit_unget_reg(reg);
1336 return (w);
1337}
1338fbopi(ungt);
1339dbopi(ungt);
1340
1341static jit_word_t
1342_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1343{
1344 jit_word_t u, v, w;
1345 jit_int32_t reg;
1346 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1347 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1348 TRAPB();
1349 u = _jit->pc.w;
1350 FBNE(rn(reg), 4);
1351 CMPTEQ_SU(r1, r0, rn(reg));
1352 TRAPB();
1353 v = _jit->pc.w; /* eq does not satisfy condition */
1354 FBNE(rn(reg), 1);
1355 w = _jit->pc.w;
1356 BR(_R31_REGNO, ((i0 - w) >> 2) - 1);
1357 patch_at(u, _jit->pc.w);
1358 patch_at(v, _jit->pc.w);
1359 jit_unget_reg(reg);
1360 return (w);
1361}
1362fbopi(ltgt);
1363dbopi(ltgt);
1364
1365static jit_word_t
1366_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1367{
1368 jit_word_t w;
1369 jit_int32_t reg;
1370 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1371 CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */
1372 TRAPB();
1373 w = _jit->pc.w;
1374 FBEQ(rn(reg), ((i0 - w) >> 2) - 1);
1375 jit_unget_reg(reg);
1376 return (w);
1377}
1378fbopi(ord);
1379dbopi(ord);
1380
1381static jit_word_t
1382_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1383{
1384 jit_word_t w;
1385 jit_int32_t reg;
1386 reg = jit_get_reg(jit_class_fpr|jit_class_nospill);
1387 CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */
1388 TRAPB();
1389 w = _jit->pc.w;
1390 FBNE(rn(reg), ((i0 - w) >> 2) - 1);
1391 jit_unget_reg(reg);
1392 return (w);
1393}
1394fbopi(unord);
1395dbopi(unord);
1396
1397static void
1398_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1399{
1400 jit_word_t reg;
1401 if (_s16_p(i0))
1402 LDS(r0, _R31_REGNO, _u16(i0));
1403 else {
1404 reg = jit_get_reg(jit_class_gpr);
1405 movi(rn(reg), i0);
1406 ldr_f(r0, rn(reg));
1407 jit_unget_reg(reg);
1408 }
1409}
1410
1411static void
1412_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1413{
1414 jit_word_t reg;
1415 if (_s16_p(i0))
1416 LDT(r0, _R31_REGNO, _u16(i0));
1417 else {
1418 reg = jit_get_reg(jit_class_gpr);
1419 movi(rn(reg), i0);
1420 ldr_d(r0, rn(reg));
1421 jit_unget_reg(reg);
1422 }
1423}
1424
1425static void
1426_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1427{
1428 jit_word_t reg;
1429 reg = jit_get_reg(jit_class_gpr);
1430 addr(rn(reg), r1, r2);
1431 ldr_f(r0, rn(reg));
1432 jit_unget_reg(reg);
1433}
1434
1435static void
1436_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1437{
1438 jit_word_t reg;
1439 if (_s16_p(i0))
1440 LDS(r0, r1, _u16(i0));
1441 else {
1442 reg = jit_get_reg(jit_class_gpr);
1443 addi(rn(reg), r1, i0);
1444 ldr_f(r0, rn(reg));
1445 jit_unget_reg(reg);
1446 }
1447}
1448
1449static void
1450_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1451{
1452 jit_word_t reg;
1453 reg = jit_get_reg(jit_class_gpr);
1454 addr(rn(reg), r1, r2);
1455 ldr_d(r0, rn(reg));
1456 jit_unget_reg(reg);
1457}
1458
1459static void
1460_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1461{
1462 jit_word_t reg;
1463 if (_s16_p(i0))
1464 LDT(r0, r1, _u16(i0));
1465 else {
1466 reg = jit_get_reg(jit_class_gpr);
1467 addi(rn(reg), r1, i0);
1468 ldr_d(r0, rn(reg));
1469 jit_unget_reg(reg);
1470 }
1471}
1472
1473static void
1474_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1475{
1476 jit_word_t reg;
1477 if (_s16_p(i0))
1478 STS(r0, _R31_REGNO, _u16(i0));
1479 else {
1480 reg = jit_get_reg(jit_class_gpr);
1481 movi(rn(reg), i0);
1482 str_f(rn(reg), r0);
1483 jit_unget_reg(reg);
1484 }
1485}
1486
1487static void
1488_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1489{
1490 jit_word_t reg;
1491 if (_s16_p(i0))
1492 STT(r0, _R31_REGNO, _u16(i0));
1493 else {
1494 reg = jit_get_reg(jit_class_gpr);
1495 movi(rn(reg), i0);
1496 str_d(rn(reg), r0);
1497 jit_unget_reg(reg);
1498 }
1499}
1500
1501static void
1502_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1503{
1504 jit_word_t reg;
1505 reg = jit_get_reg(jit_class_gpr);
1506 addr(rn(reg), r0, r1);
1507 str_f(rn(reg), r2);
1508 jit_unget_reg(reg);
1509}
1510
1511static void
1512_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1513{
1514 jit_word_t reg;
1515 if (_s16_p(i0))
1516 STS(r1, r0, _u16(i0));
1517 else {
1518 reg = jit_get_reg(jit_class_gpr);
1519 addi(rn(reg), r0, i0);
1520 str_f(rn(reg), r1);
1521 jit_unget_reg(reg);
1522 }
1523}
1524
1525static void
1526_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1527{
1528 jit_word_t reg;
1529 reg = jit_get_reg(jit_class_gpr);
1530 addr(rn(reg), r0, r1);
1531 str_d(rn(reg), r2);
1532 jit_unget_reg(reg);
1533}
1534
1535static void
1536_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1537{
1538 jit_word_t reg;
1539 if (_s16_p(i0))
1540 STT(r1, r0, _u16(i0));
1541 else {
1542 reg = jit_get_reg(jit_class_gpr);
1543 addi(rn(reg), r0, i0);
1544 str_d(rn(reg), r1);
1545 jit_unget_reg(reg);
1546 }
1547}
1548
1549static void
1550_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1551{
1552 jit_word_t ge_code;
1553 jit_int32_t rg0, rg1, rg2;
1554
1555 assert(_jitc->function->self.call & jit_call_varargs);
1556
1557 rg0 = jit_get_reg(jit_class_gpr);
1558 rg1 = jit_get_reg(jit_class_gpr);
1559 rg2 = jit_get_reg(jit_class_gpr);
1560
1561 /* Load the base in first temporary. */
1562 ldxi(rn(rg0), r1, offsetof(jit_va_list_t, base));
1563
1564 /* Load the offset in the second temporary. */
1565 ldxi(rn(rg1), r1, offsetof(jit_va_list_t, offset));
1566
1567 /* Remember absolute offset */
1568 movr(rn(rg2), rn(rg1));
1569
1570 /* Jump if overflowed register saved area. */
1571 ge_code = bgei(_jit->pc.w, rn(rg1), 48);
1572 /* Otherwise load from the float registers save area. */
1573 subi(rn(rg1), rn(rg1), 48);
1574 patch_at(ge_code, _jit->pc.w);
1575
1576 /* Load the argument */
1577 ldxr_d(r0, rn(rg0), rn(rg1));
1578
1579 /* No longer needed. */
1580 jit_unget_reg(rg1);
1581 jit_unget_reg(rg0);
1582
1583 /* Update offset. */
1584 addi(rn(rg2), rn(rg2), 8);
1585 stxi(offsetof(jit_va_list_t, offset), r1, rn(rg2));
1586 jit_unget_reg(rg2);
1587}
1588#endif