static void gen_tw(DisasContext *ctx)
{
TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode));
- /* Stop the translation since this might generate a trap exception
- and/or following instructions might be invalid */
- gen_stop_exception(ctx);
+ /* Update the nip since this might generate a trap exception */
+ gen_update_nip(ctx, ctx->nip);
gen_helper_tw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)], t0);
tcg_temp_free_i32(t0);
}
{
TCGv t0 = tcg_const_tl(SIMM(ctx->opcode));
TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode));
- /* Stop the translation since this might generate a trap exception
- and/or following instructions might be invalid */
- gen_stop_exception(ctx);
+ /* Update the nip since this might generate a trap exception */
+ gen_update_nip(ctx, ctx->nip);
gen_helper_tw(cpu_gpr[rA(ctx->opcode)], t0, t1);
tcg_temp_free(t0);
tcg_temp_free_i32(t1);
static void gen_td(DisasContext *ctx)
{
TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode));
- /* Stop the translation since this might generate a trap exception
- and/or following instructions might be invalid */
- gen_stop_exception(ctx);
+ /* Update the nip since this might generate a trap exception */
+ gen_update_nip(ctx, ctx->nip);
gen_helper_td(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)], t0);
tcg_temp_free_i32(t0);
}
{
TCGv t0 = tcg_const_tl(SIMM(ctx->opcode));
TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode));
- /* Stop the translation since this might generate a trap exception
- and/or following instructions might be invalid */
- gen_stop_exception(ctx);
+ /* Update the nip since this might generate a trap exception */
+ gen_update_nip(ctx, ctx->nip);
gen_helper_td(cpu_gpr[rA(ctx->opcode)], t0, t1);
tcg_temp_free(t0);
tcg_temp_free_i32(t1);