Statistics
| Branch: | Revision:

root / target-ppc / op.c @ ed23fbd9

History | View | Annotate | Download (49.9 kB)

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