From: bellard Date: Wed, 21 May 2008 13:29:45 +0000 (+0000) Subject: converted INTO/CMPXCHG8B to TCG X-Git-Tag: TizenStudio_2.0_p2.3~11715 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=723c13c6b51c69ccf21759700c45e95ba2a53ef1;p=sdk%2Femulator%2Fqemu.git converted INTO/CMPXCHG8B to TCG git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4510 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/target-i386/helper.c b/target-i386/helper.c index 5322491..0891ec9 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -1849,6 +1849,15 @@ void helper_das(void) FORCE_RET(); } +void helper_into(int next_eip_addend) +{ + int eflags; + eflags = cc_table[CC_OP].compute_all(); + if (eflags & CC_O) { + raise_interrupt(EXCP04_INTO, 1, 0, next_eip_addend); + } +} + void helper_cmpxchg8b(target_ulong a0) { uint64_t d; diff --git a/target-i386/helper.h b/target-i386/helper.h index d8b2829..76775e1 100644 --- a/target-i386/helper.h +++ b/target-i386/helper.h @@ -71,6 +71,7 @@ void helper_reset_inhibit_irq(void); void helper_boundw(target_ulong a0, int v); void helper_boundl(target_ulong a0, int v); void helper_rsm(void); +void helper_into(int next_eip_addend); void helper_cmpxchg8b(target_ulong a0); void helper_single_step(void); void helper_cpuid(void); diff --git a/target-i386/op.c b/target-i386/op.c index 6ef1474..0724e41 100644 --- a/target-i386/op.c +++ b/target-i386/op.c @@ -123,24 +123,6 @@ #endif -/* constant load & misc op */ - -/* XXX: consistent names */ -void OPPROTO op_into(void) -{ - int eflags; - eflags = cc_table[CC_OP].compute_all(); - if (eflags & CC_O) { - raise_interrupt(EXCP04_INTO, 1, 0, PARAM1); - } - FORCE_RET(); -} - -void OPPROTO op_cmpxchg8b(void) -{ - helper_cmpxchg8b(A0); -} - /* multiple size ops */ #define ldul ldl diff --git a/target-i386/translate.c b/target-i386/translate.c index c7994a1..ba34985 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -4308,7 +4308,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) if (s->cc_op != CC_OP_DYNAMIC) gen_op_set_cc_op(s->cc_op); gen_lea_modrm(s, modrm, ®_addr, &offset_addr); - gen_op_cmpxchg8b(); + tcg_gen_helper_0_1(helper_cmpxchg8b, cpu_A0); s->cc_op = CC_OP_EFLAGS; break; @@ -6016,7 +6016,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) if (s->cc_op != CC_OP_DYNAMIC) gen_op_set_cc_op(s->cc_op); gen_jmp_im(pc_start - s->cs_base); - gen_op_into(s->pc - pc_start); + tcg_gen_helper_0_1(helper_into, tcg_const_i32(s->pc - pc_start)); break; case 0xf1: /* icebp (undocumented, exits to external debugger) */ if (gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP))