Statistics
| Branch: | Revision:

root / target-ppc / op.c @ bd7d9a6d

History | View | Annotate | Download (49.1 kB)

1 79aceca5 bellard
/*
2 3fc6c082 bellard
 *  PowerPC emulation micro-operations for qemu.
3 5fafdf24 ths
 *
4 76a66253 j_mayer
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5 79aceca5 bellard
 *
6 79aceca5 bellard
 * This library is free software; you can redistribute it and/or
7 79aceca5 bellard
 * modify it under the terms of the GNU Lesser General Public
8 79aceca5 bellard
 * License as published by the Free Software Foundation; either
9 79aceca5 bellard
 * version 2 of the License, or (at your option) any later version.
10 79aceca5 bellard
 *
11 79aceca5 bellard
 * This library is distributed in the hope that it will be useful,
12 79aceca5 bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 79aceca5 bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 79aceca5 bellard
 * Lesser General Public License for more details.
15 79aceca5 bellard
 *
16 79aceca5 bellard
 * You should have received a copy of the GNU Lesser General Public
17 79aceca5 bellard
 * License along with this library; if not, write to the Free Software
18 79aceca5 bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 79aceca5 bellard
 */
20 79aceca5 bellard
21 a541f297 bellard
//#define DEBUG_OP
22 a541f297 bellard
23 79aceca5 bellard
#include "config.h"
24 79aceca5 bellard
#include "exec.h"
25 603fccce j_mayer
#include "host-utils.h"
26 0411a972 j_mayer
#include "helper_regs.h"
27 76a66253 j_mayer
#include "op_helper.h"
28 79aceca5 bellard
29 28b6751f bellard
#define REG 0
30 28b6751f bellard
#include "op_template.h"
31 28b6751f bellard
32 28b6751f bellard
#define REG 1
33 28b6751f bellard
#include "op_template.h"
34 28b6751f bellard
35 28b6751f bellard
#define REG 2
36 28b6751f bellard
#include "op_template.h"
37 28b6751f bellard
38 28b6751f bellard
#define REG 3
39 28b6751f bellard
#include "op_template.h"
40 28b6751f bellard
41 28b6751f bellard
#define REG 4
42 28b6751f bellard
#include "op_template.h"
43 28b6751f bellard
44 28b6751f bellard
#define REG 5
45 28b6751f bellard
#include "op_template.h"
46 28b6751f bellard
47 28b6751f bellard
#define REG 6
48 28b6751f bellard
#include "op_template.h"
49 28b6751f bellard
50 28b6751f bellard
#define REG 7
51 28b6751f bellard
#include "op_template.h"
52 28b6751f bellard
53 28b6751f bellard
#define REG 8
54 28b6751f bellard
#include "op_template.h"
55 28b6751f bellard
56 28b6751f bellard
#define REG 9
57 28b6751f bellard
#include "op_template.h"
58 28b6751f bellard
59 28b6751f bellard
#define REG 10
60 28b6751f bellard
#include "op_template.h"
61 28b6751f bellard
62 28b6751f bellard
#define REG 11
63 28b6751f bellard
#include "op_template.h"
64 28b6751f bellard
65 28b6751f bellard
#define REG 12
66 28b6751f bellard
#include "op_template.h"
67 28b6751f bellard
68 28b6751f bellard
#define REG 13
69 28b6751f bellard
#include "op_template.h"
70 28b6751f bellard
71 28b6751f bellard
#define REG 14
72 28b6751f bellard
#include "op_template.h"
73 28b6751f bellard
74 28b6751f bellard
#define REG 15
75 28b6751f bellard
#include "op_template.h"
76 28b6751f bellard
77 28b6751f bellard
#define REG 16
78 28b6751f bellard
#include "op_template.h"
79 28b6751f bellard
80 28b6751f bellard
#define REG 17
81 28b6751f bellard
#include "op_template.h"
82 28b6751f bellard
83 28b6751f bellard
#define REG 18
84 28b6751f bellard
#include "op_template.h"
85 28b6751f bellard
86 28b6751f bellard
#define REG 19
87 28b6751f bellard
#include "op_template.h"
88 28b6751f bellard
89 28b6751f bellard
#define REG 20
90 28b6751f bellard
#include "op_template.h"
91 28b6751f bellard
92 28b6751f bellard
#define REG 21
93 28b6751f bellard
#include "op_template.h"
94 28b6751f bellard
95 28b6751f bellard
#define REG 22
96 28b6751f bellard
#include "op_template.h"
97 28b6751f bellard
98 28b6751f bellard
#define REG 23
99 28b6751f bellard
#include "op_template.h"
100 28b6751f bellard
101 28b6751f bellard
#define REG 24
102 28b6751f bellard
#include "op_template.h"
103 28b6751f bellard
104 28b6751f bellard
#define REG 25
105 28b6751f bellard
#include "op_template.h"
106 28b6751f bellard
107 28b6751f bellard
#define REG 26
108 28b6751f bellard
#include "op_template.h"
109 28b6751f bellard
110 28b6751f bellard
#define REG 27
111 28b6751f bellard
#include "op_template.h"
112 28b6751f bellard
113 28b6751f bellard
#define REG 28
114 28b6751f bellard
#include "op_template.h"
115 28b6751f bellard
116 28b6751f bellard
#define REG 29
117 28b6751f bellard
#include "op_template.h"
118 28b6751f bellard
119 28b6751f bellard
#define REG 30
120 28b6751f bellard
#include "op_template.h"
121 28b6751f bellard
122 28b6751f bellard
#define REG 31
123 28b6751f bellard
#include "op_template.h"
124 28b6751f bellard
125 6676f424 aurel32
void OPPROTO op_print_mem_EA (void)
126 6676f424 aurel32
{
127 6676f424 aurel32
    do_print_mem_EA(T0);
128 6676f424 aurel32
    RETURN();
129 6676f424 aurel32
}
130 6676f424 aurel32
131 3fc6c082 bellard
/* PowerPC state maintenance operations */
132 79aceca5 bellard
/* set_Rc0 */
133 36081602 j_mayer
void OPPROTO op_set_Rc0 (void)
134 79aceca5 bellard
{
135 966439a6 j_mayer
    env->crf[0] = T0 | xer_so;
136 79aceca5 bellard
    RETURN();
137 79aceca5 bellard
}
138 79aceca5 bellard
139 76a66253 j_mayer
/* Generate exceptions */
140 36081602 j_mayer
void OPPROTO op_raise_exception_err (void)
141 9a64fbe4 bellard
{
142 36081602 j_mayer
    do_raise_exception_err(PARAM1, PARAM2);
143 9a64fbe4 bellard
}
144 9a64fbe4 bellard
145 6676f424 aurel32
void OPPROTO op_update_nip (void)
146 6676f424 aurel32
{
147 6676f424 aurel32
    env->nip = (uint32_t)PARAM1;
148 6676f424 aurel32
    RETURN();
149 6676f424 aurel32
}
150 6676f424 aurel32
151 6676f424 aurel32
#if defined(TARGET_PPC64)
152 6676f424 aurel32
void OPPROTO op_update_nip_64 (void)
153 6676f424 aurel32
{
154 6676f424 aurel32
    env->nip = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
155 6676f424 aurel32
    RETURN();
156 6676f424 aurel32
}
157 6676f424 aurel32
#endif
158 6676f424 aurel32
159 36081602 j_mayer
void OPPROTO op_debug (void)
160 ea4e754f bellard
{
161 ea4e754f bellard
    do_raise_exception(EXCP_DEBUG);
162 ea4e754f bellard
}
163 ea4e754f bellard
164 6676f424 aurel32
/* Load/store special registers */
165 6676f424 aurel32
void OPPROTO op_load_cr (void)
166 6676f424 aurel32
{
167 6676f424 aurel32
    do_load_cr();
168 6676f424 aurel32
    RETURN();
169 6676f424 aurel32
}
170 6676f424 aurel32
171 6676f424 aurel32
void OPPROTO op_store_cr (void)
172 6676f424 aurel32
{
173 6676f424 aurel32
    do_store_cr(PARAM1);
174 6676f424 aurel32
    RETURN();
175 6676f424 aurel32
}
176 6676f424 aurel32
177 6676f424 aurel32
void OPPROTO op_load_cro (void)
178 6676f424 aurel32
{
179 6676f424 aurel32
    T0 = env->crf[PARAM1];
180 6676f424 aurel32
    RETURN();
181 6676f424 aurel32
}
182 6676f424 aurel32
183 6676f424 aurel32
void OPPROTO op_store_cro (void)
184 6676f424 aurel32
{
185 6676f424 aurel32
    env->crf[PARAM1] = T0;
186 6676f424 aurel32
    RETURN();
187 6676f424 aurel32
}
188 6676f424 aurel32
189 36081602 j_mayer
void OPPROTO op_load_xer_cr (void)
190 79aceca5 bellard
{
191 79aceca5 bellard
    T0 = (xer_so << 3) | (xer_ov << 2) | (xer_ca << 1);
192 79aceca5 bellard
    RETURN();
193 79aceca5 bellard
}
194 79aceca5 bellard
195 36081602 j_mayer
void OPPROTO op_clear_xer_ov (void)
196 79aceca5 bellard
{
197 79aceca5 bellard
    xer_so = 0;
198 79aceca5 bellard
    xer_ov = 0;
199 e864cabd j_mayer
    RETURN();
200 e864cabd j_mayer
}
201 e864cabd j_mayer
202 36081602 j_mayer
void OPPROTO op_clear_xer_ca (void)
203 e864cabd j_mayer
{
204 79aceca5 bellard
    xer_ca = 0;
205 79aceca5 bellard
    RETURN();
206 79aceca5 bellard
}
207 79aceca5 bellard
208 36081602 j_mayer
void OPPROTO op_load_xer_bc (void)
209 79aceca5 bellard
{
210 9a64fbe4 bellard
    T1 = xer_bc;
211 79aceca5 bellard
    RETURN();
212 79aceca5 bellard
}
213 79aceca5 bellard
214 76a66253 j_mayer
void OPPROTO op_store_xer_bc (void)
215 76a66253 j_mayer
{
216 76a66253 j_mayer
    xer_bc = T0;
217 76a66253 j_mayer
    RETURN();
218 76a66253 j_mayer
}
219 76a66253 j_mayer
220 36081602 j_mayer
void OPPROTO op_load_xer (void)
221 79aceca5 bellard
{
222 0411a972 j_mayer
    T0 = hreg_load_xer(env);
223 79aceca5 bellard
    RETURN();
224 79aceca5 bellard
}
225 79aceca5 bellard
226 36081602 j_mayer
void OPPROTO op_store_xer (void)
227 79aceca5 bellard
{
228 0411a972 j_mayer
    hreg_store_xer(env, T0);
229 76a66253 j_mayer
    RETURN();
230 76a66253 j_mayer
}
231 76a66253 j_mayer
232 c80f84e3 j_mayer
#if defined(TARGET_PPC64)
233 c80f84e3 j_mayer
void OPPROTO op_store_pri (void)
234 c80f84e3 j_mayer
{
235 c80f84e3 j_mayer
    do_store_pri(PARAM1);
236 c80f84e3 j_mayer
    RETURN();
237 c80f84e3 j_mayer
}
238 c80f84e3 j_mayer
#endif
239 c80f84e3 j_mayer
240 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
241 76a66253 j_mayer
/* Segment registers load and store */
242 36081602 j_mayer
void OPPROTO op_load_sr (void)
243 76a66253 j_mayer
{
244 36081602 j_mayer
    T0 = env->sr[T1];
245 76a66253 j_mayer
    RETURN();
246 76a66253 j_mayer
}
247 76a66253 j_mayer
248 36081602 j_mayer
void OPPROTO op_store_sr (void)
249 76a66253 j_mayer
{
250 76a66253 j_mayer
    do_store_sr(env, T1, T0);
251 76a66253 j_mayer
    RETURN();
252 76a66253 j_mayer
}
253 76a66253 j_mayer
254 12de9a39 j_mayer
#if defined(TARGET_PPC64)
255 12de9a39 j_mayer
void OPPROTO op_load_slb (void)
256 12de9a39 j_mayer
{
257 12de9a39 j_mayer
    T0 = ppc_load_slb(env, T1);
258 12de9a39 j_mayer
    RETURN();
259 12de9a39 j_mayer
}
260 12de9a39 j_mayer
261 12de9a39 j_mayer
void OPPROTO op_store_slb (void)
262 12de9a39 j_mayer
{
263 12de9a39 j_mayer
    ppc_store_slb(env, T1, T0);
264 12de9a39 j_mayer
    RETURN();
265 12de9a39 j_mayer
}
266 12de9a39 j_mayer
#endif /* defined(TARGET_PPC64) */
267 12de9a39 j_mayer
268 36081602 j_mayer
void OPPROTO op_load_sdr1 (void)
269 76a66253 j_mayer
{
270 36081602 j_mayer
    T0 = env->sdr1;
271 76a66253 j_mayer
    RETURN();
272 76a66253 j_mayer
}
273 76a66253 j_mayer
274 36081602 j_mayer
void OPPROTO op_store_sdr1 (void)
275 76a66253 j_mayer
{
276 76a66253 j_mayer
    do_store_sdr1(env, T0);
277 79aceca5 bellard
    RETURN();
278 79aceca5 bellard
}
279 79aceca5 bellard
280 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
281 d9bce9d9 j_mayer
void OPPROTO op_load_asr (void)
282 d9bce9d9 j_mayer
{
283 d9bce9d9 j_mayer
    T0 = env->asr;
284 d9bce9d9 j_mayer
    RETURN();
285 d9bce9d9 j_mayer
}
286 d9bce9d9 j_mayer
287 d9bce9d9 j_mayer
void OPPROTO op_store_asr (void)
288 d9bce9d9 j_mayer
{
289 d9bce9d9 j_mayer
    ppc_store_asr(env, T0);
290 d9bce9d9 j_mayer
    RETURN();
291 d9bce9d9 j_mayer
}
292 d9bce9d9 j_mayer
#endif
293 d9bce9d9 j_mayer
294 6676f424 aurel32
void OPPROTO op_load_msr (void)
295 6676f424 aurel32
{
296 6676f424 aurel32
    T0 = env->msr;
297 6676f424 aurel32
    RETURN();
298 6676f424 aurel32
}
299 6676f424 aurel32
300 6676f424 aurel32
void OPPROTO op_store_msr (void)
301 6676f424 aurel32
{
302 6676f424 aurel32
    do_store_msr();
303 6676f424 aurel32
    RETURN();
304 6676f424 aurel32
}
305 6676f424 aurel32
306 6676f424 aurel32
#if defined (TARGET_PPC64)
307 6676f424 aurel32
void OPPROTO op_store_msr_32 (void)
308 6676f424 aurel32
{
309 6676f424 aurel32
    T0 = (env->msr & ~0xFFFFFFFFULL) | (T0 & 0xFFFFFFFF);
310 6676f424 aurel32
    do_store_msr();
311 6676f424 aurel32
    RETURN();
312 6676f424 aurel32
}
313 6676f424 aurel32
#endif
314 6676f424 aurel32
315 0411a972 j_mayer
void OPPROTO op_update_riee (void)
316 d9bce9d9 j_mayer
{
317 0411a972 j_mayer
    /* We don't call do_store_msr here as we won't trigger
318 0411a972 j_mayer
     * any special case nor change hflags
319 0411a972 j_mayer
     */
320 0411a972 j_mayer
    T0 &= (1 << MSR_RI) | (1 << MSR_EE);
321 0411a972 j_mayer
    env->msr &= ~(1 << MSR_RI) | (1 << MSR_EE);
322 0411a972 j_mayer
    env->msr |= T0;
323 d9bce9d9 j_mayer
    RETURN();
324 d9bce9d9 j_mayer
}
325 d9bce9d9 j_mayer
#endif
326 9a64fbe4 bellard
327 9a64fbe4 bellard
/* SPR */
328 a496775f j_mayer
void OPPROTO op_load_spr (void)
329 a496775f j_mayer
{
330 a496775f j_mayer
    T0 = env->spr[PARAM1];
331 a496775f j_mayer
    RETURN();
332 a496775f j_mayer
}
333 a496775f j_mayer
334 a496775f j_mayer
void OPPROTO op_store_spr (void)
335 a496775f j_mayer
{
336 a496775f j_mayer
    env->spr[PARAM1] = T0;
337 a496775f j_mayer
    RETURN();
338 a496775f j_mayer
}
339 a496775f j_mayer
340 a496775f j_mayer
void OPPROTO op_load_dump_spr (void)
341 a496775f j_mayer
{
342 a496775f j_mayer
    T0 = ppc_load_dump_spr(PARAM1);
343 a496775f j_mayer
    RETURN();
344 a496775f j_mayer
}
345 a496775f j_mayer
346 a496775f j_mayer
void OPPROTO op_store_dump_spr (void)
347 9a64fbe4 bellard
{
348 a496775f j_mayer
    ppc_store_dump_spr(PARAM1, T0);
349 9a64fbe4 bellard
    RETURN();
350 9a64fbe4 bellard
}
351 9a64fbe4 bellard
352 a496775f j_mayer
void OPPROTO op_mask_spr (void)
353 9a64fbe4 bellard
{
354 a496775f j_mayer
    env->spr[PARAM1] &= ~T0;
355 79aceca5 bellard
    RETURN();
356 79aceca5 bellard
}
357 79aceca5 bellard
358 36081602 j_mayer
void OPPROTO op_load_lr (void)
359 79aceca5 bellard
{
360 36081602 j_mayer
    T0 = env->lr;
361 9a64fbe4 bellard
    RETURN();
362 9a64fbe4 bellard
}
363 9a64fbe4 bellard
364 36081602 j_mayer
void OPPROTO op_store_lr (void)
365 9a64fbe4 bellard
{
366 36081602 j_mayer
    env->lr = T0;
367 9a64fbe4 bellard
    RETURN();
368 9a64fbe4 bellard
}
369 9a64fbe4 bellard
370 36081602 j_mayer
void OPPROTO op_load_ctr (void)
371 9a64fbe4 bellard
{
372 36081602 j_mayer
    T0 = env->ctr;
373 9a64fbe4 bellard
    RETURN();
374 9a64fbe4 bellard
}
375 9a64fbe4 bellard
376 36081602 j_mayer
void OPPROTO op_store_ctr (void)
377 9a64fbe4 bellard
{
378 36081602 j_mayer
    env->ctr = T0;
379 9a64fbe4 bellard
    RETURN();
380 9a64fbe4 bellard
}
381 9a64fbe4 bellard
382 36081602 j_mayer
void OPPROTO op_load_tbl (void)
383 9a64fbe4 bellard
{
384 36081602 j_mayer
    T0 = cpu_ppc_load_tbl(env);
385 9a64fbe4 bellard
    RETURN();
386 9a64fbe4 bellard
}
387 9a64fbe4 bellard
388 36081602 j_mayer
void OPPROTO op_load_tbu (void)
389 9a64fbe4 bellard
{
390 36081602 j_mayer
    T0 = cpu_ppc_load_tbu(env);
391 9a64fbe4 bellard
    RETURN();
392 9a64fbe4 bellard
}
393 9a64fbe4 bellard
394 a062e36c j_mayer
void OPPROTO op_load_atbl (void)
395 a062e36c j_mayer
{
396 a062e36c j_mayer
    T0 = cpu_ppc_load_atbl(env);
397 a062e36c j_mayer
    RETURN();
398 a062e36c j_mayer
}
399 a062e36c j_mayer
400 a062e36c j_mayer
void OPPROTO op_load_atbu (void)
401 a062e36c j_mayer
{
402 a062e36c j_mayer
    T0 = cpu_ppc_load_atbu(env);
403 a062e36c j_mayer
    RETURN();
404 a062e36c j_mayer
}
405 a062e36c j_mayer
406 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
407 36081602 j_mayer
void OPPROTO op_store_tbl (void)
408 9a64fbe4 bellard
{
409 36081602 j_mayer
    cpu_ppc_store_tbl(env, T0);
410 79aceca5 bellard
    RETURN();
411 79aceca5 bellard
}
412 79aceca5 bellard
413 36081602 j_mayer
void OPPROTO op_store_tbu (void)
414 9a64fbe4 bellard
{
415 36081602 j_mayer
    cpu_ppc_store_tbu(env, T0);
416 9a64fbe4 bellard
    RETURN();
417 9a64fbe4 bellard
}
418 9a64fbe4 bellard
419 a062e36c j_mayer
void OPPROTO op_store_atbl (void)
420 a062e36c j_mayer
{
421 a062e36c j_mayer
    cpu_ppc_store_atbl(env, T0);
422 a062e36c j_mayer
    RETURN();
423 a062e36c j_mayer
}
424 a062e36c j_mayer
425 a062e36c j_mayer
void OPPROTO op_store_atbu (void)
426 a062e36c j_mayer
{
427 a062e36c j_mayer
    cpu_ppc_store_atbu(env, T0);
428 a062e36c j_mayer
    RETURN();
429 a062e36c j_mayer
}
430 a062e36c j_mayer
431 36081602 j_mayer
void OPPROTO op_load_decr (void)
432 9a64fbe4 bellard
{
433 36081602 j_mayer
    T0 = cpu_ppc_load_decr(env);
434 76a66253 j_mayer
    RETURN();
435 76a66253 j_mayer
}
436 9fddaa0c bellard
437 36081602 j_mayer
void OPPROTO op_store_decr (void)
438 9fddaa0c bellard
{
439 36081602 j_mayer
    cpu_ppc_store_decr(env, T0);
440 9a64fbe4 bellard
    RETURN();
441 9a64fbe4 bellard
}
442 9a64fbe4 bellard
443 36081602 j_mayer
void OPPROTO op_load_ibat (void)
444 9a64fbe4 bellard
{
445 36081602 j_mayer
    T0 = env->IBAT[PARAM1][PARAM2];
446 76a66253 j_mayer
    RETURN();
447 9a64fbe4 bellard
}
448 9a64fbe4 bellard
449 76a66253 j_mayer
void OPPROTO op_store_ibatu (void)
450 9a64fbe4 bellard
{
451 3fc6c082 bellard
    do_store_ibatu(env, PARAM1, T0);
452 3fc6c082 bellard
    RETURN();
453 3fc6c082 bellard
}
454 3fc6c082 bellard
455 76a66253 j_mayer
void OPPROTO op_store_ibatl (void)
456 3fc6c082 bellard
{
457 3fc6c082 bellard
#if 1
458 3fc6c082 bellard
    env->IBAT[1][PARAM1] = T0;
459 3fc6c082 bellard
#else
460 3fc6c082 bellard
    do_store_ibatl(env, PARAM1, T0);
461 3fc6c082 bellard
#endif
462 3fc6c082 bellard
    RETURN();
463 9a64fbe4 bellard
}
464 9a64fbe4 bellard
465 36081602 j_mayer
void OPPROTO op_load_dbat (void)
466 9a64fbe4 bellard
{
467 36081602 j_mayer
    T0 = env->DBAT[PARAM1][PARAM2];
468 76a66253 j_mayer
    RETURN();
469 9a64fbe4 bellard
}
470 9a64fbe4 bellard
471 76a66253 j_mayer
void OPPROTO op_store_dbatu (void)
472 3fc6c082 bellard
{
473 3fc6c082 bellard
    do_store_dbatu(env, PARAM1, T0);
474 3fc6c082 bellard
    RETURN();
475 3fc6c082 bellard
}
476 3fc6c082 bellard
477 76a66253 j_mayer
void OPPROTO op_store_dbatl (void)
478 9a64fbe4 bellard
{
479 3fc6c082 bellard
#if 1
480 3fc6c082 bellard
    env->DBAT[1][PARAM1] = T0;
481 3fc6c082 bellard
#else
482 3fc6c082 bellard
    do_store_dbatl(env, PARAM1, T0);
483 3fc6c082 bellard
#endif
484 3fc6c082 bellard
    RETURN();
485 9a64fbe4 bellard
}
486 76a66253 j_mayer
#endif /* !defined(CONFIG_USER_ONLY) */
487 9a64fbe4 bellard
488 fb0eaffc bellard
/* FPSCR */
489 7c58044c j_mayer
#ifdef CONFIG_SOFTFLOAT
490 7c58044c j_mayer
void OPPROTO op_reset_fpstatus (void)
491 fb0eaffc bellard
{
492 7c58044c j_mayer
    env->fp_status.float_exception_flags = 0;
493 fb0eaffc bellard
    RETURN();
494 fb0eaffc bellard
}
495 7c58044c j_mayer
#endif
496 fb0eaffc bellard
497 7c58044c j_mayer
void OPPROTO op_compute_fprf (void)
498 fb0eaffc bellard
{
499 7c58044c j_mayer
    do_compute_fprf(PARAM1);
500 7c58044c j_mayer
    RETURN();
501 7c58044c j_mayer
}
502 7c58044c j_mayer
503 7c58044c j_mayer
#ifdef CONFIG_SOFTFLOAT
504 7c58044c j_mayer
void OPPROTO op_float_check_status (void)
505 7c58044c j_mayer
{
506 7c58044c j_mayer
    do_float_check_status();
507 7c58044c j_mayer
    RETURN();
508 7c58044c j_mayer
}
509 7c58044c j_mayer
#else
510 7c58044c j_mayer
void OPPROTO op_float_check_status (void)
511 7c58044c j_mayer
{
512 7c58044c j_mayer
    if (env->exception_index == POWERPC_EXCP_PROGRAM &&
513 7c58044c j_mayer
        (env->error_code & POWERPC_EXCP_FP)) {
514 7c58044c j_mayer
        /* Differred floating-point exception after target FPR update */
515 7c58044c j_mayer
        if (msr_fe0 != 0 || msr_fe1 != 0)
516 7c58044c j_mayer
            do_raise_exception_err(env->exception_index, env->error_code);
517 7c58044c j_mayer
    }
518 fb0eaffc bellard
    RETURN();
519 fb0eaffc bellard
}
520 7c58044c j_mayer
#endif
521 7c58044c j_mayer
522 7c58044c j_mayer
void OPPROTO op_load_fpscr_FT0 (void)
523 7c58044c j_mayer
{
524 7c58044c j_mayer
    /* The 32 MSB of the target fpr are undefined.
525 7c58044c j_mayer
     * They'll be zero...
526 7c58044c j_mayer
     */
527 0ca9d380 aurel32
    CPU_DoubleU u;
528 0ca9d380 aurel32
529 0ca9d380 aurel32
    u.l.upper = 0;
530 0ca9d380 aurel32
    u.l.lower = env->fpscr;
531 7c58044c j_mayer
    FT0 = u.d;
532 7c58044c j_mayer
    RETURN();
533 7c58044c j_mayer
}
534 7c58044c j_mayer
535 7c58044c j_mayer
void OPPROTO op_set_FT0 (void)
536 7c58044c j_mayer
{
537 0ca9d380 aurel32
    CPU_DoubleU u;
538 7c58044c j_mayer
539 0ca9d380 aurel32
    u.l.upper = 0;
540 0ca9d380 aurel32
    u.l.lower = PARAM1;
541 7c58044c j_mayer
    FT0 = u.d;
542 7c58044c j_mayer
    RETURN();
543 7c58044c j_mayer
}
544 fb0eaffc bellard
545 7c58044c j_mayer
void OPPROTO op_load_fpscr_T0 (void)
546 fb0eaffc bellard
{
547 7c58044c j_mayer
    T0 = (env->fpscr >> PARAM1) & 0xF;
548 7c58044c j_mayer
    RETURN();
549 7c58044c j_mayer
}
550 7c58044c j_mayer
551 7c58044c j_mayer
void OPPROTO op_load_fpcc (void)
552 7c58044c j_mayer
{
553 7c58044c j_mayer
    T0 = fpscr_fpcc;
554 7c58044c j_mayer
    RETURN();
555 7c58044c j_mayer
}
556 7c58044c j_mayer
557 7c58044c j_mayer
void OPPROTO op_fpscr_resetbit (void)
558 7c58044c j_mayer
{
559 7c58044c j_mayer
    env->fpscr &= PARAM1;
560 7c58044c j_mayer
    RETURN();
561 7c58044c j_mayer
}
562 7c58044c j_mayer
563 7c58044c j_mayer
void OPPROTO op_fpscr_setbit (void)
564 7c58044c j_mayer
{
565 7c58044c j_mayer
    do_fpscr_setbit(PARAM1);
566 7c58044c j_mayer
    RETURN();
567 7c58044c j_mayer
}
568 7c58044c j_mayer
569 7c58044c j_mayer
void OPPROTO op_store_fpscr (void)
570 7c58044c j_mayer
{
571 7c58044c j_mayer
    do_store_fpscr(PARAM1);
572 fb0eaffc bellard
    RETURN();
573 fb0eaffc bellard
}
574 fb0eaffc bellard
575 79aceca5 bellard
/* Branch */
576 36081602 j_mayer
#define EIP env->nip
577 9a64fbe4 bellard
578 36081602 j_mayer
void OPPROTO op_setlr (void)
579 e98a6e40 bellard
{
580 36081602 j_mayer
    env->lr = (uint32_t)PARAM1;
581 76a66253 j_mayer
    RETURN();
582 e98a6e40 bellard
}
583 e98a6e40 bellard
584 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
585 d9bce9d9 j_mayer
void OPPROTO op_setlr_64 (void)
586 d9bce9d9 j_mayer
{
587 36081602 j_mayer
    env->lr = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
588 d9bce9d9 j_mayer
    RETURN();
589 d9bce9d9 j_mayer
}
590 d9bce9d9 j_mayer
#endif
591 d9bce9d9 j_mayer
592 d9bce9d9 j_mayer
void OPPROTO op_b_T1 (void)
593 e98a6e40 bellard
{
594 36081602 j_mayer
    env->nip = (uint32_t)(T1 & ~3);
595 76a66253 j_mayer
    RETURN();
596 e98a6e40 bellard
}
597 e98a6e40 bellard
598 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
599 d9bce9d9 j_mayer
void OPPROTO op_b_T1_64 (void)
600 d9bce9d9 j_mayer
{
601 36081602 j_mayer
    env->nip = (uint64_t)(T1 & ~3);
602 d9bce9d9 j_mayer
    RETURN();
603 d9bce9d9 j_mayer
}
604 d9bce9d9 j_mayer
#endif
605 d9bce9d9 j_mayer
606 36081602 j_mayer
void OPPROTO op_jz_T0 (void)
607 e98a6e40 bellard
{
608 c53be334 bellard
    if (!T0)
609 c53be334 bellard
        GOTO_LABEL_PARAM(1);
610 e98a6e40 bellard
    RETURN();
611 e98a6e40 bellard
}
612 e98a6e40 bellard
613 d9bce9d9 j_mayer
void OPPROTO op_btest_T1 (void)
614 e98a6e40 bellard
{
615 e98a6e40 bellard
    if (T0) {
616 36081602 j_mayer
        env->nip = (uint32_t)(T1 & ~3);
617 e98a6e40 bellard
    } else {
618 36081602 j_mayer
        env->nip = (uint32_t)PARAM1;
619 e98a6e40 bellard
    }
620 e98a6e40 bellard
    RETURN();
621 e98a6e40 bellard
}
622 e98a6e40 bellard
623 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
624 d9bce9d9 j_mayer
void OPPROTO op_btest_T1_64 (void)
625 d9bce9d9 j_mayer
{
626 d9bce9d9 j_mayer
    if (T0) {
627 36081602 j_mayer
        env->nip = (uint64_t)(T1 & ~3);
628 d9bce9d9 j_mayer
    } else {
629 36081602 j_mayer
        env->nip = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
630 d9bce9d9 j_mayer
    }
631 d9bce9d9 j_mayer
    RETURN();
632 d9bce9d9 j_mayer
}
633 d9bce9d9 j_mayer
#endif
634 d9bce9d9 j_mayer
635 36081602 j_mayer
void OPPROTO op_movl_T1_ctr (void)
636 e98a6e40 bellard
{
637 36081602 j_mayer
    T1 = env->ctr;
638 76a66253 j_mayer
    RETURN();
639 e98a6e40 bellard
}
640 e98a6e40 bellard
641 36081602 j_mayer
void OPPROTO op_movl_T1_lr (void)
642 e98a6e40 bellard
{
643 36081602 j_mayer
    T1 = env->lr;
644 76a66253 j_mayer
    RETURN();
645 e98a6e40 bellard
}
646 e98a6e40 bellard
647 e98a6e40 bellard
/* tests with result in T0 */
648 d9bce9d9 j_mayer
void OPPROTO op_test_ctr (void)
649 d9bce9d9 j_mayer
{
650 36081602 j_mayer
    T0 = (uint32_t)env->ctr;
651 d9bce9d9 j_mayer
    RETURN();
652 d9bce9d9 j_mayer
}
653 e98a6e40 bellard
654 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
655 d9bce9d9 j_mayer
void OPPROTO op_test_ctr_64 (void)
656 e98a6e40 bellard
{
657 36081602 j_mayer
    T0 = (uint64_t)env->ctr;
658 d9bce9d9 j_mayer
    RETURN();
659 d9bce9d9 j_mayer
}
660 d9bce9d9 j_mayer
#endif
661 d9bce9d9 j_mayer
662 d9bce9d9 j_mayer
void OPPROTO op_test_ctr_true (void)
663 d9bce9d9 j_mayer
{
664 36081602 j_mayer
    T0 = ((uint32_t)env->ctr != 0 && (T0 & PARAM1) != 0);
665 76a66253 j_mayer
    RETURN();
666 e98a6e40 bellard
}
667 e98a6e40 bellard
668 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
669 d9bce9d9 j_mayer
void OPPROTO op_test_ctr_true_64 (void)
670 e98a6e40 bellard
{
671 36081602 j_mayer
    T0 = ((uint64_t)env->ctr != 0 && (T0 & PARAM1) != 0);
672 76a66253 j_mayer
    RETURN();
673 e98a6e40 bellard
}
674 d9bce9d9 j_mayer
#endif
675 e98a6e40 bellard
676 d9bce9d9 j_mayer
void OPPROTO op_test_ctr_false (void)
677 e98a6e40 bellard
{
678 36081602 j_mayer
    T0 = ((uint32_t)env->ctr != 0 && (T0 & PARAM1) == 0);
679 76a66253 j_mayer
    RETURN();
680 e98a6e40 bellard
}
681 e98a6e40 bellard
682 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
683 d9bce9d9 j_mayer
void OPPROTO op_test_ctr_false_64 (void)
684 e98a6e40 bellard
{
685 36081602 j_mayer
    T0 = ((uint64_t)env->ctr != 0 && (T0 & PARAM1) == 0);
686 76a66253 j_mayer
    RETURN();
687 e98a6e40 bellard
}
688 d9bce9d9 j_mayer
#endif
689 d9bce9d9 j_mayer
690 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz (void)
691 d9bce9d9 j_mayer
{
692 36081602 j_mayer
    T0 = ((uint32_t)env->ctr == 0);
693 d9bce9d9 j_mayer
    RETURN();
694 d9bce9d9 j_mayer
}
695 d9bce9d9 j_mayer
696 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
697 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz_64 (void)
698 d9bce9d9 j_mayer
{
699 36081602 j_mayer
    T0 = ((uint64_t)env->ctr == 0);
700 d9bce9d9 j_mayer
    RETURN();
701 d9bce9d9 j_mayer
}
702 d9bce9d9 j_mayer
#endif
703 d9bce9d9 j_mayer
704 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz_true (void)
705 d9bce9d9 j_mayer
{
706 36081602 j_mayer
    T0 = ((uint32_t)env->ctr == 0 && (T0 & PARAM1) != 0);
707 d9bce9d9 j_mayer
    RETURN();
708 d9bce9d9 j_mayer
}
709 d9bce9d9 j_mayer
710 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
711 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz_true_64 (void)
712 d9bce9d9 j_mayer
{
713 36081602 j_mayer
    T0 = ((uint64_t)env->ctr == 0 && (T0 & PARAM1) != 0);
714 d9bce9d9 j_mayer
    RETURN();
715 d9bce9d9 j_mayer
}
716 d9bce9d9 j_mayer
#endif
717 e98a6e40 bellard
718 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz_false (void)
719 e98a6e40 bellard
{
720 36081602 j_mayer
    T0 = ((uint32_t)env->ctr == 0 && (T0 & PARAM1) == 0);
721 76a66253 j_mayer
    RETURN();
722 e98a6e40 bellard
}
723 e98a6e40 bellard
724 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
725 d9bce9d9 j_mayer
void OPPROTO op_test_ctrz_false_64 (void)
726 e98a6e40 bellard
{
727 36081602 j_mayer
    T0 = ((uint64_t)env->ctr == 0 && (T0 & PARAM1) == 0);
728 76a66253 j_mayer
    RETURN();
729 e98a6e40 bellard
}
730 d9bce9d9 j_mayer
#endif
731 e98a6e40 bellard
732 36081602 j_mayer
void OPPROTO op_test_true (void)
733 e98a6e40 bellard
{
734 36081602 j_mayer
    T0 = (T0 & PARAM1);
735 76a66253 j_mayer
    RETURN();
736 e98a6e40 bellard
}
737 e98a6e40 bellard
738 36081602 j_mayer
void OPPROTO op_test_false (void)
739 e98a6e40 bellard
{
740 36081602 j_mayer
    T0 = ((T0 & PARAM1) == 0);
741 76a66253 j_mayer
    RETURN();
742 e98a6e40 bellard
}
743 79aceca5 bellard
744 79aceca5 bellard
/* CTR maintenance */
745 36081602 j_mayer
void OPPROTO op_dec_ctr (void)
746 79aceca5 bellard
{
747 36081602 j_mayer
    env->ctr--;
748 79aceca5 bellard
    RETURN();
749 79aceca5 bellard
}
750 79aceca5 bellard
751 79aceca5 bellard
/***                           Integer arithmetic                          ***/
752 79aceca5 bellard
/* add */
753 36081602 j_mayer
void OPPROTO op_add (void)
754 79aceca5 bellard
{
755 79aceca5 bellard
    T0 += T1;
756 79aceca5 bellard
    RETURN();
757 79aceca5 bellard
}
758 79aceca5 bellard
759 d9bce9d9 j_mayer
void OPPROTO op_check_addo (void)
760 79aceca5 bellard
{
761 c3e10c7b j_mayer
    xer_ov = (((uint32_t)T2 ^ (uint32_t)T1 ^ UINT32_MAX) &
762 c3e10c7b j_mayer
              ((uint32_t)T2 ^ (uint32_t)T0)) >> 31;
763 c3e10c7b j_mayer
    xer_so |= xer_ov;
764 e864cabd j_mayer
    RETURN();
765 79aceca5 bellard
}
766 79aceca5 bellard
767 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
768 d9bce9d9 j_mayer
void OPPROTO op_check_addo_64 (void)
769 79aceca5 bellard
{
770 c3e10c7b j_mayer
    xer_ov = (((uint64_t)T2 ^ (uint64_t)T1 ^ UINT64_MAX) &
771 c3e10c7b j_mayer
              ((uint64_t)T2 ^ (uint64_t)T0)) >> 63;
772 c3e10c7b j_mayer
    xer_so |= xer_ov;
773 e864cabd j_mayer
    RETURN();
774 d9bce9d9 j_mayer
}
775 d9bce9d9 j_mayer
#endif
776 d9bce9d9 j_mayer
777 d9bce9d9 j_mayer
/* add carrying */
778 d9bce9d9 j_mayer
void OPPROTO op_check_addc (void)
779 d9bce9d9 j_mayer
{
780 d9bce9d9 j_mayer
    if (likely((uint32_t)T0 >= (uint32_t)T2)) {
781 79aceca5 bellard
        xer_ca = 0;
782 d9bce9d9 j_mayer
    } else {
783 d9bce9d9 j_mayer
        xer_ca = 1;
784 79aceca5 bellard
    }
785 79aceca5 bellard
    RETURN();
786 79aceca5 bellard
}
787 79aceca5 bellard
788 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
789 d9bce9d9 j_mayer
void OPPROTO op_check_addc_64 (void)
790 79aceca5 bellard
{
791 d9bce9d9 j_mayer
    if (likely((uint64_t)T0 >= (uint64_t)T2)) {
792 d9bce9d9 j_mayer
        xer_ca = 0;
793 d9bce9d9 j_mayer
    } else {
794 d9bce9d9 j_mayer
        xer_ca = 1;
795 d9bce9d9 j_mayer
    }
796 79aceca5 bellard
    RETURN();
797 79aceca5 bellard
}
798 d9bce9d9 j_mayer
#endif
799 79aceca5 bellard
800 79aceca5 bellard
/* add extended */
801 76a66253 j_mayer
void OPPROTO op_adde (void)
802 79aceca5 bellard
{
803 fdabc366 bellard
    do_adde();
804 76a66253 j_mayer
    RETURN();
805 79aceca5 bellard
}
806 79aceca5 bellard
807 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
808 d9bce9d9 j_mayer
void OPPROTO op_adde_64 (void)
809 79aceca5 bellard
{
810 d9bce9d9 j_mayer
    do_adde_64();
811 79aceca5 bellard
    RETURN();
812 79aceca5 bellard
}
813 d9bce9d9 j_mayer
#endif
814 79aceca5 bellard
815 79aceca5 bellard
/* add immediate */
816 36081602 j_mayer
void OPPROTO op_addi (void)
817 79aceca5 bellard
{
818 36081602 j_mayer
    T0 += (int32_t)PARAM1;
819 79aceca5 bellard
    RETURN();
820 79aceca5 bellard
}
821 79aceca5 bellard
822 d9bce9d9 j_mayer
/* add to minus one extended */
823 d9bce9d9 j_mayer
void OPPROTO op_add_me (void)
824 79aceca5 bellard
{
825 d9bce9d9 j_mayer
    T0 += xer_ca + (-1);
826 d9bce9d9 j_mayer
    if (likely((uint32_t)T1 != 0))
827 79aceca5 bellard
        xer_ca = 1;
828 c3e10c7b j_mayer
    else
829 c3e10c7b j_mayer
        xer_ca = 0;
830 79aceca5 bellard
    RETURN();
831 79aceca5 bellard
}
832 79aceca5 bellard
833 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
834 d9bce9d9 j_mayer
void OPPROTO op_add_me_64 (void)
835 79aceca5 bellard
{
836 79aceca5 bellard
    T0 += xer_ca + (-1);
837 d9bce9d9 j_mayer
    if (likely((uint64_t)T1 != 0))
838 79aceca5 bellard
        xer_ca = 1;
839 c3e10c7b j_mayer
    else
840 c3e10c7b j_mayer
        xer_ca = 0;
841 79aceca5 bellard
    RETURN();
842 79aceca5 bellard
}
843 d9bce9d9 j_mayer
#endif
844 79aceca5 bellard
845 76a66253 j_mayer
void OPPROTO op_addmeo (void)
846 79aceca5 bellard
{
847 fdabc366 bellard
    do_addmeo();
848 79aceca5 bellard
    RETURN();
849 79aceca5 bellard
}
850 79aceca5 bellard
851 d9bce9d9 j_mayer
void OPPROTO op_addmeo_64 (void)
852 d9bce9d9 j_mayer
{
853 d9bce9d9 j_mayer
    do_addmeo();
854 d9bce9d9 j_mayer
    RETURN();
855 d9bce9d9 j_mayer
}
856 d9bce9d9 j_mayer
857 79aceca5 bellard
/* add to zero extended */
858 d9bce9d9 j_mayer
void OPPROTO op_add_ze (void)
859 79aceca5 bellard
{
860 79aceca5 bellard
    T0 += xer_ca;
861 79aceca5 bellard
    RETURN();
862 79aceca5 bellard
}
863 79aceca5 bellard
864 d9bce9d9 j_mayer
/* divide word */
865 d9bce9d9 j_mayer
void OPPROTO op_divw (void)
866 79aceca5 bellard
{
867 6f2d8978 j_mayer
    if (unlikely(((int32_t)T0 == INT32_MIN && (int32_t)T1 == (int32_t)-1) ||
868 d9bce9d9 j_mayer
                 (int32_t)T1 == 0)) {
869 6f2d8978 j_mayer
        T0 = (int32_t)(UINT32_MAX * ((uint32_t)T0 >> 31));
870 d9bce9d9 j_mayer
    } else {
871 d9bce9d9 j_mayer
        T0 = (int32_t)T0 / (int32_t)T1;
872 d9bce9d9 j_mayer
    }
873 79aceca5 bellard
    RETURN();
874 79aceca5 bellard
}
875 79aceca5 bellard
876 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
877 d9bce9d9 j_mayer
void OPPROTO op_divd (void)
878 79aceca5 bellard
{
879 6f2d8978 j_mayer
    if (unlikely(((int64_t)T0 == INT64_MIN && (int64_t)T1 == (int64_t)-1LL) ||
880 d9bce9d9 j_mayer
                 (int64_t)T1 == 0)) {
881 6f2d8978 j_mayer
        T0 = (int64_t)(UINT64_MAX * ((uint64_t)T0 >> 63));
882 79aceca5 bellard
    } else {
883 d9bce9d9 j_mayer
        T0 = (int64_t)T0 / (int64_t)T1;
884 79aceca5 bellard
    }
885 79aceca5 bellard
    RETURN();
886 79aceca5 bellard
}
887 d9bce9d9 j_mayer
#endif
888 79aceca5 bellard
889 76a66253 j_mayer
void OPPROTO op_divwo (void)
890 79aceca5 bellard
{
891 fdabc366 bellard
    do_divwo();
892 79aceca5 bellard
    RETURN();
893 79aceca5 bellard
}
894 79aceca5 bellard
895 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
896 d9bce9d9 j_mayer
void OPPROTO op_divdo (void)
897 d9bce9d9 j_mayer
{
898 d9bce9d9 j_mayer
    do_divdo();
899 d9bce9d9 j_mayer
    RETURN();
900 d9bce9d9 j_mayer
}
901 d9bce9d9 j_mayer
#endif
902 d9bce9d9 j_mayer
903 79aceca5 bellard
/* divide word unsigned */
904 d9bce9d9 j_mayer
void OPPROTO op_divwu (void)
905 d9bce9d9 j_mayer
{
906 d9bce9d9 j_mayer
    if (unlikely(T1 == 0)) {
907 d9bce9d9 j_mayer
        T0 = 0;
908 d9bce9d9 j_mayer
    } else {
909 d9bce9d9 j_mayer
        T0 = (uint32_t)T0 / (uint32_t)T1;
910 d9bce9d9 j_mayer
    }
911 d9bce9d9 j_mayer
    RETURN();
912 d9bce9d9 j_mayer
}
913 d9bce9d9 j_mayer
914 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
915 d9bce9d9 j_mayer
void OPPROTO op_divdu (void)
916 79aceca5 bellard
{
917 d9bce9d9 j_mayer
    if (unlikely(T1 == 0)) {
918 79aceca5 bellard
        T0 = 0;
919 79aceca5 bellard
    } else {
920 79aceca5 bellard
        T0 /= T1;
921 79aceca5 bellard
    }
922 79aceca5 bellard
    RETURN();
923 79aceca5 bellard
}
924 d9bce9d9 j_mayer
#endif
925 79aceca5 bellard
926 76a66253 j_mayer
void OPPROTO op_divwuo (void)
927 79aceca5 bellard
{
928 fdabc366 bellard
    do_divwuo();
929 79aceca5 bellard
    RETURN();
930 79aceca5 bellard
}
931 79aceca5 bellard
932 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
933 d9bce9d9 j_mayer
void OPPROTO op_divduo (void)
934 d9bce9d9 j_mayer
{
935 d9bce9d9 j_mayer
    do_divduo();
936 d9bce9d9 j_mayer
    RETURN();
937 d9bce9d9 j_mayer
}
938 d9bce9d9 j_mayer
#endif
939 d9bce9d9 j_mayer
940 79aceca5 bellard
/* multiply high word */
941 d9bce9d9 j_mayer
void OPPROTO op_mulhw (void)
942 79aceca5 bellard
{
943 d9bce9d9 j_mayer
    T0 = ((int64_t)((int32_t)T0) * (int64_t)((int32_t)T1)) >> 32;
944 79aceca5 bellard
    RETURN();
945 79aceca5 bellard
}
946 79aceca5 bellard
947 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
948 d9bce9d9 j_mayer
void OPPROTO op_mulhd (void)
949 d9bce9d9 j_mayer
{
950 d9bce9d9 j_mayer
    uint64_t tl, th;
951 d9bce9d9 j_mayer
952 9d901a20 j_mayer
    muls64(&tl, &th, T0, T1);
953 d9bce9d9 j_mayer
    T0 = th;
954 d9bce9d9 j_mayer
    RETURN();
955 d9bce9d9 j_mayer
}
956 d9bce9d9 j_mayer
#endif
957 d9bce9d9 j_mayer
958 79aceca5 bellard
/* multiply high word unsigned */
959 d9bce9d9 j_mayer
void OPPROTO op_mulhwu (void)
960 79aceca5 bellard
{
961 d9bce9d9 j_mayer
    T0 = ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1) >> 32;
962 79aceca5 bellard
    RETURN();
963 79aceca5 bellard
}
964 79aceca5 bellard
965 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
966 d9bce9d9 j_mayer
void OPPROTO op_mulhdu (void)
967 d9bce9d9 j_mayer
{
968 d9bce9d9 j_mayer
    uint64_t tl, th;
969 d9bce9d9 j_mayer
970 9d901a20 j_mayer
    mulu64(&tl, &th, T0, T1);
971 d9bce9d9 j_mayer
    T0 = th;
972 d9bce9d9 j_mayer
    RETURN();
973 d9bce9d9 j_mayer
}
974 d9bce9d9 j_mayer
#endif
975 d9bce9d9 j_mayer
976 79aceca5 bellard
/* multiply low immediate */
977 36081602 j_mayer
void OPPROTO op_mulli (void)
978 79aceca5 bellard
{
979 d9bce9d9 j_mayer
    T0 = ((int32_t)T0 * (int32_t)PARAM1);
980 79aceca5 bellard
    RETURN();
981 79aceca5 bellard
}
982 79aceca5 bellard
983 79aceca5 bellard
/* multiply low word */
984 36081602 j_mayer
void OPPROTO op_mullw (void)
985 79aceca5 bellard
{
986 d9bce9d9 j_mayer
    T0 = (int32_t)(T0 * T1);
987 d9bce9d9 j_mayer
    RETURN();
988 d9bce9d9 j_mayer
}
989 d9bce9d9 j_mayer
990 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
991 d9bce9d9 j_mayer
void OPPROTO op_mulld (void)
992 d9bce9d9 j_mayer
{
993 79aceca5 bellard
    T0 *= T1;
994 79aceca5 bellard
    RETURN();
995 79aceca5 bellard
}
996 d9bce9d9 j_mayer
#endif
997 79aceca5 bellard
998 76a66253 j_mayer
void OPPROTO op_mullwo (void)
999 79aceca5 bellard
{
1000 fdabc366 bellard
    do_mullwo();
1001 79aceca5 bellard
    RETURN();
1002 79aceca5 bellard
}
1003 79aceca5 bellard
1004 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1005 d9bce9d9 j_mayer
void OPPROTO op_mulldo (void)
1006 d9bce9d9 j_mayer
{
1007 d9bce9d9 j_mayer
    do_mulldo();
1008 d9bce9d9 j_mayer
    RETURN();
1009 d9bce9d9 j_mayer
}
1010 d9bce9d9 j_mayer
#endif
1011 d9bce9d9 j_mayer
1012 79aceca5 bellard
/* negate */
1013 d9bce9d9 j_mayer
void OPPROTO op_neg (void)
1014 79aceca5 bellard
{
1015 d9bce9d9 j_mayer
    if (likely(T0 != INT32_MIN)) {
1016 d9bce9d9 j_mayer
        T0 = -(int32_t)T0;
1017 79aceca5 bellard
    }
1018 79aceca5 bellard
    RETURN();
1019 79aceca5 bellard
}
1020 79aceca5 bellard
1021 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1022 d9bce9d9 j_mayer
void OPPROTO op_neg_64 (void)
1023 d9bce9d9 j_mayer
{
1024 d9bce9d9 j_mayer
    if (likely(T0 != INT64_MIN)) {
1025 d9bce9d9 j_mayer
        T0 = -(int64_t)T0;
1026 d9bce9d9 j_mayer
    }
1027 d9bce9d9 j_mayer
    RETURN();
1028 d9bce9d9 j_mayer
}
1029 d9bce9d9 j_mayer
#endif
1030 d9bce9d9 j_mayer
1031 76a66253 j_mayer
void OPPROTO op_nego (void)
1032 79aceca5 bellard
{
1033 fdabc366 bellard
    do_nego();
1034 79aceca5 bellard
    RETURN();
1035 79aceca5 bellard
}
1036 79aceca5 bellard
1037 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1038 d9bce9d9 j_mayer
void OPPROTO op_nego_64 (void)
1039 d9bce9d9 j_mayer
{
1040 d9bce9d9 j_mayer
    do_nego_64();
1041 d9bce9d9 j_mayer
    RETURN();
1042 d9bce9d9 j_mayer
}
1043 d9bce9d9 j_mayer
#endif
1044 d9bce9d9 j_mayer
1045 0cfec834 ths
/* subtract from */
1046 36081602 j_mayer
void OPPROTO op_subf (void)
1047 79aceca5 bellard
{
1048 79aceca5 bellard
    T0 = T1 - T0;
1049 79aceca5 bellard
    RETURN();
1050 79aceca5 bellard
}
1051 79aceca5 bellard
1052 0cfec834 ths
/* subtract from carrying */
1053 d9bce9d9 j_mayer
void OPPROTO op_check_subfc (void)
1054 79aceca5 bellard
{
1055 d9bce9d9 j_mayer
    if (likely((uint32_t)T0 > (uint32_t)T1)) {
1056 79aceca5 bellard
        xer_ca = 0;
1057 d9bce9d9 j_mayer
    } else {
1058 d9bce9d9 j_mayer
        xer_ca = 1;
1059 79aceca5 bellard
    }
1060 79aceca5 bellard
    RETURN();
1061 79aceca5 bellard
}
1062 79aceca5 bellard
1063 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1064 d9bce9d9 j_mayer
void OPPROTO op_check_subfc_64 (void)
1065 79aceca5 bellard
{
1066 d9bce9d9 j_mayer
    if (likely((uint64_t)T0 > (uint64_t)T1)) {
1067 d9bce9d9 j_mayer
        xer_ca = 0;
1068 d9bce9d9 j_mayer
    } else {
1069 d9bce9d9 j_mayer
        xer_ca = 1;
1070 d9bce9d9 j_mayer
    }
1071 79aceca5 bellard
    RETURN();
1072 79aceca5 bellard
}
1073 d9bce9d9 j_mayer
#endif
1074 79aceca5 bellard
1075 0cfec834 ths
/* subtract from extended */
1076 76a66253 j_mayer
void OPPROTO op_subfe (void)
1077 79aceca5 bellard
{
1078 fdabc366 bellard
    do_subfe();
1079 79aceca5 bellard
    RETURN();
1080 79aceca5 bellard
}
1081 79aceca5 bellard
1082 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1083 d9bce9d9 j_mayer
void OPPROTO op_subfe_64 (void)
1084 79aceca5 bellard
{
1085 d9bce9d9 j_mayer
    do_subfe_64();
1086 79aceca5 bellard
    RETURN();
1087 79aceca5 bellard
}
1088 d9bce9d9 j_mayer
#endif
1089 79aceca5 bellard
1090 0cfec834 ths
/* subtract from immediate carrying */
1091 d9bce9d9 j_mayer
void OPPROTO op_subfic (void)
1092 79aceca5 bellard
{
1093 b6e27ab8 j_mayer
    T0 = (int32_t)PARAM1 + ~T0 + 1;
1094 d9bce9d9 j_mayer
    if ((uint32_t)T0 <= (uint32_t)PARAM1) {
1095 79aceca5 bellard
        xer_ca = 1;
1096 79aceca5 bellard
    } else {
1097 79aceca5 bellard
        xer_ca = 0;
1098 79aceca5 bellard
    }
1099 79aceca5 bellard
    RETURN();
1100 79aceca5 bellard
}
1101 79aceca5 bellard
1102 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1103 d9bce9d9 j_mayer
void OPPROTO op_subfic_64 (void)
1104 d9bce9d9 j_mayer
{
1105 2f401176 j_mayer
    T0 = (int64_t)PARAM1 + ~T0 + 1;
1106 d9bce9d9 j_mayer
    if ((uint64_t)T0 <= (uint64_t)PARAM1) {
1107 d9bce9d9 j_mayer
        xer_ca = 1;
1108 d9bce9d9 j_mayer
    } else {
1109 d9bce9d9 j_mayer
        xer_ca = 0;
1110 d9bce9d9 j_mayer
    }
1111 d9bce9d9 j_mayer
    RETURN();
1112 d9bce9d9 j_mayer
}
1113 d9bce9d9 j_mayer
#endif
1114 d9bce9d9 j_mayer
1115 0cfec834 ths
/* subtract from minus one extended */
1116 d9bce9d9 j_mayer
void OPPROTO op_subfme (void)
1117 79aceca5 bellard
{
1118 79aceca5 bellard
    T0 = ~T0 + xer_ca - 1;
1119 c3e10c7b j_mayer
    if (likely((uint32_t)T0 != UINT32_MAX))
1120 d9bce9d9 j_mayer
        xer_ca = 1;
1121 c3e10c7b j_mayer
    else
1122 c3e10c7b j_mayer
        xer_ca = 0;
1123 d9bce9d9 j_mayer
    RETURN();
1124 d9bce9d9 j_mayer
}
1125 79aceca5 bellard
1126 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1127 d9bce9d9 j_mayer
void OPPROTO op_subfme_64 (void)
1128 d9bce9d9 j_mayer
{
1129 d9bce9d9 j_mayer
    T0 = ~T0 + xer_ca - 1;
1130 c3e10c7b j_mayer
    if (likely((uint64_t)T0 != UINT64_MAX))
1131 79aceca5 bellard
        xer_ca = 1;
1132 c3e10c7b j_mayer
    else
1133 c3e10c7b j_mayer
        xer_ca = 0;
1134 79aceca5 bellard
    RETURN();
1135 79aceca5 bellard
}
1136 d9bce9d9 j_mayer
#endif
1137 79aceca5 bellard
1138 76a66253 j_mayer
void OPPROTO op_subfmeo (void)
1139 79aceca5 bellard
{
1140 fdabc366 bellard
    do_subfmeo();
1141 79aceca5 bellard
    RETURN();
1142 79aceca5 bellard
}
1143 79aceca5 bellard
1144 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1145 d9bce9d9 j_mayer
void OPPROTO op_subfmeo_64 (void)
1146 d9bce9d9 j_mayer
{
1147 d9bce9d9 j_mayer
    do_subfmeo_64();
1148 d9bce9d9 j_mayer
    RETURN();
1149 d9bce9d9 j_mayer
}
1150 d9bce9d9 j_mayer
#endif
1151 d9bce9d9 j_mayer
1152 0cfec834 ths
/* subtract from zero extended */
1153 d9bce9d9 j_mayer
void OPPROTO op_subfze (void)
1154 79aceca5 bellard
{
1155 79aceca5 bellard
    T1 = ~T0;
1156 79aceca5 bellard
    T0 = T1 + xer_ca;
1157 d9bce9d9 j_mayer
    if ((uint32_t)T0 < (uint32_t)T1) {
1158 79aceca5 bellard
        xer_ca = 1;
1159 79aceca5 bellard
    } else {
1160 79aceca5 bellard
        xer_ca = 0;
1161 79aceca5 bellard
    }
1162 79aceca5 bellard
    RETURN();
1163 79aceca5 bellard
}
1164 79aceca5 bellard
1165 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1166 d9bce9d9 j_mayer
void OPPROTO op_subfze_64 (void)
1167 d9bce9d9 j_mayer
{
1168 d9bce9d9 j_mayer
    T1 = ~T0;
1169 d9bce9d9 j_mayer
    T0 = T1 + xer_ca;
1170 d9bce9d9 j_mayer
    if ((uint64_t)T0 < (uint64_t)T1) {
1171 d9bce9d9 j_mayer
        xer_ca = 1;
1172 d9bce9d9 j_mayer
    } else {
1173 d9bce9d9 j_mayer
        xer_ca = 0;
1174 d9bce9d9 j_mayer
    }
1175 d9bce9d9 j_mayer
    RETURN();
1176 d9bce9d9 j_mayer
}
1177 d9bce9d9 j_mayer
#endif
1178 d9bce9d9 j_mayer
1179 76a66253 j_mayer
void OPPROTO op_subfzeo (void)
1180 79aceca5 bellard
{
1181 fdabc366 bellard
    do_subfzeo();
1182 79aceca5 bellard
    RETURN();
1183 79aceca5 bellard
}
1184 79aceca5 bellard
1185 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1186 d9bce9d9 j_mayer
void OPPROTO op_subfzeo_64 (void)
1187 d9bce9d9 j_mayer
{
1188 d9bce9d9 j_mayer
    do_subfzeo_64();
1189 d9bce9d9 j_mayer
    RETURN();
1190 d9bce9d9 j_mayer
}
1191 d9bce9d9 j_mayer
#endif
1192 d9bce9d9 j_mayer
1193 79aceca5 bellard
/***                           Integer comparison                          ***/
1194 79aceca5 bellard
/* compare */
1195 d9bce9d9 j_mayer
void OPPROTO op_cmp (void)
1196 d9bce9d9 j_mayer
{
1197 d9bce9d9 j_mayer
    if ((int32_t)T0 < (int32_t)T1) {
1198 d9bce9d9 j_mayer
        T0 = 0x08;
1199 d9bce9d9 j_mayer
    } else if ((int32_t)T0 > (int32_t)T1) {
1200 d9bce9d9 j_mayer
        T0 = 0x04;
1201 d9bce9d9 j_mayer
    } else {
1202 d9bce9d9 j_mayer
        T0 = 0x02;
1203 d9bce9d9 j_mayer
    }
1204 966439a6 j_mayer
    T0 |= xer_so;
1205 d9bce9d9 j_mayer
    RETURN();
1206 d9bce9d9 j_mayer
}
1207 d9bce9d9 j_mayer
1208 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1209 d9bce9d9 j_mayer
void OPPROTO op_cmp_64 (void)
1210 79aceca5 bellard
{
1211 d9bce9d9 j_mayer
    if ((int64_t)T0 < (int64_t)T1) {
1212 79aceca5 bellard
        T0 = 0x08;
1213 d9bce9d9 j_mayer
    } else if ((int64_t)T0 > (int64_t)T1) {
1214 79aceca5 bellard
        T0 = 0x04;
1215 79aceca5 bellard
    } else {
1216 79aceca5 bellard
        T0 = 0x02;
1217 79aceca5 bellard
    }
1218 966439a6 j_mayer
    T0 |= xer_so;
1219 79aceca5 bellard
    RETURN();
1220 79aceca5 bellard
}
1221 d9bce9d9 j_mayer
#endif
1222 79aceca5 bellard
1223 79aceca5 bellard
/* compare immediate */
1224 d9bce9d9 j_mayer
void OPPROTO op_cmpi (void)
1225 79aceca5 bellard
{
1226 d9bce9d9 j_mayer
    if ((int32_t)T0 < (int32_t)PARAM1) {
1227 79aceca5 bellard
        T0 = 0x08;
1228 d9bce9d9 j_mayer
    } else if ((int32_t)T0 > (int32_t)PARAM1) {
1229 79aceca5 bellard
        T0 = 0x04;
1230 79aceca5 bellard
    } else {
1231 79aceca5 bellard
        T0 = 0x02;
1232 79aceca5 bellard
    }
1233 966439a6 j_mayer
    T0 |= xer_so;
1234 79aceca5 bellard
    RETURN();
1235 79aceca5 bellard
}
1236 79aceca5 bellard
1237 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1238 d9bce9d9 j_mayer
void OPPROTO op_cmpi_64 (void)
1239 d9bce9d9 j_mayer
{
1240 d9bce9d9 j_mayer
    if ((int64_t)T0 < (int64_t)((int32_t)PARAM1)) {
1241 d9bce9d9 j_mayer
        T0 = 0x08;
1242 d9bce9d9 j_mayer
    } else if ((int64_t)T0 > (int64_t)((int32_t)PARAM1)) {
1243 d9bce9d9 j_mayer
        T0 = 0x04;
1244 d9bce9d9 j_mayer
    } else {
1245 d9bce9d9 j_mayer
        T0 = 0x02;
1246 d9bce9d9 j_mayer
    }
1247 966439a6 j_mayer
    T0 |= xer_so;
1248 d9bce9d9 j_mayer
    RETURN();
1249 d9bce9d9 j_mayer
}
1250 d9bce9d9 j_mayer
#endif
1251 d9bce9d9 j_mayer
1252 79aceca5 bellard
/* compare logical */
1253 d9bce9d9 j_mayer
void OPPROTO op_cmpl (void)
1254 79aceca5 bellard
{
1255 d9bce9d9 j_mayer
    if ((uint32_t)T0 < (uint32_t)T1) {
1256 79aceca5 bellard
        T0 = 0x08;
1257 d9bce9d9 j_mayer
    } else if ((uint32_t)T0 > (uint32_t)T1) {
1258 79aceca5 bellard
        T0 = 0x04;
1259 79aceca5 bellard
    } else {
1260 79aceca5 bellard
        T0 = 0x02;
1261 79aceca5 bellard
    }
1262 966439a6 j_mayer
    T0 |= xer_so;
1263 79aceca5 bellard
    RETURN();
1264 79aceca5 bellard
}
1265 79aceca5 bellard
1266 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1267 d9bce9d9 j_mayer
void OPPROTO op_cmpl_64 (void)
1268 d9bce9d9 j_mayer
{
1269 d9bce9d9 j_mayer
    if ((uint64_t)T0 < (uint64_t)T1) {
1270 d9bce9d9 j_mayer
        T0 = 0x08;
1271 d9bce9d9 j_mayer
    } else if ((uint64_t)T0 > (uint64_t)T1) {
1272 d9bce9d9 j_mayer
        T0 = 0x04;
1273 d9bce9d9 j_mayer
    } else {
1274 d9bce9d9 j_mayer
        T0 = 0x02;
1275 d9bce9d9 j_mayer
    }
1276 966439a6 j_mayer
    T0 |= xer_so;
1277 d9bce9d9 j_mayer
    RETURN();
1278 d9bce9d9 j_mayer
}
1279 d9bce9d9 j_mayer
#endif
1280 d9bce9d9 j_mayer
1281 79aceca5 bellard
/* compare logical immediate */
1282 d9bce9d9 j_mayer
void OPPROTO op_cmpli (void)
1283 d9bce9d9 j_mayer
{
1284 d9bce9d9 j_mayer
    if ((uint32_t)T0 < (uint32_t)PARAM1) {
1285 d9bce9d9 j_mayer
        T0 = 0x08;
1286 d9bce9d9 j_mayer
    } else if ((uint32_t)T0 > (uint32_t)PARAM1) {
1287 d9bce9d9 j_mayer
        T0 = 0x04;
1288 d9bce9d9 j_mayer
    } else {
1289 d9bce9d9 j_mayer
        T0 = 0x02;
1290 d9bce9d9 j_mayer
    }
1291 966439a6 j_mayer
    T0 |= xer_so;
1292 d9bce9d9 j_mayer
    RETURN();
1293 d9bce9d9 j_mayer
}
1294 d9bce9d9 j_mayer
1295 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1296 d9bce9d9 j_mayer
void OPPROTO op_cmpli_64 (void)
1297 79aceca5 bellard
{
1298 d9bce9d9 j_mayer
    if ((uint64_t)T0 < (uint64_t)PARAM1) {
1299 79aceca5 bellard
        T0 = 0x08;
1300 d9bce9d9 j_mayer
    } else if ((uint64_t)T0 > (uint64_t)PARAM1) {
1301 79aceca5 bellard
        T0 = 0x04;
1302 79aceca5 bellard
    } else {
1303 79aceca5 bellard
        T0 = 0x02;
1304 79aceca5 bellard
    }
1305 966439a6 j_mayer
    T0 |= xer_so;
1306 79aceca5 bellard
    RETURN();
1307 79aceca5 bellard
}
1308 d9bce9d9 j_mayer
#endif
1309 d9bce9d9 j_mayer
1310 d9bce9d9 j_mayer
void OPPROTO op_isel (void)
1311 d9bce9d9 j_mayer
{
1312 d9bce9d9 j_mayer
    if (T0)
1313 d9bce9d9 j_mayer
        T0 = T1;
1314 d9bce9d9 j_mayer
    else
1315 d9bce9d9 j_mayer
        T0 = T2;
1316 d9bce9d9 j_mayer
    RETURN();
1317 d9bce9d9 j_mayer
}
1318 d9bce9d9 j_mayer
1319 6676f424 aurel32
void OPPROTO op_popcntb (void)
1320 6676f424 aurel32
{
1321 6676f424 aurel32
    do_popcntb();
1322 6676f424 aurel32
    RETURN();
1323 6676f424 aurel32
}
1324 6676f424 aurel32
1325 6676f424 aurel32
#if defined(TARGET_PPC64)
1326 6676f424 aurel32
void OPPROTO op_popcntb_64 (void)
1327 6676f424 aurel32
{
1328 6676f424 aurel32
    do_popcntb_64();
1329 6676f424 aurel32
    RETURN();
1330 6676f424 aurel32
}
1331 6676f424 aurel32
#endif
1332 6676f424 aurel32
1333 79aceca5 bellard
/***                            Integer logical                            ***/
1334 79aceca5 bellard
/* and */
1335 36081602 j_mayer
void OPPROTO op_and (void)
1336 79aceca5 bellard
{
1337 79aceca5 bellard
    T0 &= T1;
1338 79aceca5 bellard
    RETURN();
1339 79aceca5 bellard
}
1340 79aceca5 bellard
1341 79aceca5 bellard
/* andc */
1342 36081602 j_mayer
void OPPROTO op_andc (void)
1343 79aceca5 bellard
{
1344 79aceca5 bellard
    T0 &= ~T1;
1345 79aceca5 bellard
    RETURN();
1346 79aceca5 bellard
}
1347 79aceca5 bellard
1348 79aceca5 bellard
/* andi. */
1349 76a66253 j_mayer
void OPPROTO op_andi_T0 (void)
1350 79aceca5 bellard
{
1351 2f401176 j_mayer
    T0 &= (uint32_t)PARAM1;
1352 79aceca5 bellard
    RETURN();
1353 79aceca5 bellard
}
1354 79aceca5 bellard
1355 76a66253 j_mayer
void OPPROTO op_andi_T1 (void)
1356 76a66253 j_mayer
{
1357 2f401176 j_mayer
    T1 &= (uint32_t)PARAM1;
1358 76a66253 j_mayer
    RETURN();
1359 76a66253 j_mayer
}
1360 76a66253 j_mayer
1361 40d0591e j_mayer
#if defined(TARGET_PPC64)
1362 40d0591e j_mayer
void OPPROTO op_andi_T0_64 (void)
1363 40d0591e j_mayer
{
1364 2f401176 j_mayer
    T0 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1365 40d0591e j_mayer
    RETURN();
1366 40d0591e j_mayer
}
1367 40d0591e j_mayer
1368 40d0591e j_mayer
void OPPROTO op_andi_T1_64 (void)
1369 40d0591e j_mayer
{
1370 2f401176 j_mayer
    T1 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1371 40d0591e j_mayer
    RETURN();
1372 40d0591e j_mayer
}
1373 40d0591e j_mayer
#endif
1374 40d0591e j_mayer
1375 79aceca5 bellard
/* count leading zero */
1376 76a66253 j_mayer
void OPPROTO op_cntlzw (void)
1377 79aceca5 bellard
{
1378 603fccce j_mayer
    do_cntlzw();
1379 79aceca5 bellard
    RETURN();
1380 79aceca5 bellard
}
1381 79aceca5 bellard
1382 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1383 d9bce9d9 j_mayer
void OPPROTO op_cntlzd (void)
1384 d9bce9d9 j_mayer
{
1385 603fccce j_mayer
    do_cntlzd();
1386 d9bce9d9 j_mayer
    RETURN();
1387 d9bce9d9 j_mayer
}
1388 d9bce9d9 j_mayer
#endif
1389 d9bce9d9 j_mayer
1390 79aceca5 bellard
/* eqv */
1391 36081602 j_mayer
void OPPROTO op_eqv (void)
1392 79aceca5 bellard
{
1393 79aceca5 bellard
    T0 = ~(T0 ^ T1);
1394 79aceca5 bellard
    RETURN();
1395 79aceca5 bellard
}
1396 79aceca5 bellard
1397 79aceca5 bellard
/* extend sign byte */
1398 d9bce9d9 j_mayer
void OPPROTO op_extsb (void)
1399 79aceca5 bellard
{
1400 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
1401 d9bce9d9 j_mayer
    T0 = (int64_t)((int8_t)T0);
1402 d9bce9d9 j_mayer
#else
1403 d9bce9d9 j_mayer
    T0 = (int32_t)((int8_t)T0);
1404 d9bce9d9 j_mayer
#endif
1405 79aceca5 bellard
    RETURN();
1406 79aceca5 bellard
}
1407 79aceca5 bellard
1408 79aceca5 bellard
/* extend sign half word */
1409 d9bce9d9 j_mayer
void OPPROTO op_extsh (void)
1410 79aceca5 bellard
{
1411 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
1412 d9bce9d9 j_mayer
    T0 = (int64_t)((int16_t)T0);
1413 d9bce9d9 j_mayer
#else
1414 d9bce9d9 j_mayer
    T0 = (int32_t)((int16_t)T0);
1415 d9bce9d9 j_mayer
#endif
1416 79aceca5 bellard
    RETURN();
1417 79aceca5 bellard
}
1418 79aceca5 bellard
1419 d9bce9d9 j_mayer
#if defined (TARGET_PPC64)
1420 d9bce9d9 j_mayer
void OPPROTO op_extsw (void)
1421 d9bce9d9 j_mayer
{
1422 d9bce9d9 j_mayer
    T0 = (int64_t)((int32_t)T0);
1423 d9bce9d9 j_mayer
    RETURN();
1424 d9bce9d9 j_mayer
}
1425 d9bce9d9 j_mayer
#endif
1426 d9bce9d9 j_mayer
1427 79aceca5 bellard
/* nand */
1428 36081602 j_mayer
void OPPROTO op_nand (void)
1429 79aceca5 bellard
{
1430 79aceca5 bellard
    T0 = ~(T0 & T1);
1431 79aceca5 bellard
    RETURN();
1432 79aceca5 bellard
}
1433 79aceca5 bellard
1434 79aceca5 bellard
/* nor */
1435 36081602 j_mayer
void OPPROTO op_nor (void)
1436 79aceca5 bellard
{
1437 79aceca5 bellard
    T0 = ~(T0 | T1);
1438 79aceca5 bellard
    RETURN();
1439 79aceca5 bellard
}
1440 79aceca5 bellard
1441 79aceca5 bellard
/* or */
1442 36081602 j_mayer
void OPPROTO op_or (void)
1443 79aceca5 bellard
{
1444 79aceca5 bellard
    T0 |= T1;
1445 79aceca5 bellard
    RETURN();
1446 79aceca5 bellard
}
1447 79aceca5 bellard
1448 79aceca5 bellard
/* orc */
1449 36081602 j_mayer
void OPPROTO op_orc (void)
1450 79aceca5 bellard
{
1451 79aceca5 bellard
    T0 |= ~T1;
1452 79aceca5 bellard
    RETURN();
1453 79aceca5 bellard
}
1454 79aceca5 bellard
1455 79aceca5 bellard
/* ori */
1456 36081602 j_mayer
void OPPROTO op_ori (void)
1457 79aceca5 bellard
{
1458 2f401176 j_mayer
    T0 |= (uint32_t)PARAM1;
1459 79aceca5 bellard
    RETURN();
1460 79aceca5 bellard
}
1461 79aceca5 bellard
1462 79aceca5 bellard
/* xor */
1463 36081602 j_mayer
void OPPROTO op_xor (void)
1464 79aceca5 bellard
{
1465 79aceca5 bellard
    T0 ^= T1;
1466 79aceca5 bellard
    RETURN();
1467 79aceca5 bellard
}
1468 79aceca5 bellard
1469 79aceca5 bellard
/* xori */
1470 36081602 j_mayer
void OPPROTO op_xori (void)
1471 79aceca5 bellard
{
1472 2f401176 j_mayer
    T0 ^= (uint32_t)PARAM1;
1473 79aceca5 bellard
    RETURN();
1474 79aceca5 bellard
}
1475 79aceca5 bellard
1476 79aceca5 bellard
/***                             Integer rotate                            ***/
1477 76a66253 j_mayer
void OPPROTO op_rotl32_T0_T1 (void)
1478 79aceca5 bellard
{
1479 76a66253 j_mayer
    T0 = rotl32(T0, T1 & 0x1F);
1480 79aceca5 bellard
    RETURN();
1481 79aceca5 bellard
}
1482 79aceca5 bellard
1483 76a66253 j_mayer
void OPPROTO op_rotli32_T0 (void)
1484 79aceca5 bellard
{
1485 76a66253 j_mayer
    T0 = rotl32(T0, PARAM1);
1486 79aceca5 bellard
    RETURN();
1487 79aceca5 bellard
}
1488 79aceca5 bellard
1489 51789c41 j_mayer
#if defined(TARGET_PPC64)
1490 51789c41 j_mayer
void OPPROTO op_rotl64_T0_T1 (void)
1491 51789c41 j_mayer
{
1492 51789c41 j_mayer
    T0 = rotl64(T0, T1 & 0x3F);
1493 51789c41 j_mayer
    RETURN();
1494 51789c41 j_mayer
}
1495 51789c41 j_mayer
1496 51789c41 j_mayer
void OPPROTO op_rotli64_T0 (void)
1497 51789c41 j_mayer
{
1498 51789c41 j_mayer
    T0 = rotl64(T0, PARAM1);
1499 51789c41 j_mayer
    RETURN();
1500 51789c41 j_mayer
}
1501 51789c41 j_mayer
#endif
1502 51789c41 j_mayer
1503 79aceca5 bellard
/***                             Integer shift                             ***/
1504 79aceca5 bellard
/* shift left word */
1505 d9bce9d9 j_mayer
void OPPROTO op_slw (void)
1506 79aceca5 bellard
{
1507 79aceca5 bellard
    if (T1 & 0x20) {
1508 79aceca5 bellard
        T0 = 0;
1509 79aceca5 bellard
    } else {
1510 d9bce9d9 j_mayer
        T0 = (uint32_t)(T0 << T1);
1511 d9bce9d9 j_mayer
    }
1512 d9bce9d9 j_mayer
    RETURN();
1513 d9bce9d9 j_mayer
}
1514 d9bce9d9 j_mayer
1515 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1516 d9bce9d9 j_mayer
void OPPROTO op_sld (void)
1517 d9bce9d9 j_mayer
{
1518 d9bce9d9 j_mayer
    if (T1 & 0x40) {
1519 d9bce9d9 j_mayer
        T0 = 0;
1520 d9bce9d9 j_mayer
    } else {
1521 79aceca5 bellard
        T0 = T0 << T1;
1522 79aceca5 bellard
    }
1523 79aceca5 bellard
    RETURN();
1524 79aceca5 bellard
}
1525 d9bce9d9 j_mayer
#endif
1526 79aceca5 bellard
1527 79aceca5 bellard
/* shift right algebraic word */
1528 76a66253 j_mayer
void OPPROTO op_sraw (void)
1529 79aceca5 bellard
{
1530 9a64fbe4 bellard
    do_sraw();
1531 79aceca5 bellard
    RETURN();
1532 79aceca5 bellard
}
1533 79aceca5 bellard
1534 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1535 d9bce9d9 j_mayer
void OPPROTO op_srad (void)
1536 d9bce9d9 j_mayer
{
1537 d9bce9d9 j_mayer
    do_srad();
1538 d9bce9d9 j_mayer
    RETURN();
1539 d9bce9d9 j_mayer
}
1540 d9bce9d9 j_mayer
#endif
1541 d9bce9d9 j_mayer
1542 79aceca5 bellard
/* shift right algebraic word immediate */
1543 d9bce9d9 j_mayer
void OPPROTO op_srawi (void)
1544 79aceca5 bellard
{
1545 d9bce9d9 j_mayer
    uint32_t mask = (uint32_t)PARAM2;
1546 d9bce9d9 j_mayer
1547 d9bce9d9 j_mayer
    T0 = (int32_t)T0 >> PARAM1;
1548 d9bce9d9 j_mayer
    if ((int32_t)T1 < 0 && (T1 & mask) != 0) {
1549 79aceca5 bellard
        xer_ca = 1;
1550 79aceca5 bellard
    } else {
1551 79aceca5 bellard
        xer_ca = 0;
1552 79aceca5 bellard
    }
1553 79aceca5 bellard
    RETURN();
1554 79aceca5 bellard
}
1555 79aceca5 bellard
1556 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1557 d9bce9d9 j_mayer
void OPPROTO op_sradi (void)
1558 d9bce9d9 j_mayer
{
1559 d9bce9d9 j_mayer
    uint64_t mask = ((uint64_t)PARAM2 << 32) | (uint64_t)PARAM3;
1560 d9bce9d9 j_mayer
1561 d9bce9d9 j_mayer
    T0 = (int64_t)T0 >> PARAM1;
1562 d9bce9d9 j_mayer
    if ((int64_t)T1 < 0 && ((uint64_t)T1 & mask) != 0) {
1563 d9bce9d9 j_mayer
        xer_ca = 1;
1564 d9bce9d9 j_mayer
    } else {
1565 d9bce9d9 j_mayer
        xer_ca = 0;
1566 d9bce9d9 j_mayer
    }
1567 d9bce9d9 j_mayer
    RETURN();
1568 d9bce9d9 j_mayer
}
1569 d9bce9d9 j_mayer
#endif
1570 d9bce9d9 j_mayer
1571 79aceca5 bellard
/* shift right word */
1572 d9bce9d9 j_mayer
void OPPROTO op_srw (void)
1573 79aceca5 bellard
{
1574 79aceca5 bellard
    if (T1 & 0x20) {
1575 79aceca5 bellard
        T0 = 0;
1576 79aceca5 bellard
    } else {
1577 d9bce9d9 j_mayer
        T0 = (uint32_t)T0 >> T1;
1578 d9bce9d9 j_mayer
    }
1579 d9bce9d9 j_mayer
    RETURN();
1580 d9bce9d9 j_mayer
}
1581 d9bce9d9 j_mayer
1582 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1583 d9bce9d9 j_mayer
void OPPROTO op_srd (void)
1584 d9bce9d9 j_mayer
{
1585 d9bce9d9 j_mayer
    if (T1 & 0x40) {
1586 d9bce9d9 j_mayer
        T0 = 0;
1587 d9bce9d9 j_mayer
    } else {
1588 d9bce9d9 j_mayer
        T0 = (uint64_t)T0 >> T1;
1589 79aceca5 bellard
    }
1590 79aceca5 bellard
    RETURN();
1591 79aceca5 bellard
}
1592 d9bce9d9 j_mayer
#endif
1593 79aceca5 bellard
1594 76a66253 j_mayer
void OPPROTO op_sl_T0_T1 (void)
1595 76a66253 j_mayer
{
1596 76a66253 j_mayer
    T0 = T0 << T1;
1597 76a66253 j_mayer
    RETURN();
1598 76a66253 j_mayer
}
1599 76a66253 j_mayer
1600 76a66253 j_mayer
void OPPROTO op_sli_T0 (void)
1601 76a66253 j_mayer
{
1602 76a66253 j_mayer
    T0 = T0 << PARAM1;
1603 76a66253 j_mayer
    RETURN();
1604 76a66253 j_mayer
}
1605 76a66253 j_mayer
1606 fc0d441e j_mayer
void OPPROTO op_sli_T1 (void)
1607 fc0d441e j_mayer
{
1608 fc0d441e j_mayer
    T1 = T1 << PARAM1;
1609 fc0d441e j_mayer
    RETURN();
1610 fc0d441e j_mayer
}
1611 fc0d441e j_mayer
1612 76a66253 j_mayer
void OPPROTO op_srl_T0_T1 (void)
1613 76a66253 j_mayer
{
1614 d9bce9d9 j_mayer
    T0 = (uint32_t)T0 >> T1;
1615 d9bce9d9 j_mayer
    RETURN();
1616 d9bce9d9 j_mayer
}
1617 d9bce9d9 j_mayer
1618 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1619 d9bce9d9 j_mayer
void OPPROTO op_srl_T0_T1_64 (void)
1620 d9bce9d9 j_mayer
{
1621 d9bce9d9 j_mayer
    T0 = (uint32_t)T0 >> T1;
1622 76a66253 j_mayer
    RETURN();
1623 76a66253 j_mayer
}
1624 d9bce9d9 j_mayer
#endif
1625 76a66253 j_mayer
1626 76a66253 j_mayer
void OPPROTO op_srli_T0 (void)
1627 76a66253 j_mayer
{
1628 d9bce9d9 j_mayer
    T0 = (uint32_t)T0 >> PARAM1;
1629 76a66253 j_mayer
    RETURN();
1630 76a66253 j_mayer
}
1631 76a66253 j_mayer
1632 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1633 d9bce9d9 j_mayer
void OPPROTO op_srli_T0_64 (void)
1634 d9bce9d9 j_mayer
{
1635 d9bce9d9 j_mayer
    T0 = (uint64_t)T0 >> PARAM1;
1636 d9bce9d9 j_mayer
    RETURN();
1637 d9bce9d9 j_mayer
}
1638 d9bce9d9 j_mayer
#endif
1639 d9bce9d9 j_mayer
1640 76a66253 j_mayer
void OPPROTO op_srli_T1 (void)
1641 76a66253 j_mayer
{
1642 d9bce9d9 j_mayer
    T1 = (uint32_t)T1 >> PARAM1;
1643 76a66253 j_mayer
    RETURN();
1644 76a66253 j_mayer
}
1645 76a66253 j_mayer
1646 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1647 d9bce9d9 j_mayer
void OPPROTO op_srli_T1_64 (void)
1648 d9bce9d9 j_mayer
{
1649 d9bce9d9 j_mayer
    T1 = (uint64_t)T1 >> PARAM1;
1650 d9bce9d9 j_mayer
    RETURN();
1651 d9bce9d9 j_mayer
}
1652 d9bce9d9 j_mayer
#endif
1653 d9bce9d9 j_mayer
1654 79aceca5 bellard
/***                       Floating-Point arithmetic                       ***/
1655 9a64fbe4 bellard
/* fadd - fadd. */
1656 36081602 j_mayer
void OPPROTO op_fadd (void)
1657 79aceca5 bellard
{
1658 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1659 7c58044c j_mayer
    do_fadd();
1660 7c58044c j_mayer
#else
1661 76a66253 j_mayer
    FT0 = float64_add(FT0, FT1, &env->fp_status);
1662 7c58044c j_mayer
#endif
1663 79aceca5 bellard
    RETURN();
1664 79aceca5 bellard
}
1665 79aceca5 bellard
1666 9a64fbe4 bellard
/* fsub - fsub. */
1667 36081602 j_mayer
void OPPROTO op_fsub (void)
1668 79aceca5 bellard
{
1669 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1670 7c58044c j_mayer
    do_fsub();
1671 7c58044c j_mayer
#else
1672 76a66253 j_mayer
    FT0 = float64_sub(FT0, FT1, &env->fp_status);
1673 7c58044c j_mayer
#endif
1674 79aceca5 bellard
    RETURN();
1675 79aceca5 bellard
}
1676 79aceca5 bellard
1677 9a64fbe4 bellard
/* fmul - fmul. */
1678 36081602 j_mayer
void OPPROTO op_fmul (void)
1679 79aceca5 bellard
{
1680 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1681 7c58044c j_mayer
    do_fmul();
1682 7c58044c j_mayer
#else
1683 76a66253 j_mayer
    FT0 = float64_mul(FT0, FT1, &env->fp_status);
1684 7c58044c j_mayer
#endif
1685 79aceca5 bellard
    RETURN();
1686 79aceca5 bellard
}
1687 79aceca5 bellard
1688 9a64fbe4 bellard
/* fdiv - fdiv. */
1689 36081602 j_mayer
void OPPROTO op_fdiv (void)
1690 79aceca5 bellard
{
1691 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1692 7c58044c j_mayer
    do_fdiv();
1693 7c58044c j_mayer
#else
1694 fdabc366 bellard
    FT0 = float64_div(FT0, FT1, &env->fp_status);
1695 7c58044c j_mayer
#endif
1696 79aceca5 bellard
    RETURN();
1697 79aceca5 bellard
}
1698 28b6751f bellard
1699 9a64fbe4 bellard
/* fsqrt - fsqrt. */
1700 36081602 j_mayer
void OPPROTO op_fsqrt (void)
1701 28b6751f bellard
{
1702 9a64fbe4 bellard
    do_fsqrt();
1703 9a64fbe4 bellard
    RETURN();
1704 28b6751f bellard
}
1705 28b6751f bellard
1706 d7e4b87e j_mayer
/* fre - fre. */
1707 d7e4b87e j_mayer
void OPPROTO op_fre (void)
1708 d7e4b87e j_mayer
{
1709 d7e4b87e j_mayer
    do_fre();
1710 d7e4b87e j_mayer
    RETURN();
1711 d7e4b87e j_mayer
}
1712 d7e4b87e j_mayer
1713 9a64fbe4 bellard
/* fres - fres. */
1714 36081602 j_mayer
void OPPROTO op_fres (void)
1715 28b6751f bellard
{
1716 9a64fbe4 bellard
    do_fres();
1717 9a64fbe4 bellard
    RETURN();
1718 28b6751f bellard
}
1719 28b6751f bellard
1720 9a64fbe4 bellard
/* frsqrte  - frsqrte. */
1721 36081602 j_mayer
void OPPROTO op_frsqrte (void)
1722 28b6751f bellard
{
1723 4ecc3190 bellard
    do_frsqrte();
1724 9a64fbe4 bellard
    RETURN();
1725 28b6751f bellard
}
1726 28b6751f bellard
1727 9a64fbe4 bellard
/* fsel - fsel. */
1728 36081602 j_mayer
void OPPROTO op_fsel (void)
1729 28b6751f bellard
{
1730 9a64fbe4 bellard
    do_fsel();
1731 9a64fbe4 bellard
    RETURN();
1732 28b6751f bellard
}
1733 28b6751f bellard
1734 9a64fbe4 bellard
/***                     Floating-Point multiply-and-add                   ***/
1735 9a64fbe4 bellard
/* fmadd - fmadd. */
1736 36081602 j_mayer
void OPPROTO op_fmadd (void)
1737 28b6751f bellard
{
1738 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1739 e864cabd j_mayer
    do_fmadd();
1740 e864cabd j_mayer
#else
1741 76a66253 j_mayer
    FT0 = float64_mul(FT0, FT1, &env->fp_status);
1742 76a66253 j_mayer
    FT0 = float64_add(FT0, FT2, &env->fp_status);
1743 e864cabd j_mayer
#endif
1744 9a64fbe4 bellard
    RETURN();
1745 28b6751f bellard
}
1746 28b6751f bellard
1747 9a64fbe4 bellard
/* fmsub - fmsub. */
1748 36081602 j_mayer
void OPPROTO op_fmsub (void)
1749 28b6751f bellard
{
1750 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1751 e864cabd j_mayer
    do_fmsub();
1752 e864cabd j_mayer
#else
1753 76a66253 j_mayer
    FT0 = float64_mul(FT0, FT1, &env->fp_status);
1754 76a66253 j_mayer
    FT0 = float64_sub(FT0, FT2, &env->fp_status);
1755 e864cabd j_mayer
#endif
1756 9a64fbe4 bellard
    RETURN();
1757 28b6751f bellard
}
1758 28b6751f bellard
1759 9a64fbe4 bellard
/* fnmadd - fnmadd. - fnmadds - fnmadds. */
1760 36081602 j_mayer
void OPPROTO op_fnmadd (void)
1761 28b6751f bellard
{
1762 4b3686fa bellard
    do_fnmadd();
1763 9a64fbe4 bellard
    RETURN();
1764 28b6751f bellard
}
1765 28b6751f bellard
1766 9a64fbe4 bellard
/* fnmsub - fnmsub. */
1767 36081602 j_mayer
void OPPROTO op_fnmsub (void)
1768 28b6751f bellard
{
1769 4b3686fa bellard
    do_fnmsub();
1770 9a64fbe4 bellard
    RETURN();
1771 28b6751f bellard
}
1772 28b6751f bellard
1773 9a64fbe4 bellard
/***                     Floating-Point round & convert                    ***/
1774 9a64fbe4 bellard
/* frsp - frsp. */
1775 36081602 j_mayer
void OPPROTO op_frsp (void)
1776 28b6751f bellard
{
1777 1cdb9c3d aurel32
#if USE_PRECISE_EMULATION
1778 7c58044c j_mayer
    do_frsp();
1779 7c58044c j_mayer
#else
1780 76a66253 j_mayer
    FT0 = float64_to_float32(FT0, &env->fp_status);
1781 7c58044c j_mayer
#endif
1782 9a64fbe4 bellard
    RETURN();
1783 28b6751f bellard
}
1784 28b6751f bellard
1785 9a64fbe4 bellard
/* fctiw - fctiw. */
1786 36081602 j_mayer
void OPPROTO op_fctiw (void)
1787 28b6751f bellard
{
1788 9a64fbe4 bellard
    do_fctiw();
1789 9a64fbe4 bellard
    RETURN();
1790 28b6751f bellard
}
1791 28b6751f bellard
1792 9a64fbe4 bellard
/* fctiwz - fctiwz. */
1793 36081602 j_mayer
void OPPROTO op_fctiwz (void)
1794 28b6751f bellard
{
1795 9a64fbe4 bellard
    do_fctiwz();
1796 9a64fbe4 bellard
    RETURN();
1797 28b6751f bellard
}
1798 28b6751f bellard
1799 426613db j_mayer
#if defined(TARGET_PPC64)
1800 426613db j_mayer
/* fcfid - fcfid. */
1801 36081602 j_mayer
void OPPROTO op_fcfid (void)
1802 426613db j_mayer
{
1803 426613db j_mayer
    do_fcfid();
1804 426613db j_mayer
    RETURN();
1805 426613db j_mayer
}
1806 426613db j_mayer
1807 426613db j_mayer
/* fctid - fctid. */
1808 36081602 j_mayer
void OPPROTO op_fctid (void)
1809 426613db j_mayer
{
1810 426613db j_mayer
    do_fctid();
1811 426613db j_mayer
    RETURN();
1812 426613db j_mayer
}
1813 426613db j_mayer
1814 426613db j_mayer
/* fctidz - fctidz. */
1815 36081602 j_mayer
void OPPROTO op_fctidz (void)
1816 426613db j_mayer
{
1817 426613db j_mayer
    do_fctidz();
1818 426613db j_mayer
    RETURN();
1819 426613db j_mayer
}
1820 426613db j_mayer
#endif
1821 426613db j_mayer
1822 d7e4b87e j_mayer
void OPPROTO op_frin (void)
1823 d7e4b87e j_mayer
{
1824 d7e4b87e j_mayer
    do_frin();
1825 d7e4b87e j_mayer
    RETURN();
1826 d7e4b87e j_mayer
}
1827 d7e4b87e j_mayer
1828 d7e4b87e j_mayer
void OPPROTO op_friz (void)
1829 d7e4b87e j_mayer
{
1830 d7e4b87e j_mayer
    do_friz();
1831 d7e4b87e j_mayer
    RETURN();
1832 d7e4b87e j_mayer
}
1833 d7e4b87e j_mayer
1834 d7e4b87e j_mayer
void OPPROTO op_frip (void)
1835 d7e4b87e j_mayer
{
1836 d7e4b87e j_mayer
    do_frip();
1837 d7e4b87e j_mayer
    RETURN();
1838 d7e4b87e j_mayer
}
1839 d7e4b87e j_mayer
1840 d7e4b87e j_mayer
void OPPROTO op_frim (void)
1841 d7e4b87e j_mayer
{
1842 d7e4b87e j_mayer
    do_frim();
1843 d7e4b87e j_mayer
    RETURN();
1844 d7e4b87e j_mayer
}
1845 d7e4b87e j_mayer
1846 9a64fbe4 bellard
/***                         Floating-Point compare                        ***/
1847 9a64fbe4 bellard
/* fcmpu */
1848 36081602 j_mayer
void OPPROTO op_fcmpu (void)
1849 28b6751f bellard
{
1850 9a64fbe4 bellard
    do_fcmpu();
1851 9a64fbe4 bellard
    RETURN();
1852 28b6751f bellard
}
1853 28b6751f bellard
1854 9a64fbe4 bellard
/* fcmpo */
1855 36081602 j_mayer
void OPPROTO op_fcmpo (void)
1856 28b6751f bellard
{
1857 9a64fbe4 bellard
    do_fcmpo();
1858 9a64fbe4 bellard
    RETURN();
1859 fb0eaffc bellard
}
1860 fb0eaffc bellard
1861 9a64fbe4 bellard
/***                         Floating-point move                           ***/
1862 9a64fbe4 bellard
/* fabs */
1863 36081602 j_mayer
void OPPROTO op_fabs (void)
1864 fb0eaffc bellard
{
1865 fdabc366 bellard
    FT0 = float64_abs(FT0);
1866 fb0eaffc bellard
    RETURN();
1867 fb0eaffc bellard
}
1868 fb0eaffc bellard
1869 9a64fbe4 bellard
/* fnabs */
1870 36081602 j_mayer
void OPPROTO op_fnabs (void)
1871 fb0eaffc bellard
{
1872 fdabc366 bellard
    FT0 = float64_abs(FT0);
1873 fdabc366 bellard
    FT0 = float64_chs(FT0);
1874 fb0eaffc bellard
    RETURN();
1875 fb0eaffc bellard
}
1876 fb0eaffc bellard
1877 9a64fbe4 bellard
/* fneg */
1878 36081602 j_mayer
void OPPROTO op_fneg (void)
1879 fb0eaffc bellard
{
1880 fdabc366 bellard
    FT0 = float64_chs(FT0);
1881 fb0eaffc bellard
    RETURN();
1882 fb0eaffc bellard
}
1883 fb0eaffc bellard
1884 9a64fbe4 bellard
/* Load and store */
1885 9a64fbe4 bellard
#define MEMSUFFIX _raw
1886 76a66253 j_mayer
#include "op_helper.h"
1887 9a64fbe4 bellard
#include "op_mem.h"
1888 a541f297 bellard
#if !defined(CONFIG_USER_ONLY)
1889 9a64fbe4 bellard
#define MEMSUFFIX _user
1890 76a66253 j_mayer
#include "op_helper.h"
1891 9a64fbe4 bellard
#include "op_mem.h"
1892 9a64fbe4 bellard
#define MEMSUFFIX _kernel
1893 76a66253 j_mayer
#include "op_helper.h"
1894 9a64fbe4 bellard
#include "op_mem.h"
1895 1e42b8f0 j_mayer
#define MEMSUFFIX _hypv
1896 1e42b8f0 j_mayer
#include "op_helper.h"
1897 1e42b8f0 j_mayer
#include "op_mem.h"
1898 1e42b8f0 j_mayer
#endif
1899 9a64fbe4 bellard
1900 4b3686fa bellard
/* Special op to check and maybe clear reservation */
1901 d9bce9d9 j_mayer
void OPPROTO op_check_reservation (void)
1902 4b3686fa bellard
{
1903 fdabc366 bellard
    if ((uint32_t)env->reserve == (uint32_t)(T0 & ~0x00000003))
1904 a73666f6 j_mayer
        env->reserve = (target_ulong)-1ULL;
1905 4b3686fa bellard
    RETURN();
1906 4b3686fa bellard
}
1907 4b3686fa bellard
1908 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1909 d9bce9d9 j_mayer
void OPPROTO op_check_reservation_64 (void)
1910 d9bce9d9 j_mayer
{
1911 d9bce9d9 j_mayer
    if ((uint64_t)env->reserve == (uint64_t)(T0 & ~0x00000003))
1912 6f2d8978 j_mayer
        env->reserve = (target_ulong)-1ULL;
1913 d9bce9d9 j_mayer
    RETURN();
1914 d9bce9d9 j_mayer
}
1915 d9bce9d9 j_mayer
#endif
1916 d9bce9d9 j_mayer
1917 be147d08 j_mayer
void OPPROTO op_wait (void)
1918 be147d08 j_mayer
{
1919 be147d08 j_mayer
    env->halted = 1;
1920 be147d08 j_mayer
    RETURN();
1921 be147d08 j_mayer
}
1922 be147d08 j_mayer
1923 9a64fbe4 bellard
/* Return from interrupt */
1924 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
1925 76a66253 j_mayer
void OPPROTO op_rfi (void)
1926 fb0eaffc bellard
{
1927 fdabc366 bellard
    do_rfi();
1928 fb0eaffc bellard
    RETURN();
1929 fb0eaffc bellard
}
1930 d9bce9d9 j_mayer
1931 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1932 426613db j_mayer
void OPPROTO op_rfid (void)
1933 426613db j_mayer
{
1934 426613db j_mayer
    do_rfid();
1935 426613db j_mayer
    RETURN();
1936 426613db j_mayer
}
1937 be147d08 j_mayer
1938 be147d08 j_mayer
void OPPROTO op_hrfid (void)
1939 be147d08 j_mayer
{
1940 be147d08 j_mayer
    do_hrfid();
1941 be147d08 j_mayer
    RETURN();
1942 be147d08 j_mayer
}
1943 be147d08 j_mayer
#endif
1944 6f5d427d j_mayer
1945 6f5d427d j_mayer
/* Exception vectors */
1946 6f5d427d j_mayer
void OPPROTO op_store_excp_prefix (void)
1947 6f5d427d j_mayer
{
1948 6f5d427d j_mayer
    T0 &= env->ivpr_mask;
1949 6f5d427d j_mayer
    env->excp_prefix = T0;
1950 6f5d427d j_mayer
    RETURN();
1951 6f5d427d j_mayer
}
1952 6f5d427d j_mayer
1953 6f5d427d j_mayer
void OPPROTO op_store_excp_vector (void)
1954 6f5d427d j_mayer
{
1955 6f5d427d j_mayer
    T0 &= env->ivor_mask;
1956 6f5d427d j_mayer
    env->excp_vectors[PARAM1] = T0;
1957 6f5d427d j_mayer
    RETURN();
1958 6f5d427d j_mayer
}
1959 76a66253 j_mayer
#endif
1960 fb0eaffc bellard
1961 9a64fbe4 bellard
/* Trap word */
1962 76a66253 j_mayer
void OPPROTO op_tw (void)
1963 fb0eaffc bellard
{
1964 76a66253 j_mayer
    do_tw(PARAM1);
1965 fb0eaffc bellard
    RETURN();
1966 fb0eaffc bellard
}
1967 fb0eaffc bellard
1968 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1969 d9bce9d9 j_mayer
void OPPROTO op_td (void)
1970 d9bce9d9 j_mayer
{
1971 d9bce9d9 j_mayer
    do_td(PARAM1);
1972 d9bce9d9 j_mayer
    RETURN();
1973 d9bce9d9 j_mayer
}
1974 d9bce9d9 j_mayer
#endif
1975 d9bce9d9 j_mayer
1976 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
1977 9a64fbe4 bellard
/* tlbia */
1978 36081602 j_mayer
void OPPROTO op_tlbia (void)
1979 fb0eaffc bellard
{
1980 daf4f96e j_mayer
    ppc_tlb_invalidate_all(env);
1981 9a64fbe4 bellard
    RETURN();
1982 9a64fbe4 bellard
}
1983 9a64fbe4 bellard
1984 9a64fbe4 bellard
/* tlbie */
1985 d9bce9d9 j_mayer
void OPPROTO op_tlbie (void)
1986 9a64fbe4 bellard
{
1987 daf4f96e j_mayer
    ppc_tlb_invalidate_one(env, (uint32_t)T0);
1988 fb0eaffc bellard
    RETURN();
1989 28b6751f bellard
}
1990 d9bce9d9 j_mayer
1991 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
1992 d9bce9d9 j_mayer
void OPPROTO op_tlbie_64 (void)
1993 d9bce9d9 j_mayer
{
1994 daf4f96e j_mayer
    ppc_tlb_invalidate_one(env, T0);
1995 d9bce9d9 j_mayer
    RETURN();
1996 d9bce9d9 j_mayer
}
1997 d9bce9d9 j_mayer
#endif
1998 d9bce9d9 j_mayer
1999 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
2000 d9bce9d9 j_mayer
void OPPROTO op_slbia (void)
2001 d9bce9d9 j_mayer
{
2002 daf4f96e j_mayer
    ppc_slb_invalidate_all(env);
2003 d9bce9d9 j_mayer
    RETURN();
2004 d9bce9d9 j_mayer
}
2005 d9bce9d9 j_mayer
2006 d9bce9d9 j_mayer
void OPPROTO op_slbie (void)
2007 d9bce9d9 j_mayer
{
2008 daf4f96e j_mayer
    ppc_slb_invalidate_one(env, (uint32_t)T0);
2009 daf4f96e j_mayer
    RETURN();
2010 daf4f96e j_mayer
}
2011 daf4f96e j_mayer
2012 daf4f96e j_mayer
void OPPROTO op_slbie_64 (void)
2013 daf4f96e j_mayer
{
2014 daf4f96e j_mayer
    ppc_slb_invalidate_one(env, T0);
2015 d9bce9d9 j_mayer
    RETURN();
2016 d9bce9d9 j_mayer
}
2017 d9bce9d9 j_mayer
#endif
2018 76a66253 j_mayer
#endif
2019 3fc6c082 bellard
2020 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
2021 7dbe11ac j_mayer
/* PowerPC 602/603/755 software TLB load instructions */
2022 76a66253 j_mayer
void OPPROTO op_6xx_tlbld (void)
2023 76a66253 j_mayer
{
2024 76a66253 j_mayer
    do_load_6xx_tlb(0);
2025 76a66253 j_mayer
    RETURN();
2026 76a66253 j_mayer
}
2027 76a66253 j_mayer
2028 76a66253 j_mayer
void OPPROTO op_6xx_tlbli (void)
2029 76a66253 j_mayer
{
2030 76a66253 j_mayer
    do_load_6xx_tlb(1);
2031 76a66253 j_mayer
    RETURN();
2032 76a66253 j_mayer
}
2033 7dbe11ac j_mayer
2034 7dbe11ac j_mayer
/* PowerPC 74xx software TLB load instructions */
2035 7dbe11ac j_mayer
void OPPROTO op_74xx_tlbld (void)
2036 7dbe11ac j_mayer
{
2037 7dbe11ac j_mayer
    do_load_74xx_tlb(0);
2038 7dbe11ac j_mayer
    RETURN();
2039 7dbe11ac j_mayer
}
2040 7dbe11ac j_mayer
2041 7dbe11ac j_mayer
void OPPROTO op_74xx_tlbli (void)
2042 7dbe11ac j_mayer
{
2043 7dbe11ac j_mayer
    do_load_74xx_tlb(1);
2044 7dbe11ac j_mayer
    RETURN();
2045 7dbe11ac j_mayer
}
2046 76a66253 j_mayer
#endif
2047 76a66253 j_mayer
2048 76a66253 j_mayer
/* 601 specific */
2049 76a66253 j_mayer
void OPPROTO op_load_601_rtcl (void)
2050 76a66253 j_mayer
{
2051 76a66253 j_mayer
    T0 = cpu_ppc601_load_rtcl(env);
2052 76a66253 j_mayer
    RETURN();
2053 76a66253 j_mayer
}
2054 76a66253 j_mayer
2055 76a66253 j_mayer
void OPPROTO op_load_601_rtcu (void)
2056 76a66253 j_mayer
{
2057 76a66253 j_mayer
    T0 = cpu_ppc601_load_rtcu(env);
2058 76a66253 j_mayer
    RETURN();
2059 76a66253 j_mayer
}
2060 76a66253 j_mayer
2061 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
2062 76a66253 j_mayer
void OPPROTO op_store_601_rtcl (void)
2063 76a66253 j_mayer
{
2064 76a66253 j_mayer
    cpu_ppc601_store_rtcl(env, T0);
2065 76a66253 j_mayer
    RETURN();
2066 76a66253 j_mayer
}
2067 76a66253 j_mayer
2068 76a66253 j_mayer
void OPPROTO op_store_601_rtcu (void)
2069 76a66253 j_mayer
{
2070 76a66253 j_mayer
    cpu_ppc601_store_rtcu(env, T0);
2071 76a66253 j_mayer
    RETURN();
2072 76a66253 j_mayer
}
2073 76a66253 j_mayer
2074 056401ea j_mayer
void OPPROTO op_store_hid0_601 (void)
2075 056401ea j_mayer
{
2076 056401ea j_mayer
    do_store_hid0_601();
2077 056401ea j_mayer
    RETURN();
2078 056401ea j_mayer
}
2079 056401ea j_mayer
2080 76a66253 j_mayer
void OPPROTO op_load_601_bat (void)
2081 76a66253 j_mayer
{
2082 76a66253 j_mayer
    T0 = env->IBAT[PARAM1][PARAM2];
2083 76a66253 j_mayer
    RETURN();
2084 76a66253 j_mayer
}
2085 76a66253 j_mayer
2086 76a66253 j_mayer
void OPPROTO op_store_601_batl (void)
2087 76a66253 j_mayer
{
2088 056401ea j_mayer
    do_store_ibatl_601(env, PARAM1, T0);
2089 76a66253 j_mayer
    RETURN();
2090 76a66253 j_mayer
}
2091 76a66253 j_mayer
2092 76a66253 j_mayer
void OPPROTO op_store_601_batu (void)
2093 76a66253 j_mayer
{
2094 056401ea j_mayer
    do_store_ibatu_601(env, PARAM1, T0);
2095 76a66253 j_mayer
    RETURN();
2096 76a66253 j_mayer
}
2097 76a66253 j_mayer
#endif /* !defined(CONFIG_USER_ONLY) */
2098 76a66253 j_mayer
2099 76a66253 j_mayer
/* PowerPC 601 specific instructions (POWER bridge) */
2100 76a66253 j_mayer
/* XXX: those micro-ops need tests ! */
2101 76a66253 j_mayer
void OPPROTO op_POWER_abs (void)
2102 76a66253 j_mayer
{
2103 9c7e37e7 j_mayer
    if ((int32_t)T0 == INT32_MIN)
2104 76a66253 j_mayer
        T0 = INT32_MAX;
2105 9c7e37e7 j_mayer
    else if ((int32_t)T0 < 0)
2106 76a66253 j_mayer
        T0 = -T0;
2107 76a66253 j_mayer
    RETURN();
2108 76a66253 j_mayer
}
2109 76a66253 j_mayer
2110 76a66253 j_mayer
void OPPROTO op_POWER_abso (void)
2111 76a66253 j_mayer
{
2112 76a66253 j_mayer
    do_POWER_abso();
2113 76a66253 j_mayer
    RETURN();
2114 76a66253 j_mayer
}
2115 76a66253 j_mayer
2116 76a66253 j_mayer
void OPPROTO op_POWER_clcs (void)
2117 76a66253 j_mayer
{
2118 76a66253 j_mayer
    do_POWER_clcs();
2119 76a66253 j_mayer
    RETURN();
2120 76a66253 j_mayer
}
2121 76a66253 j_mayer
2122 76a66253 j_mayer
void OPPROTO op_POWER_div (void)
2123 76a66253 j_mayer
{
2124 76a66253 j_mayer
    do_POWER_div();
2125 76a66253 j_mayer
    RETURN();
2126 76a66253 j_mayer
}
2127 76a66253 j_mayer
2128 76a66253 j_mayer
void OPPROTO op_POWER_divo (void)
2129 76a66253 j_mayer
{
2130 76a66253 j_mayer
    do_POWER_divo();
2131 76a66253 j_mayer
    RETURN();
2132 76a66253 j_mayer
}
2133 76a66253 j_mayer
2134 76a66253 j_mayer
void OPPROTO op_POWER_divs (void)
2135 76a66253 j_mayer
{
2136 76a66253 j_mayer
    do_POWER_divs();
2137 76a66253 j_mayer
    RETURN();
2138 76a66253 j_mayer
}
2139 76a66253 j_mayer
2140 76a66253 j_mayer
void OPPROTO op_POWER_divso (void)
2141 76a66253 j_mayer
{
2142 76a66253 j_mayer
    do_POWER_divso();
2143 76a66253 j_mayer
    RETURN();
2144 76a66253 j_mayer
}
2145 76a66253 j_mayer
2146 76a66253 j_mayer
void OPPROTO op_POWER_doz (void)
2147 76a66253 j_mayer
{
2148 d9bce9d9 j_mayer
    if ((int32_t)T1 > (int32_t)T0)
2149 76a66253 j_mayer
        T0 = T1 - T0;
2150 76a66253 j_mayer
    else
2151 76a66253 j_mayer
        T0 = 0;
2152 76a66253 j_mayer
    RETURN();
2153 76a66253 j_mayer
}
2154 76a66253 j_mayer
2155 76a66253 j_mayer
void OPPROTO op_POWER_dozo (void)
2156 76a66253 j_mayer
{
2157 76a66253 j_mayer
    do_POWER_dozo();
2158 76a66253 j_mayer
    RETURN();
2159 76a66253 j_mayer
}
2160 76a66253 j_mayer
2161 76a66253 j_mayer
void OPPROTO op_load_xer_cmp (void)
2162 76a66253 j_mayer
{
2163 76a66253 j_mayer
    T2 = xer_cmp;
2164 76a66253 j_mayer
    RETURN();
2165 76a66253 j_mayer
}
2166 76a66253 j_mayer
2167 76a66253 j_mayer
void OPPROTO op_POWER_maskg (void)
2168 76a66253 j_mayer
{
2169 76a66253 j_mayer
    do_POWER_maskg();
2170 76a66253 j_mayer
    RETURN();
2171 76a66253 j_mayer
}
2172 76a66253 j_mayer
2173 76a66253 j_mayer
void OPPROTO op_POWER_maskir (void)
2174 76a66253 j_mayer
{
2175 76a66253 j_mayer
    T0 = (T0 & ~T2) | (T1 & T2);
2176 76a66253 j_mayer
    RETURN();
2177 76a66253 j_mayer
}
2178 76a66253 j_mayer
2179 76a66253 j_mayer
void OPPROTO op_POWER_mul (void)
2180 76a66253 j_mayer
{
2181 76a66253 j_mayer
    uint64_t tmp;
2182 76a66253 j_mayer
2183 76a66253 j_mayer
    tmp = (uint64_t)T0 * (uint64_t)T1;
2184 76a66253 j_mayer
    env->spr[SPR_MQ] = tmp >> 32;
2185 76a66253 j_mayer
    T0 = tmp;
2186 76a66253 j_mayer
    RETURN();
2187 76a66253 j_mayer
}
2188 76a66253 j_mayer
2189 76a66253 j_mayer
void OPPROTO op_POWER_mulo (void)
2190 76a66253 j_mayer
{
2191 76a66253 j_mayer
    do_POWER_mulo();
2192 76a66253 j_mayer
    RETURN();
2193 76a66253 j_mayer
}
2194 76a66253 j_mayer
2195 76a66253 j_mayer
void OPPROTO op_POWER_nabs (void)
2196 76a66253 j_mayer
{
2197 76a66253 j_mayer
    if (T0 > 0)
2198 76a66253 j_mayer
        T0 = -T0;
2199 76a66253 j_mayer
    RETURN();
2200 76a66253 j_mayer
}
2201 76a66253 j_mayer
2202 76a66253 j_mayer
void OPPROTO op_POWER_nabso (void)
2203 76a66253 j_mayer
{
2204 76a66253 j_mayer
    /* nabs never overflows */
2205 76a66253 j_mayer
    if (T0 > 0)
2206 76a66253 j_mayer
        T0 = -T0;
2207 76a66253 j_mayer
    xer_ov = 0;
2208 76a66253 j_mayer
    RETURN();
2209 76a66253 j_mayer
}
2210 76a66253 j_mayer
2211 76a66253 j_mayer
/* XXX: factorise POWER rotates... */
2212 76a66253 j_mayer
void OPPROTO op_POWER_rlmi (void)
2213 76a66253 j_mayer
{
2214 76a66253 j_mayer
    T0 = rotl32(T0, T2) & PARAM1;
2215 2f401176 j_mayer
    T0 |= T1 & (uint32_t)PARAM2;
2216 76a66253 j_mayer
    RETURN();
2217 76a66253 j_mayer
}
2218 76a66253 j_mayer
2219 76a66253 j_mayer
void OPPROTO op_POWER_rrib (void)
2220 76a66253 j_mayer
{
2221 76a66253 j_mayer
    T2 &= 0x1FUL;
2222 76a66253 j_mayer
    T0 = rotl32(T0 & INT32_MIN, T2);
2223 76a66253 j_mayer
    T0 |= T1 & ~rotl32(INT32_MIN, T2);
2224 76a66253 j_mayer
    RETURN();
2225 76a66253 j_mayer
}
2226 76a66253 j_mayer
2227 76a66253 j_mayer
void OPPROTO op_POWER_sle (void)
2228 76a66253 j_mayer
{
2229 76a66253 j_mayer
    T1 &= 0x1FUL;
2230 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, T1);
2231 76a66253 j_mayer
    T0 = T0 << T1;
2232 76a66253 j_mayer
    RETURN();
2233 76a66253 j_mayer
}
2234 76a66253 j_mayer
2235 76a66253 j_mayer
void OPPROTO op_POWER_sleq (void)
2236 76a66253 j_mayer
{
2237 76a66253 j_mayer
    uint32_t tmp = env->spr[SPR_MQ];
2238 76a66253 j_mayer
2239 76a66253 j_mayer
    T1 &= 0x1FUL;
2240 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, T1);
2241 76a66253 j_mayer
    T0 = T0 << T1;
2242 76a66253 j_mayer
    T0 |= tmp >> (32 - T1);
2243 76a66253 j_mayer
    RETURN();
2244 76a66253 j_mayer
}
2245 76a66253 j_mayer
2246 76a66253 j_mayer
void OPPROTO op_POWER_sllq (void)
2247 76a66253 j_mayer
{
2248 6f2d8978 j_mayer
    uint32_t msk = UINT32_MAX;
2249 76a66253 j_mayer
2250 76a66253 j_mayer
    msk = msk << (T1 & 0x1FUL);
2251 76a66253 j_mayer
    if (T1 & 0x20UL)
2252 76a66253 j_mayer
        msk = ~msk;
2253 76a66253 j_mayer
    T1 &= 0x1FUL;
2254 76a66253 j_mayer
    T0 = (T0 << T1) & msk;
2255 76a66253 j_mayer
    T0 |= env->spr[SPR_MQ] & ~msk;
2256 76a66253 j_mayer
    RETURN();
2257 76a66253 j_mayer
}
2258 76a66253 j_mayer
2259 76a66253 j_mayer
void OPPROTO op_POWER_slq (void)
2260 76a66253 j_mayer
{
2261 6f2d8978 j_mayer
    uint32_t msk = UINT32_MAX, tmp;
2262 76a66253 j_mayer
2263 76a66253 j_mayer
    msk = msk << (T1 & 0x1FUL);
2264 76a66253 j_mayer
    if (T1 & 0x20UL)
2265 76a66253 j_mayer
        msk = ~msk;
2266 76a66253 j_mayer
    T1 &= 0x1FUL;
2267 76a66253 j_mayer
    tmp = rotl32(T0, T1);
2268 76a66253 j_mayer
    T0 = tmp & msk;
2269 76a66253 j_mayer
    env->spr[SPR_MQ] = tmp;
2270 76a66253 j_mayer
    RETURN();
2271 76a66253 j_mayer
}
2272 76a66253 j_mayer
2273 76a66253 j_mayer
void OPPROTO op_POWER_sraq (void)
2274 76a66253 j_mayer
{
2275 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, 32 - (T1 & 0x1FUL));
2276 76a66253 j_mayer
    if (T1 & 0x20UL)
