Message ID | 20240416040609.1313605-7-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | plugins: Use unwind info for special gdb registers | expand |
On 4/15/24 21:06, Richard Henderson wrote: > This is a generalization of cpu_compute_eflags, with a dynamic > value of cc_op, and is thus tcg specific. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/i386/cpu.h | 2 ++ > target/i386/tcg/cc_helper.c | 10 ++++++++++ > 2 files changed, 12 insertions(+) > > diff --git a/target/i386/cpu.h b/target/i386/cpu.h > index 6b05738079..285f26d99d 100644 > --- a/target/i386/cpu.h > +++ b/target/i386/cpu.h > @@ -2379,6 +2379,8 @@ void cpu_x86_inject_mce(Monitor *mon, X86CPU *cpu, int bank, > > uint32_t cpu_cc_compute_all(CPUX86State *env1); > > +uint32_t cpu_compute_eflags_ccop(CPUX86State *env, CCOp op); > + > static inline uint32_t cpu_compute_eflags(CPUX86State *env) > { > uint32_t eflags = env->eflags; > diff --git a/target/i386/tcg/cc_helper.c b/target/i386/tcg/cc_helper.c > index f76e9cb8cf..8203682ca8 100644 > --- a/target/i386/tcg/cc_helper.c > +++ b/target/i386/tcg/cc_helper.c > @@ -225,6 +225,16 @@ uint32_t cpu_cc_compute_all(CPUX86State *env) > return helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, CC_OP); > } > > +uint32_t cpu_compute_eflags_ccop(CPUX86State *env, CCOp op) > +{ > + uint32_t eflags; > + > + eflags = helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, op); > + eflags |= env->df & DF_MASK; > + eflags |= env->eflags & ~(VM_MASK | RF_MASK); > + return eflags; > +} > + > target_ulong helper_cc_compute_c(target_ulong dst, target_ulong src1, > target_ulong src2, int op) > { Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 6b05738079..285f26d99d 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -2379,6 +2379,8 @@ void cpu_x86_inject_mce(Monitor *mon, X86CPU *cpu, int bank, uint32_t cpu_cc_compute_all(CPUX86State *env1); +uint32_t cpu_compute_eflags_ccop(CPUX86State *env, CCOp op); + static inline uint32_t cpu_compute_eflags(CPUX86State *env) { uint32_t eflags = env->eflags; diff --git a/target/i386/tcg/cc_helper.c b/target/i386/tcg/cc_helper.c index f76e9cb8cf..8203682ca8 100644 --- a/target/i386/tcg/cc_helper.c +++ b/target/i386/tcg/cc_helper.c @@ -225,6 +225,16 @@ uint32_t cpu_cc_compute_all(CPUX86State *env) return helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, CC_OP); } +uint32_t cpu_compute_eflags_ccop(CPUX86State *env, CCOp op) +{ + uint32_t eflags; + + eflags = helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, op); + eflags |= env->df & DF_MASK; + eflags |= env->eflags & ~(VM_MASK | RF_MASK); + return eflags; +} + target_ulong helper_cc_compute_c(target_ulong dst, target_ulong src1, target_ulong src2, int op) {
This is a generalization of cpu_compute_eflags, with a dynamic value of cc_op, and is thus tcg specific. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/i386/cpu.h | 2 ++ target/i386/tcg/cc_helper.c | 10 ++++++++++ 2 files changed, 12 insertions(+)