Revision 0411a972 target-ppc/op.c
b/target-ppc/op.c | ||
---|---|---|
22 | 22 |
|
23 | 23 |
#include "config.h" |
24 | 24 |
#include "exec.h" |
25 |
#include "helper_regs.h" |
|
25 | 26 |
#include "op_helper.h" |
26 | 27 |
|
27 | 28 |
#define REG 0 |
... | ... | |
284 | 285 |
|
285 | 286 |
void OPPROTO op_load_xer (void) |
286 | 287 |
{ |
287 |
do_load_xer();
|
|
288 |
T0 = hreg_load_xer(env);
|
|
288 | 289 |
RETURN(); |
289 | 290 |
} |
290 | 291 |
|
291 | 292 |
void OPPROTO op_store_xer (void) |
292 | 293 |
{ |
293 |
do_store_xer();
|
|
294 |
hreg_store_xer(env, T0);
|
|
294 | 295 |
RETURN(); |
295 | 296 |
} |
296 | 297 |
|
... | ... | |
358 | 359 |
|
359 | 360 |
void OPPROTO op_load_msr (void) |
360 | 361 |
{ |
361 |
T0 = do_load_msr(env);
|
|
362 |
T0 = env->msr;
|
|
362 | 363 |
RETURN(); |
363 | 364 |
} |
364 | 365 |
|
365 | 366 |
void OPPROTO op_store_msr (void) |
366 | 367 |
{ |
367 |
if (do_store_msr(env, T0)) { |
|
368 |
env->halted = 1; |
|
369 |
do_raise_exception(EXCP_HLT); |
|
370 |
} |
|
368 |
do_store_msr(); |
|
371 | 369 |
RETURN(); |
372 | 370 |
} |
373 | 371 |
|
374 |
void OPPROTO op_update_riee (void) |
|
372 |
#if defined (TARGET_PPC64) |
|
373 |
void OPPROTO op_store_msr_32 (void) |
|
375 | 374 |
{ |
376 |
msr_ri = (T0 >> MSR_RI) & 1;
|
|
377 |
msr_ee = (T0 >> MSR_EE) & 1;
|
|
375 |
T0 = (env->msr & ~0xFFFFFFFFULL) | (T0 & 0xFFFFFFFF);
|
|
376 |
do_store_msr();
|
|
378 | 377 |
RETURN(); |
379 | 378 |
} |
379 |
#endif |
|
380 | 380 |
|
381 |
#if defined (TARGET_PPC64) |
|
382 |
void OPPROTO op_store_msr_32 (void) |
|
381 |
void OPPROTO op_update_riee (void) |
|
383 | 382 |
{ |
384 |
if (ppc_store_msr_32(env, T0)) { |
|
385 |
env->halted = 1; |
|
386 |
do_raise_exception(EXCP_HLT); |
|
387 |
} |
|
383 |
/* We don't call do_store_msr here as we won't trigger |
|
384 |
* any special case nor change hflags |
|
385 |
*/ |
|
386 |
T0 &= (1 << MSR_RI) | (1 << MSR_EE); |
|
387 |
env->msr &= ~(1 << MSR_RI) | (1 << MSR_EE); |
|
388 |
env->msr |= T0; |
|
388 | 389 |
RETURN(); |
389 | 390 |
} |
390 | 391 |
#endif |
391 |
#endif |
|
392 | 392 |
|
393 | 393 |
/* SPR */ |
394 | 394 |
void OPPROTO op_load_spr (void) |
... | ... | |
2517 | 2517 |
|
2518 | 2518 |
void OPPROTO op_wrte (void) |
2519 | 2519 |
{ |
2520 |
msr_ee = T0 >> 16; |
|
2520 |
/* We don't call do_store_msr here as we won't trigger |
|
2521 |
* any special case nor change hflags |
|
2522 |
*/ |
|
2523 |
T0 &= 1 << MSR_EE; |
|
2524 |
env->msr &= ~(1 << MSR_EE); |
|
2525 |
env->msr |= T0; |
|
2521 | 2526 |
RETURN(); |
2522 | 2527 |
} |
2523 | 2528 |
|
Also available in: Unified diff