diff options
author | Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> | 2011-05-29 08:57:53 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-07-12 06:16:00 -0400 |
commit | 9f21ca599cd609502de8a56c1d4c4688d40abb2d (patch) | |
tree | 6741823f140817294f313154752f2dfaa4fc10f5 /arch/x86/kvm/emulate.c | |
parent | db5b0762f3cab58398f16379ab37ef66ef9ba497 (diff) |
KVM: x86 emulator: Use opcode::execute for TEST(84/85, A8/A9)
Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/emulate.c')
-rw-r--r-- | arch/x86/kvm/emulate.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 136bc6cbd5fa..d25cfc238b90 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -2605,6 +2605,14 @@ static int em_cmp(struct x86_emulate_ctxt *ctxt) | |||
2605 | return X86EMUL_CONTINUE; | 2605 | return X86EMUL_CONTINUE; |
2606 | } | 2606 | } |
2607 | 2607 | ||
2608 | static int em_test(struct x86_emulate_ctxt *ctxt) | ||
2609 | { | ||
2610 | struct decode_cache *c = &ctxt->decode; | ||
2611 | |||
2612 | emulate_2op_SrcV("test", c->src, c->dst, ctxt->eflags); | ||
2613 | return X86EMUL_CONTINUE; | ||
2614 | } | ||
2615 | |||
2608 | static int em_imul(struct x86_emulate_ctxt *ctxt) | 2616 | static int em_imul(struct x86_emulate_ctxt *ctxt) |
2609 | { | 2617 | { |
2610 | struct decode_cache *c = &ctxt->decode; | 2618 | struct decode_cache *c = &ctxt->decode; |
@@ -3135,7 +3143,8 @@ static struct opcode opcode_table[256] = { | |||
3135 | G(DstMem | SrcImm | ModRM | Group, group1), | 3143 | G(DstMem | SrcImm | ModRM | Group, group1), |
3136 | G(ByteOp | DstMem | SrcImm | ModRM | No64 | Group, group1), | 3144 | G(ByteOp | DstMem | SrcImm | ModRM | No64 | Group, group1), |
3137 | G(DstMem | SrcImmByte | ModRM | Group, group1), | 3145 | G(DstMem | SrcImmByte | ModRM | Group, group1), |
3138 | D2bv(DstMem | SrcReg | ModRM), D2bv(DstMem | SrcReg | ModRM | Lock), | 3146 | I2bv(DstMem | SrcReg | ModRM, em_test), |
3147 | D2bv(DstMem | SrcReg | ModRM | Lock), | ||
3139 | /* 0x88 - 0x8F */ | 3148 | /* 0x88 - 0x8F */ |
3140 | I2bv(DstMem | SrcReg | ModRM | Mov, em_mov), | 3149 | I2bv(DstMem | SrcReg | ModRM | Mov, em_mov), |
3141 | I2bv(DstReg | SrcMem | ModRM | Mov, em_mov), | 3150 | I2bv(DstReg | SrcMem | ModRM | Mov, em_mov), |
@@ -3154,7 +3163,7 @@ static struct opcode opcode_table[256] = { | |||
3154 | I2bv(SrcSI | DstDI | Mov | String, em_mov), | 3163 | I2bv(SrcSI | DstDI | Mov | String, em_mov), |
3155 | I2bv(SrcSI | DstDI | String, em_cmp), | 3164 | I2bv(SrcSI | DstDI | String, em_cmp), |
3156 | /* 0xA8 - 0xAF */ | 3165 | /* 0xA8 - 0xAF */ |
3157 | D2bv(DstAcc | SrcImm), | 3166 | I2bv(DstAcc | SrcImm, em_test), |
3158 | I2bv(SrcAcc | DstDI | Mov | String, em_mov), | 3167 | I2bv(SrcAcc | DstDI | Mov | String, em_mov), |
3159 | I2bv(SrcSI | DstAcc | Mov | String, em_mov), | 3168 | I2bv(SrcSI | DstAcc | Mov | String, em_mov), |
3160 | I2bv(SrcAcc | DstDI | String, em_cmp), | 3169 | I2bv(SrcAcc | DstDI | String, em_cmp), |
@@ -3873,10 +3882,6 @@ special_insn: | |||
3873 | if (test_cc(c->b, ctxt->eflags)) | 3882 | if (test_cc(c->b, ctxt->eflags)) |
3874 | jmp_rel(c, c->src.val); | 3883 | jmp_rel(c, c->src.val); |
3875 | break; | 3884 | break; |
3876 | case 0x84 ... 0x85: | ||
3877 | test: | ||
3878 | emulate_2op_SrcV("test", c->src, c->dst, ctxt->eflags); | ||
3879 | break; | ||
3880 | case 0x86 ... 0x87: /* xchg */ | 3885 | case 0x86 ... 0x87: /* xchg */ |
3881 | xchg: | 3886 | xchg: |
3882 | /* Write back the register source. */ | 3887 | /* Write back the register source. */ |
@@ -3932,8 +3937,6 @@ special_insn: | |||
3932 | case 8: c->dst.val = (s32)c->dst.val; break; | 3937 | case 8: c->dst.val = (s32)c->dst.val; break; |
3933 | } | 3938 | } |
3934 | break; | 3939 | break; |
3935 | case 0xa8 ... 0xa9: /* test ax, imm */ | ||
3936 | goto test; | ||
3937 | case 0xc0 ... 0xc1: | 3940 | case 0xc0 ... 0xc1: |
3938 | rc = em_grp2(ctxt); | 3941 | rc = em_grp2(ctxt); |
3939 | break; | 3942 | break; |