On Wed, 2016-07-27 at 12:33 +1000, David Gibson wrote: > > Should you be returning true here? > > Without it, IIUC, the functions below will generate the unconditional > trap, then generate more code to actually test the condition and trap > again.
You are right, we generate dead code, will fix. Cheers, Ben. > > > > + } > > + return false; > > +} > > + > > /* tw */ > > static void gen_tw(DisasContext *ctx) > > { > > - TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode)); > > + TCGv_i32 t0; > > + > > + if (check_unconditional_trap(ctx)) { > > + return; > > + } > > + t0 = tcg_const_i32(TO(ctx->opcode)); > > gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], > > cpu_gpr[rB(ctx->opcode)], > > t0); > > tcg_temp_free_i32(t0); > > @@ -3372,8 +3391,14 @@ static void gen_tw(DisasContext *ctx) > > /* twi */ > > static void gen_twi(DisasContext *ctx) > > { > > - TCGv t0 = tcg_const_tl(SIMM(ctx->opcode)); > > - TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode)); > > + TCGv t0; > > + TCGv_i32 t1; > > + > > + if (check_unconditional_trap(ctx)) { > > + return; > > + } > > + t0 = tcg_const_tl(SIMM(ctx->opcode)); > > + t1 = tcg_const_i32(TO(ctx->opcode)); > > gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1); > > tcg_temp_free(t0); > > tcg_temp_free_i32(t1); > > @@ -3383,7 +3408,12 @@ static void gen_twi(DisasContext *ctx) > > /* td */ > > static void gen_td(DisasContext *ctx) > > { > > - TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode)); > > + TCGv_i32 t0; > > + > > + if (check_unconditional_trap(ctx)) { > > + return; > > + } > > + t0 = tcg_const_i32(TO(ctx->opcode)); > > gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], > > cpu_gpr[rB(ctx->opcode)], > > t0); > > tcg_temp_free_i32(t0); > > @@ -3392,8 +3422,14 @@ static void gen_td(DisasContext *ctx) > > /* tdi */ > > static void gen_tdi(DisasContext *ctx) > > { > > - TCGv t0 = tcg_const_tl(SIMM(ctx->opcode)); > > - TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode)); > > + TCGv t0; > > + TCGv_i32 t1; > > + > > + if (check_unconditional_trap(ctx)) { > > + return; > > + } > > + t0 = tcg_const_tl(SIMM(ctx->opcode)); > > + t1 = tcg_const_i32(TO(ctx->opcode)); > > gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1); > > tcg_temp_free(t0); > > tcg_temp_free_i32(t1); >