Statistics
| Branch: | Revision:

root / target-sparc / op.c @ 157777ef

History | View | Annotate | Download (16.8 kB)

1 7a3f1944 bellard
/*
2 7a3f1944 bellard
   SPARC micro operations
3 7a3f1944 bellard

4 7a3f1944 bellard
   Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at>
5 7a3f1944 bellard

6 7a3f1944 bellard
   This library is free software; you can redistribute it and/or
7 7a3f1944 bellard
   modify it under the terms of the GNU Lesser General Public
8 7a3f1944 bellard
   License as published by the Free Software Foundation; either
9 7a3f1944 bellard
   version 2 of the License, or (at your option) any later version.
10 7a3f1944 bellard

11 7a3f1944 bellard
   This library is distributed in the hope that it will be useful,
12 7a3f1944 bellard
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 7a3f1944 bellard
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 7a3f1944 bellard
   Lesser General Public License for more details.
15 7a3f1944 bellard

16 7a3f1944 bellard
   You should have received a copy of the GNU Lesser General Public
17 7a3f1944 bellard
   License along with this library; if not, write to the Free Software
18 7a3f1944 bellard
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 7a3f1944 bellard
*/
20 7a3f1944 bellard
21 7a3f1944 bellard
#include "exec.h"
22 7a3f1944 bellard
23 cf495bcf bellard
 /*XXX*/
