Commit a42bd6ccdfefbadfc34d381c42d64a78f532df63
1 parent
363be49c
Fix rfi instruction: do not depend on current execution mode
but on the execution mode that will be effective after the return. Add rfci, rfdi and rfmci for BookE PowerPC. Extend mfdcr / mtdcr and implement mfdrcx / mtdcrx. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2544 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
196 additions
and
80 deletions
target-ppc/op.c
... | ... | @@ -1821,23 +1821,11 @@ void OPPROTO op_rfi (void) |
1821 | 1821 | } |
1822 | 1822 | |
1823 | 1823 | #if defined(TARGET_PPC64) |
1824 | -void OPPROTO op_rfi_32 (void) | |
1825 | -{ | |
1826 | - do_rfi_32(); | |
1827 | - RETURN(); | |
1828 | -} | |
1829 | - | |
1830 | 1824 | void OPPROTO op_rfid (void) |
1831 | 1825 | { |
1832 | 1826 | do_rfid(); |
1833 | 1827 | RETURN(); |
1834 | 1828 | } |
1835 | - | |
1836 | -void OPPROTO op_rfid_32 (void) | |
1837 | -{ | |
1838 | - do_rfid_32(); | |
1839 | - RETURN(); | |
1840 | -} | |
1841 | 1829 | #endif |
1842 | 1830 | #endif |
1843 | 1831 | |
... | ... | @@ -2309,28 +2297,46 @@ void OPPROTO op_405_check_satu (void) |
2309 | 2297 | } |
2310 | 2298 | |
2311 | 2299 | #if !defined(CONFIG_USER_ONLY) |
2312 | -void OPPROTO op_4xx_load_dcr (void) | |
2300 | +void OPPROTO op_load_dcr (void) | |
2313 | 2301 | { |
2314 | - do_4xx_load_dcr(PARAM1); | |
2302 | + do_load_dcr(); | |
2315 | 2303 | RETURN(); |
2316 | 2304 | } |
2317 | 2305 | |
2318 | -void OPPROTO op_4xx_store_dcr (void) | |
2306 | +void OPPROTO op_store_dcr (void) | |
2319 | 2307 | { |
2320 | - do_4xx_store_dcr(PARAM1); | |
2308 | + do_store_dcr(); | |
2321 | 2309 | RETURN(); |
2322 | 2310 | } |
2323 | 2311 | |
2324 | 2312 | /* Return from critical interrupt : |
2325 | 2313 | * same as rfi, except nip & MSR are loaded from SRR2/3 instead of SRR0/1 |
2326 | 2314 | */ |
2327 | -void OPPROTO op_4xx_rfci (void) | |
2315 | +void OPPROTO op_40x_rfci (void) | |
2316 | +{ | |
2317 | + do_40x_rfci(); | |
2318 | + RETURN(); | |
2319 | +} | |
2320 | + | |
2321 | +void OPPROTO op_rfci (void) | |
2322 | +{ | |
2323 | + do_rfci(); | |
2324 | + RETURN(); | |
2325 | +} | |
2326 | + | |
2327 | +void OPPROTO op_rfdi (void) | |
2328 | +{ | |
2329 | + do_rfdi(); | |
2330 | + RETURN(); | |
2331 | +} | |
2332 | + | |
2333 | +void OPPROTO op_rfmci (void) | |
2328 | 2334 | { |
2329 | - do_4xx_rfci(); | |
2335 | + do_rfmci(); | |
2330 | 2336 | RETURN(); |
2331 | 2337 | } |
2332 | 2338 | |
2333 | -void OPPROTO op_4xx_wrte (void) | |
2339 | +void OPPROTO op_wrte (void) | |
2334 | 2340 | { |
2335 | 2341 | msr_ee = T0 >> 16; |
2336 | 2342 | RETURN(); | ... | ... |
target-ppc/op_helper.c
... | ... | @@ -881,12 +881,17 @@ void do_fcmpo (void) |
881 | 881 | #if !defined (CONFIG_USER_ONLY) |
882 | 882 | void do_rfi (void) |
883 | 883 | { |
884 | - env->nip = (target_ulong)(env->spr[SPR_SRR0] & ~0x00000003); | |
885 | - T0 = (uint32_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL); | |
886 | 884 | #if defined(TARGET_PPC64) |
887 | - ppc_store_msr_32(env, T0); | |
885 | + if (env->spr[SPR_SRR1] & (1ULL << MSR_SF)) { | |
886 | + env->nip = (uint64_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
887 | + do_store_msr(env, (uint64_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL)); | |
888 | + } else { | |
889 | + env->nip = (uint32_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
890 | + ppc_store_msr_32(env, (uint32_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL)); | |
891 | + } | |
888 | 892 | #else |
889 | - do_store_msr(env, T0); | |
893 | + env->nip = (uint32_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
894 | + do_store_msr(env, (uint32_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL)); | |
890 | 895 | #endif |
891 | 896 | #if defined (DEBUG_OP) |
892 | 897 | dump_rfi(); |
... | ... | @@ -895,33 +900,15 @@ void do_rfi (void) |
895 | 900 | } |
896 | 901 | |
897 | 902 | #if defined(TARGET_PPC64) |
898 | -void do_rfi_32 (void) | |
899 | -{ | |
900 | - env->nip = (uint32_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
901 | - T0 = (uint32_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL); | |
902 | - ppc_store_msr_32(env, T0); | |
903 | -#if defined (DEBUG_OP) | |
904 | - dump_rfi(); | |
905 | -#endif | |
906 | - env->interrupt_request |= CPU_INTERRUPT_EXITTB; | |
907 | -} | |
908 | - | |
909 | 903 | void do_rfid (void) |
910 | 904 | { |
911 | - env->nip = (target_ulong)(env->spr[SPR_SRR0] & ~0x00000003); | |
912 | - T0 = (uint64_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL); | |
913 | - do_store_msr(env, T0); | |
914 | -#if defined (DEBUG_OP) | |
915 | - dump_rfi(); | |
916 | -#endif | |
917 | - env->interrupt_request |= CPU_INTERRUPT_EXITTB; | |
918 | -} | |
919 | - | |
920 | -void do_rfid_32 (void) | |
921 | -{ | |
922 | - env->nip = (uint32_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
923 | - T0 = (uint64_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL); | |
924 | - do_store_msr(env, T0); | |
905 | + if (env->spr[SPR_SRR1] & (1ULL << MSR_SF)) { | |
906 | + env->nip = (uint64_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
907 | + do_store_msr(env, (uint64_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL)); | |
908 | + } else { | |
909 | + env->nip = (uint32_t)(env->spr[SPR_SRR0] & ~0x00000003); | |
910 | + do_store_msr(env, (uint32_t)(env->spr[SPR_SRR1] & ~0xFFFF0000UL)); | |
911 | + } | |
925 | 912 | #if defined (DEBUG_OP) |
926 | 913 | dump_rfi(); |
927 | 914 | #endif |
... | ... | @@ -936,8 +923,9 @@ void do_tw (int flags) |
936 | 923 | ((int32_t)T0 > (int32_t)T1 && (flags & 0x08)) || |
937 | 924 | ((int32_t)T0 == (int32_t)T1 && (flags & 0x04)) || |
938 | 925 | ((uint32_t)T0 < (uint32_t)T1 && (flags & 0x02)) || |
939 | - ((uint32_t)T0 > (uint32_t)T1 && (flags & 0x01))))) | |
926 | + ((uint32_t)T0 > (uint32_t)T1 && (flags & 0x01))))) { | |
940 | 927 | do_raise_exception_err(EXCP_PROGRAM, EXCP_TRAP); |
928 | + } | |
941 | 929 | } |
942 | 930 | |
943 | 931 | #if defined(TARGET_PPC64) |
... | ... | @@ -1196,34 +1184,84 @@ void do_405_check_sat (void) |
1196 | 1184 | } |
1197 | 1185 | |
1198 | 1186 | #if !defined(CONFIG_USER_ONLY) |
1199 | -void do_4xx_rfci (void) | |
1187 | +void do_40x_rfci (void) | |
1200 | 1188 | { |
1201 | 1189 | env->nip = env->spr[SPR_40x_SRR2]; |
1202 | - T0 = env->spr[SPR_40x_SRR3] & ~0xFFFF0000; | |
1203 | - do_store_msr(env, T0); | |
1190 | + do_store_msr(env, env->spr[SPR_40x_SRR3] & ~0xFFFF0000); | |
1191 | +#if defined (DEBUG_OP) | |
1192 | + dump_rfi(); | |
1193 | +#endif | |
1194 | + env->interrupt_request = CPU_INTERRUPT_EXITTB; | |
1195 | +} | |
1196 | + | |
1197 | +void do_rfci (void) | |
1198 | +{ | |
1199 | +#if defined(TARGET_PPC64) | |
1200 | + if (env->spr[SPR_BOOKE_CSRR1] & (1 << MSR_CM)) { | |
1201 | + env->nip = (uint64_t)env->spr[SPR_BOOKE_CSRR0]; | |
1202 | + } else | |
1203 | +#endif | |
1204 | + { | |
1205 | + env->nip = (uint32_t)env->spr[SPR_BOOKE_CSRR0]; | |
1206 | + } | |
1207 | + do_store_msr(env, (uint32_t)env->spr[SPR_BOOKE_CSRR1] & ~0x3FFF0000); | |
1208 | +#if defined (DEBUG_OP) | |
1209 | + dump_rfi(); | |
1210 | +#endif | |
1211 | + env->interrupt_request = CPU_INTERRUPT_EXITTB; | |
1212 | +} | |
1213 | + | |
1214 | +void do_rfdi (void) | |
1215 | +{ | |
1216 | +#if defined(TARGET_PPC64) | |
1217 | + if (env->spr[SPR_BOOKE_DSRR1] & (1 << MSR_CM)) { | |
1218 | + env->nip = (uint64_t)env->spr[SPR_BOOKE_DSRR0]; | |
1219 | + } else | |
1220 | +#endif | |
1221 | + { | |
1222 | + env->nip = (uint32_t)env->spr[SPR_BOOKE_DSRR0]; | |
1223 | + } | |
1224 | + do_store_msr(env, (uint32_t)env->spr[SPR_BOOKE_DSRR1] & ~0x3FFF0000); | |
1225 | +#if defined (DEBUG_OP) | |
1226 | + dump_rfi(); | |
1227 | +#endif | |
1228 | + env->interrupt_request = CPU_INTERRUPT_EXITTB; | |
1229 | +} | |
1230 | + | |
1231 | +void do_rfmci (void) | |
1232 | +{ | |
1233 | +#if defined(TARGET_PPC64) | |
1234 | + if (env->spr[SPR_BOOKE_MCSRR1] & (1 << MSR_CM)) { | |
1235 | + env->nip = (uint64_t)env->spr[SPR_BOOKE_MCSRR0]; | |
1236 | + } else | |
1237 | +#endif | |
1238 | + { | |
1239 | + env->nip = (uint32_t)env->spr[SPR_BOOKE_MCSRR0]; | |
1240 | + } | |
1241 | + do_store_msr(env, (uint32_t)env->spr[SPR_BOOKE_MCSRR1] & ~0x3FFF0000); | |
1204 | 1242 | #if defined (DEBUG_OP) |
1205 | 1243 | dump_rfi(); |
1206 | 1244 | #endif |
1207 | 1245 | env->interrupt_request = CPU_INTERRUPT_EXITTB; |
1208 | 1246 | } |
1209 | 1247 | |
1210 | -void do_4xx_load_dcr (int dcrn) | |
1248 | +void do_load_dcr (void) | |
1211 | 1249 | { |
1212 | 1250 | target_ulong val; |
1213 | 1251 | |
1214 | 1252 | if (unlikely(env->dcr_read == NULL)) |
1215 | 1253 | do_raise_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_INVAL_INVAL); |
1216 | - else if (unlikely((*env->dcr_read)(env->dcr_env, dcrn, &val) != 0)) | |
1254 | + else if (unlikely((*env->dcr_read)(env->dcr_env, T0, &val) != 0)) | |
1217 | 1255 | do_raise_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_PRIV_REG); |
1218 | 1256 | else |
1219 | 1257 | T0 = val; |
1220 | 1258 | } |
1221 | 1259 | |
1222 | -void do_4xx_store_dcr (int dcrn) | |
1260 | +void do_store_dcr (void) | |
1223 | 1261 | { |
1224 | 1262 | if (unlikely(env->dcr_write == NULL)) |
1225 | 1263 | do_raise_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_INVAL_INVAL); |
1226 | - else if (unlikely((*env->dcr_write)(env->dcr_env, dcrn, T0) != 0)) | |
1264 | + else if (unlikely((*env->dcr_write)(env->dcr_env, T0, T1) != 0)) | |
1227 | 1265 | do_raise_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_PRIV_REG); |
1228 | 1266 | } |
1229 | 1267 | ... | ... |
target-ppc/op_helper.h
... | ... | @@ -117,9 +117,7 @@ void do_td (int flags); |
117 | 117 | #if !defined(CONFIG_USER_ONLY) |
118 | 118 | void do_rfi (void); |
119 | 119 | #if defined(TARGET_PPC64) |
120 | -void do_rfi_32 (void); | |
121 | 120 | void do_rfid (void); |
122 | -void do_rfid_32 (void); | |
123 | 121 | #endif |
124 | 122 | void do_tlbia (void); |
125 | 123 | void do_tlbie (void); |
... | ... | @@ -158,9 +156,12 @@ void do_op_602_mfrom (void); |
158 | 156 | void do_405_check_ov (void); |
159 | 157 | void do_405_check_sat (void); |
160 | 158 | #if !defined(CONFIG_USER_ONLY) |
161 | -void do_4xx_load_dcr (int dcrn); | |
162 | -void do_4xx_store_dcr (int dcrn); | |
163 | -void do_4xx_rfci (void); | |
159 | +void do_load_dcr (void); | |
160 | +void do_store_dcr (void); | |
161 | +void do_40x_rfci (void); | |
162 | +void do_rfci (void); | |
163 | +void do_rfdi (void); | |
164 | +void do_rfmci (void); | |
164 | 165 | void do_4xx_tlbre_lo (void); |
165 | 166 | void do_4xx_tlbre_hi (void); |
166 | 167 | void do_4xx_tlbsx (void); | ... | ... |
target-ppc/translate.c
... | ... | @@ -2861,12 +2861,7 @@ GEN_HANDLER(rfi, 0x13, 0x12, 0x01, 0x03FF8001, PPC_FLOW) |
2861 | 2861 | RET_PRIVOPC(ctx); |
2862 | 2862 | return; |
2863 | 2863 | } |
2864 | -#if defined(TARGET_PPC64) | |
2865 | - if (!ctx->sf_mode) | |
2866 | - gen_op_rfi_32(); | |
2867 | - else | |
2868 | -#endif | |
2869 | - gen_op_rfi(); | |
2864 | + gen_op_rfi(); | |
2870 | 2865 | RET_CHG_FLOW(ctx); |
2871 | 2866 | #endif |
2872 | 2867 | } |
... | ... | @@ -2882,10 +2877,7 @@ GEN_HANDLER(rfid, 0x13, 0x12, 0x00, 0x03FF8001, PPC_FLOW) |
2882 | 2877 | RET_PRIVOPC(ctx); |
2883 | 2878 | return; |
2884 | 2879 | } |
2885 | - if (!ctx->sf_mode) | |
2886 | - gen_op_rfid_32(); | |
2887 | - else | |
2888 | - gen_op_rfid(); | |
2880 | + gen_op_rfid(); | |
2889 | 2881 | RET_CHG_FLOW(ctx); |
2890 | 2882 | #endif |
2891 | 2883 | } |
... | ... | @@ -4423,7 +4415,8 @@ GEN_HANDLER(mfdcr, 0x1F, 0x03, 0x0A, 0x00000001, PPC_EMB_COMMON) |
4423 | 4415 | RET_PRIVREG(ctx); |
4424 | 4416 | return; |
4425 | 4417 | } |
4426 | - gen_op_4xx_load_dcr(dcrn); | |
4418 | + gen_op_set_T0(dcrn); | |
4419 | + gen_op_load_dcr(); | |
4427 | 4420 | gen_op_store_T0_gpr(rD(ctx->opcode)); |
4428 | 4421 | #endif |
4429 | 4422 | } |
... | ... | @@ -4440,8 +4433,41 @@ GEN_HANDLER(mtdcr, 0x1F, 0x03, 0x0E, 0x00000001, PPC_EMB_COMMON) |
4440 | 4433 | RET_PRIVREG(ctx); |
4441 | 4434 | return; |
4442 | 4435 | } |
4443 | - gen_op_load_gpr_T0(rS(ctx->opcode)); | |
4444 | - gen_op_4xx_store_dcr(dcrn); | |
4436 | + gen_op_set_T0(dcrn); | |
4437 | + gen_op_load_gpr_T1(rS(ctx->opcode)); | |
4438 | + gen_op_store_dcr(); | |
4439 | +#endif | |
4440 | +} | |
4441 | + | |
4442 | +/* mfdcrx */ | |
4443 | +GEN_HANDLER(mfdcrx, 0x1F, 0x03, 0x08, 0x00000001, PPC_BOOKE) | |
4444 | +{ | |
4445 | +#if defined(CONFIG_USER_ONLY) | |
4446 | + RET_PRIVREG(ctx); | |
4447 | +#else | |
4448 | + if (unlikely(!ctx->supervisor)) { | |
4449 | + RET_PRIVREG(ctx); | |
4450 | + return; | |
4451 | + } | |
4452 | + gen_op_load_gpr_T0(rA(ctx->opcode)); | |
4453 | + gen_op_load_dcr(); | |
4454 | + gen_op_store_T0_gpr(rD(ctx->opcode)); | |
4455 | +#endif | |
4456 | +} | |
4457 | + | |
4458 | +/* mtdcrx */ | |
4459 | +GEN_HANDLER(mtdcrx, 0x1F, 0x03, 0x0C, 0x00000001, PPC_BOOKE) | |
4460 | +{ | |
4461 | +#if defined(CONFIG_USER_ONLY) | |
4462 | + RET_PRIVREG(ctx); | |
4463 | +#else | |
4464 | + if (unlikely(!ctx->supervisor)) { | |
4465 | + RET_PRIVREG(ctx); | |
4466 | + return; | |
4467 | + } | |
4468 | + gen_op_load_gpr_T0(rA(ctx->opcode)); | |
4469 | + gen_op_load_gpr_T1(rS(ctx->opcode)); | |
4470 | + gen_op_store_dcr(); | |
4445 | 4471 | #endif |
4446 | 4472 | } |
4447 | 4473 | |
... | ... | @@ -4513,7 +4539,38 @@ GEN_HANDLER(icread, 0x1F, 0x06, 0x1F, 0x03E00001, PPC_4xx_COMMON) |
4513 | 4539 | } |
4514 | 4540 | |
4515 | 4541 | /* rfci (supervisor only) */ |
4516 | -GEN_HANDLER(rfci, 0x13, 0x13, 0x01, 0x03FF8001, PPC_EMB_COMMON) | |
4542 | +GEN_HANDLER(rfci_40x, 0x13, 0x13, 0x01, 0x03FF8001, PPC_40x_EXCP) | |
4543 | +{ | |
4544 | +#if defined(CONFIG_USER_ONLY) | |
4545 | + RET_PRIVOPC(ctx); | |
4546 | +#else | |
4547 | + if (unlikely(!ctx->supervisor)) { | |
4548 | + RET_PRIVOPC(ctx); | |
4549 | + return; | |
4550 | + } | |
4551 | + /* Restore CPU state */ | |
4552 | + gen_op_40x_rfci(); | |
4553 | + RET_CHG_FLOW(ctx); | |
4554 | +#endif | |
4555 | +} | |
4556 | + | |
4557 | +GEN_HANDLER(rfci, 0x13, 0x13, 0x01, 0x03FF8001, PPC_BOOKE) | |
4558 | +{ | |
4559 | +#if defined(CONFIG_USER_ONLY) | |
4560 | + RET_PRIVOPC(ctx); | |
4561 | +#else | |
4562 | + if (unlikely(!ctx->supervisor)) { | |
4563 | + RET_PRIVOPC(ctx); | |
4564 | + return; | |
4565 | + } | |
4566 | + /* Restore CPU state */ | |
4567 | + gen_op_rfci(); | |
4568 | + RET_CHG_FLOW(ctx); | |
4569 | +#endif | |
4570 | +} | |
4571 | + | |
4572 | +/* BookE specific */ | |
4573 | +GEN_HANDLER(rfdi, 0x13, 0x07, 0x01, 0x03FF8001, PPC_BOOKE) | |
4517 | 4574 | { |
4518 | 4575 | #if defined(CONFIG_USER_ONLY) |
4519 | 4576 | RET_PRIVOPC(ctx); |
... | ... | @@ -4523,14 +4580,28 @@ GEN_HANDLER(rfci, 0x13, 0x13, 0x01, 0x03FF8001, PPC_EMB_COMMON) |
4523 | 4580 | return; |
4524 | 4581 | } |
4525 | 4582 | /* Restore CPU state */ |
4526 | - gen_op_4xx_rfci(); | |
4583 | + gen_op_rfdi(); | |
4527 | 4584 | RET_CHG_FLOW(ctx); |
4528 | 4585 | #endif |
4529 | 4586 | } |
4530 | 4587 | |
4588 | +GEN_HANDLER(rfmci, 0x13, 0x06, 0x01, 0x03FF8001, PPC_BOOKE) | |
4589 | +{ | |
4590 | +#if defined(CONFIG_USER_ONLY) | |
4591 | + RET_PRIVOPC(ctx); | |
4592 | +#else | |
4593 | + if (unlikely(!ctx->supervisor)) { | |
4594 | + RET_PRIVOPC(ctx); | |
4595 | + return; | |
4596 | + } | |
4597 | + /* Restore CPU state */ | |
4598 | + gen_op_rfmci(); | |
4599 | + RET_CHG_FLOW(ctx); | |
4600 | +#endif | |
4601 | +} | |
4531 | 4602 | /* TLB management - PowerPC 405 implementation */ |
4532 | 4603 | /* tlbre */ |
4533 | -GEN_HANDLER(tlbre, 0x1F, 0x12, 0x1D, 0x00000001, PPC_EMB_COMMON) | |
4604 | +GEN_HANDLER(tlbre, 0x1F, 0x12, 0x1D, 0x00000001, PPC_40x_SPEC) | |
4534 | 4605 | { |
4535 | 4606 | #if defined(CONFIG_USER_ONLY) |
4536 | 4607 | RET_PRIVOPC(ctx); |
... | ... | @@ -4558,7 +4629,7 @@ GEN_HANDLER(tlbre, 0x1F, 0x12, 0x1D, 0x00000001, PPC_EMB_COMMON) |
4558 | 4629 | } |
4559 | 4630 | |
4560 | 4631 | /* tlbsx - tlbsx. */ |
4561 | -GEN_HANDLER(tlbsx, 0x1F, 0x12, 0x1C, 0x00000000, PPC_EMB_COMMON) | |
4632 | +GEN_HANDLER(tlbsx, 0x1F, 0x12, 0x1C, 0x00000000, PPC_40x_SPEC) | |
4562 | 4633 | { |
4563 | 4634 | #if defined(CONFIG_USER_ONLY) |
4564 | 4635 | RET_PRIVOPC(ctx); |
... | ... | @@ -4615,7 +4686,7 @@ GEN_HANDLER(wrtee, 0x1F, 0x03, 0x04, 0x000FFC01, PPC_EMB_COMMON) |
4615 | 4686 | return; |
4616 | 4687 | } |
4617 | 4688 | gen_op_load_gpr_T0(rD(ctx->opcode)); |
4618 | - gen_op_4xx_wrte(); | |
4689 | + gen_op_wrte(); | |
4619 | 4690 | RET_EXCP(ctx, EXCP_MTMSR, 0); |
4620 | 4691 | #endif |
4621 | 4692 | } |
... | ... | @@ -4631,7 +4702,7 @@ GEN_HANDLER(wrteei, 0x1F, 0x03, 0x05, 0x000EFC01, PPC_EMB_COMMON) |
4631 | 4702 | return; |
4632 | 4703 | } |
4633 | 4704 | gen_op_set_T0(ctx->opcode & 0x00010000); |
4634 | - gen_op_4xx_wrte(); | |
4705 | + gen_op_wrte(); | |
4635 | 4706 | RET_EXCP(ctx, EXCP_MTMSR, 0); |
4636 | 4707 | #endif |
4637 | 4708 | } | ... | ... |