Statistics
| Branch: | Revision:

root / target-ppc / op.c @ 5fafdf24

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