Commit c80f84e3c037ebaebcec48f59c65be02a6d76a89

Authored by j_mayer
1 parent d7e4b87e

Implement Process Priority Register as defined in the PowerPC 2.04 spec.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3282 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/op.c
... ... @@ -295,6 +295,14 @@ void OPPROTO op_store_xer (void)
295 295 RETURN();
296 296 }
297 297  
  298 +#if defined(TARGET_PPC64)
  299 +void OPPROTO op_store_pri (void)
  300 +{
  301 + do_store_pri(PARAM1);
  302 + RETURN();
  303 +}
  304 +#endif
  305 +
298 306 #if !defined(CONFIG_USER_ONLY)
299 307 /* Segment registers load and store */
300 308 void OPPROTO op_load_sr (void)
... ...
target-ppc/op_helper.c
... ... @@ -112,6 +112,14 @@ void do_store_xer (void)
112 112 xer_bc = (T0 >> XER_BC) & 0x7F;
113 113 }
114 114  
  115 +#if defined(TARGET_PPC64)
  116 +void do_store_pri (int prio)
  117 +{
  118 + env->spr[SPR_PPR] &= ~0x001C000000000000ULL;
  119 + env->spr[SPR_PPR] |= ((uint64_t)prio & 0x7) << 50;
  120 +}
  121 +#endif
  122 +
115 123 void do_load_fpscr (void)
116 124 {
117 125 /* The 32 MSB of the target fpr are undefined.
... ...
target-ppc/op_helper.h
... ... @@ -57,6 +57,9 @@ void do_load_cr (void);
57 57 void do_store_cr (uint32_t mask);
58 58 void do_load_xer (void);
59 59 void do_store_xer (void);
  60 +#if defined(TARGET_PPC64)
  61 +void do_store_pri (int prio);
  62 +#endif
60 63 void do_load_fpscr (void);
61 64 void do_store_fpscr (uint32_t mask);
62 65 target_ulong ppc_load_dump_spr (int sprn);
... ...
target-ppc/translate.c
... ... @@ -1124,6 +1124,26 @@ GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER)
1124 1124 } else if (unlikely(Rc(ctx->opcode) != 0)) {
1125 1125 gen_op_load_gpr_T0(rs);
1126 1126 gen_set_Rc0(ctx);
  1127 +#if defined(TARGET_PPC64)
  1128 + } else {
  1129 + switch (rs) {
  1130 + case 1:
  1131 + /* Set process priority to low */
  1132 + gen_op_store_pri(2);
  1133 + break;
  1134 + case 6:
  1135 + /* Set process priority to medium-low */
  1136 + gen_op_store_pri(3);
  1137 + break;
  1138 + case 2:
  1139 + /* Set process priority to normal */
  1140 + gen_op_store_pri(4);
  1141 + break;
  1142 + default:
  1143 + /* nop */
  1144 + break;
  1145 + }
  1146 +#endif
1127 1147 }
1128 1148 }
1129 1149  
... ...