Commit 9230e66e5c711bd077705465d34161d6b1e7fee7
1 parent
0523c6b7
CR8 support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1237 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
21 additions
and
11 deletions
hw/apic.c
... | ... | @@ -100,6 +100,18 @@ uint64_t cpu_get_apic_base(CPUState *env) |
100 | 100 | return s->apicbase; |
101 | 101 | } |
102 | 102 | |
103 | +void cpu_set_apic_tpr(CPUX86State *env, uint8_t val) | |
104 | +{ | |
105 | + APICState *s = env->apic_state; | |
106 | + s->tpr = (val & 0x0f) << 4; | |
107 | +} | |
108 | + | |
109 | +uint8_t cpu_get_apic_tpr(CPUX86State *env) | |
110 | +{ | |
111 | + APICState *s = env->apic_state; | |
112 | + return s->tpr >> 4; | |
113 | +} | |
114 | + | |
103 | 115 | /* return -1 if no bit is set */ |
104 | 116 | static int get_highest_priority_int(uint32_t *tab) |
105 | 117 | { | ... | ... |
target-i386/cpu.h
... | ... | @@ -509,15 +509,6 @@ typedef struct CPUX86State { |
509 | 509 | void *opaque; |
510 | 510 | } CPUX86State; |
511 | 511 | |
512 | -#ifndef IN_OP_I386 | |
513 | -void cpu_x86_outb(CPUX86State *env, int addr, int val); | |
514 | -void cpu_x86_outw(CPUX86State *env, int addr, int val); | |
515 | -void cpu_x86_outl(CPUX86State *env, int addr, int val); | |
516 | -int cpu_x86_inb(CPUX86State *env, int addr); | |
517 | -int cpu_x86_inw(CPUX86State *env, int addr); | |
518 | -int cpu_x86_inl(CPUX86State *env, int addr); | |
519 | -#endif | |
520 | - | |
521 | 512 | CPUX86State *cpu_x86_init(void); |
522 | 513 | int cpu_x86_exec(CPUX86State *s); |
523 | 514 | void cpu_x86_close(CPUX86State *s); |
... | ... | @@ -615,6 +606,10 @@ uint64_t cpu_get_tsc(CPUX86State *env); |
615 | 606 | |
616 | 607 | void cpu_set_apic_base(CPUX86State *env, uint64_t val); |
617 | 608 | uint64_t cpu_get_apic_base(CPUX86State *env); |
609 | +void cpu_set_apic_tpr(CPUX86State *env, uint8_t val); | |
610 | +#ifndef NO_CPU_IO_DEFS | |
611 | +uint8_t cpu_get_apic_tpr(CPUX86State *env); | |
612 | +#endif | |
618 | 613 | |
619 | 614 | /* will be suppressed */ |
620 | 615 | void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0); | ... | ... |
target-i386/translate.c
... | ... | @@ -5631,17 +5631,20 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) |
5631 | 5631 | case 2: |
5632 | 5632 | case 3: |
5633 | 5633 | case 4: |
5634 | + case 8: | |
5634 | 5635 | if (b & 2) { |
5635 | 5636 | gen_op_mov_TN_reg[ot][0][rm](); |
5636 | 5637 | gen_op_movl_crN_T0(reg); |
5637 | 5638 | gen_jmp_im(s->pc - s->cs_base); |
5638 | 5639 | gen_eob(s); |
5639 | 5640 | } else { |
5640 | - gen_op_movtl_T0_env(offsetof(CPUX86State,cr[reg])); | |
5641 | + if (reg == 8) | |
5642 | + gen_op_movtl_T0_cr8(); | |
5643 | + else | |
5644 | + gen_op_movtl_T0_env(offsetof(CPUX86State,cr[reg])); | |
5641 | 5645 | gen_op_mov_reg_T0[ot][rm](); |
5642 | 5646 | } |
5643 | 5647 | break; |
5644 | - /* XXX: add CR8 for x86_64 */ | |
5645 | 5648 | default: |
5646 | 5649 | goto illegal_op; |
5647 | 5650 | } | ... | ... |