2277 6f2d8978 j_mayer
        T0 = UINT32_MAX;
2278 76a66253 j_mayer
    else
2279 d9bce9d9 j_mayer
        T0 = (int32_t)T0 >> T1;
2280 76a66253 j_mayer
    RETURN();
2281 76a66253 j_mayer
}
2282 76a66253 j_mayer
2283 76a66253 j_mayer
void OPPROTO op_POWER_sre (void)
2284 76a66253 j_mayer
{
2285 76a66253 j_mayer
    T1 &= 0x1FUL;
2286 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
2287 d9bce9d9 j_mayer
    T0 = (int32_t)T0 >> T1;
2288 76a66253 j_mayer
    RETURN();
2289 76a66253 j_mayer
}
2290 76a66253 j_mayer
2291 76a66253 j_mayer
void OPPROTO op_POWER_srea (void)
2292 76a66253 j_mayer
{
2293 76a66253 j_mayer
    T1 &= 0x1FUL;
2294 76a66253 j_mayer
    env->spr[SPR_MQ] = T0 >> T1;
2295 d9bce9d9 j_mayer
    T0 = (int32_t)T0 >> T1;
2296 76a66253 j_mayer
    RETURN();
2297 76a66253 j_mayer
}
2298 76a66253 j_mayer
2299 76a66253 j_mayer
void OPPROTO op_POWER_sreq (void)
2300 76a66253 j_mayer
{
2301 76a66253 j_mayer
    uint32_t tmp;
2302 76a66253 j_mayer
    int32_t msk;
2303 76a66253 j_mayer
2304 76a66253 j_mayer
    T1 &= 0x1FUL;
2305 76a66253 j_mayer
    msk = INT32_MIN >> T1;
2306 76a66253 j_mayer
    tmp = env->spr[SPR_MQ];
2307 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
2308 76a66253 j_mayer
    T0 = T0 >> T1;
2309 76a66253 j_mayer
    T0 |= tmp & msk;
2310 76a66253 j_mayer
    RETURN();
2311 76a66253 j_mayer
}
2312 76a66253 j_mayer
2313 76a66253 j_mayer
void OPPROTO op_POWER_srlq (void)
2314 76a66253 j_mayer
{
2315 76a66253 j_mayer
    uint32_t tmp;
2316 76a66253 j_mayer
    int32_t msk;
2317 76a66253 j_mayer
2318 76a66253 j_mayer
    msk = INT32_MIN >> (T1 & 0x1FUL);
2319 76a66253 j_mayer
    if (T1 & 0x20UL)
2320 76a66253 j_mayer
        msk = ~msk;
2321 76a66253 j_mayer
    T1 &= 0x1FUL;
2322 76a66253 j_mayer
    tmp = env->spr[SPR_MQ];
2323 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
2324 76a66253 j_mayer
    T0 = T0 >> T1;
2325 76a66253 j_mayer
    T0 &= msk;
2326 76a66253 j_mayer
    T0 |= tmp & ~msk;
2327 76a66253 j_mayer
    RETURN();
2328 76a66253 j_mayer
}
2329 76a66253 j_mayer
2330 76a66253 j_mayer
void OPPROTO op_POWER_srq (void)
2331 76a66253 j_mayer
{
2332 76a66253 j_mayer
    T1 &= 0x1FUL;
2333 76a66253 j_mayer
    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
2334 76a66253 j_mayer
    T0 = T0 >> T1;
2335 76a66253 j_mayer
    RETURN();
2336 76a66253 j_mayer
}
2337 76a66253 j_mayer
2338 76a66253 j_mayer
/* POWER instructions not implemented in PowerPC 601 */
2339 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
2340 76a66253 j_mayer
void OPPROTO op_POWER_mfsri (void)
2341 76a66253 j_mayer
{
2342 76a66253 j_mayer
    T1 = T0 >> 28;
2343 76a66253 j_mayer
    T0 = env->sr[T1];
2344 76a66253 j_mayer
    RETURN();
2345 76a66253 j_mayer
}
2346 76a66253 j_mayer
2347 76a66253 j_mayer
void OPPROTO op_POWER_rac (void)
2348 76a66253 j_mayer
{
2349 76a66253 j_mayer
    do_POWER_rac();
2350 76a66253 j_mayer
    RETURN();
2351 76a66253 j_mayer
}
2352 76a66253 j_mayer
2353 76a66253 j_mayer
void OPPROTO op_POWER_rfsvc (void)
2354 76a66253 j_mayer
{
2355 76a66253 j_mayer
    do_POWER_rfsvc();
2356 76a66253 j_mayer
    RETURN();
2357 76a66253 j_mayer
}
2358 76a66253 j_mayer
#endif
2359 76a66253 j_mayer
2360 76a66253 j_mayer
/* PowerPC 602 specific instruction */
2361 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
2362 76a66253 j_mayer
void OPPROTO op_602_mfrom (void)
2363 76a66253 j_mayer
{
2364 76a66253 j_mayer
    do_op_602_mfrom();
2365 76a66253 j_mayer
    RETURN();
2366 76a66253 j_mayer
}
2367 76a66253 j_mayer
#endif
2368 76a66253 j_mayer
2369 76a66253 j_mayer
/* PowerPC 4xx specific micro-ops */
2370 76a66253 j_mayer
void OPPROTO op_405_add_T0_T2 (void)
2371 76a66253 j_mayer
{
2372 76a66253 j_mayer
    T0 = (int32_t)T0 + (int32_t)T2;
2373 76a66253 j_mayer
    RETURN();
2374 76a66253 j_mayer
}
2375 76a66253 j_mayer
2376 76a66253 j_mayer
void OPPROTO op_405_mulchw (void)
2377 76a66253 j_mayer
{
2378 76a66253 j_mayer
    T0 = ((int16_t)T0) * ((int16_t)(T1 >> 16));
2379 76a66253 j_mayer
    RETURN();
2380 76a66253 j_mayer
}
2381 76a66253 j_mayer
2382 76a66253 j_mayer
void OPPROTO op_405_mulchwu (void)
2383 76a66253 j_mayer
{
2384 76a66253 j_mayer
    T0 = ((uint16_t)T0) * ((uint16_t)(T1 >> 16));
2385 76a66253 j_mayer
    RETURN();
2386 76a66253 j_mayer
}
2387 76a66253 j_mayer
2388 76a66253 j_mayer
void OPPROTO op_405_mulhhw (void)
2389 76a66253 j_mayer
{
2390 76a66253 j_mayer
    T0 = ((int16_t)(T0 >> 16)) * ((int16_t)(T1 >> 16));
2391 76a66253 j_mayer
    RETURN();
2392 76a66253 j_mayer
}
2393 76a66253 j_mayer
2394 76a66253 j_mayer
void OPPROTO op_405_mulhhwu (void)
2395 76a66253 j_mayer
{
2396 76a66253 j_mayer
    T0 = ((uint16_t)(T0 >> 16)) * ((uint16_t)(T1 >> 16));
2397 76a66253 j_mayer
    RETURN();
2398 76a66253 j_mayer
}
2399 76a66253 j_mayer
2400 76a66253 j_mayer
void OPPROTO op_405_mullhw (void)
2401 76a66253 j_mayer
{
2402 76a66253 j_mayer
    T0 = ((int16_t)T0) * ((int16_t)T1);
2403 76a66253 j_mayer
    RETURN();
2404 76a66253 j_mayer
}
2405 76a66253 j_mayer
2406 76a66253 j_mayer
void OPPROTO op_405_mullhwu (void)
2407 76a66253 j_mayer
{
2408 76a66253 j_mayer
    T0 = ((uint16_t)T0) * ((uint16_t)T1);
2409 76a66253 j_mayer
    RETURN();
2410 76a66253 j_mayer
}
2411 76a66253 j_mayer
2412 76a66253 j_mayer
void OPPROTO op_405_check_sat (void)
2413 76a66253 j_mayer
{
2414 76a66253 j_mayer
    do_405_check_sat();
2415 76a66253 j_mayer
    RETURN();
2416 76a66253 j_mayer
}
2417 76a66253 j_mayer
2418 76a66253 j_mayer
void OPPROTO op_405_check_ovu (void)
2419 76a66253 j_mayer
{
2420 76a66253 j_mayer
    if (likely(T0 >= T2)) {
2421 76a66253 j_mayer
        xer_ov = 0;
2422 76a66253 j_mayer
    } else {
2423 76a66253 j_mayer
        xer_ov = 1;
2424 76a66253 j_mayer
        xer_so = 1;
2425 76a66253 j_mayer
    }
2426 76a66253 j_mayer
    RETURN();
2427 76a66253 j_mayer
}
2428 76a66253 j_mayer
2429 76a66253 j_mayer
void OPPROTO op_405_check_satu (void)
2430 76a66253 j_mayer
{
2431 76a66253 j_mayer
    if (unlikely(T0 < T2)) {
2432 76a66253 j_mayer
        /* Saturate result */
2433 6f2d8978 j_mayer
        T0 = UINT32_MAX;
2434 76a66253 j_mayer
    }
2435 76a66253 j_mayer
    RETURN();
2436 76a66253 j_mayer
}
2437 76a66253 j_mayer
2438 a42bd6cc j_mayer
void OPPROTO op_load_dcr (void)
2439 76a66253 j_mayer
{
2440 a42bd6cc j_mayer
    do_load_dcr();
2441 76a66253 j_mayer
    RETURN();
2442 76a66253 j_mayer
}
2443 76a66253 j_mayer
2444 a42bd6cc j_mayer
void OPPROTO op_store_dcr (void)
2445 76a66253 j_mayer
{
2446 a42bd6cc j_mayer
    do_store_dcr();
2447 76a66253 j_mayer
    RETURN();
2448 76a66253 j_mayer
}
2449 76a66253 j_mayer
2450 a750fc0b j_mayer
#if !defined(CONFIG_USER_ONLY)
2451 76a66253 j_mayer
/* Return from critical interrupt :
2452 76a66253 j_mayer
 * same as rfi, except nip & MSR are loaded from SRR2/3 instead of SRR0/1
2453 76a66253 j_mayer
 */
