Statistics
| Branch: | Revision:

root / target-ppc / op.c @ daf4f96e

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