Commit 5b003a40 authored by Mihail Abakumov's avatar Mihail Abakumov Committed by Paolo Bonzini
Browse files

i386: fix read/write cr with icount option



Running Windows with icount causes a crash in instruction of write cr.
This patch fixes it.

Reading and writing cr cause an icount read because there are called
cpu_get_apic_tpr and cpu_set_apic_tpr functions. So, there is need
gen_io_start()/gen_io_end() calls.

Signed-off-by: default avatarMihail Abakumov <mikhail.abakumov@ispras.ru>
Message-Id: <ffb376034ff184f2fcbe93d5317d9e76@ispras.ru>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f8c45c65
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -7939,14 +7939,26 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
                gen_update_cc_op(s);
                gen_jmp_im(pc_start - s->cs_base);
                if (b & 2) {
                    if (s->tb->cflags & CF_USE_ICOUNT) {
                        gen_io_start();
                    }
                    gen_op_mov_v_reg(ot, cpu_T0, rm);
                    gen_helper_write_crN(cpu_env, tcg_const_i32(reg),
                                         cpu_T0);
                    if (s->tb->cflags & CF_USE_ICOUNT) {
                        gen_io_end();
                    }
                    gen_jmp_im(s->pc - s->cs_base);
                    gen_eob(s);
                } else {
                    if (s->tb->cflags & CF_USE_ICOUNT) {
                        gen_io_start();
                    }
                    gen_helper_read_crN(cpu_T0, cpu_env, tcg_const_i32(reg));
                    gen_op_mov_reg_v(ot, rm, cpu_T0);
                    if (s->tb->cflags & CF_USE_ICOUNT) {
                        gen_io_end();
                    }
                }
                break;
            default: