aboutsummaryrefslogtreecommitdiff
path: root/target-ppc/op.c
diff options
context:
space:
mode:
authorj_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162>2007-09-30 13:03:23 +0000
committerj_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162>2007-09-30 13:03:23 +0000
commitbe147d08790d4d80bfcf2c209031eede52b7dd62 (patch)
treee21320c4e76c6d1d3b8c5fe2488ed5a6c22fa92e /target-ppc/op.c
parentb0566f4f4584ca1c968daf64007df58cb5a21038 (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.c23
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)