Message ID | 20220906100932.343523-15-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/i386: pc-relative translation blocks | expand |
On Tue, Sep 6, 2022 at 12:09 PM Richard Henderson <richard.henderson@linaro.org> wrote: > > Use i32 not int or tl for eip and cs arguments. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> > --- > target/i386/helper.h | 2 +- > target/i386/tcg/seg_helper.c | 6 ++---- > target/i386/tcg/translate.c | 3 ++- > 3 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/target/i386/helper.h b/target/i386/helper.h > index ac3b4d1ee3..39a3c24182 100644 > --- a/target/i386/helper.h > +++ b/target/i386/helper.h > @@ -37,7 +37,7 @@ DEF_HELPER_2(lldt, void, env, int) > DEF_HELPER_2(ltr, void, env, int) > DEF_HELPER_3(load_seg, void, env, int, int) > DEF_HELPER_4(ljmp_protected, void, env, int, tl, tl) > -DEF_HELPER_5(lcall_real, void, env, int, tl, int, int) > +DEF_HELPER_5(lcall_real, void, env, i32, i32, int, i32) > DEF_HELPER_5(lcall_protected, void, env, int, tl, int, tl) > DEF_HELPER_2(iret_real, void, env, int) > DEF_HELPER_3(iret_protected, void, env, int, int) > diff --git a/target/i386/tcg/seg_helper.c b/target/i386/tcg/seg_helper.c > index bffd82923f..539189b4d1 100644 > --- a/target/i386/tcg/seg_helper.c > +++ b/target/i386/tcg/seg_helper.c > @@ -1504,14 +1504,12 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, > } > > /* real mode call */ > -void helper_lcall_real(CPUX86State *env, int new_cs, target_ulong new_eip1, > - int shift, int next_eip) > +void helper_lcall_real(CPUX86State *env, uint32_t new_cs, uint32_t new_eip, > + int shift, uint32_t next_eip) > { > - int new_eip; > uint32_t esp, esp_mask; > target_ulong ssp; > > - new_eip = new_eip1; > esp = env->regs[R_ESP]; > esp_mask = get_sp_mask(env->segs[R_SS].flags); > ssp = env->segs[R_SS].base; > diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c > index 1997f8d291..427ee72442 100644 > --- a/target/i386/tcg/translate.c > +++ b/target/i386/tcg/translate.c > @@ -5302,7 +5302,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) > tcg_const_tl(s->pc - s->cs_base)); > } else { > tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); > - gen_helper_lcall_real(cpu_env, s->tmp2_i32, s->T1, > + tcg_gen_trunc_tl_i32(s->tmp3_i32, s->T1); > + gen_helper_lcall_real(cpu_env, s->tmp2_i32, s->tmp3_i32, > tcg_const_i32(dflag - 1), > tcg_const_i32(s->pc - s->cs_base)); > } > -- > 2.34.1 >
diff --git a/target/i386/helper.h b/target/i386/helper.h index ac3b4d1ee3..39a3c24182 100644 --- a/target/i386/helper.h +++ b/target/i386/helper.h @@ -37,7 +37,7 @@ DEF_HELPER_2(lldt, void, env, int) DEF_HELPER_2(ltr, void, env, int) DEF_HELPER_3(load_seg, void, env, int, int) DEF_HELPER_4(ljmp_protected, void, env, int, tl, tl) -DEF_HELPER_5(lcall_real, void, env, int, tl, int, int) +DEF_HELPER_5(lcall_real, void, env, i32, i32, int, i32) DEF_HELPER_5(lcall_protected, void, env, int, tl, int, tl) DEF_HELPER_2(iret_real, void, env, int) DEF_HELPER_3(iret_protected, void, env, int, int) diff --git a/target/i386/tcg/seg_helper.c b/target/i386/tcg/seg_helper.c index bffd82923f..539189b4d1 100644 --- a/target/i386/tcg/seg_helper.c +++ b/target/i386/tcg/seg_helper.c @@ -1504,14 +1504,12 @@ void helper_ljmp_protected(CPUX86State *env, int new_cs, target_ulong new_eip, } /* real mode call */ -void helper_lcall_real(CPUX86State *env, int new_cs, target_ulong new_eip1, - int shift, int next_eip) +void helper_lcall_real(CPUX86State *env, uint32_t new_cs, uint32_t new_eip, + int shift, uint32_t next_eip) { - int new_eip; uint32_t esp, esp_mask; target_ulong ssp; - new_eip = new_eip1; esp = env->regs[R_ESP]; esp_mask = get_sp_mask(env->segs[R_SS].flags); ssp = env->segs[R_SS].base; diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 1997f8d291..427ee72442 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -5302,7 +5302,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) tcg_const_tl(s->pc - s->cs_base)); } else { tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); - gen_helper_lcall_real(cpu_env, s->tmp2_i32, s->T1, + tcg_gen_trunc_tl_i32(s->tmp3_i32, s->T1); + gen_helper_lcall_real(cpu_env, s->tmp2_i32, s->tmp3_i32, tcg_const_i32(dflag - 1), tcg_const_i32(s->pc - s->cs_base)); }
Use i32 not int or tl for eip and cs arguments. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/i386/helper.h | 2 +- target/i386/tcg/seg_helper.c | 6 ++---- target/i386/tcg/translate.c | 3 ++- 3 files changed, 5 insertions(+), 6 deletions(-)