aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm
diff options
context:
space:
mode:
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>2011-12-06 04:06:44 -0500
committerAvi Kivity <avi@redhat.com>2011-12-27 04:23:36 -0500
commitc04ec8393f3815e0f60dde1d6b29040bf1875d52 (patch)
treea82cfdf56e28b838c26b5c765f5247025cde2cfc /arch/x86/kvm
parentc15af35f54631b9e9b7ad1981016cc6e73cec794 (diff)
KVM: x86 emulator: Use opcode::execute for Group 4/5 instructions
Group 4: FE Group 5: FF Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r--arch/x86/kvm/emulate.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index cd49774f2d0e..5b78785de41b 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -3213,16 +3213,19 @@ static struct opcode group3[] = {
3213}; 3213};
3214 3214
3215static struct opcode group4[] = { 3215static struct opcode group4[] = {
3216 D(ByteOp | DstMem | SrcNone | ModRM | Lock), D(ByteOp | DstMem | SrcNone | ModRM | Lock), 3216 I(ByteOp | DstMem | SrcNone | ModRM | Lock, em_grp45),
3217 I(ByteOp | DstMem | SrcNone | ModRM | Lock, em_grp45),
3217 N, N, N, N, N, N, 3218 N, N, N, N, N, N,
3218}; 3219};
3219 3220
3220static struct opcode group5[] = { 3221static struct opcode group5[] = {
3221 D(DstMem | SrcNone | ModRM | Lock), D(DstMem | SrcNone | ModRM | Lock), 3222 I(DstMem | SrcNone | ModRM | Lock, em_grp45),
3222 D(SrcMem | ModRM | Stack), 3223 I(DstMem | SrcNone | ModRM | Lock, em_grp45),
3224 I(SrcMem | ModRM | Stack, em_grp45),
3223 I(SrcMemFAddr | ModRM | ImplicitOps | Stack, em_call_far), 3225 I(SrcMemFAddr | ModRM | ImplicitOps | Stack, em_call_far),
3224 D(SrcMem | ModRM | Stack), D(SrcMemFAddr | ModRM | ImplicitOps), 3226 I(SrcMem | ModRM | Stack, em_grp45),
3225 D(SrcMem | ModRM | Stack), N, 3227 I(SrcMemFAddr | ModRM | ImplicitOps, em_grp45),
3228 I(SrcMem | ModRM | Stack, em_grp45), N,
3226}; 3229};
3227 3230
3228static struct opcode group6[] = { 3231static struct opcode group6[] = {
@@ -4082,12 +4085,6 @@ special_insn:
4082 case 0xfd: /* std */ 4085 case 0xfd: /* std */
4083 ctxt->eflags |= EFLG_DF; 4086 ctxt->eflags |= EFLG_DF;
4084 break; 4087 break;
4085 case 0xfe: /* Grp4 */
4086 rc = em_grp45(ctxt);
4087 break;
4088 case 0xff: /* Grp5 */
4089 rc = em_grp45(ctxt);
4090 break;
4091 default: 4088 default:
4092 goto cannot_emulate; 4089 goto cannot_emulate;
4093 } 4090 }