2 * Copyright (C) 2012-2023 Free Software Foundation, Inc.
4 * This file is part of GNU lightning.
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)
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.
17 * Paulo Cesar Pereira de Andrade
21 #define FA(o,d,a,b,c,x) _FA(_jit,o,d,a,b,c,x,0)
22 #define FA_(o,d,a,b,c,x) _FA(_jit,o,d,a,b,c,x,1)
23 static void _FA(jit_state_t*,int,int,int,int,int,int,int);
24 #define FXFL(o,m,b,x) _FXFL(_jit,o,m,b,x,0)
25 #define FXFL_(o,m,b,x) _FXFL(_jit,o,m,b,x,1)
26 static void _FXFL(jit_state_t*,int,int,int,int,int) maybe_unused;
27 # define FABS(d,b) FX(63,d,0,b,264)
28 # define FABS_(d,b) FX_(63,d,0,b,264)
29 # define FADD(d,a,b) FA(63,d,a,b,0,21)
30 # define FADD_(d,a,b) FA_(63,d,a,b,0,21)
31 # define FADDS(d,a,b) FA(59,d,a,b,0,21)
32 # define FADDS_(d,a,b) FA_(59,d,a,b,0,21)
33 # define FCFID(d,b) FX(63,d,0,b,846)
34 # define FCMPO(cr,a,b) FC(63,cr,0,a,b,32)
35 # define FCMPU(cr,a,b) FC(63,cr,0,a,b,0)
36 # define FCTIW(d,b) FX(63,d,0,b,14)
37 # define FCTIW_(d,b) FX_(63,d,0,b,14)
38 # define FCTIWZ(d,b) FX(63,d,0,b,15)
39 # define FCTIWZ_(d,b) FX_(63,d,0,b,15)
40 # define FCTID(d,b) FX(63,d,0,b,814)
41 # define FCTID_(d,b) FX_(63,d,0,b,814)
42 # define FCTIDZ(d,b) FX(63,d,0,b,815)
43 # define FCTIDZ_(d,b) FX_(63,d,0,b,815)
44 # define FDIV(d,a,b) FA(63,d,a,b,0,18)
45 # define FDIV_(d,a,b) FA_(63,d,a,b,0,18)
46 # define FDIVS(d,a,b) FA(59,d,a,b,0,18)
47 # define FDIVS_(d,a,b) FA_(59,d,a,b,0,18)
48 # define FMADD(d,a,b,c) FA(63,d,a,b,c,29)
49 # define FMADD_(d,a,b,c) FA(63,d,a,b,c,29)
50 # define FMADDS(d,a,b,c) FA(59,d,a,b,c,29)
51 # define FMADDS_(d,a,b,c) FA(59,d,a,b,c,29)
52 # define FMR(d,b) FX(63,d,0,b,72)
53 # define FMR_(d,b) FX_(63,d,0,b,72)
54 # define FMSUB(d,a,b,c) FA(63,d,a,b,c,28)
55 # define FMSUB_(d,a,b,c) FA(63,d,a,b,c,28)
56 # define FMSUBS(d,a,b,c) FA(59,d,a,b,c,28)
57 # define FMSUBS_(d,a,b,c) FA(59,d,a,b,c,28)
58 # define FMUL(d,a,c) FA(63,d,a,0,c,25)
59 # define FMUL_(d,a,c) FA_(63,d,a,0,c,25)
60 # define FMULS(d,a,c) FA(59,d,a,0,c,25)
61 # define FMULS_(d,a,c) FA_(59,d,a,0,c,25)
62 # define FNABS(d,b) FX(63,d,0,b,136)
63 # define FNABS_(d,b) FX_(63,d,0,b,136)
64 # define FNEG(d,b) FX(63,d,0,b,40)
65 # define FNEG_(d,b) FX_(63,d,0,b,40)
66 # define FNMADD(d,a,b,c) FA(63,d,a,b,c,31)
67 # define FNMADD_(d,a,b,c) FA_(63,d,a,b,c,31)
68 # define FNMADDS(d,a,b,c) FA(59,d,a,b,c,31)
69 # define FNMADDS_(d,a,b,c) FA_(59,d,a,b,c,31)
70 # define FNMSUB(d,a,b,c) FA(63,d,a,b,c,30)
71 # define FNMSUB_(d,a,b,c) FA_(63,d,a,b,c,30)
72 # define FNMSUBS(d,a,b,c) FA(59,d,a,b,c,30)
73 # define FNMSUBS_(d,a,b,c) FA_(59,d,a,b,c,30)
74 # define FRES(d,b) FA(59,d,0,b,0,24)
75 # define FRES_(d,b) FA_(59,d,0,b,0,24)
76 # define FRSP(d,b) FA(63,d,0,b,0,12)
77 # define FRSP_(d,b) FA_(63,d,0,b,0,12)
78 # define FRSQTRE(d,b) FA(63,d,0,b,0,26)
79 # define FRSQTRE_(d,b) FA_(63,d,0,b,0,26)
80 # define FSEL(d,a,b,c) FA(63,d,a,b,c,23)
81 # define FSEL_(d,a,b,c) FA_(63,d,a,b,c,23)
82 # define FSQRT(d,b) FA(63,d,0,b,0,22)
83 # define FSQRT_(d,b) FA_(63,d,0,b,0,22)
84 # define FSQRTS(d,b) FA(59,d,0,b,0,22)
85 # define FSQRTS_(d,b) FA_(59,d,0,b,0,22)
86 # define FSUB(d,a,b) FA(63,d,a,b,0,20)
87 # define FSUB_(d,a,b) FA(63,d,a,b,0,20)
88 # define FSUBS(d,a,b) FA(59,d,a,b,0,20)
89 # define FSUBS_(d,a,b) FA(59,d,a,b,0,20)
90 # define LFD(d,a,s) FDs(50,d,a,s)
91 # define LFDU(d,a,s) FDs(51,d,a,s)
92 # define LFDUX(d,a,b) FX(31,d,a,b,631)
93 # define LFDX(d,a,b) FX(31,d,a,b,599)
94 # define LFS(d,a,s) FDs(48,d,a,s)
95 # define LFSU(d,a,s) FDs(49,d,a,s)
96 # define LFSUX(d,a,b) FX(31,d,a,b,567)
97 # define LFSX(d,a,b) FX(31,d,a,b,535)
98 # define MCRFS(d,s) FXL(63,d<<2,(s)<<2,64)
99 # define MFFS(d) FX(63,d,0,0,583)
100 # define MFFS_(d) FX_(63,d,0,0,583)
101 # define MTFSB0(d) FX(63,d,0,0,70)
102 # define MTFSB0_(d) FX_(63,d,0,0,70)
103 # define MTFSB1(d) FX(63,d,0,0,38)
104 # define MTFSB1_(d) FX_(63,d,0,0,38)
105 # define MTFSF(m,b) FXFL(63,m,b,711)
106 # define MTFSF_(m,b) FXFL_(63,m,b,711)
107 # define MTFSFI(d,i) FX(63,d<<2,0,i<<1,134)
108 # define MTFSFI_(d,i) FX_(63,d<<2,0,i<<1,134)
109 # define STFD(s,a,d) FDs(54,s,a,d)
110 # define STFDU(s,a,d) FDs(55,s,a,d)
111 # define STFDUX(s,a,b) FX(31,s,a,b,759)
112 # define STFDX(s,a,b) FX(31,s,a,b,727)
113 # define STFIWX(s,a,b) FX(31,s,a,b,983)
114 # define STFS(s,a,d) FDs(52,s,a,d)
115 # define STFSU(s,a,d) FDs(53,s,a,d)
116 # define STFSUX(s,a,b) FX(31,s,a,b,695)
117 # define STFSX(s,a,b) FX(31,s,a,b,663)
118 # define movr_f(r0,r1) movr_d(r0,r1)
119 # define movr_d(r0,r1) _movr_d(_jit,r0,r1)
120 static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
121 # define movi_f(r0,i0) _movi_f(_jit,r0,i0)
122 static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
123 #define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0)
124 static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t);
125 # define movi_d(r0,i0) _movi_d(_jit,r0,i0)
126 static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
127 # define extr_f(r0,r1) extr_d(r0,r1)
128 # define extr_d(r0,r1) _extr_d(_jit,r0,r1)
129 static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
130 # define truncr_f(r0,r1) truncr_d(r0,r1)
131 # define truncr_f_i(r0,r1) truncr_d_i(r0,r1)
132 # define truncr_d_i(r0,r1) _truncr_d_i(_jit,r0,r1)
133 static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
134 # if __WORDSIZE == 32
135 # define truncr_d(r0,r1) truncr_d_i(r0,r1)
136 # define movi_ww_d(r0, i0, i1) _movi_ww_d(_jit, r0, i0, i1)
137 static void _movi_ww_d(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t);
139 # define truncr_d(r0,r1) truncr_d_l(r0,r1)
140 # define truncr_f_l(r0,r1) truncr_d_l(r0,r1)
141 # define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1)
142 static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t);
143 # define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0)
144 static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t);
146 # define extr_d_f(r0,r1) FRSP(r0,r1)
147 # define extr_f_d(r0,r1) movr_d(r0,r1)
148 # define absr_f(r0,r1) absr_d(r0,r1)
149 # define absr_d(r0,r1) FABS(r0,r1)
150 # define negr_f(r0,r1) negr_d(r0,r1)
151 # define negr_d(r0,r1) FNEG(r0,r1)
153 # define sqrtr_f(r0,r1) FSQRTS(r0,r1)
154 # define sqrtr_d(r0,r1) FSQRT(r0,r1)
156 extern float sqrtf(float);
157 # define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1)
158 static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t);
159 extern double sqrt(double);
160 # define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1)
161 static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t);
163 # define fmar_f(r0,r1,r2,r3) FMADDS(r0,r1,r3,r2)
164 # define fmar_d(r0,r1,r2,r3) FMADD(r0,r1,r3,r2)
165 # define fmsr_f(r0,r1,r2,r3) FMSUBS(r0,r1,r3,r2)
166 # define fmsr_d(r0,r1,r2,r3) FMSUB(r0,r1,r3,r2)
167 # define fnmar_f(r0,r1,r2,r3) FNMADDS(r0,r1,r3,r2)
168 # define fnmar_d(r0,r1,r2,r3) FNMADD(r0,r1,r3,r2)
169 # define fnmsr_f(r0,r1,r2,r3) FNMSUBS(r0,r1,r3,r2)
170 # define fnmsr_d(r0,r1,r2,r3) FNMSUB(r0,r1,r3,r2)
171 # define addr_f(r0,r1,r2) FADDS(r0,r1,r2)
172 # define addr_d(r0,r1,r2) FADD(r0,r1,r2)
173 # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
174 static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
175 # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
176 static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
177 # define subr_f(r0,r1,r2) FSUBS(r0,r1,r2)
178 # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
179 static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
180 # define subr_d(r0,r1,r2) FSUB(r0,r1,r2)
181 # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
182 static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
183 # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1)
184 # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0)
185 static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
186 # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1)
187 # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0)
188 static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
189 # define mulr_f(r0,r1,r2) FMULS(r0,r1,r2)
190 # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
191 static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
192 # define mulr_d(r0,r1,r2) FMUL(r0,r1,r2)
193 # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
194 static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
195 # define divr_f(r0,r1,r2) FDIVS(r0,r1,r2)
196 # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
197 static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
198 # define divr_d(r0,r1,r2) FDIV(r0,r1,r2)
199 # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
200 static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
201 # define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2)
202 # define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2)
203 static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
204 # define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0)
205 static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
206 # define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0)
207 static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
208 # define ler_f(r0,r1,r2) ler_d(r0,r1,r2)
209 # define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2)
210 static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
211 # define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0)
212 static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
213 # define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0)
214 static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
215 # define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2)
216 # define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2)
217 static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
218 # define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0)
219 static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
220 # define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0)
221 static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
222 # define ger_f(r0,r1,r2) ger_d(r0,r1,r2)
223 # define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2)
224 static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
225 # define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0)
226 static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
227 # define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0)
228 static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
229 # define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2)
230 # define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2)
231 static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
232 # define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0)
233 static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
234 # define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0)
235 static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
236 # define ner_f(r0,r1,r2) ner_d(r0,r1,r2)
237 # define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2)
238 static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
239 # define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0)
240 static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
241 # define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0)
242 static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
243 # define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2)
244 # define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2)
245 static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
246 # define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0)
247 static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
248 # define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0)
249 static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
250 # define unler_f(r0,r1,r2) unler_d(r0,r1,r2)
251 # define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2)
252 static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
253 # define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0)
254 static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
255 # define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0)
256 static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
257 # define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2)
258 # define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2)
259 static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
260 # define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0)
261 static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
262 # define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0)
263 static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
264 # define unger_f(r0,r1,r2) unger_d(r0,r1,r2)
265 # define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2)
266 static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
267 # define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0)
268 static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
269 # define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0)
270 static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
271 # define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2)
272 # define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2)
273 static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
274 # define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0)
275 static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
276 # define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0)
277 static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
278 # define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2)
279 # define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2)
280 static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
281 # define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0)
282 static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
283 # define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0)
284 static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
285 # define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2)
286 # define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2)
287 static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
288 # define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0)
289 static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
290 # define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0)
291 static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
292 # define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2)
293 # define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2)
294 static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
295 # define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0)
296 static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
297 # define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0)
298 static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
299 # define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1)
300 # define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1)
301 static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
302 # define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1)
303 static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
304 # define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1)
305 static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
306 # define bler_f(i0,r0,r1) bler_d(i0,r0,r1)
307 # define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1)
308 static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
309 # define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1)
310 static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
311 # define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1)
312 static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
313 # define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1)
314 # define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1)
315 static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
316 # define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1)
317 static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
318 # define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1)
319 static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
320 # define bger_f(i0,r0,r1) bger_d(i0,r0,r1)
321 # define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1)
322 static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
323 # define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1)
324 static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
325 # define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1)
326 static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
327 # define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1)
328 # define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1)
329 static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
330 # define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1)
331 static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
332 # define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1)
333 static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
334 # define bner_f(i0,r0,r1) bner_d(i0,r0,r1)
335 # define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1)
336 static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
337 # define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1)
338 static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
339 # define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1)
340 static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
341 # define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1)
342 # define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1)
343 static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
344 # define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1)
345 static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
346 # define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1)
347 static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
348 # define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1)
349 # define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1)
350 static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
351 # define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1)
352 static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
353 # define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1)
354 static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
355 # define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1)
356 # define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1)
357 static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
358 # define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1)
359 static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
360 # define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1)
361 static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
362 # define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1)
363 # define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1)
364 static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
365 # define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1)
366 static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
367 # define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1)
368 static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
369 # define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1)
370 # define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1)
371 static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
372 # define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1)
373 static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
374 # define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1)
375 static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
376 # define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1)
377 # define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1)
378 static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
379 # define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1)
380 static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
381 # define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1)
382 static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
383 # define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1)
384 # define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1)
385 static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
386 # define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1)
387 static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
388 # define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1)
389 static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
390 # define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1)
391 # define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1)
392 static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
393 # define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1)
394 static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*);
395 # define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1)
396 static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*);
397 # define ldr_f(r0,r1) LFSX(r0, _R0_REGNO, r1)
398 # define ldi_f(r0,i0) _ldi_f(_jit,r0,i0)
399 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
400 # define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2)
401 static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
402 # define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0)
403 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
404 # define str_f(r0,r1) STFSX(r1, _R0_REGNO, r0)
405 # define sti_f(i0,r0) _sti_f(_jit,i0,r0)
406 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
407 # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2)
408 static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
409 # define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1)
410 static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
411 # define ldr_d(r0,r1) LFDX(r0, _R0_REGNO, r1)
412 # define ldi_d(r0,i0) _ldi_d(_jit,r0,i0)
413 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
414 # define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2)
415 static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
416 # define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0)
417 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
418 # define str_d(r0,r1) STFDX(r1, _R0_REGNO, r0)
419 # define sti_d(i0,r0) _sti_d(_jit,i0,r0)
420 static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
421 # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2)
422 static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
423 # define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1)
424 static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
428 # define _u16(v) ((v) & 0xffff)
430 _FA(jit_state_t *_jit, int o, int d, int a, int b, int c, int x, int r)
432 assert(!(o & ~((1 << 6) - 1)));
433 assert(!(d & ~((1 << 5) - 1)));
434 assert(!(a & ~((1 << 5) - 1)));
435 assert(!(b & ~((1 << 5) - 1)));
436 assert(!(c & ~((1 << 5) - 1)));
437 assert(!(x & ~((1 << 5) - 1)));
438 assert(!(r & ~((1 << 1) - 1)));
439 ii((o<<26)|(d<<21)|(a<<16)|(b<<11)|(c<<6)|(x<<1)|r);
443 _FXFL(jit_state_t *_jit, int o, int m, int b, int x, int r)
445 assert(!(o & ~((1 << 6) - 1)));
446 assert(!(m & ~((1 << 8) - 1)));
447 assert(!(b & ~((1 << 5) - 1)));
448 assert(!(x & ~((1 << 10) - 1)));
449 assert(!(r & ~((1 << 1) - 1)));
450 ii((o<<26)|(m<<17)|(b<<11)|(x<<1)|r);
454 _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
461 _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
469 if (_jitc->no_data) {
473 reg = jit_get_reg(jit_class_gpr);
474 movi(rn(reg), data.i & 0xffffffff);
475 stxi_i(CVT_OFFSET + 4, _FP_REGNO, rn(reg));
477 ldxi_f(r0, _FP_REGNO, CVT_OFFSET + 4);
480 ldi_f(r0, (jit_word_t)i0);
484 _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
487 reg = jit_get_reg(jit_class_gpr);
489 movr_w_f(r0, rn(reg));
494 _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
503 if (_jitc->no_data) {
507 reg = jit_get_reg(jit_class_gpr);
508 # if __WORDSIZE == 32
509 movi(rn(reg), data.i[0]);
510 stxi(CVT_OFFSET, _FP_REGNO, rn(reg));
511 movi(rn(reg), data.i[1]);
512 stxi(CVT_OFFSET + 4, _FP_REGNO, rn(reg));
514 movi(rn(reg), data.w);
515 stxi(CVT_OFFSET, _FP_REGNO, rn(reg));
518 ldxi_d(r0, _FP_REGNO, CVT_OFFSET);
521 ldi_d(r0, (jit_word_t)i0);
524 # if __WORDSIZE == 32
526 _movi_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1)
529 t0 = jit_get_reg(jit_class_gpr);
530 t1 = jit_get_reg(jit_class_gpr);
533 movr_ww_d(r0, rn(t0), rn(t1));
539 _movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
542 reg = jit_get_reg(jit_class_gpr);
544 movr_w_d(r0, rn(reg));
550 _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
552 # if __WORDSIZE == 32
553 jit_int32_t reg, freg, off1, off2;
556 # if __BYTE_ORDER == __BIG_ENDIAN
558 off2 = CVT_OFFSET + 4;
560 off1 = CVT_OFFSET + 4;
564 reg = jit_get_reg(jit_class_gpr);
565 freg = jit_get_reg(jit_class_fpr);
567 movi(rn(reg), 0x43300000);
568 stxi_i(off1, _FP_REGNO, rn(reg));
569 movi(rn(reg), 0x80000000);
570 stxi_i(off2, _FP_REGNO, rn(reg));
571 ldxi_d(rn(freg), _FP_REGNO, CVT_OFFSET);
572 xorr(rn(reg), r1, rn(reg));
573 stxi_i(off2, _FP_REGNO, rn(reg));
574 ldxi_d(r0, _FP_REGNO, CVT_OFFSET);
575 subr_d(r0, r0, rn(freg));
580 stxi(CVT_OFFSET, _FP_REGNO, r1);
581 ldxi_d(r0, _FP_REGNO, CVT_OFFSET);
587 _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
590 reg = jit_get_reg(jit_class_fpr);
594 stxi_d(CVT_OFFSET, _FP_REGNO, rn(reg));
595 # if __BYTE_ORDER == __BIG_ENDIAN
596 ldxi_i(r0, _FP_REGNO, CVT_OFFSET + 4);
598 ldxi_i(r0, _FP_REGNO, CVT_OFFSET);
603 # if __WORDSIZE == 64
605 _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
608 reg = jit_get_reg(jit_class_fpr);
612 stxi_d(CVT_OFFSET, _FP_REGNO, rn(reg));
613 ldxi(r0, _FP_REGNO, CVT_OFFSET);
620 _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
622 movr_f(rn(JIT_FA0), r1);
623 calli((jit_word_t)sqrtf
628 movr_f(r0, rn(JIT_FRET));
632 _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
634 movr_d(rn(JIT_FA0), r1);
635 calli((jit_word_t)sqrt
640 movr_d(r0, rn(JIT_FRET));
644 # define fpr_opi(name, type, size) \
646 _##name##i_##type(jit_state_t *_jit, \
647 jit_int32_t r0, jit_int32_t r1, \
648 jit_float##size##_t *i0) \
650 jit_int32_t reg = jit_get_reg(jit_class_fpr); \
651 movi_##type(rn(reg), i0); \
652 name##r_##type(r0, r1, rn(reg)); \
653 jit_unget_reg(reg); \
655 # define fpr_bopi(name, type, size) \
657 _b##name##i_##type(jit_state_t *_jit, \
658 jit_word_t i0, jit_int32_t r0, \
659 jit_float##size##_t *i1) \
662 jit_int32_t reg = jit_get_reg(jit_class_fpr| \
663 jit_class_nospill); \
664 movi_##type(rn(reg), i1); \
665 word = b##name##r_##type(i0, r0, rn(reg)); \
666 jit_unget_reg(reg); \
669 # define fopi(name) fpr_opi(name, f, 32)
670 # define fbopi(name) fpr_bopi(name, f, 32)
671 # define dopi(name) fpr_opi(name, d, 64)
672 # define dbopi(name) fpr_bopi(name, d, 64)
686 _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
690 EXTRWI(r0, r0, 1, CR_LT);
696 _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
699 CREQV(CR_GT, CR_GT, CR_UN);
701 EXTRWI(r0, r0, 1, CR_GT);
707 _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
711 EXTRWI(r0, r0, 1, CR_EQ);
717 _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
720 CREQV(CR_LT, CR_LT, CR_UN);
722 EXTRWI(r0, r0, 1, CR_LT);
728 _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
732 EXTRWI(r0, r0, 1, CR_GT);
738 _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
743 EXTRWI(r0, r0, 1, CR_EQ);
749 _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
752 CROR(CR_LT, CR_LT, CR_UN);
754 EXTRWI(r0, r0, 1, CR_LT);
760 _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
765 EXTRWI(r0, r0, 1, CR_GT);
771 _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
774 CROR(CR_EQ, CR_EQ, CR_UN);
776 EXTRWI(r0, r0, 1, CR_EQ);
782 _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
787 EXTRWI(r0, r0, 1, CR_LT);
793 _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
796 CROR(CR_GT, CR_GT, CR_UN);
798 EXTRWI(r0, r0, 1, CR_GT);
804 _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
807 CROR(CR_GT, CR_GT, CR_LT);
809 EXTRWI(r0, r0, 1, CR_GT);
815 _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
820 EXTRWI(r0, r0, 1, CR_UN);
826 _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
830 EXTRWI(r0, r0, 1, CR_UN);
836 _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
849 _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
853 CREQV(CR_GT, CR_GT, CR_UN);
863 _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
876 _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
880 CREQV(CR_LT, CR_LT, CR_UN);
890 _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
903 _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
916 _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
920 CROR(CR_LT, CR_LT, CR_UN);
930 _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
943 _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
947 CROR(CR_EQ, CR_EQ, CR_UN);
957 _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
970 _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
974 CROR(CR_GT, CR_GT, CR_UN);
984 _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
988 CROR(CR_EQ, CR_LT, CR_GT);
998 _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1001 FCMPU(CR_0, r0, r1);
1011 _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1014 FCMPU(CR_0, r0, r1);
1024 _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1029 if (can_sign_extend_short_p(i0))
1030 LFS(r0, _R0_REGNO, i0);
1031 else if (can_sign_extend_int_p(i0)) {
1032 hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15));
1033 lo = (jit_int16_t)(i0 - (hi << 16));
1034 reg = jit_get_reg(jit_class_gpr);
1035 if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr);
1037 LFS(r0, rn(reg), lo);
1039 if (inv) jit_unget_reg(_R0);
1042 reg = jit_get_reg(jit_class_gpr);
1050 _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
1055 if (can_sign_extend_short_p(i0))
1056 LFD(r0, _R0_REGNO, i0);
1057 else if (can_sign_extend_int_p(i0)) {
1058 hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15));
1059 lo = (jit_int16_t)(i0 - (hi << 16));
1060 reg = jit_get_reg(jit_class_gpr);
1061 if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr);
1063 LFD(r0, rn(reg), lo);
1065 if (inv) jit_unget_reg(_R0);
1068 reg = jit_get_reg(jit_class_gpr);
1076 _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1079 if (r1 == _R0_REGNO) {
1080 if (r2 != _R0_REGNO)
1083 reg = jit_get_reg(jit_class_gpr);
1085 LFSX(r0, rn(reg), r2);
1094 _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1097 if (r1 == _R0_REGNO) {
1098 if (r2 != _R0_REGNO)
1101 reg = jit_get_reg(jit_class_gpr);
1103 LFDX(r0, rn(reg), r2);
1112 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1117 else if (can_sign_extend_short_p(i0)) {
1118 if (r1 == _R0_REGNO) {
1119 reg = jit_get_reg(jit_class_gpr);
1121 LFS(r0, rn(reg), i0);
1128 reg = jit_get_reg(jit_class_gpr);
1130 ldxr_f(r0, r1, rn(reg));
1136 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
1141 else if (can_sign_extend_short_p(i0)) {
1142 if (r1 == _R0_REGNO) {
1143 reg = jit_get_reg(jit_class_gpr);
1145 LFD(r0, rn(reg), i0);
1152 reg = jit_get_reg(jit_class_gpr);
1154 ldxr_d(r0, r1, rn(reg));
1160 _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1165 if (can_sign_extend_short_p(i0))
1166 STFS(r0, _R0_REGNO, i0);
1167 else if (can_sign_extend_int_p(i0)) {
1168 hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15));
1169 lo = (jit_int16_t)(i0 - (hi << 16));
1170 reg = jit_get_reg(jit_class_gpr);
1171 if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr);
1173 STFS(r0, rn(reg), lo);
1175 if (inv) jit_unget_reg(_R0);
1178 reg = jit_get_reg(jit_class_gpr);
1186 _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
1191 if (can_sign_extend_short_p(i0))
1192 STFD(r0, _R0_REGNO, i0);
1193 else if (can_sign_extend_int_p(i0)) {
1194 hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15));
1195 lo = (jit_int16_t)(i0 - (hi << 16));
1196 reg = jit_get_reg(jit_class_gpr);
1197 if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr);
1199 STFD(r0, rn(reg), lo);
1201 if (inv) jit_unget_reg(_R0);
1204 reg = jit_get_reg(jit_class_gpr);
1212 _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1215 if (r0 == _R0_REGNO) {
1216 if (r1 != _R0_REGNO)
1219 reg = jit_get_reg(jit_class_gpr);
1221 STFSX(r2, rn(reg), r0);
1230 _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
1233 if (r0 == _R0_REGNO) {
1234 if (r1 != _R0_REGNO)
1237 reg = jit_get_reg(jit_class_gpr);
1239 STFDX(r2, rn(reg), r1);
1248 _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1253 else if (can_sign_extend_short_p(i0)) {
1254 if (r0 == _R0_REGNO) {
1255 reg = jit_get_reg(jit_class_gpr);
1257 STFS(r1, rn(reg), i0);
1264 reg = jit_get_reg(jit_class_gpr);
1266 stxr_f(rn(reg), r0, r1);
1272 _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1277 else if (can_sign_extend_short_p(i0)) {
1278 if (r0 == _R0_REGNO) {
1279 reg = jit_get_reg(jit_class_gpr);
1281 STFD(r1, rn(reg), i0);
1288 reg = jit_get_reg(jit_class_gpr);
1290 stxr_d(rn(reg), r0, r1);