PowerPC emulation bugfixes:
- don't generate multiple exit_tb at the end of conditional branches - disable TRACE exception as it is not correct for embedded PowerPC. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2679 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
95d1f3edd5
commit
08e46e54ea
@ -2806,11 +2806,11 @@ static inline void gen_bcond(DisasContext *ctx, int type)
|
|||||||
#endif
|
#endif
|
||||||
gen_op_btest_T1(ctx->nip);
|
gen_op_btest_T1(ctx->nip);
|
||||||
gen_op_reset_T0();
|
gen_op_reset_T0();
|
||||||
}
|
|
||||||
no_test:
|
no_test:
|
||||||
if (ctx->singlestep_enabled)
|
if (ctx->singlestep_enabled)
|
||||||
gen_op_debug();
|
gen_op_debug();
|
||||||
gen_op_exit_tb();
|
gen_op_exit_tb();
|
||||||
|
}
|
||||||
ctx->exception = EXCP_BRANCH;
|
ctx->exception = EXCP_BRANCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4725,7 +4725,7 @@ GEN_HANDLER(wrteei, 0x1F, 0x03, 0x05, 0x000EFC01, PPC_EMB_COMMON)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PPC 440 specific instructions */
|
/* PowerPC 440 specific instructions */
|
||||||
/* dlmzb */
|
/* dlmzb */
|
||||||
GEN_HANDLER(dlmzb, 0x1F, 0x0E, 0x02, 0x00000000, PPC_440_SPEC)
|
GEN_HANDLER(dlmzb, 0x1F, 0x0E, 0x02, 0x00000000, PPC_440_SPEC)
|
||||||
{
|
{
|
||||||
@ -5838,6 +5838,7 @@ static inline int gen_intermediate_code_internal (CPUState *env,
|
|||||||
handler->count++;
|
handler->count++;
|
||||||
#endif
|
#endif
|
||||||
/* Check trace mode exceptions */
|
/* Check trace mode exceptions */
|
||||||
|
#if 0 // XXX: buggy on embedded PowerPC
|
||||||
if (unlikely((msr_be && ctx.exception == EXCP_BRANCH) ||
|
if (unlikely((msr_be && ctx.exception == EXCP_BRANCH) ||
|
||||||
/* Check in single step trace mode
|
/* Check in single step trace mode
|
||||||
* we need to stop except if:
|
* we need to stop except if:
|
||||||
@ -5852,6 +5853,7 @@ static inline int gen_intermediate_code_internal (CPUState *env,
|
|||||||
ctx.exception != EXCP_TRAP))) {
|
ctx.exception != EXCP_TRAP))) {
|
||||||
RET_EXCP(ctxp, EXCP_TRACE, 0);
|
RET_EXCP(ctxp, EXCP_TRACE, 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* if we reach a page boundary or are single stepping, stop
|
/* if we reach a page boundary or are single stepping, stop
|
||||||
* generation
|
* generation
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user