From 50365b0c900dc6d6f34395c6607b07f58aac3d70 Mon Sep 17 00:00:00 2001
From: Nitin A Kamble <nitin.a.kamble@intel.com>
Date: Tue, 30 Oct 2007 19:43:07 -0800
Subject: [PATCH] Implement emulation of instructions
        stc (opcode 0xf9)
        cld (opcode 0xfc)

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
---
 drivers/kvm/x86_emulate.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index 1357355..21f3831 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -173,8 +173,9 @@ static u16 opcode_table[256] = {
 	ImplicitOps, ImplicitOps,
 	ByteOp | DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM,
 	/* 0xF8 - 0xFF */
-	ImplicitOps, 0, ImplicitOps, ImplicitOps,
-	0, 0, ByteOp | DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM
+	ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
+	ImplicitOps, 0,
+	ByteOp | DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM
 };
 
 static u16 twobyte_table[256] = {
@@ -1606,6 +1607,10 @@ special_insn:
 		ctxt->eflags &= ~EFLG_CF;
 		c->dst.type = OP_NONE;	/* Disable writeback. */
 		break;
+	case 0xf9: /* stc */
+		ctxt->eflags |= EFLG_CF;
+		c->dst.type = OP_NONE;  /* Disable writeback. */
+		break;
 	case 0xfa: /* cli */
 		ctxt->eflags &= ~X86_EFLAGS_IF;
 		c->dst.type = OP_NONE;	/* Disable writeback. */
@@ -1614,6 +1619,10 @@ special_insn:
 		ctxt->eflags |= X86_EFLAGS_IF;
 		c->dst.type = OP_NONE;	/* Disable writeback. */
 		break;
+	case 0xfc: /* cld */
+		ctxt->eflags |= X86_EFLAGS_DF;
+		c->dst.type = OP_NONE;	/* Disable writeback. */
+		break;
 	}
 	if (c->rep_prefix) {
 		if (c->regs[VCPU_REGS_RCX] == 0) {
-- 
1.5.2.2

