Commit 9575cb94930895225ec1f6538ba1f74dda0342aa
1 parent
960540b4
fixed exceptions for cpuid and invlpg
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4664 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
6 additions
and
0 deletions
target-i386/translate.c
| @@ -6407,6 +6407,9 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) | @@ -6407,6 +6407,9 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) | ||
| 6407 | break; | 6407 | break; |
| 6408 | #endif | 6408 | #endif |
| 6409 | case 0x1a2: /* cpuid */ | 6409 | case 0x1a2: /* cpuid */ |
| 6410 | + if (s->cc_op != CC_OP_DYNAMIC) | ||
| 6411 | + gen_op_set_cc_op(s->cc_op); | ||
| 6412 | + gen_jmp_im(pc_start - s->cs_base); | ||
| 6410 | tcg_gen_helper_0_0(helper_cpuid); | 6413 | tcg_gen_helper_0_0(helper_cpuid); |
| 6411 | break; | 6414 | break; |
| 6412 | case 0xf4: /* hlt */ | 6415 | case 0xf4: /* hlt */ |
| @@ -6700,6 +6703,9 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) | @@ -6700,6 +6703,9 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) | ||
| 6700 | goto illegal_op; | 6703 | goto illegal_op; |
| 6701 | } | 6704 | } |
| 6702 | } else { | 6705 | } else { |
| 6706 | + if (s->cc_op != CC_OP_DYNAMIC) | ||
| 6707 | + gen_op_set_cc_op(s->cc_op); | ||
| 6708 | + gen_jmp_im(pc_start - s->cs_base); | ||
| 6703 | gen_lea_modrm(s, modrm, ®_addr, &offset_addr); | 6709 | gen_lea_modrm(s, modrm, ®_addr, &offset_addr); |
| 6704 | tcg_gen_helper_0_1(helper_invlpg, cpu_A0); | 6710 | tcg_gen_helper_0_1(helper_invlpg, cpu_A0); |
| 6705 | gen_jmp_im(s->pc - s->cs_base); | 6711 | gen_jmp_im(s->pc - s->cs_base); |