Commit 07be379fb1d4d919384001a6732e1fa81b2212a2
1 parent
9d0763c4
converted INTO/CMPXCHG8B to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4510 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
12 additions
and
20 deletions
target-i386/helper.c
... | ... | @@ -1849,6 +1849,15 @@ void helper_das(void) |
1849 | 1849 | FORCE_RET(); |
1850 | 1850 | } |
1851 | 1851 | |
1852 | +void helper_into(int next_eip_addend) | |
1853 | +{ | |
1854 | + int eflags; | |
1855 | + eflags = cc_table[CC_OP].compute_all(); | |
1856 | + if (eflags & CC_O) { | |
1857 | + raise_interrupt(EXCP04_INTO, 1, 0, next_eip_addend); | |
1858 | + } | |
1859 | +} | |
1860 | + | |
1852 | 1861 | void helper_cmpxchg8b(target_ulong a0) |
1853 | 1862 | { |
1854 | 1863 | uint64_t d; | ... | ... |
target-i386/helper.h
... | ... | @@ -71,6 +71,7 @@ void helper_reset_inhibit_irq(void); |
71 | 71 | void helper_boundw(target_ulong a0, int v); |
72 | 72 | void helper_boundl(target_ulong a0, int v); |
73 | 73 | void helper_rsm(void); |
74 | +void helper_into(int next_eip_addend); | |
74 | 75 | void helper_cmpxchg8b(target_ulong a0); |
75 | 76 | void helper_single_step(void); |
76 | 77 | void helper_cpuid(void); | ... | ... |
target-i386/op.c
... | ... | @@ -123,24 +123,6 @@ |
123 | 123 | |
124 | 124 | #endif |
125 | 125 | |
126 | -/* constant load & misc op */ | |
127 | - | |
128 | -/* XXX: consistent names */ | |
129 | -void OPPROTO op_into(void) | |
130 | -{ | |
131 | - int eflags; | |
132 | - eflags = cc_table[CC_OP].compute_all(); | |
133 | - if (eflags & CC_O) { | |
134 | - raise_interrupt(EXCP04_INTO, 1, 0, PARAM1); | |
135 | - } | |
136 | - FORCE_RET(); | |
137 | -} | |
138 | - | |
139 | -void OPPROTO op_cmpxchg8b(void) | |
140 | -{ | |
141 | - helper_cmpxchg8b(A0); | |
142 | -} | |
143 | - | |
144 | 126 | /* multiple size ops */ |
145 | 127 | |
146 | 128 | #define ldul ldl | ... | ... |
target-i386/translate.c
... | ... | @@ -4308,7 +4308,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) |
4308 | 4308 | if (s->cc_op != CC_OP_DYNAMIC) |
4309 | 4309 | gen_op_set_cc_op(s->cc_op); |
4310 | 4310 | gen_lea_modrm(s, modrm, ®_addr, &offset_addr); |
4311 | - gen_op_cmpxchg8b(); | |
4311 | + tcg_gen_helper_0_1(helper_cmpxchg8b, cpu_A0); | |
4312 | 4312 | s->cc_op = CC_OP_EFLAGS; |
4313 | 4313 | break; |
4314 | 4314 | |
... | ... | @@ -6016,7 +6016,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) |
6016 | 6016 | if (s->cc_op != CC_OP_DYNAMIC) |
6017 | 6017 | gen_op_set_cc_op(s->cc_op); |
6018 | 6018 | gen_jmp_im(pc_start - s->cs_base); |
6019 | - gen_op_into(s->pc - pc_start); | |
6019 | + tcg_gen_helper_0_1(helper_into, tcg_const_i32(s->pc - pc_start)); | |
6020 | 6020 | break; |
6021 | 6021 | case 0xf1: /* icebp (undocumented, exits to external debugger) */ |
6022 | 6022 | if (gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP)) | ... | ... |