Richard Henderson <r...@twiddle.net> writes: > And use tcg pointer differencing functions as appropriate. > > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> > Signed-off-by: Richard Henderson <r...@twiddle.net> <snip> > > -static void tcg_out_branch(TCGContext *s, int call, uintptr_t dest) > +static void tcg_out_branch(TCGContext *s, int call, tcg_insn_unit *dest) > { > - intptr_t disp = dest - (intptr_t)s->code_ptr - 5; > + intptr_t disp = tcg_pcrel_diff(s, dest) - 5; > > if (disp == (int32_t)disp) { > tcg_out_opc(s, call ? OPC_CALL_Jz : OPC_JMP_long, 0, 0, 0); > tcg_out32(s, disp); > } else { > - tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R10, dest); > + tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R10, (uintptr_t)dest); > tcg_out_modrm(s, OPC_GRP5, > call ? EXT5_CALLN_Ev : EXT5_JMPN_Ev, TCG_REG_R10); > } > }
I'm a little unclear on where the -5 came from? Is this a relative address based on where we will be after we've emitted the code? <snip> Otherwise: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée