diff options
author | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-09-30 13:03:23 +0000 |
---|---|---|
committer | j_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-09-30 13:03:23 +0000 |
commit | be147d08790d4d80bfcf2c209031eede52b7dd62 (patch) | |
tree | e21320c4e76c6d1d3b8c5fe2488ed5a6c22fa92e /target-ppc/op.c | |
parent | b0566f4f4584ca1c968daf64007df58cb5a21038 (diff) |
* Update OEA environment, following the PowerPC 2.04 specification:
- New mtmsr/mtmsrd form that just update RI and EE bits
- New hrfid, lq and stq instructions
- Add support for supervisor and hypervisor modes process priority update
- Code provision for hypervisor SPR accesses
* Actually implement the wait instruction
* Bugfixes (missing RETURN in micro-op / missing #ifdef)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3289 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc/op.c')
-rw-r--r-- | target-ppc/op.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/target-ppc/op.c b/target-ppc/op.c index fa8477ab9f..0694caf808 100644 --- a/target-ppc/op.c +++ b/target-ppc/op.c @@ -355,6 +355,13 @@ void OPPROTO op_store_msr (void) RETURN(); } +void OPPROTO op_update_riee (void) +{ + msr_ri = (T0 >> MSR_RI) & 1; + msr_ee = (T0 >> MSR_EE) & 1; + RETURN(); +} + #if defined (TARGET_PPC64) void OPPROTO op_store_msr_32 (void) { @@ -1913,6 +1920,12 @@ void OPPROTO op_check_reservation_64 (void) } #endif +void OPPROTO op_wait (void) +{ + env->halted = 1; + RETURN(); +} + /* Return from interrupt */ #if !defined(CONFIG_USER_ONLY) void OPPROTO op_rfi (void) @@ -1928,6 +1941,14 @@ void OPPROTO op_rfid (void) RETURN(); } #endif + +#if defined(TARGET_PPC64H) +void OPPROTO op_hrfid (void) +{ + do_hrfid(); + RETURN(); +} +#endif #endif /* Trap word */ @@ -2557,6 +2578,7 @@ void OPPROTO op_store_40x_pit (void) void OPPROTO op_store_40x_dbcr0 (void) { store_40x_dbcr0(env, T0); + RETURN(); } void OPPROTO op_store_40x_sler (void) @@ -2576,7 +2598,6 @@ void OPPROTO op_store_booke_tsr (void) store_booke_tsr(env, T0); RETURN(); } - #endif /* !defined(CONFIG_USER_ONLY) */ #if defined(TARGET_PPCEMB) |