From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: [PATCH kvm-unit-test]: test fninit/fnstsw/fnstcw instructions emulation Date: Thu, 20 Dec 2012 17:00:56 +0200 Message-ID: <20121220150056.GJ17584@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: mtosatti@redhat.com To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:58026 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751031Ab2LTPA6 (ORCPT ); Thu, 20 Dec 2012 10:00:58 -0500 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id qBKF0vuK019198 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 20 Dec 2012 10:00:58 -0500 Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: 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 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); } -- Gleb.