24 7a3f1944 bellard
#define REGNAME g0
25 7a3f1944 bellard
#define REG (env->gregs[0])
26 7a3f1944 bellard
#include "op_template.h"
27 7a3f1944 bellard
#define REGNAME g1
28 7a3f1944 bellard
#define REG (env->gregs[1])
29 7a3f1944 bellard
#include "op_template.h"
30 7a3f1944 bellard
#define REGNAME g2
31 7a3f1944 bellard
#define REG (env->gregs[2])
32 7a3f1944 bellard
#include "op_template.h"
33 7a3f1944 bellard
#define REGNAME g3
34 7a3f1944 bellard
#define REG (env->gregs[3])
35 7a3f1944 bellard
#include "op_template.h"
36 7a3f1944 bellard
#define REGNAME g4
37 7a3f1944 bellard
#define REG (env->gregs[4])
38 7a3f1944 bellard
#include "op_template.h"
39 7a3f1944 bellard
#define REGNAME g5
40 7a3f1944 bellard
#define REG (env->gregs[5])
41 7a3f1944 bellard
#include "op_template.h"
42 7a3f1944 bellard
#define REGNAME g6
43 7a3f1944 bellard
#define REG (env->gregs[6])
44 7a3f1944 bellard
#include "op_template.h"
45 7a3f1944 bellard
#define REGNAME g7
46 7a3f1944 bellard
#define REG (env->gregs[7])
47 7a3f1944 bellard
#include "op_template.h"
48 7a3f1944 bellard
#define REGNAME i0
49 7a3f1944 bellard
#define REG (env->regwptr[16])
50 7a3f1944 bellard
#include "op_template.h"
51 7a3f1944 bellard
#define REGNAME i1
52 7a3f1944 bellard
#define REG (env->regwptr[17])
53 7a3f1944 bellard
#include "op_template.h"
54 7a3f1944 bellard
#define REGNAME i2
55 7a3f1944 bellard
#define REG (env->regwptr[18])
56 7a3f1944 bellard
#include "op_template.h"
57 7a3f1944 bellard
#define REGNAME i3
58 7a3f1944 bellard
#define REG (env->regwptr[19])
59 7a3f1944 bellard
#include "op_template.h"
60 7a3f1944 bellard
#define REGNAME i4
61 7a3f1944 bellard
#define REG (env->regwptr[20])
62 7a3f1944 bellard
#include "op_template.h"
63 7a3f1944 bellard
#define REGNAME i5
64 7a3f1944 bellard
#define REG (env->regwptr[21])
65 7a3f1944 bellard
#include "op_template.h"
66 7a3f1944 bellard
#define REGNAME i6
67 7a3f1944 bellard
#define REG (env->regwptr[22])
68 7a3f1944 bellard
#include "op_template.h"
69 7a3f1944 bellard
#define REGNAME i7
70 7a3f1944 bellard
#define REG (env->regwptr[23])
71 7a3f1944 bellard
#include "op_template.h"
72 7a3f1944 bellard
#define REGNAME l0
73 7a3f1944 bellard
#define REG (env->regwptr[8])
74 7a3f1944 bellard
#include "op_template.h"
75 7a3f1944 bellard
#define REGNAME l1
76 7a3f1944 bellard
#define REG (env->regwptr[9])
77 7a3f1944 bellard
#include "op_template.h"
78 7a3f1944 bellard
#define REGNAME l2
79 7a3f1944 bellard
#define REG (env->regwptr[10])
80 7a3f1944 bellard
#include "op_template.h"
81 7a3f1944 bellard
#define REGNAME l3
82 7a3f1944 bellard
#define REG (env->regwptr[11])
83 7a3f1944 bellard
#include "op_template.h"
84 7a3f1944 bellard
#define REGNAME l4
85 7a3f1944 bellard
#define REG (env->regwptr[12])
86 7a3f1944 bellard
#include "op_template.h"
87 7a3f1944 bellard
#define REGNAME l5
88 7a3f1944 bellard
#define REG (env->regwptr[13])
89 7a3f1944 bellard
#include "op_template.h"
90 7a3f1944 bellard
#define REGNAME l6
91 7a3f1944 bellard
#define REG (env->regwptr[14])
92 7a3f1944 bellard
#include "op_template.h"
93 7a3f1944 bellard
#define REGNAME l7
94 7a3f1944 bellard
#define REG (env->regwptr[15])
95 7a3f1944 bellard
#include "op_template.h"
96 7a3f1944 bellard
#define REGNAME o0
97 7a3f1944 bellard
#define REG (env->regwptr[0])
98 7a3f1944 bellard
#include "op_template.h"
99 7a3f1944 bellard
#define REGNAME o1
100 7a3f1944 bellard
#define REG (env->regwptr[1])
101 7a3f1944 bellard
#include "op_template.h"
102 7a3f1944 bellard
#define REGNAME o2
103 7a3f1944 bellard
#define REG (env->regwptr[2])
104 7a3f1944 bellard
#include "op_template.h"
105 7a3f1944 bellard
#define REGNAME o3
106 7a3f1944 bellard
#define REG (env->regwptr[3])
107 7a3f1944 bellard
#include "op_template.h"
108 7a3f1944 bellard
#define REGNAME o4
109 7a3f1944 bellard
#define REG (env->regwptr[4])
110 7a3f1944 bellard
#include "op_template.h"
111 7a3f1944 bellard
#define REGNAME o5
112 7a3f1944 bellard
#define REG (env->regwptr[5])
113 7a3f1944 bellard
#include "op_template.h"
114 7a3f1944 bellard
#define REGNAME o6
115 7a3f1944 bellard
#define REG (env->regwptr[6])
116 7a3f1944 bellard
#include "op_template.h"
117 7a3f1944 bellard
#define REGNAME o7
118 7a3f1944 bellard
#define REG (env->regwptr[7])
119 7a3f1944 bellard
#include "op_template.h"
120 e8af50a3 bellard
121 e8af50a3 bellard
#define REGNAME f0
122 e8af50a3 bellard
#define REG (env->fpr[0])
123 e8af50a3 bellard
#include "fop_template.h"
124 e8af50a3 bellard
#define REGNAME f1
125 e8af50a3 bellard
#define REG (env->fpr[1])
126 e8af50a3 bellard
#include "fop_template.h"
127 e8af50a3 bellard
#define REGNAME f2
128 e8af50a3 bellard
#define REG (env->fpr[2])
129 e8af50a3 bellard
#include "fop_template.h"
130 e8af50a3 bellard
#define REGNAME f3
131 e8af50a3 bellard
#define REG (env->fpr[3])
132 e8af50a3 bellard
#include "fop_template.h"
133 e8af50a3 bellard
#define REGNAME f4
134 e8af50a3 bellard
#define REG (env->fpr[4])
135 e8af50a3 bellard
#include "fop_template.h"
136 e8af50a3 bellard
#define REGNAME f5
137 e8af50a3 bellard
#define REG (env->fpr[5])
138 e8af50a3 bellard
#include "fop_template.h"
139 e8af50a3 bellard
#define REGNAME f6
140 e8af50a3 bellard
#define REG (env->fpr[6])
141 e8af50a3 bellard
#include "fop_template.h"
142 e8af50a3 bellard
#define REGNAME f7
143 e8af50a3 bellard
#define REG (env->fpr[7])
144 e8af50a3 bellard
#include "fop_template.h"
145 e8af50a3 bellard
#define REGNAME f8
146 e8af50a3 bellard
#define REG (env->fpr[8])
147 e8af50a3 bellard
#include "fop_template.h"
148 e8af50a3 bellard
#define REGNAME f9
149 e8af50a3 bellard
#define REG (env->fpr[9])
150 e8af50a3 bellard
#include "fop_template.h"
151 e8af50a3 bellard
#define REGNAME f10
152 e8af50a3 bellard
#define REG (env->fpr[10])
153 e8af50a3 bellard
#include "fop_template.h"
154 e8af50a3 bellard
#define REGNAME f11
155 e8af50a3 bellard
#define REG (env->fpr[11])
156 e8af50a3 bellard
#include "fop_template.h"
157 e8af50a3 bellard
#define REGNAME f12
158 e8af50a3 bellard
#define REG (env->fpr[12])
159 e8af50a3 bellard
#include "fop_template.h"
160 e8af50a3 bellard
#define REGNAME f13
161 e8af50a3 bellard
#define REG (env->fpr[13])
162 e8af50a3 bellard
#include "fop_template.h"
163 e8af50a3 bellard
#define REGNAME f14
164 e8af50a3 bellard
#define REG (env->fpr[14])
165 e8af50a3 bellard
#include "fop_template.h"
166 e8af50a3 bellard
#define REGNAME f15
167 e8af50a3 bellard
#define REG (env->fpr[15])
168 e8af50a3 bellard
#include "fop_template.h"
169 e8af50a3 bellard
#define REGNAME f16
170 e8af50a3 bellard
#define REG (env->fpr[16])
171 e8af50a3 bellard
#include "fop_template.h"
172 e8af50a3 bellard
#define REGNAME f17
173 e8af50a3 bellard
#define REG (env->fpr[17])
174 e8af50a3 bellard
#include "fop_template.h"
175 e8af50a3 bellard
#define REGNAME f18
176 e8af50a3 bellard
#define REG (env->fpr[18])
177 e8af50a3 bellard
#include "fop_template.h"
178 e8af50a3 bellard
#define REGNAME f19
179 e8af50a3 bellard
#define REG (env->fpr[19])
180 e8af50a3 bellard
#include "fop_template.h"
181 e8af50a3 bellard
#define REGNAME f20
182 e8af50a3 bellard
#define REG (env->fpr[20])
183 e8af50a3 bellard
#include "fop_template.h"
184 e8af50a3 bellard
#define REGNAME f21
185 e8af50a3 bellard
#define REG (env->fpr[21])
186 e8af50a3 bellard
#include "fop_template.h"
187 e8af50a3 bellard
#define REGNAME f22
188 e8af50a3 bellard
#define REG (env->fpr[22])
189 e8af50a3 bellard
#include "fop_template.h"
190 e8af50a3 bellard
#define REGNAME f23
191 e8af50a3 bellard
#define REG (env->fpr[23])
192 e8af50a3 bellard
#include "fop_template.h"
193 e8af50a3 bellard
#define REGNAME f24
194 e8af50a3 bellard
#define REG (env->fpr[24])
195 e8af50a3 bellard
#include "fop_template.h"
196 e8af50a3 bellard
#define REGNAME f25
197 e8af50a3 bellard
#define REG (env->fpr[25])
198 e8af50a3 bellard
#include "fop_template.h"
199 e8af50a3 bellard
#define REGNAME f26
200 e8af50a3 bellard
#define REG (env->fpr[26])
201 e8af50a3 bellard
#include "fop_template.h"
202 e8af50a3 bellard
#define REGNAME f27
203 e8af50a3 bellard
#define REG (env->fpr[27])
204 e8af50a3 bellard
#include "fop_template.h"
205 e8af50a3 bellard
#define REGNAME f28
206 e8af50a3 bellard
#define REG (env->fpr[28])
207 e8af50a3 bellard
#include "fop_template.h"
208 e8af50a3 bellard
#define REGNAME f29
209 e8af50a3 bellard
#define REG (env->fpr[29])
210 e8af50a3 bellard
#include "fop_template.h"
211 e8af50a3 bellard
#define REGNAME f30
212 e8af50a3 bellard
#define REG (env->fpr[30])
213 e8af50a3 bellard
#include "fop_template.h"
214 e8af50a3 bellard
#define REGNAME f31
215 e8af50a3 bellard
#define REG (env->fpr[31])
216 e8af50a3 bellard
#include "fop_template.h"
217 e8af50a3 bellard
218 7a3f1944 bellard
#define EIP (env->pc)
219 7a3f1944 bellard
220 af7bf89b bellard
#define FLAG_SET(x) ((env->psr&x)?1:0)
221 e8af50a3 bellard
#define FFLAG_SET(x) ((env->fsr&x)?1:0)
222 cf495bcf bellard
223 7a3f1944 bellard
void OPPROTO op_movl_T0_0(void)
224 7a3f1944 bellard
{
225 cf495bcf bellard
    T0 = 0;
226 7a3f1944 bellard
}
227 7a3f1944 bellard
228 7a3f1944 bellard
void OPPROTO op_movl_T0_im(void)
229 7a3f1944 bellard
{
230 cf495bcf bellard
    T0 = PARAM1;
231 7a3f1944 bellard
}
232 7a3f1944 bellard
233 7a3f1944 bellard
void OPPROTO op_movl_T1_im(void)
234 7a3f1944 bellard
{
235 cf495bcf bellard
    T1 = PARAM1;
236 7a3f1944 bellard
}
237 7a3f1944 bellard
238 7a3f1944 bellard
void OPPROTO op_movl_T2_im(void)
239 7a3f1944 bellard
{
240 cf495bcf bellard
    T2 = PARAM1;
241 7a3f1944 bellard
}
242 7a3f1944 bellard
243 af7bf89b bellard
void OPPROTO op_add_T1_T0(void)
244 7a3f1944 bellard
{
245 af7bf89b bellard
    T0 += T1;
246 7a3f1944 bellard
}
247 7a3f1944 bellard
248 af7bf89b bellard
void OPPROTO op_add_T1_T0_cc(void)
249 7a3f1944 bellard
{
250 af7bf89b bellard
    target_ulong src1;
251 7a3f1944 bellard
252 af7bf89b bellard
    src1 = T0;
253 af7bf89b bellard
    T0 += T1;
254 af7bf89b bellard
    env->psr = 0;
255 af7bf89b bellard
    if (!T0)
256 af7bf89b bellard
        env->psr |= PSR_ZERO;
257 af7bf89b bellard
    if ((int32_t) T0 < 0)
258 af7bf89b bellard
        env->psr |= PSR_NEG;
259 af7bf89b bellard
    if (T0 < src1)
260 af7bf89b bellard
        env->psr |= PSR_CARRY;
261 af7bf89b bellard
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
262 af7bf89b bellard
        env->psr |= PSR_OVF;
263 af7bf89b bellard
    /* V9 xcc */
264 af7bf89b bellard
    FORCE_RET();
265 7a3f1944 bellard
}
266 7a3f1944 bellard
267 af7bf89b bellard
void OPPROTO op_addx_T1_T0(void)
268 7a3f1944 bellard
{
269 af7bf89b bellard
    T0 += T1 + FLAG_SET(PSR_CARRY);
270 7a3f1944 bellard
}
271 7a3f1944 bellard
272 af7bf89b bellard
void OPPROTO op_addx_T1_T0_cc(void)
273 7a3f1944 bellard
{
274 af7bf89b bellard
    target_ulong src1;
275 af7bf89b bellard
276 cf495bcf bellard
    src1 = T0;
277 af7bf89b bellard
    T0 += T1 + FLAG_SET(PSR_CARRY);
278 cf495bcf bellard
    env->psr = 0;
279 cf495bcf bellard
    if (!T0)
280 cf495bcf bellard
        env->psr |= PSR_ZERO;
281 af7bf89b bellard
    if ((int32_t) T0 < 0)
282 cf495bcf bellard
        env->psr |= PSR_NEG;
283 cf495bcf bellard
    if (T0 < src1)
284 cf495bcf bellard
        env->psr |= PSR_CARRY;
285 cf495bcf bellard
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
286 cf495bcf bellard
        env->psr |= PSR_OVF;
287 af7bf89b bellard
    /* V9 xcc */
288 cf495bcf bellard
    FORCE_RET();
289 7a3f1944 bellard
}
290 7a3f1944 bellard
291 cf495bcf bellard
void OPPROTO op_sub_T1_T0(void)
292 7a3f1944 bellard
{
293 cf495bcf bellard
    T0 -= T1;
294 7a3f1944 bellard
}
295 7a3f1944 bellard
296 cf495bcf bellard
void OPPROTO op_sub_T1_T0_cc(void)
297 7a3f1944 bellard
{
298 af7bf89b bellard
    target_ulong src1;
299 cf495bcf bellard
300 cf495bcf bellard
    src1 = T0;
301 cf495bcf bellard
    T0 -= T1;
302 cf495bcf bellard
    env->psr = 0;
303 cf495bcf bellard
    if (!T0)
304 cf495bcf bellard
        env->psr |= PSR_ZERO;
305 af7bf89b bellard
    if ((int32_t) T0 < 0)
306 cf495bcf bellard
        env->psr |= PSR_NEG;
307 cf495bcf bellard
    if (src1 < T1)
308 cf495bcf bellard
        env->psr |= PSR_CARRY;
309 cf495bcf bellard
    if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
310 cf495bcf bellard
        env->psr |= PSR_OVF;
311 af7bf89b bellard
    /* V9 xcc */
312 af7bf89b bellard
    FORCE_RET();
313 af7bf89b bellard
}
314 af7bf89b bellard
315 af7bf89b bellard
void OPPROTO op_subx_T1_T0(void)
316 af7bf89b bellard
{
317 af7bf89b bellard
    T0 -= T1 + FLAG_SET(PSR_CARRY);
318 af7bf89b bellard
}
319 af7bf89b bellard
320 af7bf89b bellard
void OPPROTO op_subx_T1_T0_cc(void)
321 af7bf89b bellard
{
322 af7bf89b bellard
    target_ulong src1;
323 af7bf89b bellard
324 af7bf89b bellard
    src1 = T0;
325 af7bf89b bellard
    T0 -= T1 + FLAG_SET(PSR_CARRY);
326 af7bf89b bellard
    env->psr = 0;
327 af7bf89b bellard
    if (!T0)
328 af7bf89b bellard
        env->psr |= PSR_ZERO;
329 af7bf89b bellard
    if ((int32_t) T0 < 0)
330 af7bf89b bellard
        env->psr |= PSR_NEG;
331 af7bf89b bellard
    if (src1 < T1)
332 af7bf89b bellard
        env->psr |= PSR_CARRY;
333 af7bf89b bellard
    if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
334 af7bf89b bellard
        env->psr |= PSR_OVF;
335 af7bf89b bellard
    /* V9 xcc */
336 cf495bcf bellard
    FORCE_RET();
337 7a3f1944 bellard
}
338 7a3f1944 bellard
339 cf495bcf bellard
void OPPROTO op_and_T1_T0(void)
340 7a3f1944 bellard
{
341 cf495bcf bellard
    T0 &= T1;
342 7a3f1944 bellard
}
343 7a3f1944 bellard
344 cf495bcf bellard
void OPPROTO op_or_T1_T0(void)
345 7a3f1944 bellard
{
346 cf495bcf bellard
    T0 |= T1;
347 7a3f1944 bellard
}
348 7a3f1944 bellard
349 cf495bcf bellard
void OPPROTO op_xor_T1_T0(void)
350 7a3f1944 bellard
{
351 cf495bcf bellard
    T0 ^= T1;
352 7a3f1944 bellard
}
353 7a3f1944 bellard
354 cf495bcf bellard
void OPPROTO op_andn_T1_T0(void)
355 7a3f1944 bellard
{
356 cf495bcf bellard
    T0 &= ~T1;
357 7a3f1944 bellard
}
358 7a3f1944 bellard
359 cf495bcf bellard
void OPPROTO op_orn_T1_T0(void)
360 7a3f1944 bellard
{
361 cf495bcf bellard
    T0 |= ~T1;
362 7a3f1944 bellard
}
363 7a3f1944 bellard
364 cf495bcf bellard
void OPPROTO op_xnor_T1_T0(void)
365 7a3f1944 bellard
{
366 cf495bcf bellard
    T0 ^= ~T1;
367 7a3f1944 bellard
}
368 7a3f1944 bellard
369 cf495bcf bellard
void OPPROTO op_umul_T1_T0(void)
370 7a3f1944 bellard
{
371 cf495bcf bellard
    uint64_t res;
372 af7bf89b bellard
    res = (uint64_t) T0 * (uint64_t) T1;
373 cf495bcf bellard
    T0 = res & 0xffffffff;
374 cf495bcf bellard
    env->y = res >> 32;
375 7a3f1944 bellard
}
376 7a3f1944 bellard
377 cf495bcf bellard
void OPPROTO op_smul_T1_T0(void)
378 7a3f1944 bellard
{
379 cf495bcf bellard
    uint64_t res;
380 cf495bcf bellard
    res = (int64_t) ((int32_t) T0) * (int64_t) ((int32_t) T1);
381 cf495bcf bellard
    T0 = res & 0xffffffff;
382 cf495bcf bellard
    env->y = res >> 32;
383 7a3f1944 bellard
}
384 7a3f1944 bellard
385 cf495bcf bellard
void OPPROTO op_mulscc_T1_T0(void)
386 7a3f1944 bellard
{
387 af7bf89b bellard
    unsigned int b1, N, V, b2;
388 af7bf89b bellard
    target_ulong src1;
389 af7bf89b bellard
390 4e8b5da2 bellard
    N = FLAG_SET(PSR_NEG);
391 cf495bcf bellard
    V = FLAG_SET(PSR_OVF);
392 4e8b5da2 bellard
    b1 = N ^ V;
393 cf495bcf bellard
    b2 = T0 & 1;
394 cf495bcf bellard
    T0 = (b1 << 31) | (T0 >> 1);
395 cf495bcf bellard
    if (!(env->y & 1))
396 cf495bcf bellard
        T1 = 0;
397 cf495bcf bellard
    /* do addition and update flags */
398 cf495bcf bellard
    src1 = T0;
399 cf495bcf bellard
    T0 += T1;
400 cf495bcf bellard
    env->psr = 0;
401 cf495bcf bellard
    if (!T0)
402 cf495bcf bellard
        env->psr |= PSR_ZERO;
403 af7bf89b bellard
    if ((int32_t) T0 < 0)
404 cf495bcf bellard
        env->psr |= PSR_NEG;
405 cf495bcf bellard
    if (T0 < src1)
406 cf495bcf bellard
        env->psr |= PSR_CARRY;
407 cf495bcf bellard
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
408 cf495bcf bellard
        env->psr |= PSR_OVF;
409 cf495bcf bellard
    env->y = (b2 << 31) | (env->y >> 1);
410 cf495bcf bellard
    FORCE_RET();
411 cf495bcf bellard
}
412 cf495bcf bellard
413 cf495bcf bellard
void OPPROTO op_udiv_T1_T0(void)
414 cf495bcf bellard
{
415 cf495bcf bellard
    uint64_t x0;
416 cf495bcf bellard
    uint32_t x1;
417 cf495bcf bellard
418 cf495bcf bellard
    x0 = T0 | ((uint64_t) (env->y) << 32);
419 cf495bcf bellard
    x1 = T1;
420 cf495bcf bellard
    x0 = x0 / x1;
421 cf495bcf bellard
    if (x0 > 0xffffffff) {
422 cf495bcf bellard
        T0 = 0xffffffff;
423 cf495bcf bellard
        T1 = 1;
424 cf495bcf bellard
    } else {
425 cf495bcf bellard
        T0 = x0;
426 cf495bcf bellard
        T1 = 0;
427 cf495bcf bellard
    }
428 cf495bcf bellard
    FORCE_RET();
429 7a3f1944 bellard
}
430 7a3f1944 bellard
431 cf495bcf bellard
void OPPROTO op_sdiv_T1_T0(void)
432 7a3f1944 bellard
{
433 cf495bcf bellard
    int64_t x0;
434 cf495bcf bellard
    int32_t x1;
435 cf495bcf bellard
436 af7bf89b bellard
    x0 = T0 | ((int64_t) (env->y) << 32);
437 cf495bcf bellard
    x1 = T1;
438 cf495bcf bellard
    x0 = x0 / x1;
439 cf495bcf bellard
    if ((int32_t) x0 != x0) {
440 af7bf89b bellard
        T0 = x0 < 0? 0x80000000: 0x7fffffff;
441 cf495bcf bellard
        T1 = 1;
442 cf495bcf bellard
    } else {
443 cf495bcf bellard
        T0 = x0;
444 cf495bcf bellard
        T1 = 0;
445 cf495bcf bellard
    }
446 cf495bcf bellard
    FORCE_RET();
447 7a3f1944 bellard
}
448 7a3f1944 bellard
449 cf495bcf bellard
void OPPROTO op_div_cc(void)
450 7a3f1944 bellard
{
451 cf495bcf bellard
    env->psr = 0;
452 cf495bcf bellard
    if (!T0)
453 cf495bcf bellard
        env->psr |= PSR_ZERO;
454 af7bf89b bellard
    if ((int32_t) T0 < 0)
455 cf495bcf bellard
        env->psr |= PSR_NEG;
456 cf495bcf bellard
    if (T1)
457 cf495bcf bellard
        env->psr |= PSR_OVF;
458 af7bf89b bellard
    /* V9 xcc */
459 cf495bcf bellard
    FORCE_RET();
460 7a3f1944 bellard
}
461 7a3f1944 bellard
462 cf495bcf bellard
void OPPROTO op_logic_T0_cc(void)
463 7a3f1944 bellard
{
464 cf495bcf bellard
    env->psr = 0;
465 cf495bcf bellard
    if (!T0)
466 cf495bcf bellard
        env->psr |= PSR_ZERO;
467 af7bf89b bellard
    if ((int32_t) T0 < 0)
468 cf495bcf bellard
        env->psr |= PSR_NEG;
469 af7bf89b bellard
    /* V9 xcc */
470 cf495bcf bellard
    FORCE_RET();
471 7a3f1944 bellard
}
472 7a3f1944 bellard
473 cf495bcf bellard
void OPPROTO op_sll(void)
474 7a3f1944 bellard
{
475 cf495bcf bellard
    T0 <<= T1;
476 7a3f1944 bellard
}
477 7a3f1944 bellard
478 cf495bcf bellard
void OPPROTO op_srl(void)
479 7a3f1944 bellard
{
480 cf495bcf bellard
    T0 >>= T1;
481 7a3f1944 bellard
}
482 7a3f1944 bellard
483 cf495bcf bellard
void OPPROTO op_sra(void)
484 7a3f1944 bellard
{
485 cf495bcf bellard
    T0 = ((int32_t) T0) >> T1;
486 7a3f1944 bellard
}
487 7a3f1944 bellard
488 e8af50a3 bellard
/* Load and store */
489 e8af50a3 bellard
#define MEMSUFFIX _raw
490 e8af50a3 bellard
#include "op_mem.h"
491 e8af50a3 bellard
#if !defined(CONFIG_USER_ONLY)
492 e8af50a3 bellard
#define MEMSUFFIX _user
493 e8af50a3 bellard
#include "op_mem.h"
494 e8af50a3 bellard
495 e8af50a3 bellard
#define MEMSUFFIX _kernel
496 e8af50a3 bellard
#include "op_mem.h"
497 e8af50a3 bellard
#endif
498 e8af50a3 bellard
499 e8af50a3 bellard
void OPPROTO op_ldfsr(void)
500 e8af50a3 bellard
{
501 e8af50a3 bellard
    env->fsr = *((uint32_t *) &FT0);
502 8d5f07fa bellard
    helper_ldfsr();
503 e8af50a3 bellard
}
504 e8af50a3 bellard
505 e8af50a3 bellard
void OPPROTO op_stfsr(void)
506 e8af50a3 bellard
{
507 e8af50a3 bellard
    *((uint32_t *) &FT0) = env->fsr;
508 e8af50a3 bellard
}
509 e8af50a3 bellard
510 cf495bcf bellard
void OPPROTO op_wry(void)
511 7a3f1944 bellard
{
512 cf495bcf bellard
    env->y = T0;
513 7a3f1944 bellard
}
514 7a3f1944 bellard
515 cf495bcf bellard
void OPPROTO op_rdy(void)
516 7a3f1944 bellard
{
517 cf495bcf bellard
    T0 = env->y;
518 7a3f1944 bellard
}
519 7a3f1944 bellard
520 e8af50a3 bellard
void OPPROTO op_rdwim(void)
521 cf495bcf bellard
{
522 e8af50a3 bellard
    T0 = env->wim;
523 e8af50a3 bellard
}
524 e8af50a3 bellard
525 e8af50a3 bellard
void OPPROTO op_wrwim(void)
526 e8af50a3 bellard
{
527 e8af50a3 bellard
    env->wim = T0;
528 e8af50a3 bellard
    FORCE_RET();
529 e8af50a3 bellard
}
530 e8af50a3 bellard
531 e8af50a3 bellard
void OPPROTO op_rdpsr(void)
532 e8af50a3 bellard
{
533 af7bf89b bellard
    do_rdpsr();
534 e8af50a3 bellard
}
535 e8af50a3 bellard
536 e8af50a3 bellard
void OPPROTO op_wrpsr(void)
537 e8af50a3 bellard
{
538 af7bf89b bellard
    do_wrpsr();
539 e8af50a3 bellard
    FORCE_RET();
540 e8af50a3 bellard
}
541 e8af50a3 bellard
542 e8af50a3 bellard
void OPPROTO op_rdtbr(void)
543 e8af50a3 bellard
{
544 e8af50a3 bellard
    T0 = env->tbr;
545 e8af50a3 bellard
}
546 cf495bcf bellard
547 e8af50a3 bellard
void OPPROTO op_wrtbr(void)
548 7a3f1944 bellard
{
549 e8af50a3 bellard
    env->tbr = T0;
550 e8af50a3 bellard
    FORCE_RET();
551 7a3f1944 bellard
}
552 7a3f1944 bellard
553 e8af50a3 bellard
void OPPROTO op_rett(void)
554 cf495bcf bellard
{
555 e8af50a3 bellard
    helper_rett();
556 e8af50a3 bellard
    FORCE_RET();
557 cf495bcf bellard
}
558 7a3f1944 bellard
559 cf495bcf bellard
/* XXX: use another pointer for %iN registers to avoid slow wrapping
560 cf495bcf bellard
   handling ? */
561 cf495bcf bellard
void OPPROTO op_save(void)
562 7a3f1944 bellard
{
563 af7bf89b bellard
    uint32_t cwp;
564 cf495bcf bellard
    cwp = (env->cwp - 1) & (NWINDOWS - 1); 
565 cf495bcf bellard
    if (env->wim & (1 << cwp)) {
566 cf495bcf bellard
        raise_exception(TT_WIN_OVF);
567 cf495bcf bellard
    }
568 cf495bcf bellard
    set_cwp(cwp);
569 cf495bcf bellard
    FORCE_RET();
570 7a3f1944 bellard
}
571 7a3f1944 bellard
572 cf495bcf bellard
void OPPROTO op_restore(void)
573 7a3f1944 bellard
{
574 af7bf89b bellard
    uint32_t cwp;
575 cf495bcf bellard
    cwp = (env->cwp + 1) & (NWINDOWS - 1); 
576 cf495bcf bellard
    if (env->wim & (1 << cwp)) {
577 cf495bcf bellard
        raise_exception(TT_WIN_UNF);
578 cf495bcf bellard
    }
579 cf495bcf bellard
    set_cwp(cwp);
580 cf495bcf bellard
    FORCE_RET();
581 7a3f1944 bellard
}
582 7a3f1944 bellard
583 cf495bcf bellard
void OPPROTO op_exception(void)
584 7a3f1944 bellard
{
585 cf495bcf bellard
    env->exception_index = PARAM1;
586 cf495bcf bellard
    cpu_loop_exit();
587 7a3f1944 bellard
}
588 7a3f1944 bellard
589 cf495bcf bellard
void OPPROTO op_trap_T0(void)
590 7a3f1944 bellard
{
591 cf495bcf bellard
    env->exception_index = TT_TRAP + (T0 & 0x7f);
592 cf495bcf bellard
    cpu_loop_exit();
593 7a3f1944 bellard
}
594 7a3f1944 bellard
595 cf495bcf bellard
void OPPROTO op_trapcc_T0(void)
596 7a3f1944 bellard
{
597 cf495bcf bellard
    if (T2) {
598 cf495bcf bellard
        env->exception_index = TT_TRAP + (T0 & 0x7f);
599 cf495bcf bellard
        cpu_loop_exit();
600 cf495bcf bellard
    }
601 cf495bcf bellard
    FORCE_RET();
602 7a3f1944 bellard
}
603 7a3f1944 bellard
604 e80cfcfc bellard
void OPPROTO op_trap_ifnofpu(void)
605 e80cfcfc bellard
{
606 e80cfcfc bellard
    if (!env->psref) {
607 e80cfcfc bellard
        env->exception_index = TT_NFPU_INSN;
608 e80cfcfc bellard
        cpu_loop_exit();
609 e80cfcfc bellard
    }
610 e80cfcfc bellard
    FORCE_RET();
611 e80cfcfc bellard
}
612 e80cfcfc bellard
613 e80cfcfc bellard
void OPPROTO op_fpexception_im(void)
614 e8af50a3 bellard
{
615 e80cfcfc bellard
    env->exception_index = TT_FP_EXCP;
616 e80cfcfc bellard
    env->fsr &= ~FSR_FTT_MASK;
617 e80cfcfc bellard
    env->fsr |= PARAM1;
618 e8af50a3 bellard
    cpu_loop_exit();
619 e80cfcfc bellard
    FORCE_RET();
620 e80cfcfc bellard
}
621 e80cfcfc bellard
622 e80cfcfc bellard
void OPPROTO op_debug(void)
623 e80cfcfc bellard
{
624 e80cfcfc bellard
    helper_debug();
625 e8af50a3 bellard
}
626 e8af50a3 bellard
627 cf495bcf bellard
void OPPROTO op_exit_tb(void)
628 7a3f1944 bellard
{
629 cf495bcf bellard
    EXIT_TB();
630 7a3f1944 bellard
}
631 7a3f1944 bellard
632 cf495bcf bellard
void OPPROTO op_eval_be(void)
633 7a3f1944 bellard
{
634 af7bf89b bellard
    T2 = FLAG_SET(PSR_ZERO);
635 7a3f1944 bellard
}
636 7a3f1944 bellard
637 cf495bcf bellard
void OPPROTO op_eval_ble(void)
638 7a3f1944 bellard
{
639 af7bf89b bellard
    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
640 612b477d bellard
    
641 cf495bcf bellard
    T2 = Z | (N ^ V);
642 7a3f1944 bellard
}
643 7a3f1944 bellard
644 cf495bcf bellard
void OPPROTO op_eval_bl(void)
645 7a3f1944 bellard
{
646 af7bf89b bellard
    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
647 612b477d bellard
648 cf495bcf bellard
    T2 = N ^ V;
649 7a3f1944 bellard
}
650 7a3f1944 bellard
651 cf495bcf bellard
void OPPROTO op_eval_bleu(void)
652 7a3f1944 bellard
{
653 af7bf89b bellard
    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
654 612b477d bellard
655 cf495bcf bellard
    T2 = C | Z;
656 7a3f1944 bellard
}
657 7a3f1944 bellard
658 cf495bcf bellard
void OPPROTO op_eval_bcs(void)
659 7a3f1944 bellard
{
660 af7bf89b bellard
    T2 = FLAG_SET(PSR_CARRY);
661 7a3f1944 bellard
}
662 7a3f1944 bellard
663 cf495bcf bellard
void OPPROTO op_eval_bvs(void)
664 7a3f1944 bellard
{
665 af7bf89b bellard
    T2 = FLAG_SET(PSR_OVF);
666 7a3f1944 bellard
}
667 7a3f1944 bellard
668 cf495bcf bellard
void OPPROTO op_eval_bneg(void)
669 7a3f1944 bellard
{
670 af7bf89b bellard
    T2 = FLAG_SET(PSR_NEG);
671 7a3f1944 bellard
}
672 7a3f1944 bellard
673 cf495bcf bellard
void OPPROTO op_eval_bne(void)
674 7a3f1944 bellard
{
675 af7bf89b bellard
    T2 = !FLAG_SET(PSR_ZERO);
676 7a3f1944 bellard
}
677 7a3f1944 bellard
678 cf495bcf bellard
void OPPROTO op_eval_bg(void)
679 7a3f1944 bellard
{
680 af7bf89b bellard
    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
681 612b477d bellard
682 cf495bcf bellard
    T2 = !(Z | (N ^ V));
683 7a3f1944 bellard
}
684 7a3f1944 bellard
685 cf495bcf bellard
void OPPROTO op_eval_bge(void)
686 7a3f1944 bellard
{
687 af7bf89b bellard
    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
688 612b477d bellard
689 cf495bcf bellard
    T2 = !(N ^ V);
690 7a3f1944 bellard
}
691 7a3f1944 bellard
692 cf495bcf bellard
void OPPROTO op_eval_bgu(void)
693 7a3f1944 bellard
{
694 af7bf89b bellard
    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
695 612b477d bellard
696 cf495bcf bellard
    T2 = !(C | Z);
697 7a3f1944 bellard
}
698 7a3f1944 bellard
699 cf495bcf bellard
void OPPROTO op_eval_bcc(void)
700 7a3f1944 bellard
{
701 af7bf89b bellard
    T2 = !FLAG_SET(PSR_CARRY);
702 7a3f1944 bellard
}
703 7a3f1944 bellard
704 cf495bcf bellard
void OPPROTO op_eval_bpos(void)
705 cf495bcf bellard
{
706 af7bf89b bellard
    T2 = !FLAG_SET(PSR_NEG);
707 cf495bcf bellard
}
708 cf495bcf bellard
709 cf495bcf bellard
void OPPROTO op_eval_bvc(void)
710 cf495bcf bellard
{
711 af7bf89b bellard
    T2 = !FLAG_SET(PSR_OVF);
712 cf495bcf bellard
}
713 cf495bcf bellard
714 e8af50a3 bellard
/* FCC1:FCC0: 0 =, 1 <, 2 >, 3 u */
715 e8af50a3 bellard
716 e8af50a3 bellard
void OPPROTO op_eval_fbne(void)
717 e8af50a3 bellard
{
718 e8af50a3 bellard
// !0
719 e8af50a3 bellard
    T2 = (env->fsr & (FSR_FCC1 | FSR_FCC0)); /* L or G or U */
720 e8af50a3 bellard
}
721 e8af50a3 bellard
722 e8af50a3 bellard
void OPPROTO op_eval_fblg(void)
723 e8af50a3 bellard
{
724 e8af50a3 bellard
// 1 or 2
725 e8af50a3 bellard
    T2 = FFLAG_SET(FSR_FCC0) ^ FFLAG_SET(FSR_FCC1);
726 e8af50a3 bellard
}
727 e8af50a3 bellard
728 e8af50a3 bellard
void OPPROTO op_eval_fbul(void)
729 e8af50a3 bellard
{
730 e8af50a3 bellard
// 1 or 3
731 e8af50a3 bellard
    T2 = FFLAG_SET(FSR_FCC0);
732 e8af50a3 bellard
}
733 e8af50a3 bellard
734 e8af50a3 bellard
void OPPROTO op_eval_fbl(void)
735 e8af50a3 bellard
{
736 e8af50a3 bellard
// 1
737 e8af50a3 bellard
    T2 = FFLAG_SET(FSR_FCC0) & !FFLAG_SET(FSR_FCC1);
738 e8af50a3 bellard
}
739 e8af50a3 bellard
740 e8af50a3 bellard
void OPPROTO op_eval_fbug(void)
741 e8af50a3 bellard
{
742 e8af50a3 bellard
// 2 or 3
743 e8af50a3 bellard
    T2 = FFLAG_SET(FSR_FCC1);
744 e8af50a3 bellard
}
745 e8af50a3 bellard
746 e8af50a3 bellard
void OPPROTO op_eval_fbg(void)
747 e8af50a3 bellard
{
748 e8af50a3 bellard
// 2
749 e8af50a3 bellard
    T2 = !FFLAG_SET(FSR_FCC0) & FFLAG_SET(FSR_FCC1);
750 e8af50a3 bellard
}
751 e8af50a3 bellard
752 e8af50a3 bellard
void OPPROTO op_eval_fbu(void)
753 e8af50a3 bellard
{
754 e8af50a3 bellard
// 3
755 e8af50a3 bellard
    T2 = FFLAG_SET(FSR_FCC0) & FFLAG_SET(FSR_FCC1);
756 e8af50a3 bellard
}
757 e8af50a3 bellard
758 e8af50a3 bellard
void OPPROTO op_eval_fbe(void)
759 e8af50a3 bellard
{
760 e8af50a3 bellard
// 0
761 e8af50a3 bellard
    T2 = !FFLAG_SET(FSR_FCC0) & !FFLAG_SET(FSR_FCC1);
762 e8af50a3 bellard
}
763 e8af50a3 bellard
764 e8af50a3 bellard
void OPPROTO op_eval_fbue(void)
765 e8af50a3 bellard
{
766 e8af50a3 bellard
// 0 or 3
767 e8af50a3 bellard
    T2 = !(FFLAG_SET(FSR_FCC1) ^ FFLAG_SET(FSR_FCC0));
768 e8af50a3 bellard
}
769 e8af50a3 bellard
770 e8af50a3 bellard
void OPPROTO op_eval_fbge(void)
771 e8af50a3 bellard
{
772 e8af50a3 bellard
// 0 or 2
773 e8af50a3 bellard
    T2 = !FFLAG_SET(FSR_FCC0);
774 e8af50a3 bellard
}
775 e8af50a3 bellard
776 e8af50a3 bellard
void OPPROTO op_eval_fbuge(void)
777 e8af50a3 bellard
{
778 e8af50a3 bellard
// !1
779 e8af50a3 bellard
    T2 = !(FFLAG_SET(FSR_FCC0) & !FFLAG_SET(FSR_FCC1));
780 e8af50a3 bellard
}
781 e8af50a3 bellard
782 e8af50a3 bellard
void OPPROTO op_eval_fble(void)
783 e8af50a3 bellard
{
784 e8af50a3 bellard
// 0 or 1
785 e8af50a3 bellard
    T2 = !FFLAG_SET(FSR_FCC1);
786 e8af50a3 bellard
}
787 e8af50a3 bellard
788 e8af50a3 bellard
void OPPROTO op_eval_fbule(void)
789 e8af50a3 bellard
{
790 e8af50a3 bellard
// !2
791 e8af50a3 bellard
    T2 = !(!FFLAG_SET(FSR_FCC0) & FFLAG_SET(FSR_FCC1));
792 e8af50a3 bellard
}
793 e8af50a3 bellard
794 e8af50a3 bellard
void OPPROTO op_eval_fbo(void)
795 e8af50a3 bellard
{
796 e8af50a3 bellard
// !3
797 e8af50a3 bellard
    T2 = !(FFLAG_SET(FSR_FCC0) & FFLAG_SET(FSR_FCC1));
798 e8af50a3 bellard
}
799 e8af50a3 bellard
800 cf495bcf bellard
void OPPROTO op_jmp_im(void)
801 cf495bcf bellard
{
802 cf495bcf bellard
    env->pc = PARAM1;
803 cf495bcf bellard
}
804 cf495bcf bellard
805 cf495bcf bellard
void OPPROTO op_movl_npc_im(void)
806 cf495bcf bellard
{
807 cf495bcf bellard
    env->npc = PARAM1;
808 cf495bcf bellard
}
809 7a3f1944 bellard
810 cf495bcf bellard
void OPPROTO op_movl_npc_T0(void)
811 7a3f1944 bellard
{
812 cf495bcf bellard
    env->npc = T0;
813 7a3f1944 bellard
}
814 7a3f1944 bellard
815 0bee699e bellard
void OPPROTO op_mov_pc_npc(void)
816 0bee699e bellard
{
817 0bee699e bellard
    env->pc = env->npc;
818 0bee699e bellard
}
819 0bee699e bellard
820 cf495bcf bellard
void OPPROTO op_next_insn(void)
821 7a3f1944 bellard
{
822 cf495bcf bellard
    env->pc = env->npc;
823 cf495bcf bellard
    env->npc = env->npc + 4;
824 7a3f1944 bellard
}
825 7a3f1944 bellard
826 72cbca10 bellard
void OPPROTO op_branch(void)
827 72cbca10 bellard
{
828 72cbca10 bellard
    env->npc = PARAM3; /* XXX: optimize */
829 72cbca10 bellard
    JUMP_TB(op_branch, PARAM1, 0, PARAM2);
830 72cbca10 bellard
}
831 72cbca10 bellard
832 72cbca10 bellard
void OPPROTO op_branch2(void)
833 7a3f1944 bellard
{
834 cf495bcf bellard
    if (T2) {
835 72cbca10 bellard
        env->npc = PARAM2 + 4; 
836 72cbca10 bellard
        JUMP_TB(op_branch2, PARAM1, 0, PARAM2);
837 cf495bcf bellard
    } else {
838 72cbca10 bellard
        env->npc = PARAM3 + 4; 
839 72cbca10 bellard
        JUMP_TB(op_branch2, PARAM1, 1, PARAM3);
840 72cbca10 bellard
    }
841 72cbca10 bellard
    FORCE_RET();
842 72cbca10 bellard
}
843 72cbca10 bellard
844 72cbca10 bellard
void OPPROTO op_branch_a(void)
845 72cbca10 bellard
{
846 72cbca10 bellard
    if (T2) {
847 72cbca10 bellard
        env->npc = PARAM2; /* XXX: optimize */
848 af7bf89b bellard
        JUMP_TB(op_branch_a, PARAM1, 0, PARAM3);
849 72cbca10 bellard
    } else {
850 72cbca10 bellard
        env->npc = PARAM3 + 8; /* XXX: optimize */
851 af7bf89b bellard
        JUMP_TB(op_branch_a, PARAM1, 1, PARAM3 + 4);
852 cf495bcf bellard
    }
853 cf495bcf bellard
    FORCE_RET();
854 7a3f1944 bellard
}
855 7a3f1944 bellard
856 72cbca10 bellard
void OPPROTO op_generic_branch(void)
857 7a3f1944 bellard
{
858 cf495bcf bellard
    if (T2) {
859 cf495bcf bellard
        env->npc = PARAM1;
860 cf495bcf bellard
    } else {
861 72cbca10 bellard
        env->npc = PARAM2;
862 cf495bcf bellard
    }
863 cf495bcf bellard
    FORCE_RET();
864 7a3f1944 bellard
}
865 72cbca10 bellard
866 658138bc bellard
void OPPROTO op_flush_T0(void)
867 658138bc bellard
{
868 658138bc bellard
    helper_flush(T0);
869 658138bc bellard
}
870 e8af50a3 bellard
871 e8af50a3 bellard
void OPPROTO op_fnegs(void)
872 e8af50a3 bellard
{
873 e8af50a3 bellard
    FT0 = -FT1;
874 e8af50a3 bellard
}
875 e8af50a3 bellard
876 e8af50a3 bellard
void OPPROTO op_fabss(void)
877 e8af50a3 bellard
{
878 e8af50a3 bellard
    do_fabss();
879 e8af50a3 bellard
}
880 e8af50a3 bellard
881 e8af50a3 bellard
void OPPROTO op_fsqrts(void)
882 e8af50a3 bellard
{
883 e8af50a3 bellard
    do_fsqrts();
884 e8af50a3 bellard
}
885 e8af50a3 bellard
886 e8af50a3 bellard
void OPPROTO op_fsqrtd(void)
887 e8af50a3 bellard
{
888 e8af50a3 bellard
    do_fsqrtd();
889 e8af50a3 bellard
}
890 e8af50a3 bellard
891 e8af50a3 bellard
void OPPROTO op_fmuls(void)
892 e8af50a3 bellard
{
893 e8af50a3 bellard
    FT0 *= FT1;
894 e8af50a3 bellard
}
895 e8af50a3 bellard
896 e8af50a3 bellard
void OPPROTO op_fmuld(void)
897 e8af50a3 bellard
{
898 e8af50a3 bellard
    DT0 *= DT1;
899 e8af50a3 bellard
}
900 e8af50a3 bellard
901 e8af50a3 bellard
void OPPROTO op_fsmuld(void)
902 e8af50a3 bellard
{
903 e8af50a3 bellard
    DT0 = FT0 * FT1;
904 e8af50a3 bellard
}
905 e8af50a3 bellard
906 e8af50a3 bellard
void OPPROTO op_fadds(void)
907 e8af50a3 bellard
{
908 e8af50a3 bellard
    FT0 += FT1;
909 e8af50a3 bellard
}
910 e8af50a3 bellard
911 e8af50a3 bellard
void OPPROTO op_faddd(void)
912 e8af50a3 bellard
{
913 e8af50a3 bellard
    DT0 += DT1;
914 e8af50a3 bellard
}
915 e8af50a3 bellard
916 e8af50a3 bellard
void OPPROTO op_fsubs(void)
917 e8af50a3 bellard
{
918 e8af50a3 bellard
    FT0 -= FT1;
919 e8af50a3 bellard
}
920 e8af50a3 bellard
921 e8af50a3 bellard
void OPPROTO op_fsubd(void)
922 e8af50a3 bellard
{
923 e8af50a3 bellard
    DT0 -= DT1;
924 e8af50a3 bellard
}
925 e8af50a3 bellard
926 e8af50a3 bellard
void OPPROTO op_fdivs(void)
927 e8af50a3 bellard
{
928 e8af50a3 bellard
    FT0 /= FT1;
929 e8af50a3 bellard
}
930 e8af50a3 bellard
931 e8af50a3 bellard
void OPPROTO op_fdivd(void)
932 e8af50a3 bellard
{
933 e8af50a3 bellard
    DT0 /= DT1;
934 e8af50a3 bellard
}
935 e8af50a3 bellard
936 e8af50a3 bellard
void OPPROTO op_fcmps(void)
937 e8af50a3 bellard
{
938 e8af50a3 bellard
    do_fcmps();
939 e8af50a3 bellard
}
940 e8af50a3 bellard
941 e8af50a3 bellard
void OPPROTO op_fcmpd(void)
942 e8af50a3 bellard
{
943 e8af50a3 bellard
    do_fcmpd();
944 e8af50a3 bellard
}
945 e8af50a3 bellard
946 a0c4cb4a bellard
#ifdef USE_INT_TO_FLOAT_HELPERS
947 e8af50a3 bellard
void OPPROTO op_fitos(void)
948 e8af50a3 bellard
{
949 a0c4cb4a bellard
    do_fitos();
950 e8af50a3 bellard
}
951 e8af50a3 bellard
952 a0c4cb4a bellard
void OPPROTO op_fitod(void)
953 e8af50a3 bellard
{
954 a0c4cb4a bellard
    do_fitod();
955 a0c4cb4a bellard
}
956 a0c4cb4a bellard
#else
957 a0c4cb4a bellard
void OPPROTO op_fitos(void)
958 a0c4cb4a bellard
{
959 a0c4cb4a bellard
    FT0 = (float) *((int32_t *)&FT1);
960 e8af50a3 bellard
}
961 e8af50a3 bellard
962 e8af50a3 bellard
void OPPROTO op_fitod(void)
963 e8af50a3 bellard
{
964 e8af50a3 bellard
    DT0 = (double) *((int32_t *)&FT1);
965 e8af50a3 bellard
}
966 a0c4cb4a bellard
#endif
967 a0c4cb4a bellard
968 a0c4cb4a bellard
void OPPROTO op_fdtos(void)
969 a0c4cb4a bellard
{
970 a0c4cb4a bellard
    FT0 = (float) DT1;
971 a0c4cb4a bellard
}
972 e8af50a3 bellard
973 e8af50a3 bellard
void OPPROTO op_fstod(void)
974 e8af50a3 bellard
{
975 e8af50a3 bellard
    DT0 = (double) FT1;
976 e8af50a3 bellard
}
977 e8af50a3 bellard
978 e8af50a3 bellard
void OPPROTO op_fstoi(void)
979 e8af50a3 bellard
{
980 e8af50a3 bellard
    *((int32_t *)&FT0) = (int32_t) FT1;
981 e8af50a3 bellard
}
982 e8af50a3 bellard
983 e8af50a3 bellard
void OPPROTO op_fdtoi(void)
984 e8af50a3 bellard
{
985 e8af50a3 bellard
    *((int32_t *)&FT0) = (int32_t) DT1;
986 e8af50a3 bellard
}
987 e8af50a3 bellard
988 e8af50a3 bellard
void OPPROTO op_ld_asi()
989 e8af50a3 bellard
{
990 e8af50a3 bellard
    helper_ld_asi(PARAM1, PARAM2, PARAM3);
991 e8af50a3 bellard
}
992 e8af50a3 bellard
993 e8af50a3 bellard
void OPPROTO op_st_asi()
994 e8af50a3 bellard
{
995 e8af50a3 bellard
    helper_st_asi(PARAM1, PARAM2, PARAM3);
996 e8af50a3 bellard
}