2454 a42bd6cc j_mayer
void OPPROTO op_40x_rfci (void)
2455 a42bd6cc j_mayer
{
2456 a42bd6cc j_mayer
    do_40x_rfci();
2457 a42bd6cc j_mayer
    RETURN();
2458 a42bd6cc j_mayer
}
2459 a42bd6cc j_mayer
2460 a42bd6cc j_mayer
void OPPROTO op_rfci (void)
2461 a42bd6cc j_mayer
{
2462 a42bd6cc j_mayer
    do_rfci();
2463 a42bd6cc j_mayer
    RETURN();
2464 a42bd6cc j_mayer
}
2465 a42bd6cc j_mayer
2466 a42bd6cc j_mayer
void OPPROTO op_rfdi (void)
2467 a42bd6cc j_mayer
{
2468 a42bd6cc j_mayer
    do_rfdi();
2469 a42bd6cc j_mayer
    RETURN();
2470 a42bd6cc j_mayer
}
2471 a42bd6cc j_mayer
2472 a42bd6cc j_mayer
void OPPROTO op_rfmci (void)
2473 76a66253 j_mayer
{
2474 a42bd6cc j_mayer
    do_rfmci();
2475 76a66253 j_mayer
    RETURN();
2476 76a66253 j_mayer
}
2477 76a66253 j_mayer
2478 a42bd6cc j_mayer
void OPPROTO op_wrte (void)
2479 76a66253 j_mayer
{
2480 0411a972 j_mayer
    /* We don't call do_store_msr here as we won't trigger
2481 0411a972 j_mayer
     * any special case nor change hflags
2482 0411a972 j_mayer
     */
2483 0411a972 j_mayer
    T0 &= 1 << MSR_EE;
2484 0411a972 j_mayer
    env->msr &= ~(1 << MSR_EE);
2485 0411a972 j_mayer
    env->msr |= T0;
2486 76a66253 j_mayer
    RETURN();
2487 76a66253 j_mayer
}
2488 76a66253 j_mayer
2489 a4bb6c3e j_mayer
void OPPROTO op_440_tlbre (void)
2490 5eb7995e j_mayer
{
2491 a4bb6c3e j_mayer
    do_440_tlbre(PARAM1);
2492 5eb7995e j_mayer
    RETURN();
2493 5eb7995e j_mayer
}
2494 5eb7995e j_mayer
2495 a4bb6c3e j_mayer
void OPPROTO op_440_tlbsx (void)
2496 5eb7995e j_mayer
{
2497 daf4f96e j_mayer
    T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_440_MMUCR] & 0xFF);
2498 5eb7995e j_mayer
    RETURN();
2499 5eb7995e j_mayer
}
2500 5eb7995e j_mayer
2501 daf4f96e j_mayer
void OPPROTO op_4xx_tlbsx_check (void)
2502 5eb7995e j_mayer
{
2503 daf4f96e j_mayer
    int tmp;
2504 daf4f96e j_mayer
2505 daf4f96e j_mayer
    tmp = xer_so;
2506 6f2d8978 j_mayer
    if ((int)T0 != -1)
2507 daf4f96e j_mayer
        tmp |= 0x02;
2508 daf4f96e j_mayer
    env->crf[0] = tmp;
2509 5eb7995e j_mayer
    RETURN();
2510 5eb7995e j_mayer
}
2511 5eb7995e j_mayer
2512 a4bb6c3e j_mayer
void OPPROTO op_440_tlbwe (void)
2513 5eb7995e j_mayer
{
2514 a4bb6c3e j_mayer
    do_440_tlbwe(PARAM1);
2515 5eb7995e j_mayer
    RETURN();
2516 5eb7995e j_mayer
}
2517 5eb7995e j_mayer
2518 76a66253 j_mayer
void OPPROTO op_4xx_tlbre_lo (void)
2519 76a66253 j_mayer
{
2520 76a66253 j_mayer
    do_4xx_tlbre_lo();
2521 76a66253 j_mayer
    RETURN();
2522 76a66253 j_mayer
}
2523 76a66253 j_mayer
2524 76a66253 j_mayer
void OPPROTO op_4xx_tlbre_hi (void)
2525 76a66253 j_mayer
{
2526 76a66253 j_mayer
    do_4xx_tlbre_hi();
2527 76a66253 j_mayer
    RETURN();
2528 76a66253 j_mayer
}
2529 76a66253 j_mayer
2530 76a66253 j_mayer
void OPPROTO op_4xx_tlbsx (void)
2531 76a66253 j_mayer
{
2532 daf4f96e j_mayer
    T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_40x_PID]);
2533 76a66253 j_mayer
    RETURN();
