David Gibson <da...@gibson.dropbear.id.au> writes: > -static void gen_read_xer(TCGv dst) >> +static void gen_read_xer(DisasContext *ctx, TCGv dst) >> { >> TCGv t0 = tcg_temp_new(); >> TCGv t1 = tcg_temp_new(); >> @@ -3715,15 +3719,30 @@ static void gen_read_xer(TCGv dst) >> tcg_gen_or_tl(t0, t0, t1); >> tcg_gen_or_tl(dst, dst, t2); >> tcg_gen_or_tl(dst, dst, t0); >> + if (is_isa300(ctx)) { >> + tcg_gen_shli_tl(t0, cpu_ov32, XER_OV32); >> + tcg_gen_or_tl(dst, dst, t0); >> + tcg_gen_shli_tl(t0, cpu_ca32, XER_CA32); >> + tcg_gen_or_tl(dst, dst, t0); > > Could you use 2 deposits here, instead of 2 shifts and 2 ors?
I checked the implementation of tcg_gen_deposit_i64, resultant will have much more than 2 shifts + 2 ors. Regards, Nikunj