RETURN();
}
+#if defined(TARGET_PPC64)
+void OPPROTO op_store_pri (void)
+{
+ do_store_pri(PARAM1);
+ RETURN();
+}
+#endif
+
#if !defined(CONFIG_USER_ONLY)
/* Segment registers load and store */
void OPPROTO op_load_sr (void)
xer_bc = (T0 >> XER_BC) & 0x7F;
}
+#if defined(TARGET_PPC64)
+void do_store_pri (int prio)
+{
+ env->spr[SPR_PPR] &= ~0x001C000000000000ULL;
+ env->spr[SPR_PPR] |= ((uint64_t)prio & 0x7) << 50;
+}
+#endif
+
void do_load_fpscr (void)
{
/* The 32 MSB of the target fpr are undefined.
void do_store_cr (uint32_t mask);
void do_load_xer (void);
void do_store_xer (void);
+#if defined(TARGET_PPC64)
+void do_store_pri (int prio);
+#endif
void do_load_fpscr (void);
void do_store_fpscr (uint32_t mask);
target_ulong ppc_load_dump_spr (int sprn);
} else if (unlikely(Rc(ctx->opcode) != 0)) {
gen_op_load_gpr_T0(rs);
gen_set_Rc0(ctx);
+#if defined(TARGET_PPC64)
+ } else {
+ switch (rs) {
+ case 1:
+ /* Set process priority to low */
+ gen_op_store_pri(2);
+ break;
+ case 6:
+ /* Set process priority to medium-low */
+ gen_op_store_pri(3);
+ break;
+ case 2:
+ /* Set process priority to normal */
+ gen_op_store_pri(4);
+ break;
+ default:
+ /* nop */
+ break;
+ }
+#endif
}
}