2534 76a66253 j_mayer
}
2535 76a66253 j_mayer
2536 76a66253 j_mayer
void OPPROTO op_4xx_tlbwe_lo (void)
2537 76a66253 j_mayer
{
2538 76a66253 j_mayer
    do_4xx_tlbwe_lo();
2539 76a66253 j_mayer
    RETURN();
2540 76a66253 j_mayer
}
2541 76a66253 j_mayer
2542 76a66253 j_mayer
void OPPROTO op_4xx_tlbwe_hi (void)
2543 76a66253 j_mayer
{
2544 76a66253 j_mayer
    do_4xx_tlbwe_hi();
2545 76a66253 j_mayer
    RETURN();
2546 76a66253 j_mayer
}
2547 76a66253 j_mayer
#endif
2548 76a66253 j_mayer
2549 76a66253 j_mayer
/* SPR micro-ops */
2550 76a66253 j_mayer
/* 440 specific */
2551 76a66253 j_mayer
void OPPROTO op_440_dlmzb (void)
2552 76a66253 j_mayer
{
2553 76a66253 j_mayer
    do_440_dlmzb();
2554 76a66253 j_mayer
    RETURN();
2555 76a66253 j_mayer
}
2556 76a66253 j_mayer
2557 76a66253 j_mayer
void OPPROTO op_440_dlmzb_update_Rc (void)
2558 76a66253 j_mayer
{
2559 76a66253 j_mayer
    if (T0 == 8)
2560 76a66253 j_mayer
        T0 = 0x2;
2561 76a66253 j_mayer
    else if (T0 < 4)
2562 76a66253 j_mayer
        T0 = 0x4;
2563 76a66253 j_mayer
    else
2564 76a66253 j_mayer
        T0 = 0x8;
2565 76a66253 j_mayer
    RETURN();
2566 76a66253 j_mayer
}
2567 76a66253 j_mayer
2568 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
2569 76a66253 j_mayer
void OPPROTO op_store_pir (void)
2570 3fc6c082 bellard
{
2571 3fc6c082 bellard
    env->spr[SPR_PIR] = T0 & 0x0000000FUL;
2572 3fc6c082 bellard
    RETURN();
2573 3fc6c082 bellard
}
2574 76a66253 j_mayer
2575 76a66253 j_mayer
void OPPROTO op_load_403_pb (void)
2576 76a66253 j_mayer
{
2577 76a66253 j_mayer
    do_load_403_pb(PARAM1);
2578 76a66253 j_mayer
    RETURN();
2579 76a66253 j_mayer
}
2580 76a66253 j_mayer
2581 76a66253 j_mayer
void OPPROTO op_store_403_pb (void)
2582 76a66253 j_mayer
{
2583 76a66253 j_mayer
    do_store_403_pb(PARAM1);
2584 76a66253 j_mayer
    RETURN();
2585 76a66253 j_mayer
}
2586 76a66253 j_mayer
2587 76a66253 j_mayer
void OPPROTO op_load_40x_pit (void)
2588 76a66253 j_mayer
{
2589 76a66253 j_mayer
    T0 = load_40x_pit(env);
2590 76a66253 j_mayer
    RETURN();
2591 76a66253 j_mayer
}
2592 76a66253 j_mayer
2593 76a66253 j_mayer
void OPPROTO op_store_40x_pit (void)
2594 76a66253 j_mayer
{
2595 76a66253 j_mayer
    store_40x_pit(env, T0);
2596 76a66253 j_mayer
    RETURN();
2597 76a66253 j_mayer
}
2598 76a66253 j_mayer
2599 8ecc7913 j_mayer
void OPPROTO op_store_40x_dbcr0 (void)
2600 8ecc7913 j_mayer
{
2601 8ecc7913 j_mayer
    store_40x_dbcr0(env, T0);
2602 be147d08 j_mayer
    RETURN();
2603 8ecc7913 j_mayer
}
2604 8ecc7913 j_mayer
2605 c294fc58 j_mayer
void OPPROTO op_store_40x_sler (void)
2606 c294fc58 j_mayer
{
2607 c294fc58 j_mayer
    store_40x_sler(env, T0);
2608 c294fc58 j_mayer
    RETURN();
2609 c294fc58 j_mayer
}
2610 c294fc58 j_mayer
2611 76a66253 j_mayer
void OPPROTO op_store_booke_tcr (void)
2612 76a66253 j_mayer
{
2613 76a66253 j_mayer
    store_booke_tcr(env, T0);
2614 76a66253 j_mayer
    RETURN();
2615 76a66253 j_mayer
}
2616 76a66253 j_mayer
2617 76a66253 j_mayer
void OPPROTO op_store_booke_tsr (void)
2618 76a66253 j_mayer
{
2619 76a66253 j_mayer
    store_booke_tsr(env, T0);
2620 76a66253 j_mayer
    RETURN();
2621 76a66253 j_mayer
}
2622 76a66253 j_mayer
#endif /* !defined(CONFIG_USER_ONLY) */
2623 0487d6a8 j_mayer
2624 0487d6a8 j_mayer
/* SPE extension */
2625 0487d6a8 j_mayer
void OPPROTO op_splatw_T1_64 (void)
2626 0487d6a8 j_mayer
{
2627 0487d6a8 j_mayer
    T1_64 = (T1_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL);
2628 e864cabd j_mayer
    RETURN();
2629 0487d6a8 j_mayer
}
2630 0487d6a8 j_mayer
2631 0487d6a8 j_mayer
void OPPROTO op_splatwi_T0_64 (void)
2632 0487d6a8 j_mayer
{
2633 0487d6a8 j_mayer
    uint64_t tmp = PARAM1;
2634 0487d6a8 j_mayer
2635 0487d6a8 j_mayer
    T0_64 = (tmp << 32) | tmp;
2636 e864cabd j_mayer
    RETURN();
2637 0487d6a8 j_mayer
}
2638 0487d6a8 j_mayer
2639 0487d6a8 j_mayer
void OPPROTO op_splatwi_T1_64 (void)
2640 0487d6a8 j_mayer
{
2641 0487d6a8 j_mayer
    uint64_t tmp = PARAM1;
2642 0487d6a8 j_mayer
2643 0487d6a8 j_mayer
    T1_64 = (tmp << 32) | tmp;
2644 e864cabd j_mayer
    RETURN();
2645 0487d6a8 j_mayer
}
2646 0487d6a8 j_mayer
2647 0487d6a8 j_mayer
void OPPROTO op_extsh_T1_64 (void)
2648 0487d6a8 j_mayer
{
2649 0487d6a8 j_mayer
    T1_64 = (int32_t)((int16_t)T1_64);
2650 0487d6a8 j_mayer
    RETURN();
2651 0487d6a8 j_mayer
}
2652 0487d6a8 j_mayer
2653 0487d6a8 j_mayer
void OPPROTO op_sli16_T1_64 (void)
2654 0487d6a8 j_mayer
{
2655 0487d6a8 j_mayer
    T1_64 = T1_64 << 16;
2656 0487d6a8 j_mayer
    RETURN();
2657 0487d6a8 j_mayer
}
2658 0487d6a8 j_mayer
2659 0487d6a8 j_mayer
void OPPROTO op_sli32_T1_64 (void)
2660 0487d6a8 j_mayer
{
2661 0487d6a8 j_mayer
    T1_64 = T1_64 << 32;
2662 0487d6a8 j_mayer
    RETURN();
2663 0487d6a8 j_mayer
}
2664 0487d6a8 j_mayer
2665 0487d6a8 j_mayer
void OPPROTO op_srli32_T1_64 (void)
2666 0487d6a8 j_mayer
{
2667 0487d6a8 j_mayer
    T1_64 = T1_64 >> 32;
2668 0487d6a8 j_mayer
    RETURN();
2669 0487d6a8 j_mayer
}
2670 0487d6a8 j_mayer
2671 0487d6a8 j_mayer
void OPPROTO op_evsel (void)
2672 0487d6a8 j_mayer
{
2673 0487d6a8 j_mayer
    do_evsel();
2674 0487d6a8 j_mayer
    RETURN();
2675 0487d6a8 j_mayer
}
2676 0487d6a8 j_mayer
2677 0487d6a8 j_mayer
void OPPROTO op_evaddw (void)
2678 0487d6a8 j_mayer
{
2679 0487d6a8 j_mayer
    do_evaddw();
2680 0487d6a8 j_mayer
    RETURN();
2681 0487d6a8 j_mayer
}
2682 0487d6a8 j_mayer
2683 0487d6a8 j_mayer
void OPPROTO op_evsubfw (void)
2684 0487d6a8 j_mayer
{
2685 0487d6a8 j_mayer
    do_evsubfw();
2686 0487d6a8 j_mayer
    RETURN();
2687 0487d6a8 j_mayer
}
2688 0487d6a8 j_mayer
2689 0487d6a8 j_mayer
void OPPROTO op_evneg (void)
2690 0487d6a8 j_mayer
{
2691 0487d6a8 j_mayer
    do_evneg();
2692 0487d6a8 j_mayer
    RETURN();
2693 0487d6a8 j_mayer
}
2694 0487d6a8 j_mayer
2695 0487d6a8 j_mayer
void OPPROTO op_evabs (void)
2696 0487d6a8 j_mayer
{
2697 0487d6a8 j_mayer
    do_evabs();
2698 0487d6a8 j_mayer
    RETURN();
2699 0487d6a8 j_mayer
}
2700 0487d6a8 j_mayer
2701 0487d6a8 j_mayer
void OPPROTO op_evextsh (void)
2702 0487d6a8 j_mayer
{
2703 0487d6a8 j_mayer
    T0_64 = ((uint64_t)((int32_t)(int16_t)(T0_64 >> 32)) << 32) |
2704 0487d6a8 j_mayer
        (uint64_t)((int32_t)(int16_t)T0_64);
2705 0487d6a8 j_mayer
    RETURN();
2706 0487d6a8 j_mayer
}
2707 0487d6a8 j_mayer
2708 0487d6a8 j_mayer
void OPPROTO op_evextsb (void)
2709 0487d6a8 j_mayer
{
2710 0487d6a8 j_mayer
    T0_64 = ((uint64_t)((int32_t)(int8_t)(T0_64 >> 32)) << 32) |
2711 0487d6a8 j_mayer
        (uint64_t)((int32_t)(int8_t)T0_64);
2712 0487d6a8 j_mayer
    RETURN();
2713 0487d6a8 j_mayer
}
2714 0487d6a8 j_mayer
2715 0487d6a8 j_mayer
void OPPROTO op_evcntlzw (void)
2716 0487d6a8 j_mayer
{
2717 0487d6a8 j_mayer
    do_evcntlzw();
2718 0487d6a8 j_mayer
    RETURN();
2719 0487d6a8 j_mayer
}
2720 0487d6a8 j_mayer
2721 0487d6a8 j_mayer
void OPPROTO op_evrndw (void)
2722 0487d6a8 j_mayer
{
2723 0487d6a8 j_mayer
    do_evrndw();
2724 0487d6a8 j_mayer
    RETURN();
2725 0487d6a8 j_mayer
}
2726 0487d6a8 j_mayer
2727 0487d6a8 j_mayer
void OPPROTO op_brinc (void)
2728 0487d6a8 j_mayer
{
2729 0487d6a8 j_mayer
    do_brinc();
2730 0487d6a8 j_mayer
    RETURN();
2731 0487d6a8 j_mayer
}
2732 0487d6a8 j_mayer
2733 0487d6a8 j_mayer
void OPPROTO op_evcntlsw (void)
2734 0487d6a8 j_mayer
{
2735 0487d6a8 j_mayer
    do_evcntlsw();
2736 0487d6a8 j_mayer
    RETURN();
2737 0487d6a8 j_mayer
}
2738 0487d6a8 j_mayer
2739 0487d6a8 j_mayer
void OPPROTO op_evand (void)
2740 0487d6a8 j_mayer
{
2741 0487d6a8 j_mayer
    T0_64 &= T1_64;
2742 0487d6a8 j_mayer
    RETURN();
2743 0487d6a8 j_mayer
}
2744 0487d6a8 j_mayer
2745 0487d6a8 j_mayer
void OPPROTO op_evandc (void)
2746 0487d6a8 j_mayer
{
2747 0487d6a8 j_mayer
    T0_64 &= ~T1_64;
2748 0487d6a8 j_mayer
    RETURN();
2749 0487d6a8 j_mayer
}
2750 0487d6a8 j_mayer
2751 0487d6a8 j_mayer
void OPPROTO op_evor (void)
2752 0487d6a8 j_mayer
{
2753 0487d6a8 j_mayer
    T0_64 |= T1_64;
2754 0487d6a8 j_mayer
    RETURN();
2755 0487d6a8 j_mayer
}
2756 0487d6a8 j_mayer
2757 0487d6a8 j_mayer
void OPPROTO op_evxor (void)
2758 0487d6a8 j_mayer
{
2759 0487d6a8 j_mayer
    T0_64 ^= T1_64;
2760 0487d6a8 j_mayer
    RETURN();
2761 0487d6a8 j_mayer
}
2762 0487d6a8 j_mayer
2763 0487d6a8 j_mayer
void OPPROTO op_eveqv (void)
2764 0487d6a8 j_mayer
{
2765 0487d6a8 j_mayer
    T0_64 = ~(T0_64 ^ T1_64);
2766 0487d6a8 j_mayer
    RETURN();
2767 0487d6a8 j_mayer
}
2768 0487d6a8 j_mayer
2769 0487d6a8 j_mayer
void OPPROTO op_evnor (void)
2770 0487d6a8 j_mayer
{
2771 0487d6a8 j_mayer
    T0_64 = ~(T0_64 | T1_64);
2772 0487d6a8 j_mayer
    RETURN();
2773 0487d6a8 j_mayer
}
2774 0487d6a8 j_mayer
2775 0487d6a8 j_mayer
void OPPROTO op_evorc (void)
2776 0487d6a8 j_mayer
{
2777 0487d6a8 j_mayer
    T0_64 |= ~T1_64;
2778 0487d6a8 j_mayer
    RETURN();
2779 0487d6a8 j_mayer
}
2780 0487d6a8 j_mayer
2781 0487d6a8 j_mayer
void OPPROTO op_evnand (void)
2782 0487d6a8 j_mayer
{
2783 0487d6a8 j_mayer
    T0_64 = ~(T0_64 & T1_64);
2784 0487d6a8 j_mayer
    RETURN();
2785 0487d6a8 j_mayer
}
2786 0487d6a8 j_mayer
2787 0487d6a8 j_mayer
void OPPROTO op_evsrws (void)
2788 0487d6a8 j_mayer
{
2789 0487d6a8 j_mayer
    do_evsrws();
2790 0487d6a8 j_mayer
    RETURN();
2791 0487d6a8 j_mayer
}
2792 0487d6a8 j_mayer
2793 0487d6a8 j_mayer
void OPPROTO op_evsrwu (void)
2794 0487d6a8 j_mayer
{
2795 0487d6a8 j_mayer
    do_evsrwu();
2796 0487d6a8 j_mayer
    RETURN();
2797 0487d6a8 j_mayer
}
2798 0487d6a8 j_mayer
2799 0487d6a8 j_mayer
void OPPROTO op_evslw (void)
2800 0487d6a8 j_mayer
{
2801 0487d6a8 j_mayer
    do_evslw();
2802 0487d6a8 j_mayer
    RETURN();
2803 0487d6a8 j_mayer
}
2804 0487d6a8 j_mayer
2805 0487d6a8 j_mayer
void OPPROTO op_evrlw (void)
2806 0487d6a8 j_mayer
{
2807 0487d6a8 j_mayer
    do_evrlw();
2808 0487d6a8 j_mayer
    RETURN();
2809 0487d6a8 j_mayer
}
2810 0487d6a8 j_mayer
2811 0487d6a8 j_mayer
void OPPROTO op_evmergelo (void)
2812 0487d6a8 j_mayer
{
2813 0487d6a8 j_mayer
    T0_64 = (T0_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL);
2814 0487d6a8 j_mayer
    RETURN();
2815 0487d6a8 j_mayer
}
2816 0487d6a8 j_mayer
2817 0487d6a8 j_mayer
void OPPROTO op_evmergehi (void)
2818 0487d6a8 j_mayer
{
2819 0487d6a8 j_mayer
    T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 >> 32);
2820 0487d6a8 j_mayer
    RETURN();
2821 0487d6a8 j_mayer
}
2822 0487d6a8 j_mayer
2823 0487d6a8 j_mayer
void OPPROTO op_evmergelohi (void)
2824 0487d6a8 j_mayer
{
2825 0487d6a8 j_mayer
    T0_64 = (T0_64 << 32) | (T1_64 >> 32);
2826 0487d6a8 j_mayer
    RETURN();
2827 0487d6a8 j_mayer
}
2828 0487d6a8 j_mayer
2829 0487d6a8 j_mayer
void OPPROTO op_evmergehilo (void)
2830 0487d6a8 j_mayer
{
2831 0487d6a8 j_mayer
    T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 & 0x00000000FFFFFFFFULL);
2832 0487d6a8 j_mayer
    RETURN();
2833 0487d6a8 j_mayer
}
2834 0487d6a8 j_mayer
2835 0487d6a8 j_mayer
void OPPROTO op_evcmpgts (void)
2836 0487d6a8 j_mayer
{
2837 0487d6a8 j_mayer
    do_evcmpgts();
2838 0487d6a8 j_mayer
    RETURN();
2839 0487d6a8 j_mayer
}
2840 0487d6a8 j_mayer
2841 0487d6a8 j_mayer
void OPPROTO op_evcmpgtu (void)
2842 0487d6a8 j_mayer
{
2843 0487d6a8 j_mayer
    do_evcmpgtu();
2844 0487d6a8 j_mayer
    RETURN();
2845 0487d6a8 j_mayer
}
2846 0487d6a8 j_mayer
2847 0487d6a8 j_mayer
void OPPROTO op_evcmplts (void)
2848 0487d6a8 j_mayer
{
2849 0487d6a8 j_mayer
    do_evcmplts();
2850 0487d6a8 j_mayer
    RETURN();
2851 0487d6a8 j_mayer
}
2852 0487d6a8 j_mayer
2853 0487d6a8 j_mayer
void OPPROTO op_evcmpltu (void)
2854 0487d6a8 j_mayer
{
2855 0487d6a8 j_mayer
    do_evcmpltu();
2856 0487d6a8 j_mayer
    RETURN();
2857 0487d6a8 j_mayer
}
2858 0487d6a8 j_mayer
2859 0487d6a8 j_mayer
void OPPROTO op_evcmpeq (void)
2860 0487d6a8 j_mayer
{
2861 0487d6a8 j_mayer
    do_evcmpeq();
2862 0487d6a8 j_mayer
    RETURN();
2863 0487d6a8 j_mayer
}
2864 0487d6a8 j_mayer
2865 0487d6a8 j_mayer
void OPPROTO op_evfssub (void)
2866 0487d6a8 j_mayer
{
2867 0487d6a8 j_mayer
    do_evfssub();
2868 0487d6a8 j_mayer
    RETURN();
2869 0487d6a8 j_mayer
}
2870 0487d6a8 j_mayer
2871 0487d6a8 j_mayer
void OPPROTO op_evfsadd (void)
2872 0487d6a8 j_mayer
{
2873 0487d6a8 j_mayer
    do_evfsadd();
2874 0487d6a8 j_mayer
    RETURN();
2875 0487d6a8 j_mayer
}
2876 0487d6a8 j_mayer
2877 0487d6a8 j_mayer
void OPPROTO op_evfsnabs (void)
2878 0487d6a8 j_mayer
{
2879 0487d6a8 j_mayer
    do_evfsnabs();
2880 0487d6a8 j_mayer
    RETURN();
2881 0487d6a8 j_mayer
}
2882 0487d6a8 j_mayer
2883 0487d6a8 j_mayer
void OPPROTO op_evfsabs (void)
2884 0487d6a8 j_mayer
{
2885 0487d6a8 j_mayer
    do_evfsabs();
2886 0487d6a8 j_mayer
    RETURN();
2887 0487d6a8 j_mayer
}
2888 0487d6a8 j_mayer
2889 0487d6a8 j_mayer
void OPPROTO op_evfsneg (void)
2890 0487d6a8 j_mayer
{
2891 0487d6a8 j_mayer
    do_evfsneg();
2892 0487d6a8 j_mayer
    RETURN();
2893 0487d6a8 j_mayer
}
2894 0487d6a8 j_mayer
2895 0487d6a8 j_mayer
void OPPROTO op_evfsdiv (void)
2896 0487d6a8 j_mayer
{
2897 0487d6a8 j_mayer
    do_evfsdiv();
2898 0487d6a8 j_mayer
    RETURN();
2899 0487d6a8 j_mayer
}
2900 0487d6a8 j_mayer
2901 0487d6a8 j_mayer
void OPPROTO op_evfsmul (void)
2902 0487d6a8 j_mayer
{
2903 0487d6a8 j_mayer
    do_evfsmul();
2904 0487d6a8 j_mayer
    RETURN();
2905 0487d6a8 j_mayer
}
2906 0487d6a8 j_mayer
2907 0487d6a8 j_mayer
void OPPROTO op_evfscmplt (void)
2908 0487d6a8 j_mayer
{
2909 0487d6a8 j_mayer
    do_evfscmplt();
2910 0487d6a8 j_mayer
    RETURN();
2911 0487d6a8 j_mayer
}
2912 0487d6a8 j_mayer
2913 0487d6a8 j_mayer
void OPPROTO op_evfscmpgt (void)
2914 0487d6a8 j_mayer
{
2915 0487d6a8 j_mayer
    do_evfscmpgt();
2916 0487d6a8 j_mayer
    RETURN();
2917 0487d6a8 j_mayer
}
2918 0487d6a8 j_mayer
2919 0487d6a8 j_mayer
void OPPROTO op_evfscmpeq (void)
2920 0487d6a8 j_mayer
{
2921 0487d6a8 j_mayer
    do_evfscmpeq();
2922 0487d6a8 j_mayer
    RETURN();
2923 0487d6a8 j_mayer
}
2924 0487d6a8 j_mayer
2925 0487d6a8 j_mayer
void OPPROTO op_evfscfsi (void)
2926 0487d6a8 j_mayer
{
2927 0487d6a8 j_mayer
    do_evfscfsi();
2928 0487d6a8 j_mayer
    RETURN();
2929 0487d6a8 j_mayer
}
2930 0487d6a8 j_mayer
2931 0487d6a8 j_mayer
void OPPROTO op_evfscfui (void)
2932 0487d6a8 j_mayer
{
2933 0487d6a8 j_mayer
    do_evfscfui();
2934 0487d6a8 j_mayer
    RETURN();
2935 0487d6a8 j_mayer
}
2936 0487d6a8 j_mayer
2937 0487d6a8 j_mayer
void OPPROTO op_evfscfsf (void)
2938 0487d6a8 j_mayer
{
2939 0487d6a8 j_mayer
    do_evfscfsf();
2940 0487d6a8 j_mayer
    RETURN();
2941 0487d6a8 j_mayer
}
2942 0487d6a8 j_mayer
2943 0487d6a8 j_mayer
void OPPROTO op_evfscfuf (void)
2944 0487d6a8 j_mayer
{
2945 0487d6a8 j_mayer
    do_evfscfuf();
2946 0487d6a8 j_mayer
    RETURN();
2947 0487d6a8 j_mayer
}
2948 0487d6a8 j_mayer
2949 0487d6a8 j_mayer
void OPPROTO op_evfsctsi (void)
2950 0487d6a8 j_mayer
{
2951 0487d6a8 j_mayer
    do_evfsctsi();
2952 0487d6a8 j_mayer
    RETURN();
2953 0487d6a8 j_mayer
}
2954 0487d6a8 j_mayer
2955 0487d6a8 j_mayer
void OPPROTO op_evfsctui (void)
2956 0487d6a8 j_mayer
{
2957 0487d6a8 j_mayer
    do_evfsctui();
2958 0487d6a8 j_mayer
    RETURN();
2959 0487d6a8 j_mayer
}
2960 0487d6a8 j_mayer
2961 0487d6a8 j_mayer
void OPPROTO op_evfsctsf (void)
2962 0487d6a8 j_mayer
{
2963 0487d6a8 j_mayer
    do_evfsctsf();
2964 0487d6a8 j_mayer
    RETURN();
2965 0487d6a8 j_mayer
}
2966 0487d6a8 j_mayer
2967 0487d6a8 j_mayer
void OPPROTO op_evfsctuf (void)
2968 0487d6a8 j_mayer
{
2969 0487d6a8 j_mayer
    do_evfsctuf();
2970 0487d6a8 j_mayer
    RETURN();
2971 0487d6a8 j_mayer
}
2972 0487d6a8 j_mayer
2973 0487d6a8 j_mayer
void OPPROTO op_evfsctuiz (void)
2974 0487d6a8 j_mayer
{
2975 0487d6a8 j_mayer
    do_evfsctuiz();
2976 0487d6a8 j_mayer
    RETURN();
2977 0487d6a8 j_mayer
}
2978 0487d6a8 j_mayer
2979 0487d6a8 j_mayer
void OPPROTO op_evfsctsiz (void)
2980 0487d6a8 j_mayer
{
2981 0487d6a8 j_mayer
    do_evfsctsiz();
2982 0487d6a8 j_mayer
    RETURN();
2983 0487d6a8 j_mayer
}
2984 0487d6a8 j_mayer
2985 0487d6a8 j_mayer
void OPPROTO op_evfststlt (void)
2986 0487d6a8 j_mayer
{
2987 0487d6a8 j_mayer
    do_evfststlt();
2988 0487d6a8 j_mayer
    RETURN();
2989 0487d6a8 j_mayer
}
2990 0487d6a8 j_mayer
2991 0487d6a8 j_mayer
void OPPROTO op_evfststgt (void)
2992 0487d6a8 j_mayer
{
2993 0487d6a8 j_mayer
    do_evfststgt();
2994 0487d6a8 j_mayer
    RETURN();
2995 0487d6a8 j_mayer
}
2996 0487d6a8 j_mayer
2997 0487d6a8 j_mayer
void OPPROTO op_evfststeq (void)
2998 0487d6a8 j_mayer
{
2999 0487d6a8 j_mayer
    do_evfststeq();
3000 0487d6a8 j_mayer
    RETURN();
3001 0487d6a8 j_mayer
}
3002 0487d6a8 j_mayer
3003 0487d6a8 j_mayer
void OPPROTO op_efssub (void)
3004 0487d6a8 j_mayer
{
3005 0487d6a8 j_mayer
    T0_64 = _do_efssub(T0_64, T1_64);
3006 0487d6a8 j_mayer
    RETURN();
3007 0487d6a8 j_mayer
}
3008 0487d6a8 j_mayer
3009 0487d6a8 j_mayer
void OPPROTO op_efsadd (void)
3010 0487d6a8 j_mayer
{
3011 0487d6a8 j_mayer
    T0_64 = _do_efsadd(T0_64, T1_64);
3012 0487d6a8 j_mayer
    RETURN();
3013 0487d6a8 j_mayer
}
3014 0487d6a8 j_mayer
3015 0487d6a8 j_mayer
void OPPROTO op_efsnabs (void)
3016 0487d6a8 j_mayer
{
3017 0487d6a8 j_mayer
    T0_64 = _do_efsnabs(T0_64);
3018 0487d6a8 j_mayer
    RETURN();
3019 0487d6a8 j_mayer
}
3020 0487d6a8 j_mayer
3021 0487d6a8 j_mayer
void OPPROTO op_efsabs (void)
3022 0487d6a8 j_mayer
{
3023 0487d6a8 j_mayer
    T0_64 = _do_efsabs(T0_64);
3024 0487d6a8 j_mayer
    RETURN();
3025 0487d6a8 j_mayer
}
3026 0487d6a8 j_mayer
3027 0487d6a8 j_mayer
void OPPROTO op_efsneg (void)
3028 0487d6a8 j_mayer
{
3029 0487d6a8 j_mayer
    T0_64 = _do_efsneg(T0_64);
3030 0487d6a8 j_mayer
    RETURN();
3031 0487d6a8 j_mayer
}
3032 0487d6a8 j_mayer
3033 0487d6a8 j_mayer
void OPPROTO op_efsdiv (void)
3034 0487d6a8 j_mayer
{
3035 0487d6a8 j_mayer
    T0_64 = _do_efsdiv(T0_64, T1_64);
3036 0487d6a8 j_mayer
    RETURN();
3037 0487d6a8 j_mayer
}
3038 0487d6a8 j_mayer
3039 0487d6a8 j_mayer
void OPPROTO op_efsmul (void)
3040 0487d6a8 j_mayer
{
3041 0487d6a8 j_mayer
    T0_64 = _do_efsmul(T0_64, T1_64);
3042 0487d6a8 j_mayer
    RETURN();
3043 0487d6a8 j_mayer
}
3044 0487d6a8 j_mayer
3045 0487d6a8 j_mayer
void OPPROTO op_efscmplt (void)
3046 0487d6a8 j_mayer
{
3047 0487d6a8 j_mayer
    do_efscmplt();
3048 0487d6a8 j_mayer
    RETURN();
3049 0487d6a8 j_mayer
}
3050 0487d6a8 j_mayer
3051 0487d6a8 j_mayer
void OPPROTO op_efscmpgt (void)
3052 0487d6a8 j_mayer
{
3053 0487d6a8 j_mayer
    do_efscmpgt();
3054 0487d6a8 j_mayer
    RETURN();
3055 0487d6a8 j_mayer
}
3056 0487d6a8 j_mayer
3057 0487d6a8 j_mayer
void OPPROTO op_efscfd (void)
3058 0487d6a8 j_mayer
{
3059 0487d6a8 j_mayer
    do_efscfd();
3060 0487d6a8 j_mayer
    RETURN();
3061 0487d6a8 j_mayer
}
3062 0487d6a8 j_mayer
3063 0487d6a8 j_mayer
void OPPROTO op_efscmpeq (void)
3064 0487d6a8 j_mayer
{
3065 0487d6a8 j_mayer
    do_efscmpeq();
3066 0487d6a8 j_mayer
    RETURN();
3067 0487d6a8 j_mayer
}
3068 0487d6a8 j_mayer
3069 0487d6a8 j_mayer
void OPPROTO op_efscfsi (void)
3070 0487d6a8 j_mayer
{
3071 0487d6a8 j_mayer
    do_efscfsi();
3072 0487d6a8 j_mayer
    RETURN();
3073 0487d6a8 j_mayer
}
3074 0487d6a8 j_mayer
3075 0487d6a8 j_mayer
void OPPROTO op_efscfui (void)
3076 0487d6a8 j_mayer
{
3077 0487d6a8 j_mayer
    do_efscfui();
3078 0487d6a8 j_mayer
    RETURN();
3079 0487d6a8 j_mayer
}
3080 0487d6a8 j_mayer
3081 0487d6a8 j_mayer
void OPPROTO op_efscfsf (void)
3082 0487d6a8 j_mayer
{
3083 0487d6a8 j_mayer
    do_efscfsf();
3084 0487d6a8 j_mayer
    RETURN();
3085 0487d6a8 j_mayer
}
3086 0487d6a8 j_mayer
3087 0487d6a8 j_mayer
void OPPROTO op_efscfuf (void)
3088 0487d6a8 j_mayer
{
3089 0487d6a8 j_mayer
    do_efscfuf();
3090 0487d6a8 j_mayer
    RETURN();
3091 0487d6a8 j_mayer
}
3092 0487d6a8 j_mayer
3093 0487d6a8 j_mayer
void OPPROTO op_efsctsi (void)
3094 0487d6a8 j_mayer
{
3095 0487d6a8 j_mayer
    do_efsctsi();
3096 0487d6a8 j_mayer
    RETURN();
3097 0487d6a8 j_mayer
}
3098 0487d6a8 j_mayer
3099 0487d6a8 j_mayer
void OPPROTO op_efsctui (void)
3100 0487d6a8 j_mayer
{
3101 0487d6a8 j_mayer
    do_efsctui();
3102 0487d6a8 j_mayer
    RETURN();
3103 0487d6a8 j_mayer
}
3104 0487d6a8 j_mayer
3105 0487d6a8 j_mayer
void OPPROTO op_efsctsf (void)
3106 0487d6a8 j_mayer
{
3107 0487d6a8 j_mayer
    do_efsctsf();
3108 0487d6a8 j_mayer
    RETURN();
3109 0487d6a8 j_mayer
}
3110 0487d6a8 j_mayer
3111 0487d6a8 j_mayer
void OPPROTO op_efsctuf (void)
3112 0487d6a8 j_mayer
{
3113 0487d6a8 j_mayer
    do_efsctuf();
3114 0487d6a8 j_mayer
    RETURN();
3115 0487d6a8 j_mayer
}
3116 0487d6a8 j_mayer
3117 0487d6a8 j_mayer
void OPPROTO op_efsctsiz (void)
3118 0487d6a8 j_mayer
{
3119 0487d6a8 j_mayer
    do_efsctsiz();
3120 0487d6a8 j_mayer
    RETURN();
3121 0487d6a8 j_mayer
}
3122 0487d6a8 j_mayer
3123 0487d6a8 j_mayer
void OPPROTO op_efsctuiz (void)
3124 0487d6a8 j_mayer
{
3125 0487d6a8 j_mayer
    do_efsctuiz();
3126 0487d6a8 j_mayer
    RETURN();
3127 0487d6a8 j_mayer
}
3128 0487d6a8 j_mayer
3129 0487d6a8 j_mayer
void OPPROTO op_efststlt (void)
3130 0487d6a8 j_mayer
{
3131 0487d6a8 j_mayer
    T0 = _do_efststlt(T0_64, T1_64);
3132 0487d6a8 j_mayer
    RETURN();
3133 0487d6a8 j_mayer
}
3134 0487d6a8 j_mayer
3135 0487d6a8 j_mayer
void OPPROTO op_efststgt (void)
3136 0487d6a8 j_mayer
{
3137 0487d6a8 j_mayer
    T0 = _do_efststgt(T0_64, T1_64);
3138 0487d6a8 j_mayer
    RETURN();
3139 0487d6a8 j_mayer
}
3140 0487d6a8 j_mayer
3141 0487d6a8 j_mayer
void OPPROTO op_efststeq (void)
3142 0487d6a8 j_mayer
{
3143 0487d6a8 j_mayer
    T0 = _do_efststeq(T0_64, T1_64);
3144 0487d6a8 j_mayer
    RETURN();
3145 0487d6a8 j_mayer
}
3146 0487d6a8 j_mayer
3147 0487d6a8 j_mayer
void OPPROTO op_efdsub (void)
3148 0487d6a8 j_mayer
{
3149 0ca9d380 aurel32
    CPU_DoubleU u1, u2;
3150 0ca9d380 aurel32
    u1.ll = T0_64;
3151 0ca9d380 aurel32
    u2.ll = T1_64;
3152 0ca9d380 aurel32
    u1.d = float64_sub(u1.d, u2.d, &env->spe_status);
3153 0ca9d380 aurel32
    T0_64 = u1.ll;
3154 0487d6a8 j_mayer
    RETURN();
3155 0487d6a8 j_mayer
}
3156 0487d6a8 j_mayer
3157 0487d6a8 j_mayer
void OPPROTO op_efdadd (void)
3158 0487d6a8 j_mayer
{
3159 0ca9d380 aurel32
    CPU_DoubleU u1, u2;
3160 0ca9d380 aurel32
    u1.ll = T0_64;
3161 0ca9d380 aurel32
    u2.ll = T1_64;
3162 0ca9d380 aurel32
    u1.d = float64_add(u1.d, u2.d, &env->spe_status);
3163 0ca9d380 aurel32
    T0_64 = u1.ll;
3164 0487d6a8 j_mayer
    RETURN();
3165 0487d6a8 j_mayer
}
3166 0487d6a8 j_mayer
3167 0487d6a8 j_mayer
void OPPROTO op_efdcfsid (void)
3168 0487d6a8 j_mayer
{
3169 0487d6a8 j_mayer
    do_efdcfsi();
3170 0487d6a8 j_mayer
    RETURN();
3171 0487d6a8 j_mayer
}
3172 0487d6a8 j_mayer
3173 0487d6a8 j_mayer
void OPPROTO op_efdcfuid (void)
3174 0487d6a8 j_mayer
{
3175 0487d6a8 j_mayer
    do_efdcfui();
3176 0487d6a8 j_mayer
    RETURN();
3177 0487d6a8 j_mayer
}
3178 0487d6a8 j_mayer
3179 0487d6a8 j_mayer
void OPPROTO op_efdnabs (void)
3180 0487d6a8 j_mayer
{
3181 0487d6a8 j_mayer
    T0_64 |= 0x8000000000000000ULL;
3182 0487d6a8 j_mayer
    RETURN();
3183 0487d6a8 j_mayer
}
3184 0487d6a8 j_mayer
3185 0487d6a8 j_mayer
void OPPROTO op_efdabs (void)
3186 0487d6a8 j_mayer
{
3187 0487d6a8 j_mayer
    T0_64 &= ~0x8000000000000000ULL;
3188 0487d6a8 j_mayer
    RETURN();
3189 0487d6a8 j_mayer
}
3190 0487d6a8 j_mayer
3191 0487d6a8 j_mayer
void OPPROTO op_efdneg (void)
3192 0487d6a8 j_mayer
{
3193 0487d6a8 j_mayer
    T0_64 ^= 0x8000000000000000ULL;
3194 0487d6a8 j_mayer
    RETURN();
3195 0487d6a8 j_mayer
}
3196 0487d6a8 j_mayer
3197 0487d6a8 j_mayer
void OPPROTO op_efddiv (void)
3198 0487d6a8 j_mayer
{
3199 0ca9d380 aurel32
    CPU_DoubleU u1, u2;
3200 0ca9d380 aurel32
    u1.ll = T0_64;
3201 0ca9d380 aurel32
    u2.ll = T1_64;
3202 0ca9d380 aurel32
    u1.d = float64_div(u1.d, u2.d, &env->spe_status);
3203 0ca9d380 aurel32
    T0_64 = u1.ll;
3204 0487d6a8 j_mayer
    RETURN();
3205 0487d6a8 j_mayer
}
3206 0487d6a8 j_mayer
3207 0487d6a8 j_mayer
void OPPROTO op_efdmul (void)
3208 0487d6a8 j_mayer
{
3209 0ca9d380 aurel32
    CPU_DoubleU u1, u2;
3210 0ca9d380 aurel32
    u1.ll = T0_64;
3211 0ca9d380 aurel32
    u2.ll = T1_64;
3212 0ca9d380 aurel32
    u1.d = float64_mul(u1.d, u2.d, &env->spe_status);
3213 0ca9d380 aurel32
    T0_64 = u1.ll;
3214 0487d6a8 j_mayer
    RETURN();
3215 0487d6a8 j_mayer
}
3216 0487d6a8 j_mayer
3217 0487d6a8 j_mayer
void OPPROTO op_efdctsidz (void)
3218 0487d6a8 j_mayer
{
3219 0487d6a8 j_mayer
    do_efdctsiz();
3220 0487d6a8 j_mayer
    RETURN();
3221 0487d6a8 j_mayer
}
3222 0487d6a8 j_mayer
3223 0487d6a8 j_mayer
void OPPROTO op_efdctuidz (void)
3224 0487d6a8 j_mayer
{
3225 0487d6a8 j_mayer
    do_efdctuiz();
3226 0487d6a8 j_mayer
    RETURN();
3227 0487d6a8 j_mayer
}
3228 0487d6a8 j_mayer
3229 0487d6a8 j_mayer
void OPPROTO op_efdcmplt (void)
3230 0487d6a8 j_mayer
{
3231 0487d6a8 j_mayer
    do_efdcmplt();
3232 0487d6a8 j_mayer
    RETURN();
3233 0487d6a8 j_mayer
}
3234 0487d6a8 j_mayer
3235 0487d6a8 j_mayer
void OPPROTO op_efdcmpgt (void)
3236 0487d6a8 j_mayer
{
3237 0487d6a8 j_mayer
    do_efdcmpgt();
3238 0487d6a8 j_mayer
    RETURN();
3239 0487d6a8 j_mayer
}
3240 0487d6a8 j_mayer
3241 0487d6a8 j_mayer
void OPPROTO op_efdcfs (void)
3242 0487d6a8 j_mayer
{
3243 0487d6a8 j_mayer
    do_efdcfs();
3244 0487d6a8 j_mayer
    RETURN();
3245 0487d6a8 j_mayer
}
3246 0487d6a8 j_mayer
3247 0487d6a8 j_mayer
void OPPROTO op_efdcmpeq (void)
3248 0487d6a8 j_mayer
{
3249 0487d6a8 j_mayer
    do_efdcmpeq();
3250 0487d6a8 j_mayer
    RETURN();
3251 0487d6a8 j_mayer
}
3252 0487d6a8 j_mayer
3253 0487d6a8 j_mayer
void OPPROTO op_efdcfsi (void)
3254 0487d6a8 j_mayer
{
3255 0487d6a8 j_mayer
    do_efdcfsi();
3256 0487d6a8 j_mayer
    RETURN();
3257 0487d6a8 j_mayer
}
3258 0487d6a8 j_mayer
3259 0487d6a8 j_mayer
void OPPROTO op_efdcfui (void)
3260 0487d6a8 j_mayer
{
3261 0487d6a8 j_mayer
    do_efdcfui();
3262 0487d6a8 j_mayer
    RETURN();
3263 0487d6a8 j_mayer
}
3264 0487d6a8 j_mayer
3265 0487d6a8 j_mayer
void OPPROTO op_efdcfsf (void)
3266 0487d6a8 j_mayer
{
3267 0487d6a8 j_mayer
    do_efdcfsf();
3268 0487d6a8 j_mayer
    RETURN();
3269 0487d6a8 j_mayer
}
3270 0487d6a8 j_mayer
3271 0487d6a8 j_mayer
void OPPROTO op_efdcfuf (void)
3272 0487d6a8 j_mayer
{
3273 0487d6a8 j_mayer
    do_efdcfuf();
3274 0487d6a8 j_mayer
    RETURN();
3275 0487d6a8 j_mayer
}
3276 0487d6a8 j_mayer
3277 0487d6a8 j_mayer
void OPPROTO op_efdctsi (void)
3278 0487d6a8 j_mayer
{
3279 0487d6a8 j_mayer
    do_efdctsi();
3280 0487d6a8 j_mayer
    RETURN();
3281 0487d6a8 j_mayer
}
3282 0487d6a8 j_mayer
3283 0487d6a8 j_mayer
void OPPROTO op_efdctui (void)
3284 0487d6a8 j_mayer
{
3285 0487d6a8 j_mayer
    do_efdctui();
3286 0487d6a8 j_mayer
    RETURN();
3287 0487d6a8 j_mayer
}
3288 0487d6a8 j_mayer
3289 0487d6a8 j_mayer
void OPPROTO op_efdctsf (void)
3290 0487d6a8 j_mayer
{
3291 0487d6a8 j_mayer
    do_efdctsf();
3292 0487d6a8 j_mayer
    RETURN();
3293 0487d6a8 j_mayer
}
3294 0487d6a8 j_mayer
3295 0487d6a8 j_mayer
void OPPROTO op_efdctuf (void)
3296 0487d6a8 j_mayer
{
3297 0487d6a8 j_mayer
    do_efdctuf();
3298 0487d6a8 j_mayer
    RETURN();
3299 0487d6a8 j_mayer
}
3300 0487d6a8 j_mayer
3301 0487d6a8 j_mayer
void OPPROTO op_efdctuiz (void)
3302 0487d6a8 j_mayer
{
3303 0487d6a8 j_mayer
    do_efdctuiz();
3304 0487d6a8 j_mayer
    RETURN();
3305 0487d6a8 j_mayer
}
3306 0487d6a8 j_mayer
3307 0487d6a8 j_mayer
void OPPROTO op_efdctsiz (void)
3308 0487d6a8 j_mayer
{
3309 0487d6a8 j_mayer
    do_efdctsiz();
3310 0487d6a8 j_mayer
    RETURN();
3311 0487d6a8 j_mayer
}
3312 0487d6a8 j_mayer
3313 0487d6a8 j_mayer
void OPPROTO op_efdtstlt (void)
3314 0487d6a8 j_mayer
{
3315 0487d6a8 j_mayer
    T0 = _do_efdtstlt(T0_64, T1_64);
3316 0487d6a8 j_mayer
    RETURN();
3317 0487d6a8 j_mayer
}
3318 0487d6a8 j_mayer
3319 0487d6a8 j_mayer
void OPPROTO op_efdtstgt (void)
3320 0487d6a8 j_mayer
{
3321 0487d6a8 j_mayer
    T0 = _do_efdtstgt(T0_64, T1_64);
3322 0487d6a8 j_mayer
    RETURN();
3323 0487d6a8 j_mayer
}
3324 0487d6a8 j_mayer
3325 0487d6a8 j_mayer
void OPPROTO op_efdtsteq (void)
3326 0487d6a8 j_mayer
{
3327 0487d6a8 j_mayer
    T0 = _do_efdtsteq(T0_64, T1_64);
3328 0487d6a8 j_mayer
    RETURN();
3329 0487d6a8 j_mayer
}