diff mbox

[kvm-unit-test] : test fninit/fnstsw/fnstcw instructions emulation

Message ID 20121220150056.GJ17584@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gleb Natapov Dec. 20, 2012, 3 p.m. UTC
Add test for fninit/fnstsw/fnstcw instructions emulation. This exact
code sequence is executed by Linux kernel during boot and sometimes gets
emulated by KVM.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/x86/realmode.c b/x86/realmode.c
index 549b36a..f5426e0 100644
--- a/x86/realmode.c
+++ b/x86/realmode.c
@@ -1384,6 +1384,18 @@  static void test_aad(void)
     report("aad", R_AX, outregs.eax == 0x123400d4);
 }
 
+static void test_fninit(void)
+{
+	u16 fcw = -1, fsw = -1;
+	MK_INSN(fninit, "fninit ; fnstsw (%eax) ; fnstcw (%ebx)");
+
+	inregs.eax = (u32)&fsw;
+	inregs.ebx = (u32)&fcw;
+
+	exec_in_big_real_mode(&insn_fninit);
+	report("fninit", 0, fsw == 0 && (fcw & 0x103f) == 0x003f);
+}
+
 void realmode_start(void)
 {
 	test_null();
@@ -1424,6 +1436,7 @@  void realmode_start(void)
 	test_movzx_movsx();
 	test_bswap();
 	test_aad();
+	test_fninit();
 
 	exit(0);
 }