2 * Copyright (C) 2012-2022 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 /* match vfpv3 result */
22 #define NAN_TO_INT_IS_ZERO 1
23 extern float sqrtf(float);
24 extern double sqrt(double);
25 extern float __addsf3(float, float);
26 extern double __adddf3(double, double);
27 extern float __aeabi_fsub(float, float);
28 extern double __aeabi_dsub(double, double);
29 extern float __aeabi_fmul(float, float);
30 extern double __aeabi_dmul(double, double);
31 extern float __aeabi_fdiv(float, float);
32 extern double __aeabi_ddiv(double, double);
33 extern float __aeabi_i2f(int);
34 extern double __aeabi_i2d(int);
35 extern float __aeabi_d2f(double);
36 extern double __aeabi_f2d(float);
37 extern int __aeabi_f2iz(float);
38 extern int __aeabi_d2iz(double);
39 extern int __aeabi_fcmplt(float, float);
40 extern int __aeabi_dcmplt(double, double);
41 extern int __aeabi_fcmple(float, float);
42 extern int __aeabi_dcmple(double, double);
43 extern int __aeabi_fcmpeq(float, float);
44 extern int __aeabi_dcmpeq(double, double);
45 extern int __aeabi_fcmpge(float, float);
46 extern int __aeabi_dcmpge(double, double);
47 extern int __aeabi_fcmpgt(float, float);
48 extern int __aeabi_dcmpgt(double, double);
49 extern int __aeabi_fcmpun(float, float);
50 extern int __aeabi_dcmpun(double, double);
51 # define swf_ff(i0,r0,r1) _swf_ff(_jit,i0,r0,r1)
53 _swf_ff(jit_state_t*,float(*)(float),jit_int32_t,jit_int32_t) maybe_unused;
54 # define swf_dd(i0,r0,r1) _swf_dd(_jit,i0,r0,r1)
56 _swf_dd(jit_state_t*,double(*)(double),jit_int32_t,jit_int32_t) maybe_unused;
57 # define swf_fff(i0,r0,r1,r2) _swf_fff(_jit,i0,r0,r1,r2)
58 static void _swf_fff(jit_state_t*,float(*)(float,float),
59 jit_int32_t,jit_int32_t,jit_int32_t);
60 # define swf_ddd(i0,r0,r1,r2) _swf_ddd(_jit,i0,r0,r1,r2)
61 static void _swf_ddd(jit_state_t*,double(*)(double,double),
62 jit_int32_t,jit_int32_t,jit_int32_t);
63 # define swf_fff_(i0,r0,r1,i1) _swf_fff_(_jit,i0,r0,r1,i1)
64 static void _swf_fff_(jit_state_t*,float(*)(float,float),
65 jit_int32_t,jit_int32_t,jit_float32_t);
66 # define swf_ddd_(i0,r0,r1,i1) _swf_ddd_(_jit,i0,r0,r1,i1)
67 static void _swf_ddd_(jit_state_t*,double(*)(double,double),
68 jit_int32_t,jit_int32_t,jit_float64_t);
69 # define swf_iff(i0,r0,r1,r2) _swf_iff(_jit,i0,r0,r1,r2)
70 static void _swf_iff(jit_state_t*,int(*)(float,float),
71 jit_int32_t,jit_int32_t,jit_int32_t);
72 # define swf_idd(i0,r0,r1,r2) _swf_idd(_jit,i0,r0,r1,r2)
73 static void _swf_idd(jit_state_t*,int(*)(double,double),
74 jit_int32_t,jit_int32_t,jit_int32_t);
75 # define swf_iff_(i0,r0,r1,r2) _swf_iff_(_jit,i0,r0,r1,r2)
76 static void _swf_iff_(jit_state_t*,int(*)(float,float),
77 jit_int32_t,jit_int32_t,jit_float32_t);
78 # define swf_idd_(i0,r0,r1,r2) _swf_idd_(_jit,i0,r0,r1,r2)
79 static void _swf_idd_(jit_state_t*,int(*)(double,double),
80 jit_int32_t,jit_int32_t,jit_float64_t);
81 # define swf_iunff(i0,r0,r1,r2) _swf_iunff(_jit,i0,r0,r1,r2)
82 static void _swf_iunff(jit_state_t*,int(*)(float,float),
83 jit_int32_t,jit_int32_t,jit_int32_t);
84 # define swf_iundd(i0,r0,r1,r2) _swf_iundd(_jit,i0,r0,r1,r2)
85 static void _swf_iundd(jit_state_t*,int(*)(double,double),
86 jit_int32_t,jit_int32_t,jit_int32_t);
87 # define swf_iunff_(i0,r0,r1,i1) _swf_iunff_(_jit,i0,r0,r1,i1)
88 static void _swf_iunff_(jit_state_t*,int(*)(float,float),
89 jit_int32_t,jit_int32_t,jit_float32_t);
90 # define swf_iundd_(i0,r0,r1,i1) _swf_iundd_(_jit,i0,r0,r1,i1)
91 static void _swf_iundd_(jit_state_t*,int(*)(double,double),
92 jit_int32_t,jit_int32_t,jit_float64_t);
93 # define swf_bff(i0,cc,i1,r0,r1) _swf_bff(_jit,i0,cc,i1,r0,r1)
94 static jit_word_t _swf_bff(jit_state_t*,int(*)(float,float),int,
95 jit_word_t,jit_int32_t,jit_int32_t);
96 # define swf_bdd(i0,cc,i1,r0,r1) _swf_bdd(_jit,i0,cc,i1,r0,r1)
97 static jit_word_t _swf_bdd(jit_state_t*,int(*)(double,double),int,
98 jit_word_t,jit_int32_t,jit_int32_t);
99 # define swf_bff_(i0,cc,i1,r0,i2) _swf_bff_(_jit,i0,cc,i1,r0,i2)
100 static jit_word_t _swf_bff_(jit_state_t*,int(*)(float,float),int,
101 jit_word_t,jit_int32_t,jit_float32_t);
102 # define swf_bdd_(i0,cc,i1,r0,i2) _swf_bdd_(_jit,i0,cc,i1,r0,i2)
103 static jit_word_t _swf_bdd_(jit_state_t*,int(*)(double,double),int,
104 jit_word_t,jit_int32_t,jit_float64_t);
105 # define swf_bunff(eq,i0,r0,r1) _swf_bunff(_jit,eq,i0,r0,r1)
106 static jit_word_t _swf_bunff(jit_state_t*,int,
107 jit_word_t,jit_int32_t,jit_int32_t);
108 # define swf_bundd(eq,i0,r0,r1) _swf_bundd(_jit,eq,i0,r0,r1)
109 static jit_word_t _swf_bundd(jit_state_t*,int,
110 jit_word_t,jit_int32_t,jit_int32_t);
111 # define swf_bunff_(eq,i0,r0,i1) _swf_bunff_(_jit,eq,i0,r0,i1)
112 static jit_word_t _swf_bunff_(jit_state_t*,int,
113 jit_word_t,jit_int32_t,jit_float32_t);
114 # define swf_bundd_(eq,i0,r0,i1) _swf_bundd_(_jit,eq,i0,r0,i1)
115 static jit_word_t _swf_bundd_(jit_state_t*,int,
116 jit_word_t,jit_int32_t,jit_float64_t);
117 # define swf_extr_f(r0,r1) _swf_extr_f(_jit,r0,r1)
118 static void _swf_extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
119 # define swf_extr_d(r0,r1) _swf_extr_d(_jit,r0,r1)
120 static void _swf_extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
121 # define swf_extr_d_f(r0,r1) _swf_extr_d_f(_jit,r0,r1)
122 static void _swf_extr_d_f(jit_state_t*,jit_int32_t,jit_int32_t);
123 # define swf_extr_f_d(r0,r1) _swf_extr_f_d(_jit,r0,r1)
124 static void _swf_extr_f_d(jit_state_t*,jit_int32_t,jit_int32_t);
125 # define swf_truncr_f_i(r0,r1) _swf_truncr_f_i(_jit,r0,r1)
126 static void _swf_truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
127 # define swf_truncr_d_i(r0,r1) _swf_truncr_d_i(_jit,r0,r1)
128 static void _swf_truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
129 # define swf_movr_f(r0,r1) _swf_movr_f(_jit,r0,r1)
130 static void _swf_movr_f(jit_state_t*,jit_int32_t,jit_int32_t);
131 # define swf_movr_d(r0,r1) _swf_movr_d(_jit,r0,r1)
132 static void _swf_movr_d(jit_state_t*,jit_int32_t,jit_int32_t);
133 # define swf_movi_f(r0,i0) _swf_movi_f(_jit,r0,i0)
134 static void _swf_movi_f(jit_state_t*,jit_int32_t,jit_float32_t);
135 # define swf_movi_d(r0,i0) _swf_movi_d(_jit,r0,i0)
136 static void _swf_movi_d(jit_state_t*,jit_int32_t,jit_float64_t);
137 # define swf_absr_f(r0,r1) _swf_absr_f(_jit,r0,r1)
138 static void _swf_absr_f(jit_state_t*,jit_int32_t,jit_int32_t);
139 # define swf_absr_d(r0,r1) _swf_absr_d(_jit,r0,r1)
140 static void _swf_absr_d(jit_state_t*,jit_int32_t,jit_int32_t);
141 # define swf_negr_f(r0,r1) _swf_negr_f(_jit,r0,r1)
142 static void _swf_negr_f(jit_state_t*,jit_int32_t,jit_int32_t);
143 # define swf_negr_d(r0,r1) _swf_negr_d(_jit,r0,r1)
144 static void _swf_negr_d(jit_state_t*,jit_int32_t,jit_int32_t);
145 # define swf_sqrtr_f(r0,r1) swf_ff(sqrtf,r0,r1)
146 # define swf_sqrtr_d(r0,r1) swf_dd(sqrt,r0,r1)
147 # define swf_addr_f(r0,r1,r2) swf_fff(__addsf3,r0,r1,r2)
148 # define swf_addi_f(r0,r1,i0) swf_fff_(__addsf3,r0,r1,i0)
149 # define swf_addr_d(r0,r1,r2) swf_ddd(__adddf3,r0,r1,r2)
150 # define swf_addi_d(r0,r1,i0) swf_ddd_(__adddf3,r0,r1,i0)
151 # define swf_subr_f(r0,r1,r2) swf_fff(__aeabi_fsub,r0,r1,r2)
152 # define swf_subi_f(r0,r1,i0) swf_fff_(__aeabi_fsub,r0,r1,i0)
153 # define swf_subr_d(r0,r1,r2) swf_ddd(__aeabi_dsub,r0,r1,r2)
154 # define swf_subi_d(r0,r1,i0) swf_ddd_(__aeabi_dsub,r0,r1,i0)
155 # define swf_rsbr_f(r0, r1, r2) swf_subr_f(r0, r2, r1)
156 # define swf_rsbi_f(r0, r1, i0) _swf_rsbi_f(_jit, r0, r1, i0)
157 static void _swf_rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t);
158 # define swf_rsbr_d(r0, r1, r2) swf_subr_d(r0, r2, r1)
159 # define swf_rsbi_d(r0, r1, i0) _swf_rsbi_d(_jit, r0, r1, i0)
160 static void _swf_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t);
161 # define swf_mulr_f(r0,r1,r2) swf_fff(__aeabi_fmul,r0,r1,r2)
162 # define swf_muli_f(r0,r1,i0) swf_fff_(__aeabi_fmul,r0,r1,i0)
163 # define swf_mulr_d(r0,r1,r2) swf_ddd(__aeabi_dmul,r0,r1,r2)
164 # define swf_muli_d(r0,r1,i0) swf_ddd_(__aeabi_dmul,r0,r1,i0)
165 # define swf_divr_f(r0,r1,r2) swf_fff(__aeabi_fdiv,r0,r1,r2)
166 # define swf_divi_f(r0,r1,i0) swf_fff_(__aeabi_fdiv,r0,r1,i0)
167 # define swf_divr_d(r0,r1,r2) swf_ddd(__aeabi_ddiv,r0,r1,r2)
168 # define swf_divi_d(r0,r1,i0) swf_ddd_(__aeabi_ddiv,r0,r1,i0)
169 # define swf_ltr_f(r0,r1,r2) swf_iff(__aeabi_fcmplt,r0,r1,r2)
170 # define swf_lti_f(r0,r1,i0) swf_iff_(__aeabi_fcmplt,r0,r1,i0)
171 # define swf_ltr_d(r0,r1,r2) swf_idd(__aeabi_dcmplt,r0,r1,r2)
172 # define swf_lti_d(r0,r1,i0) swf_idd_(__aeabi_dcmplt,r0,r1,i0)
173 # define swf_ler_f(r0,r1,r2) swf_iff(__aeabi_fcmple,r0,r1,r2)
174 # define swf_lei_f(r0,r1,i0) swf_iff_(__aeabi_fcmple,r0,r1,i0)
175 # define swf_ler_d(r0,r1,r2) swf_idd(__aeabi_dcmple,r0,r1,r2)
176 # define swf_lei_d(r0,r1,i0) swf_idd_(__aeabi_dcmple,r0,r1,i0)
177 # define swf_eqr_f(r0,r1,r2) swf_iff(__aeabi_fcmpeq,r0,r1,r2)
178 # define swf_eqi_f(r0,r1,i0) swf_iff_(__aeabi_fcmpeq,r0,r1,i0)
179 # define swf_eqr_d(r0,r1,r2) swf_idd(__aeabi_dcmpeq,r0,r1,r2)
180 # define swf_eqi_d(r0,r1,i0) swf_idd_(__aeabi_dcmpeq,r0,r1,i0)
181 # define swf_ger_f(r0,r1,r2) swf_iff(__aeabi_fcmpge,r0,r1,r2)
182 # define swf_gei_f(r0,r1,i0) swf_iff_(__aeabi_fcmpge,r0,r1,i0)
183 # define swf_ger_d(r0,r1,r2) swf_idd(__aeabi_dcmpge,r0,r1,r2)
184 # define swf_gei_d(r0,r1,i0) swf_idd_(__aeabi_dcmpge,r0,r1,i0)
185 # define swf_gtr_f(r0,r1,r2) swf_iff(__aeabi_fcmpgt,r0,r1,r2)
186 # define swf_gti_f(r0,r1,i0) swf_iff_(__aeabi_fcmpgt,r0,r1,i0)
187 # define swf_gtr_d(r0,r1,r2) swf_idd(__aeabi_dcmpgt,r0,r1,r2)
188 # define swf_gti_d(r0,r1,i0) swf_idd_(__aeabi_dcmpgt,r0,r1,i0)
189 # define swf_ner_f(r0,r1,r2) _swf_ner_f(_jit,r0,r1,r2)
190 static void _swf_ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
191 # define swf_nei_f(r0,r1,i0) _swf_nei_f(_jit,r0,r1,i0)
192 static void _swf_nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t);
193 # define swf_ner_d(r0,r1,r2) _swf_ner_d(_jit,r0,r1,r2)
194 static void _swf_ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
195 # define swf_nei_d(r0,r1,i0) _swf_nei_d(_jit,r0,r1,i0)
196 static void _swf_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t);
197 # define swf_unltr_f(r0,r1,r2) swf_iunff(__aeabi_fcmplt,r0,r1,r2)
198 # define swf_unlti_f(r0,r1,i0) swf_iunff_(__aeabi_fcmplt,r0,r1,i0)
199 # define swf_unltr_d(r0,r1,r2) swf_iundd(__aeabi_dcmplt,r0,r1,r2)
200 # define swf_unlti_d(r0,r1,i0) swf_iundd_(__aeabi_dcmplt,r0,r1,i0)
201 # define swf_unler_f(r0,r1,r2) swf_iunff(__aeabi_fcmple,r0,r1,r2)
202 # define swf_unlei_f(r0,r1,i0) swf_iunff_(__aeabi_fcmple,r0,r1,i0)
203 # define swf_unler_d(r0,r1,r2) swf_iundd(__aeabi_dcmple,r0,r1,r2)
204 # define swf_unlei_d(r0,r1,i0) swf_iundd_(__aeabi_dcmple,r0,r1,i0)
205 # define swf_uneqr_f(r0,r1,r2) swf_iunff(__aeabi_fcmpeq,r0,r1,r2)
206 # define swf_uneqi_f(r0,r1,i0) swf_iunff_(__aeabi_fcmpeq,r0,r1,i0)
207 # define swf_uneqr_d(r0,r1,r2) swf_iundd(__aeabi_dcmpeq,r0,r1,r2)
208 # define swf_uneqi_d(r0,r1,i0) swf_iundd_(__aeabi_dcmpeq,r0,r1,i0)
209 # define swf_unger_f(r0,r1,r2) swf_iunff(__aeabi_fcmpge,r0,r1,r2)
210 # define swf_ungei_f(r0,r1,i0) swf_iunff_(__aeabi_fcmpge,r0,r1,i0)
211 # define swf_unger_d(r0,r1,r2) swf_iundd(__aeabi_dcmpge,r0,r1,r2)
212 # define swf_ungei_d(r0,r1,i0) swf_iundd_(__aeabi_dcmpge,r0,r1,i0)
213 # define swf_ungtr_f(r0,r1,r2) swf_iunff(__aeabi_fcmpgt,r0,r1,r2)
214 # define swf_ungti_f(r0,r1,i0) swf_iunff_(__aeabi_fcmpgt,r0,r1,i0)
215 # define swf_ungtr_d(r0,r1,r2) swf_iundd(__aeabi_dcmpgt,r0,r1,r2)
216 # define swf_ungti_d(r0,r1,i0) swf_iundd_(__aeabi_dcmpgt,r0,r1,i0)
217 # define swf_ltgtr_f(r0,r1,r2) _swf_ltgtr_f(_jit,r0,r1,r2)
218 static void _swf_ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
219 # define swf_ltgti_f(r0,r1,i0) _swf_ltgti_f(_jit,r0,r1,i0)
220 static void _swf_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t);
221 # define swf_ltgtr_d(r0,r1,r2) _swf_ltgtr_d(_jit,r0,r1,r2)
222 static void _swf_ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
223 # define swf_ltgti_d(r0,r1,i0) _swf_ltgti_d(_jit,r0,r1,i0)
224 static void _swf_ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t);
225 # define swf_ordr_f(r0,r1,r2) _swf_ordr_f(_jit,r0,r1,r2)
226 static void _swf_ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
227 # define swf_ordi_f(r0,r1,i0) _swf_ordi_f(_jit,r0,r1,i0)
228 static void _swf_ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t);
229 # define swf_ordr_d(r0,r1,r2) _swf_ordr_d(_jit,r0,r1,r2)
230 static void _swf_ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
231 # define swf_ordi_d(r0,r1,i0) _swf_ordi_d(_jit,r0,r1,i0)
232 static void _swf_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t);
233 # define swf_unordr_f(r0,r1,r2) swf_iunff(__aeabi_fcmpun,r0,r1,r2)
234 # define swf_unordi_f(r0,r1,i0) swf_iunff_(__aeabi_fcmpun,r0,r1,i0)
235 # define swf_unordr_d(r0,r1,r2) swf_iundd(__aeabi_dcmpun,r0,r1,r2)
236 # define swf_unordi_d(r0,r1,i0) swf_iundd_(__aeabi_dcmpun,r0,r1,i0)
237 # define swf_bltr_f(i0,r0,r1) swf_bff(__aeabi_fcmplt,ARM_CC_NE,i0,r0,r1)
238 # define swf_blti_f(i0,r0,i1) swf_bff_(__aeabi_fcmplt,ARM_CC_NE,i0,r0,i1)
239 # define swf_bltr_d(i0,r0,r1) swf_bdd(__aeabi_dcmplt,ARM_CC_NE,i0,r0,r1)
240 # define swf_blti_d(i0,r0,i1) swf_bdd_(__aeabi_dcmplt,ARM_CC_NE,i0,r0,i1)
241 # define swf_bler_f(i0,r0,r1) swf_bff(__aeabi_fcmple,ARM_CC_NE,i0,r0,r1)
242 # define swf_blei_f(i0,r0,i1) swf_bff_(__aeabi_fcmple,ARM_CC_NE,i0,r0,i1)
243 # define swf_bler_d(i0,r0,r1) swf_bdd(__aeabi_dcmple,ARM_CC_NE,i0,r0,r1)
244 # define swf_blei_d(i0,r0,i1) swf_bdd_(__aeabi_dcmple,ARM_CC_NE,i0,r0,i1)
245 # define swf_beqr_f(i0,r0,r1) swf_bff(__aeabi_fcmpeq,ARM_CC_NE,i0,r0,r1)
246 # define swf_beqi_f(i0,r0,i1) swf_bff_(__aeabi_fcmpeq,ARM_CC_NE,i0,r0,i1)
247 # define swf_beqr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpeq,ARM_CC_NE,i0,r0,r1)
248 # define swf_beqi_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpeq,ARM_CC_NE,i0,r0,i1)
249 # define swf_bger_f(i0,r0,r1) swf_bff(__aeabi_fcmpge,ARM_CC_NE,i0,r0,r1)
250 # define swf_bgei_f(i0,r0,i1) swf_bff_(__aeabi_fcmpge,ARM_CC_NE,i0,r0,i1)
251 # define swf_bger_d(i0,r0,r1) swf_bdd(__aeabi_dcmpge,ARM_CC_NE,i0,r0,r1)
252 # define swf_bgei_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpge,ARM_CC_NE,i0,r0,i1)
253 # define swf_bgtr_f(i0,r0,r1) swf_bff(__aeabi_fcmpgt,ARM_CC_NE,i0,r0,r1)
254 # define swf_bgti_f(i0,r0,i1) swf_bff_(__aeabi_fcmpgt,ARM_CC_NE,i0,r0,i1)
255 # define swf_bgtr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpgt,ARM_CC_NE,i0,r0,r1)
256 # define swf_bgti_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpgt,ARM_CC_NE,i0,r0,i1)
257 # define swf_bner_f(i0,r0,r1) swf_bff(__aeabi_fcmpeq,ARM_CC_EQ,i0,r0,r1)
258 # define swf_bnei_f(i0,r0,i1) swf_bff_(__aeabi_fcmpeq,ARM_CC_EQ,i0,r0,i1)
259 # define swf_bner_d(i0,r0,r1) swf_bdd(__aeabi_dcmpeq,ARM_CC_EQ,i0,r0,r1)
260 # define swf_bnei_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpeq,ARM_CC_EQ,i0,r0,i1)
261 # define swf_bunltr_f(i0,r0,r1) swf_bff(__aeabi_fcmpge,ARM_CC_EQ,i0,r0,r1)
262 # define swf_bunlti_f(i0,r0,i1) swf_bff_(__aeabi_fcmpge,ARM_CC_EQ,i0,r0,i1)
263 # define swf_bunltr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpge,ARM_CC_EQ,i0,r0,r1)
264 # define swf_bunlti_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpge,ARM_CC_EQ,i0,r0,i1)
265 # define swf_bunler_f(i0,r0,r1) swf_bff(__aeabi_fcmpgt,ARM_CC_EQ,i0,r0,r1)
266 # define swf_bunlei_f(i0,r0,i1) swf_bff_(__aeabi_fcmpgt,ARM_CC_EQ,i0,r0,i1)
267 # define swf_bunler_d(i0,r0,r1) swf_bdd(__aeabi_dcmpgt,ARM_CC_EQ,i0,r0,r1)
268 # define swf_bunlei_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpgt,ARM_CC_EQ,i0,r0,i1)
269 # define swf_buneqr_f(i0,r0,r1) swf_bunff(1,i0,r0,r1)
270 # define swf_buneqi_f(i0,r0,i1) swf_bunff_(1,i0,r0,i1)
271 # define swf_buneqr_d(i0,r0,r1) swf_bundd(1,i0,r0,r1)
272 # define swf_buneqi_d(i0,r0,i1) swf_bundd_(1,i0,r0,i1)
273 # define swf_bunger_f(i0,r0,r1) swf_bff(__aeabi_fcmplt,ARM_CC_EQ,i0,r0,r1)
274 # define swf_bungei_f(i0,r0,i1) swf_bff_(__aeabi_fcmplt,ARM_CC_EQ,i0,r0,i1)
275 # define swf_bunger_d(i0,r0,r1) swf_bdd(__aeabi_dcmplt,ARM_CC_EQ,i0,r0,r1)
276 # define swf_bungei_d(i0,r0,i1) swf_bdd_(__aeabi_dcmplt,ARM_CC_EQ,i0,r0,i1)
277 # define swf_bungtr_f(i0,r0,r1) swf_bff(__aeabi_fcmple,ARM_CC_EQ,i0,r0,r1)
278 # define swf_bungti_f(i0,r0,i1) swf_bff_(__aeabi_fcmple,ARM_CC_EQ,i0,r0,i1)
279 # define swf_bungtr_d(i0,r0,r1) swf_bdd(__aeabi_dcmple,ARM_CC_EQ,i0,r0,r1)
280 # define swf_bungti_d(i0,r0,i1) swf_bdd_(__aeabi_dcmple,ARM_CC_EQ,i0,r0,i1)
281 # define swf_bltgtr_f(i0,r0,r1) swf_bunff(0,i0,r0,r1)
282 # define swf_bltgti_f(i0,r0,i1) swf_bunff_(0,i0,r0,i1)
283 # define swf_bltgtr_d(i0,r0,r1) swf_bundd(0,i0,r0,r1)
284 # define swf_bltgti_d(i0,r0,i1) swf_bundd_(0,i0,r0,i1)
285 # define swf_bordr_f(i0,r0,r1) swf_bff(__aeabi_fcmpun,ARM_CC_EQ,i0,r0,r1)
286 # define swf_bordi_f(i0,r0,i1) swf_bff_(__aeabi_fcmpun,ARM_CC_EQ,i0,r0,i1)
287 # define swf_bordr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpun,ARM_CC_EQ,i0,r0,r1)
288 # define swf_bordi_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpun,ARM_CC_EQ,i0,r0,i1)
289 # define swf_bunordr_f(i0,r0,r1) swf_bff(__aeabi_fcmpun,ARM_CC_NE,i0,r0,r1)
290 # define swf_bunordi_f(i0,r0,i1) swf_bff_(__aeabi_fcmpun,ARM_CC_NE,i0,r0,i1)
291 # define swf_bunordr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpun,ARM_CC_NE,i0,r0,r1)
292 # define swf_bunordi_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpun,ARM_CC_NE,i0,r0,i1)
293 # define swf_ldr_f(r0,r1) _swf_ldr_f(_jit,r0,r1)
294 static void _swf_ldr_f(jit_state_t*,jit_int32_t,jit_int32_t);
295 # define swf_ldr_d(r0,r1) _swf_ldr_d(_jit,r0,r1)
296 static void _swf_ldr_d(jit_state_t*,jit_int32_t,jit_int32_t);
297 # define swf_ldi_f(r0,i0) _swf_ldi_f(_jit,r0,i0)
298 static void _swf_ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
299 # define swf_ldi_d(r0,i0) _swf_ldi_d(_jit,r0,i0)
300 static void _swf_ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
301 # define swf_ldxr_f(r0,r1,r2) _swf_ldxr_f(_jit,r0,r1,r2)
302 static void _swf_ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
303 # define swf_ldxr_d(r0,r1,r2) _swf_ldxr_d(_jit,r0,r1,r2)
304 static void _swf_ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
305 # define swf_ldxi_f(r0,r1,i0) _swf_ldxi_f(_jit,r0,r1,i0)
306 static void _swf_ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
307 # define swf_ldxi_d(r0,r1,i0) _swf_ldxi_d(_jit,r0,r1,i0)
308 static void _swf_ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
309 # define swf_str_f(r0,r1) _swf_str_f(_jit,r0,r1)
310 static void _swf_str_f(jit_state_t*,jit_int32_t,jit_int32_t);
311 # define swf_str_d(r0,r1) _swf_str_d(_jit,r0,r1)
312 static void _swf_str_d(jit_state_t*,jit_int32_t,jit_int32_t);
313 # define swf_sti_f(r0,i0) _swf_sti_f(_jit,r0,i0)
314 static void _swf_sti_f(jit_state_t*,jit_word_t,jit_int32_t);
315 # define swf_sti_d(r0,i0) _swf_sti_d(_jit,r0,i0)
316 static void _swf_sti_d(jit_state_t*,jit_word_t,jit_int32_t);
317 # define swf_stxr_f(r0,r1,r2) _swf_stxr_f(_jit,r0,r1,r2)
318 static void _swf_stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
319 # define swf_stxr_d(r0,r1,r2) _swf_stxr_d(_jit,r0,r1,r2)
320 static void _swf_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
321 # define swf_stxi_f(r0,r1,i0) _swf_stxi_f(_jit,r0,r1,i0)
322 static void _swf_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
323 # define swf_stxi_d(r0,r1,i0) _swf_stxi_d(_jit,r0,r1,i0)
324 static void _swf_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
325 # define swf_vaarg_d(r0, r1) _swf_vaarg_d(_jit, r0, r1)
326 static void _swf_vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t);
330 #define swf_off(rn) ((rn - 16) << 2)
332 #define swf_call(function, label, regno) \
335 if (!jit_exchange_p()) { \
337 d = (((jit_word_t)function - _jit->pc.w) >> 1) - 2; \
339 d = (((jit_word_t)function - _jit->pc.w) >> 2) - 2; \
342 T2_BLI(encode_thumb_jump(d)); \
344 BLI(d & 0x00ffffff); \
351 movi(regno, (jit_word_t)function); \
358 #define swf_call_with_get_reg(function, label) \
362 if (!jit_exchange_p()) { \
364 d = (((jit_word_t)function - _jit->pc.w) >> 1) - 2; \
366 d = (((jit_word_t)function - _jit->pc.w) >> 2) - 2; \
369 T2_BLI(encode_thumb_jump(d)); \
371 BLI(d & 0x00ffffff); \
378 reg = jit_get_reg(jit_class_gpr); \
379 movi(rn(reg), (jit_word_t)function); \
384 jit_unget_reg(reg); \
387 #define swf_ldrin(rt, rn, im) \
389 if (jit_thumb_p()) T2_LDRIN(rt, rn, im); \
390 else LDRIN(rt, rn, im); \
392 #define swf_strin(rt, rn, im) \
394 if (jit_thumb_p()) T2_STRIN(rt, rn, im); \
395 else STRIN(rt, rn, im); \
397 #define swf_bici(rt, rn, im) \
400 T2_BICI(rt, rn, encode_thumb_immediate(im)); \
402 BICI(rt, rn, encode_arm_immediate(im)); \
405 #if !defined(__GNUC__)
406 float __addsf3(float u, float v)
412 __adddf3(double u, double v)
418 __aeabi_fsub(float u, float v)
424 __aeabi_dsub(double u, double v)
430 __aeabi_fmul(float u, float v)
436 __aeabi_dmul(double u, double v)
442 __aeabi_fdiv(float u, float v)
448 __aeabi_ddiv(double u, double v)
466 __aeabi_d2f(double u)
478 __aeabi_f2iz(float u)
484 __aeabi_d2iz(double u)
490 __aeabi_fcmplt(float u, float v)
496 __aeabi_dcmplt(double u, double v)
502 __aeabi_fcmple(float u, float v)
508 __aeabi_dcmple(double u, double v)
514 __aeabi_fcmpeq(float u, float v)
520 __aeabi_dcmpeq(double u, double v)
526 __aeabi_fcmpge(float u, float v)
532 __aeabi_dcmpge(double u, double v)
538 __aeabi_fcmpgt(float u, float v)
544 __aeabi_dcmpgt(double u, double v)
550 __aeabi_fcmpun(float u, float v)
552 return ((u != u) || (v != v));
556 __aeabi_dcmpun(double u, double v)
558 return ((u != u) || (v != v));
563 _swf_ff(jit_state_t *_jit, float(*i0)(float),
564 jit_int32_t r0, jit_int32_t r1)
568 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
571 swf_call(i0, fallback, _R1_REGNO);
573 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
576 jit_unget_reg_args();
580 _swf_dd(jit_state_t *_jit, double (*i0)(double),
581 jit_int32_t r0, jit_int32_t r1)
585 if (!jit_thumb_p() && jit_armv5e_p())
586 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
588 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
589 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
594 movr(_R1_REGNO, r1 + 1);
596 swf_call(i0, fallback, _R2_REGNO);
598 if (!jit_thumb_p() && jit_armv5e_p())
599 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
601 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
602 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
607 movr(r0 + 1, _R1_REGNO);
609 jit_unget_reg_args();
613 _swf_fff(jit_state_t *_jit, float (*i0)(float, float),
614 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
618 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
622 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r2) + 8);
625 swf_call(i0, fallback, _R3_REGNO);
627 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
630 jit_unget_reg_args();
634 _swf_ddd(jit_state_t *_jit, double (*i0)(double, double),
635 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
639 if (!jit_thumb_p() && jit_armv5e_p())
640 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
642 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
643 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
648 movr(_R1_REGNO, r1 + 1);
651 if (!jit_thumb_p() && jit_armv5e_p())
652 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
654 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
655 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r2) + 4);
660 movr(_R3_REGNO, r2 + 1);
662 swf_call_with_get_reg(i0, fallback);
664 if (!jit_thumb_p() && jit_armv5e_p())
665 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
667 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
668 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
673 movr(r0 + 1, _R1_REGNO);
675 jit_unget_reg_args();
679 _swf_fff_(jit_state_t *_jit, float (*i0)(float, float),
680 jit_int32_t r0, jit_int32_t r1, jit_float32_t i1)
689 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
692 movi(_R1_REGNO, data.i);
693 swf_call(i0, fallback, _R3_REGNO);
695 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
698 jit_unget_reg_args();
702 _swf_rsbi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0)
710 movi(_R0_REGNO, data.i);
712 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 8);
715 swf_call(__aeabi_fsub, fallback, _R3_REGNO);
717 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
720 jit_unget_reg_args();
724 _swf_ddd_(jit_state_t *_jit, double (*i0)(double, double),
725 jit_int32_t r0, jit_int32_t r1, jit_float64_t i1)
735 if (!jit_thumb_p() && jit_armv5e_p())
736 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
738 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
739 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
744 movr(_R1_REGNO, r1 + 1);
746 movi(_R2_REGNO, data.i[0]);
747 movi(_R3_REGNO, data.i[1]);
748 swf_call_with_get_reg(i0, fallback);
750 if (!jit_thumb_p() && jit_armv5e_p())
751 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
753 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
754 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
759 movr(r0 + 1, _R1_REGNO);
761 jit_unget_reg_args();
765 _swf_rsbi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
773 movi(_R0_REGNO, data.i[0]);
774 movi(_R1_REGNO, data.i[1]);
776 if (!jit_thumb_p() && jit_armv5e_p())
777 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
779 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
780 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r1) + 4);
785 movr(_R3_REGNO, r1 + 1);
787 swf_call_with_get_reg(__aeabi_dsub, fallback);
789 if (!jit_thumb_p() && jit_armv5e_p())
790 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
792 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
793 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
798 movr(r0 + 1, _R1_REGNO);
800 jit_unget_reg_args();
804 _swf_iff(jit_state_t *_jit, int (*i0)(float, float),
805 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
809 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
813 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r2) + 8);
816 swf_call(i0, fallback, _R2_REGNO);
818 jit_unget_reg_args();
822 _swf_idd(jit_state_t *_jit, int (*i0)(double, double),
823 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
827 if (!jit_thumb_p() && jit_armv5e_p())
828 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
830 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
831 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
836 movr(_R1_REGNO, r1 + 1);
839 if (!jit_thumb_p() && jit_armv5e_p())
840 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
842 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
843 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r2) + 4);
848 movr(_R3_REGNO, r2 + 1);
850 swf_call_with_get_reg(i0, fallback);
852 jit_unget_reg_args();
856 _swf_iff_(jit_state_t *_jit, int (*i0)(float, float),
857 jit_int32_t r0, jit_int32_t r1, jit_float32_t i1)
866 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
869 movi(_R1_REGNO, data.i);
870 swf_call(i0, fallback, _R2_REGNO);
872 jit_unget_reg_args();
876 _swf_idd_(jit_state_t *_jit, int (*i0)(double, double),
877 jit_int32_t r0, jit_int32_t r1, jit_float64_t i1)
886 if (!jit_thumb_p() && jit_armv5e_p())
887 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
889 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
890 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
895 movr(_R1_REGNO, r1 + 1);
897 movi(_R2_REGNO, data.i[0]);
898 movi(_R3_REGNO, data.i[1]);
899 swf_call_with_get_reg(i0, fallback);
901 jit_unget_reg_args();
905 _swf_iunff(jit_state_t *_jit, int (*i0)(float, float),
906 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
911 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
915 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r2) + 8);
918 swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
920 T1_CMPI(_R0_REGNO, 0);
927 T2_CC_B(ARM_CC_NE, 0);
931 CC_MOVI(ARM_CC_NE, r0, 1);
936 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
940 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r2) + 8);
943 swf_call(i0, fallback, _R2_REGNO);
945 patch_at(arm_patch_jump, instr, _jit->pc.w);
946 jit_unget_reg_args();
950 _swf_iundd(jit_state_t *_jit, int (*i0)(double, double),
951 jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
956 if (!jit_thumb_p() && jit_armv5e_p())
957 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
959 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
960 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
965 movr(_R1_REGNO, r1 + 1);
968 if (!jit_thumb_p() && jit_armv5e_p())
969 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
971 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
972 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r2) + 4);
977 movr(_R3_REGNO, r2 + 1);
979 swf_call_with_get_reg(__aeabi_dcmpun, dcmpun);
981 T1_CMPI(_R0_REGNO, 0);
988 T2_CC_B(ARM_CC_NE, 0);
992 CC_MOVI(ARM_CC_NE, r0, 1);
997 if (!jit_thumb_p() && jit_armv5e_p())
998 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1000 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1001 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
1005 movr(_R0_REGNO, r1);
1006 movr(_R1_REGNO, r1 + 1);
1008 if (jit_fpr_p(r2)) {
1009 if (!jit_thumb_p() && jit_armv5e_p())
1010 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
1012 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r2) + 8);
1013 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r2) + 4);
1017 movr(_R2_REGNO, r2);
1018 movr(_R3_REGNO, r2 + 1);
1020 swf_call_with_get_reg(i0, fallback);
1021 movr(r0, _R0_REGNO);
1022 patch_at(arm_patch_jump, instr, _jit->pc.w);
1023 jit_unget_reg_args();
1027 _swf_iunff_(jit_state_t *_jit, int (*i0)(float, float),
1028 jit_int32_t r0, jit_int32_t r1, jit_float32_t i1)
1038 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1040 movr(_R0_REGNO, r1);
1041 movi(_R1_REGNO, data.i);
1042 swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
1043 if (jit_thumb_p()) {
1044 T1_CMPI(_R0_REGNO, 0);
1051 T2_CC_B(ARM_CC_NE, 0);
1055 CC_MOVI(ARM_CC_NE, r0, 1);
1060 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1062 movr(_R0_REGNO, r1);
1063 movi(_R1_REGNO, data.i);
1064 swf_call(i0, fallback, _R2_REGNO);
1065 movr(r0, _R0_REGNO);
1066 patch_at(arm_patch_jump, instr, _jit->pc.w);
1067 jit_unget_reg_args();
1071 _swf_iundd_(jit_state_t *_jit, int (*i0)(double, double),
1072 jit_int32_t r0, jit_int32_t r1, jit_float64_t i1)
1081 if (jit_fpr_p(r1)) {
1082 if (!jit_thumb_p() && jit_armv5e_p())
1083 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1085 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1086 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
1090 movr(_R0_REGNO, r1);
1091 movr(_R1_REGNO, r1 + 1);
1093 movi(_R2_REGNO, data.i[0]);
1094 movi(_R3_REGNO, data.i[1]);
1095 swf_call_with_get_reg(__aeabi_dcmpun, dcmpun);
1096 if (jit_thumb_p()) {
1097 T1_CMPI(_R0_REGNO, 0);
1104 T2_CC_B(ARM_CC_NE, 0);
1108 CC_MOVI(ARM_CC_NE, r0, 1);
1112 if (jit_fpr_p(r1)) {
1113 if (!jit_thumb_p() && jit_armv5e_p())
1114 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1116 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1117 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
1121 movr(_R0_REGNO, r1);
1122 movr(_R1_REGNO, r1 + 1);
1124 movi(_R2_REGNO, data.i[0]);
1125 movi(_R3_REGNO, data.i[1]);
1126 swf_call_with_get_reg(i0, fallback);
1127 movr(r0, _R0_REGNO);
1128 patch_at(arm_patch_jump, instr, _jit->pc.w);
1129 jit_unget_reg_args();
1133 _swf_bff(jit_state_t *_jit, int (*i0)(float, float), int cc,
1134 jit_word_t i1, jit_int32_t r0, jit_int32_t r1)
1139 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1141 movr(_R0_REGNO, r0);
1143 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 8);
1145 movr(_R1_REGNO, r1);
1146 swf_call(i0, fallback, _R2_REGNO);
1147 if (jit_thumb_p()) {
1148 T1_CMPI(_R0_REGNO, 0);
1150 d = ((i1 - w) >> 1) - 2;
1152 T2_CC_B(cc, encode_thumb_cc_jump(d));
1157 d = ((i1 - w) >> 2) - 2;
1159 CC_B(cc, d & 0x00ffffff);
1161 jit_unget_reg_args();
1166 _swf_bdd(jit_state_t *_jit, int (*i0)(double, double), int cc,
1167 jit_word_t i1, jit_int32_t r0, jit_int32_t r1)
1171 if (jit_fpr_p(r0)) {
1172 if (!jit_thumb_p() && jit_armv5e_p())
1173 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1175 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1176 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1180 movr(_R0_REGNO, r0);
1181 movr(_R1_REGNO, r0 + 1);
1183 if (jit_fpr_p(r1)) {
1184 if (!jit_thumb_p() && jit_armv5e_p())
1185 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1187 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1188 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r1) + 4);
1192 movr(_R2_REGNO, r1);
1193 movr(_R3_REGNO, r1 + 1);
1195 swf_call_with_get_reg(i0, fallback);
1196 if (jit_thumb_p()) {
1197 T1_CMPI(_R0_REGNO, 0);
1199 d = ((i1 - w) >> 1) - 2;
1201 T2_CC_B(cc, encode_thumb_cc_jump(d));
1206 d = ((i1 - w) >> 2) - 2;
1208 CC_B(cc, d & 0x00ffffff);
1210 jit_unget_reg_args();
1215 _swf_bff_(jit_state_t *_jit, int (*i0)(float, float), int cc,
1216 jit_word_t i1, jit_int32_t r0, jit_float32_t i2)
1226 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1228 movr(_R0_REGNO, r0);
1229 movi(_R1_REGNO, data.i);
1230 swf_call(i0, fallback, _R2_REGNO);
1231 if (jit_thumb_p()) {
1232 T1_CMPI(_R0_REGNO, 0);
1234 d = ((i1 - w) >> 1) - 2;
1236 T2_CC_B(cc, encode_thumb_cc_jump(d));
1241 d = ((i1 - w) >> 2) - 2;
1243 CC_B(cc, d & 0x00ffffff);
1245 jit_unget_reg_args();
1250 _swf_bdd_(jit_state_t *_jit, int (*i0)(double, double), int cc,
1251 jit_word_t i1, jit_int32_t r0, jit_float64_t i2)
1260 if (jit_fpr_p(r0)) {
1261 if (!jit_thumb_p() && jit_armv5e_p())
1262 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1264 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1265 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1269 movr(_R0_REGNO, r0);
1270 movr(_R1_REGNO, r0 + 1);
1272 movi(_R2_REGNO, data.i[0]);
1273 movi(_R3_REGNO, data.i[1]);
1274 swf_call_with_get_reg(i0, fallback);
1275 if (jit_thumb_p()) {
1276 T1_CMPI(_R0_REGNO, 0);
1278 d = ((i1 - w) >> 1) - 2;
1280 T2_CC_B(cc, encode_thumb_cc_jump(d));
1285 d = ((i1 - w) >> 2) - 2;
1287 CC_B(cc, d & 0x00ffffff);
1289 jit_unget_reg_args();
1294 _swf_bunff(jit_state_t *_jit, int eq,
1295 jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1297 jit_word_t w, d, j0, j1;
1300 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1302 movr(_R0_REGNO, r0);
1304 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 8);
1306 movr(_R1_REGNO, r1);
1307 swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
1309 if (jit_thumb_p()) {
1310 T1_CMPI(_R0_REGNO, 0);
1312 T2_CC_B(ARM_CC_NE, 0);
1320 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1322 movr(_R0_REGNO, r0);
1324 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 8);
1326 movr(_R1_REGNO, r1);
1327 swf_call(__aeabi_fcmpeq, fcmpeq, _R2_REGNO);
1328 if (jit_thumb_p()) {
1329 T1_CMPI(_R0_REGNO, 0);
1332 T2_CC_B(ARM_CC_EQ, 0);
1333 patch_at(arm_patch_jump, j0, _jit->pc.w);
1336 T2_CC_B(ARM_CC_NE, 0);
1338 d = ((i0 - w) >> 1) - 2;
1340 T2_B(encode_thumb_jump(d));
1347 patch_at(arm_patch_jump, j0, _jit->pc.w);
1352 d = ((i0 - w) >> 2) - 2;
1357 patch_at(arm_patch_jump, j0, _jit->pc.w);
1358 patch_at(arm_patch_jump, j1, _jit->pc.w);
1359 jit_unget_reg_args();
1364 _swf_bundd(jit_state_t *_jit, int eq,
1365 jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
1367 jit_word_t w, d, j0, j1;
1369 if (jit_fpr_p(r0)) {
1370 if (!jit_thumb_p() && jit_armv5e_p())
1371 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1373 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1374 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1378 movr(_R0_REGNO, r0);
1379 movr(_R1_REGNO, r0 + 1);
1381 if (jit_fpr_p(r1)) {
1382 if (!jit_thumb_p() && jit_armv5e_p())
1383 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1385 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1386 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r1) + 4);
1390 movr(_R2_REGNO, r0);
1391 movr(_R3_REGNO, r0 + 1);
1393 swf_call_with_get_reg(__aeabi_dcmpun, dcmpun);
1395 if (jit_thumb_p()) {
1396 T1_CMPI(_R0_REGNO, 0);
1398 T2_CC_B(ARM_CC_NE, 0);
1405 if (jit_fpr_p(r0)) {
1406 if (!jit_thumb_p() && jit_armv5e_p())
1407 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1409 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1410 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1414 movr(_R0_REGNO, r0);
1415 movr(_R1_REGNO, r0 + 1);
1417 if (jit_fpr_p(r1)) {
1418 if (!jit_thumb_p() && jit_armv5e_p())
1419 LDRDIN(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1421 swf_ldrin(_R2_REGNO, _FP_REGNO, swf_off(r1) + 8);
1422 swf_ldrin(_R3_REGNO, _FP_REGNO, swf_off(r1) + 4);
1426 movr(_R2_REGNO, r0);
1427 movr(_R3_REGNO, r0 + 1);
1429 swf_call_with_get_reg(__aeabi_dcmpeq, dcmpeq);
1430 if (jit_thumb_p()) {
1431 T1_CMPI(_R0_REGNO, 0);
1434 T2_CC_B(ARM_CC_EQ, 0);
1435 patch_at(arm_patch_jump, j0, _jit->pc.w);
1438 T2_CC_B(ARM_CC_NE, 0);
1440 d = ((i0 - w) >> 1) - 2;
1442 T2_B(encode_thumb_jump(d));
1449 patch_at(arm_patch_jump, j0, _jit->pc.w);
1454 d = ((i0 - w) >> 2) - 2;
1459 patch_at(arm_patch_jump, j0, _jit->pc.w);
1460 patch_at(arm_patch_jump, j1, _jit->pc.w);
1461 jit_unget_reg_args();
1466 _swf_bunff_(jit_state_t *_jit, int eq,
1467 jit_word_t i0, jit_int32_t r0, jit_float32_t i1)
1473 jit_word_t w, d, j0, j1;
1477 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1479 movr(_R0_REGNO, r0);
1480 movi(_R1_REGNO, data.i);
1481 swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
1483 if (jit_thumb_p()) {
1484 T1_CMPI(_R0_REGNO, 0);
1486 T2_CC_B(ARM_CC_NE, 0);
1494 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1496 movr(_R0_REGNO, r0);
1497 movi(_R1_REGNO, data.i);
1498 swf_call(__aeabi_fcmpeq, fcmpeq, _R2_REGNO);
1499 if (jit_thumb_p()) {
1500 T1_CMPI(_R0_REGNO, 0);
1503 T2_CC_B(ARM_CC_EQ, 0);
1504 patch_at(arm_patch_jump, j0, _jit->pc.w);
1507 T2_CC_B(ARM_CC_NE, 0);
1509 d = ((i0 - w) >> 1) - 2;
1511 T2_B(encode_thumb_jump(d));
1518 patch_at(arm_patch_jump, j0, _jit->pc.w);
1523 d = ((i0 - w) >> 2) - 2;
1528 patch_at(arm_patch_jump, j0, _jit->pc.w);
1529 patch_at(arm_patch_jump, j1, _jit->pc.w);
1530 jit_unget_reg_args();
1535 _swf_bundd_(jit_state_t *_jit, int eq,
1536 jit_word_t i0, jit_int32_t r0, jit_float64_t i1)
1538 jit_word_t w, d, j0, j1;
1545 if (jit_fpr_p(r0)) {
1546 if (!jit_thumb_p() && jit_armv5e_p())
1547 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1549 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1550 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1554 movr(_R0_REGNO, r0);
1555 movr(_R1_REGNO, r0 + 1);
1557 movi(_R2_REGNO, data.i[0]);
1558 movi(_R3_REGNO, data.i[1]);
1559 swf_call_with_get_reg(__aeabi_dcmpun, fcmpun);
1561 if (jit_thumb_p()) {
1562 T1_CMPI(_R0_REGNO, 0);
1564 T2_CC_B(ARM_CC_NE, 0);
1571 if (jit_fpr_p(r0)) {
1572 if (!jit_thumb_p() && jit_armv5e_p())
1573 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1575 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1576 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1580 movr(_R0_REGNO, r0);
1581 movr(_R1_REGNO, r0 + 1);
1583 movi(_R2_REGNO, data.i[0]);
1584 movi(_R3_REGNO, data.i[1]);
1585 swf_call_with_get_reg(__aeabi_dcmpeq, fcmpeq);
1586 if (jit_thumb_p()) {
1587 T1_CMPI(_R0_REGNO, 0);
1590 T2_CC_B(ARM_CC_EQ, 0);
1591 patch_at(arm_patch_jump, j0, _jit->pc.w);
1594 T2_CC_B(ARM_CC_NE, 0);
1596 d = ((i0 - w) >> 1) - 2;
1598 T2_B(encode_thumb_jump(d));
1605 patch_at(arm_patch_jump, j0, _jit->pc.w);
1610 d = ((i0 - w) >> 2) - 2;
1615 patch_at(arm_patch_jump, j0, _jit->pc.w);
1616 patch_at(arm_patch_jump, j1, _jit->pc.w);
1617 jit_unget_reg_args();
1622 _swf_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1625 movr(_R0_REGNO, r1);
1626 swf_call(__aeabi_i2f, i2f, _R1_REGNO);
1628 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1630 movr(r0, _R0_REGNO);
1631 jit_unget_reg_args();
1635 _swf_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1638 movr(_R0_REGNO, r1);
1639 swf_call(__aeabi_i2d, i2d, _R2_REGNO);
1640 if (jit_fpr_p(r0)) {
1641 if (!jit_thumb_p() && jit_armv5e_p())
1642 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1644 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1645 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1649 movr(r0, _R0_REGNO);
1650 movr(r0 + 1, _R1_REGNO);
1652 jit_unget_reg_args();
1656 _swf_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1659 if (jit_fpr_p(r1)) {
1660 if (!jit_thumb_p() && jit_armv5e_p())
1661 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1663 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1664 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
1668 movr(_R0_REGNO, r1);
1669 movr(_R1_REGNO, r1 + 1);
1671 swf_call(__aeabi_d2f, d2f, _R2_REGNO);
1673 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1675 movr(r0, _R0_REGNO);
1676 jit_unget_reg_args();
1680 _swf_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1684 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1686 movr(_R0_REGNO, r1);
1687 swf_call(__aeabi_f2d, f2d, _R1_REGNO);
1688 if (jit_fpr_p(r0)) {
1689 if (!jit_thumb_p() && jit_armv5e_p())
1690 STRDIN(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1692 swf_strin(_R0_REGNO, _FP_REGNO, swf_off(r0) + 8);
1693 swf_strin(_R1_REGNO, _FP_REGNO, swf_off(r0) + 4);
1697 movr(r0, _R0_REGNO);
1698 movr(r0 + 1, _R1_REGNO);
1700 jit_unget_reg_args();
1704 _swf_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1706 #if !NAN_TO_INT_IS_ZERO
1708 jit_word_t fast_not_nan;
1709 jit_word_t slow_not_nan;
1713 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1715 movr(_R0_REGNO, r1);
1716 #if !NAN_TO_INT_IS_ZERO
1717 /* >> based on fragment of __aeabi_fcmpun */
1718 lshi(_R2_REGNO, _R0_REGNO, 1);
1720 torrrs(THUMB2_MVN|ARM_S, _R0_REGNO, _R3_REGNO, _R2_REGNO,
1721 encode_thumb_shift(24, ARM_ASR));
1723 corrrs(ARM_CC_AL, ARM_MVN|ARM_S|ARM_ASR,
1724 _R0_REGNO, _R3_REGNO, _R2_REGNO, 24);
1725 fast_not_nan = _jit->pc.w;
1726 if (jit_thumb_p()) {
1727 T2_CC_B(ARM_CC_NE, 0);
1728 tshift(THUMB2_LSLI|ARM_S, _R0_REGNO, _R3_REGNO, 9);
1732 cshift(ARM_CC_AL, ARM_S|ARM_LSL, _R0_REGNO, _R3_REGNO, _R0_REGNO, 9);
1734 slow_not_nan = _jit->pc.w;
1736 T2_CC_B(ARM_CC_EQ, 0);
1739 movi(r0, 0x80000000);
1740 is_nan = _jit->pc.w;
1745 patch_at(arm_patch_jump, fast_not_nan, _jit->pc.w);
1746 patch_at(arm_patch_jump, slow_not_nan, _jit->pc.w);
1747 /* << based on fragment of __aeabi_fcmpun */
1749 swf_call(__aeabi_f2iz, f2iz, _R2_REGNO);
1750 movr(r0, _R0_REGNO);
1751 #if !NAN_TO_INT_IS_ZERO
1752 patch_at(arm_patch_jump, is_nan, _jit->pc.w);
1754 jit_unget_reg_args();
1758 _swf_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1760 #if !NAN_TO_INT_IS_ZERO
1762 jit_word_t fast_not_nan;
1763 jit_word_t slow_not_nan;
1766 if (jit_fpr_p(r1)) {
1767 if (!jit_thumb_p() && jit_armv5e_p())
1768 LDRDIN(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1770 swf_ldrin(_R0_REGNO, _FP_REGNO, swf_off(r1) + 8);
1771 swf_ldrin(_R1_REGNO, _FP_REGNO, swf_off(r1) + 4);
1775 movr(_R0_REGNO, r1);
1776 movr(_R1_REGNO, r1 + 1);
1778 #if !NAN_TO_INT_IS_ZERO
1779 /* >> based on fragment of __aeabi_dcmpun */
1780 lshi(_R3_REGNO, _R1_REGNO, 1);
1782 torrrs(THUMB2_MVN|ARM_S, _R0_REGNO, _R3_REGNO, _R3_REGNO,
1783 encode_thumb_shift(21, ARM_ASR));
1785 corrrs(ARM_CC_AL, ARM_MVN|ARM_S|ARM_ASR,
1786 _R0_REGNO, _R3_REGNO, _R3_REGNO, 21);
1787 fast_not_nan = _jit->pc.w;
1788 if (jit_thumb_p()) {
1789 T2_CC_B(ARM_CC_NE, 0);
1790 torrrs(THUMB2_ORR|ARM_S, _R0_REGNO, _R3_REGNO, _R1_REGNO,
1791 encode_thumb_shift(12, ARM_LSL));
1795 corrrs(ARM_CC_AL, ARM_ORR|ARM_S|ARM_LSL,
1796 _R0_REGNO, _R3_REGNO, _R1_REGNO, 12);
1798 slow_not_nan = _jit->pc.w;
1800 T2_CC_B(ARM_CC_EQ, 0);
1803 movi(r0, 0x80000000);
1804 is_nan = _jit->pc.w;
1809 patch_at(arm_patch_jump, fast_not_nan, _jit->pc.w);
1810 patch_at(arm_patch_jump, slow_not_nan, _jit->pc.w);
1811 /* << based on fragment of __aeabi_dcmpun */
1813 swf_call(__aeabi_d2iz, d2iz, _R3_REGNO);
1814 movr(r0, _R0_REGNO);
1815 #if !NAN_TO_INT_IS_ZERO
1816 patch_at(arm_patch_jump, is_nan, _jit->pc.w);
1818 jit_unget_reg_args();
1822 _swf_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1826 if (jit_fpr_p(r1)) {
1827 reg = jit_get_reg(jit_class_gpr);
1828 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1830 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1835 else if (jit_fpr_p(r0))
1836 swf_strin(r1, _FP_REGNO, swf_off(r0) + 8);
1843 _swf_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1847 if (jit_fpr_p(r1)) {
1848 if (!jit_thumb_p() && jit_armv5e_p() &&
1849 (reg = jit_get_reg_pair()) != JIT_NOREG) {
1850 LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1852 STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1855 movr(r0 + 1, rn(reg) + 1);
1857 jit_unget_reg_pair(reg);
1860 reg = jit_get_reg(jit_class_gpr);
1861 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1863 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1866 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
1868 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
1870 movr(r0 + 1, rn(reg));
1874 else if (jit_fpr_p(r0)) {
1875 if (!jit_thumb_p() && jit_armv5e_p() && !(r1 & 1))
1876 STRDIN(r1, _FP_REGNO, swf_off(r0) + 8);
1878 swf_strin(r1, _FP_REGNO, swf_off(r0) + 8);
1879 swf_strin(r1 + 1, _FP_REGNO, swf_off(r0) + 4);
1884 movr(r0 + 1, r1 + 1);
1890 _swf_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
1898 if (jit_fpr_p(r0)) {
1899 reg = jit_get_reg(jit_class_gpr);
1900 movi(rn(reg), data.i);
1901 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1909 _swf_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
1917 if (jit_fpr_p(r0)) {
1918 if (!jit_thumb_p() && jit_armv5e_p() &&
1919 (reg = jit_get_reg_pair()) != JIT_NOREG) {
1920 movi(rn(reg), data.i[0]);
1921 movi(rn(reg) + 1, data.i[1]);
1922 STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1923 jit_unget_reg_pair(reg);
1926 reg = jit_get_reg(jit_class_gpr);
1927 movi(rn(reg), data.i[0]);
1928 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1929 movi(rn(reg), data.i[1]);
1930 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
1935 movi(r0, data.i[0]);
1936 movi(r0 + 1, data.i[1]);
1941 _swf_absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1944 if (jit_fpr_p(r1)) {
1945 reg = jit_get_reg(jit_class_gpr);
1946 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1947 swf_bici(rn(reg), rn(reg), 0x80000000);
1949 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1954 else if (jit_fpr_p(r0)) {
1955 reg = jit_get_reg(jit_class_gpr);
1957 swf_bici(rn(reg), rn(reg), 0x80000000);
1958 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1962 swf_bici(r0, r1, 0x80000000);
1966 _swf_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
1969 if (jit_fpr_p(r1)) {
1970 if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() &&
1971 r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) {
1972 LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1973 swf_bici(rn(reg) + 1, rn(reg) + 1, 0x80000000);
1974 STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1975 jit_unget_reg_pair(reg);
1978 reg = jit_get_reg(jit_class_gpr);
1979 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
1980 swf_bici(rn(reg), rn(reg), 0x80000000);
1981 if (jit_fpr_p(r0)) {
1982 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
1984 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1985 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
1990 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
1991 movr(r0 + 1, rn(reg));
1996 else if (jit_fpr_p(r0)) {
1997 reg = jit_get_reg(jit_class_gpr);
1999 swf_bici(rn(reg), rn(reg), 0x80000000);
2000 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
2001 movr(rn(reg), r1 + 1);
2002 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2006 swf_bici(r0, r1, 0x80000000);
2008 movr(r0 + 1, r1 + 1);
2013 _swf_negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2016 if (jit_fpr_p(r1)) {
2017 reg = jit_get_reg(jit_class_gpr);
2018 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2019 xori(rn(reg), rn(reg), 0x80000000);
2021 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2026 else if (jit_fpr_p(r0)) {
2027 reg = jit_get_reg(jit_class_gpr);
2029 xori(rn(reg), rn(reg), 0x80000000);
2030 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2034 xori(r0, r1, 0x80000000);
2038 _swf_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2041 if (jit_fpr_p(r1)) {
2042 if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() &&
2043 r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) {
2044 LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2045 EORI(rn(reg) + 1, rn(reg) + 1, encode_arm_immediate(0x80000000));
2046 STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2047 jit_unget_reg_pair(reg);
2050 reg = jit_get_reg(jit_class_gpr);
2051 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
2052 xori(rn(reg), rn(reg), 0x80000000);
2053 if (jit_fpr_p(r0)) {
2054 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
2056 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2057 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2062 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2063 movr(r0 + 1, rn(reg));
2068 else if (jit_fpr_p(r0)) {
2069 reg = jit_get_reg(jit_class_gpr);
2071 xori(rn(reg), rn(reg), 0x80000000);
2072 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
2073 movr(rn(reg), r1 + 1);
2074 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2078 xori(r0, r1, 0x80000000);
2080 movr(r0 + 1, r1 + 1);
2085 _swf_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2087 swf_iff(__aeabi_fcmpeq, r0, r1, r2);
2092 _swf_nei_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0)
2094 swf_iff_(__aeabi_fcmpeq, r0, r1, i0);
2099 _swf_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2101 swf_idd(__aeabi_dcmpeq, r0, r1, r2);
2106 _swf_nei_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
2108 swf_idd_(__aeabi_dcmpeq, r0, r1, i0);
2113 _swf_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2115 swf_iunff(__aeabi_fcmpeq, r0, r1, r2);
2120 _swf_ltgti_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0)
2122 swf_iunff_(__aeabi_fcmpeq, r0, r1, i0);
2127 _swf_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2129 swf_iundd(__aeabi_dcmpeq, r0, r1, r2);
2134 _swf_ltgti_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
2136 swf_iundd_(__aeabi_dcmpeq, r0, r1, i0);
2141 _swf_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2143 swf_iff(__aeabi_fcmpun, r0, r1, r2);
2148 _swf_ordi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0)
2150 swf_iff_(__aeabi_fcmpun, r0, r1, i0);
2155 _swf_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2157 swf_idd(__aeabi_dcmpun, r0, r1, r2);
2162 _swf_ordi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
2164 swf_idd_(__aeabi_dcmpun, r0, r1, i0);
2169 _swf_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2172 if (jit_fpr_p(r0)) {
2173 reg = jit_get_reg(jit_class_gpr);
2174 ldxi_i(rn(reg), r1, 0);
2175 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2183 _swf_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2186 if (jit_fpr_p(r0)) {
2187 if (!jit_thumb_p() && jit_armv5e_p() &&
2188 (reg = jit_get_reg_pair()) != JIT_NOREG) {
2189 LDRDI(rn(reg), r1, 0);
2190 STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2191 jit_unget_reg_pair(reg);
2194 reg = jit_get_reg(jit_class_gpr);
2195 ldxi_i(rn(reg), r1, 0);
2196 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2197 ldxi_i(rn(reg), r1, 4);
2198 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
2202 else if (!jit_thumb_p() && jit_armv5e_p() && !(r0 & 1))
2206 ldxi_i(r0 + 1, r1, 4);
2211 _swf_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
2214 if (jit_fpr_p(r0)) {
2215 reg = jit_get_reg(jit_class_gpr);
2217 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2225 _swf_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
2227 jit_int32_t rg0, rg1;
2228 if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() &&
2229 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2231 LDRDI(rn(rg0), rn(rg0), 0);
2232 STRDIN(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2233 jit_unget_reg_pair(rg0);
2236 rg1 = jit_get_reg(jit_class_gpr);
2238 if (jit_fpr_p(r0)) {
2239 rg0 = jit_get_reg(jit_class_gpr);
2240 ldxi_i(rn(rg0), rn(rg1), 0);
2241 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2242 ldxi_i(rn(rg0), rn(rg1), 4);
2243 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2246 else if (!jit_thumb_p() && jit_armv5e_p() && !(r0 & 1))
2247 LDRDI(r0, rn(rg1), 0);
2249 ldxi_i(r0, rn(rg1), 0);
2250 ldxi_i(r0 + 1, rn(rg1), 0);
2257 _swf_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2260 if (jit_fpr_p(r0)) {
2261 reg = jit_get_reg(jit_class_gpr);
2262 ldxr_i(rn(reg), r1, r2);
2263 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2271 _swf_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2273 jit_int32_t rg0, rg1;
2274 if (jit_fpr_p(r0)) {
2275 if (!jit_thumb_p() && jit_armv5e_p() &&
2276 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2277 LDRD(rn(rg0), r1, r2);
2278 STRDIN(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2279 jit_unget_reg_pair(rg0);
2282 rg1 = jit_get_reg(jit_class_gpr);
2283 addr(rn(rg1), r1, r2);
2284 rg0 = jit_get_reg(jit_class_gpr);
2285 ldxi_i(rn(rg0), rn(rg1), 0);
2286 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2287 ldxi_i(rn(rg0), rn(rg1), 4);
2288 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2294 if (!jit_thumb_p() && jit_armv5e_p() && !(r0 & 1))
2297 rg1 = jit_get_reg(jit_class_gpr);
2298 addr(rn(rg1), r1, r2);
2299 ldxi_i(r0, rn(rg1), 0);
2300 ldxi_i(r0 + 1, rn(rg1), 4);
2307 _swf_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
2310 if (jit_fpr_p(r0)) {
2311 reg = jit_get_reg(jit_class_gpr);
2312 ldxi_i(rn(reg), r1, i0);
2313 swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2321 _swf_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
2323 jit_int32_t rg0, rg1;
2324 if (jit_fpr_p(r0)) {
2325 if (!jit_thumb_p() && jit_armv5e_p() &&
2326 ((i0 >= 0 && i0 <= 255) || (i0 < 0 && i0 >= -255)) &&
2327 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2329 LDRDI(rn(rg0), r1, i0);
2331 LDRDIN(rn(rg0), r1, -i0);
2332 STRDIN(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2333 jit_unget_reg_pair(rg0);
2335 else if (i0 >= 0 && i0 + 4 <= 4095) {
2336 rg0 = jit_get_reg(jit_class_gpr);
2337 ldxi_i(rn(rg0), r1, i0);
2338 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2339 ldxi_i(rn(rg0), r1, i0 + 4);
2340 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2343 else if (i0 < 0 && ((jit_thumb_p() && i0 >= -255) ||
2344 (!jit_thumb_p() && i0 >= -4095))) {
2345 rg0 = jit_get_reg(jit_class_gpr);
2346 swf_ldrin(rn(rg0), r1, -i0);
2347 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2348 swf_ldrin(rn(rg0), r1, -(i0 + 4));
2349 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2353 rg0 = jit_get_reg(jit_class_gpr);
2354 rg1 = jit_get_reg(jit_class_gpr);
2355 addi(rn(rg1), r1, i0);
2356 ldxi_i(rn(rg0), rn(rg1), 0);
2357 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2358 ldxi_i(rn(rg0), rn(rg1), 4);
2359 swf_strin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2365 if (!jit_thumb_p() && jit_armv5e_p() &&
2366 i0 >= 0 && i0 <= 255 && !(r0 & 1))
2368 else if (!jit_thumb_p() && jit_armv5e_p() &&
2369 i0 < 0 && i0 >= -255 && !(r0 & 1))
2370 LDRDIN(r0, r1, -i0);
2371 else if (i0 >= 0 && i0 + 4 <= 4095) {
2373 ldxi_i(r0 + 1, r1, i0 + 4);
2375 else if (i0 < 0 && i0 >= -4095) {
2376 swf_ldrin(r0, r1, -i0);
2377 swf_ldrin(r0 + 1, r1, -(i0 + 4));
2380 rg0 = jit_get_reg(jit_class_gpr);
2381 addi(rn(rg0), r1, i0);
2382 ldxi_i(r0, rn(rg0), 0);
2383 ldxi_i(r0 + 1, rn(rg0), 4);
2390 _swf_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2393 if (jit_fpr_p(r1)) {
2394 reg = jit_get_reg(jit_class_gpr);
2395 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2396 stxi_i(0, r0, rn(reg));
2404 _swf_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2407 if (jit_fpr_p(r1)) {
2408 if (!jit_thumb_p() && jit_armv5e_p() &&
2409 (reg = jit_get_reg_pair()) != JIT_NOREG) {
2410 LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2411 STRDI(rn(reg), r0, 0);
2412 jit_unget_reg_pair(reg);
2415 reg = jit_get_reg(jit_class_gpr);
2416 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2417 stxi_i(0, r0, rn(reg));
2418 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
2419 stxi_i(4, r0, rn(reg));
2424 if (!jit_thumb_p() && jit_armv5e_p() && !(r1 & 1))
2428 stxi_i(4, r0, r1 + 1);
2434 _swf_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
2437 if (jit_fpr_p(r0)) {
2438 reg = jit_get_reg(jit_class_gpr);
2439 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
2448 _swf_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
2450 jit_int32_t rg0, rg1;
2451 if (jit_fpr_p(r0)) {
2452 if (!jit_thumb_p() && jit_armv5e_p() &&
2453 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2454 rg1 = jit_get_reg(jit_class_gpr);
2456 LDRDIN(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2457 STRDI(rn(rg0), rn(rg1), 0);
2459 jit_unget_reg_pair(rg0);
2462 rg1 = jit_get_reg(jit_class_gpr);
2464 rg0 = jit_get_reg(jit_class_gpr);
2465 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r0) + 8);
2466 stxi_i(0, rn(rg1), rn(rg0));
2467 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r0) + 4);
2468 stxi_i(4, rn(rg1), rn(rg0));
2474 rg1 = jit_get_reg(jit_class_gpr);
2476 if (!jit_thumb_p() && jit_armv5e_p() && !(r0 & 1))
2477 STRDI(r0, rn(rg1), 0);
2479 stxi_i(0, rn(rg1), r0);
2480 stxi_i(4, rn(rg1), r0 + 1);
2487 _swf_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2490 if (jit_fpr_p(r2)) {
2491 reg = jit_get_reg(jit_class_gpr);
2492 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r2) + 8);
2493 stxr_i(r1, r0, rn(reg));
2501 _swf_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
2503 jit_int32_t rg0, rg1;
2504 if (jit_fpr_p(r2)) {
2505 if (!jit_thumb_p() && jit_armv5e_p() &&
2506 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2507 LDRDIN(rn(rg0), _FP_REGNO, swf_off(r2) + 8);
2508 STRD(rn(rg0), r0, r1);
2509 jit_unget_reg_pair(rg0);
2512 rg1 = jit_get_reg(jit_class_gpr);
2513 addr(rn(rg1), r0, r1);
2514 rg0 = jit_get_reg(jit_class_gpr);
2515 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r2) + 8);
2516 stxi_i(0, rn(rg1), rn(rg0));
2517 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r2) + 4);
2518 stxi_i(4, rn(rg1), rn(rg0));
2524 if (!jit_thumb_p() && jit_armv5e_p() && !(r2 & 1))
2527 rg1 = jit_get_reg(jit_class_gpr);
2528 addr(rn(rg1), r0, r1);
2529 stxi_i(0, rn(rg1), r2);
2530 stxi_i(4, rn(rg1), r2 + 1);
2537 _swf_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
2540 if (jit_fpr_p(r1)) {
2541 reg = jit_get_reg(jit_class_gpr);
2542 swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
2543 stxi_i(i0, r0, rn(reg));
2551 _swf_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
2553 jit_int32_t rg0, rg1;
2554 if (jit_fpr_p(r1)) {
2555 if (!jit_thumb_p() && jit_armv5e_p() &&
2556 ((i0 >= 0 && i0 <= 255) || (i0 < 0 && i0 >= -255)) &&
2557 (rg0 = jit_get_reg_pair()) != JIT_NOREG) {
2558 LDRDIN(rn(rg0), _FP_REGNO, swf_off(r1) + 8);
2559 if (i0 >= 0 && i0 <= 255)
2560 STRDI(rn(rg0), r0, i0);
2562 STRDIN(rn(rg0), r0, -i0);
2563 jit_unget_reg_pair(rg0);
2565 else if (i0 >= 0 && i0 + 4 <= 4095) {
2566 rg0 = jit_get_reg(jit_class_gpr);
2567 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 8);
2568 stxi_i(i0, r0, rn(rg0));
2569 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 4);
2570 stxi_i(i0 + 4, r0, rn(rg0));
2573 else if (i0 < 0 && ((jit_thumb_p() && i0 >= -255) ||
2574 (!jit_thumb_p() && i0 >= -4095))) {
2575 rg0 = jit_get_reg(jit_class_gpr);
2576 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 8);
2577 swf_strin(rn(rg0), r0, -i0);
2578 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 4);
2579 swf_strin(rn(rg0), r0, -(i0 + 4));
2583 rg1 = jit_get_reg(jit_class_gpr);
2584 addi(rn(rg1), r0, i0);
2585 rg0 = jit_get_reg(jit_class_gpr);
2586 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 8);
2587 stxi_i(0, rn(rg1), rn(rg0));
2588 swf_ldrin(rn(rg0), _FP_REGNO, swf_off(r1) + 4);
2589 stxi_i(4, rn(rg1), rn(rg0));
2595 if (!jit_thumb_p() && jit_armv5e_p() &&
2596 i0 >= 0 && i0 <= 255 && !(r1 & 1))
2598 else if (!jit_thumb_p() && jit_armv5e_p() &&
2599 i0 < 0 && i0 >= -255 && !(r1 & 1))
2600 STRDIN(r1, r0, -i0);
2601 else if (i0 >= 0 && i0 + 4 <= 4095) {
2603 stxi_i(i0 + 4, r0, r1 + 1);
2605 else if (i0 < 0 && ((jit_thumb_p() && i0 >= 255) ||
2606 (!jit_thumb_p() && i0 >= -4095))) {
2607 swf_strin(r1, r0, -i0);
2608 swf_strin(r1 + 1, r0, -(i0 + 4));
2611 rg1 = jit_get_reg(jit_class_gpr);
2612 addi(rn(rg1), r0, i0);
2613 stxi_i(0, rn(rg1), r1);
2614 stxi_i(4, rn(rg1), r1 + 1);
2621 _swf_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
2625 assert(_jitc->function->self.call & jit_call_varargs);
2627 /* Adjust pointer. */
2628 reg = jit_get_reg(jit_class_gpr);
2629 andi(rn(reg), r1, 7);
2630 addr(r1, r1, rn(reg));
2633 /* Load argument. */
2636 /* Update stack pointer. */
2637 addi(r1, r1, sizeof(jit_float64_t));