From patchwork Mon Aug 1 02:52:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mihai_Don=C8=9Bu?= X-Patchwork-Id: 9253627 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2089460865 for ; Mon, 1 Aug 2016 02:55:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 12B772848A for ; Mon, 1 Aug 2016 02:55:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 073ED2848C; Mon, 1 Aug 2016 02:55:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 612302848A for ; Mon, 1 Aug 2016 02:55:45 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bU3LL-0007Xx-Oa; Mon, 01 Aug 2016 02:52:39 +0000 Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bU3LJ-0007XN-Sf for xen-devel@lists.xen.org; Mon, 01 Aug 2016 02:52:37 +0000 Received: from [193.109.254.147] by server-2.bemta-14.messagelabs.com id FF/40-30017-579BE975; Mon, 01 Aug 2016 02:52:37 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHIsWRWlGSWpSXmKPExsUSfTxjoW7Jznn hBpsfyFos+biYxYHR4+ju30wBjFGsmXlJ+RUJrBkzl9xnL1gsWXG1q5G5gfEqfxcjJ4eQgLvE 3sYFTF2MXED2GkaJt6cOs0MkrjFK/LidB2G7SfzvecECUbSdUaLr5Dkgh4ODTcBWov+OD0iNi IC0xLXPlxlBbGaBQomNj66A2cICZRJrrk8Em8kioCrxrvscG4jNK2AlcW9NOyuILSEgJ/Hy9U 9mEJtTwFri+aNljCDjhYBq/q1igigXlDg58wnYVmYBdYn184QgNslLNG+dzQwSlhDIkfh6VA/ ClJL436oEcq+EwEQWidbWx1CLZCQeTbzJNoFRdBaSobMQhs5CMnQBI/MqRo3i1KKy1CJdI0O9 pKLM9IyS3MTMHF1DQxO93NTi4sT01JzEpGK95PzcTYzAeKhnYGDcwXjxkt8hRkkOJiVR3s+yc 8OF+JLyUyozEosz4otKc1KLDzHKcHAoSfAm7pgXLiRYlJqeWpGWmQOMTJi0BAePkgjvNZA0b3 FBYm5xZjpE6hSjopQ4bxJIQgAkkVGaB9cGSwaXGGWlhHkZGRgYhHgKUotyM0tQ5V8xinMwKgn zLgCZwpOZVwI3/RXQYiagxYn2c0AWlyQipKQaGCf3vJj/sj7J3M5tfm1p9Gsm372bi38tdfnd PPdZ0FKm35EHPEIfLfyffEST89nzp41dU18rTvweyup1NeGyRvDxPNWrgeYbN97/ZHt4Wy/f+ 0o52bRXStMj97tc3fDPVMhzYa+6+uGUDcZ1bim7r7J9uDjzc5v/VTH+uAq3AyJPz+56HHt1g7 QSS3FGoqEWc1FxIgAeBvZPAQMAAA== X-Env-Sender: mdontu@bitdefender.com X-Msg-Ref: server-11.tower-27.messagelabs.com!1470019955!48448953!1 X-Originating-IP: [91.199.104.161] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 27096 invoked from network); 1 Aug 2016 02:52:36 -0000 Received: from mx01.bbu.dsd.mx.bitdefender.com (HELO mx01.bbu.dsd.mx.bitdefender.com) (91.199.104.161) by server-11.tower-27.messagelabs.com with DHE-RSA-AES128-GCM-SHA256 encrypted SMTP; 1 Aug 2016 02:52:36 -0000 Received: (qmail 30098 invoked from network); 1 Aug 2016 05:52:35 +0300 Received: from unknown (HELO mx-sr.buh.bitdefender.com) (10.17.80.103) by mx01.bbu.dsd.mx.bitdefender.com with AES256-GCM-SHA384 encrypted SMTP; 1 Aug 2016 05:52:35 +0300 Received: from smtp01.buh.bitdefender.com (smtp.bitdefender.biz [10.17.80.75]) by mx-sr.buh.bitdefender.com (Postfix) with ESMTP id B90487FBFD for ; Mon, 1 Aug 2016 05:52:34 +0300 (EEST) Received: (qmail 9979 invoked from network); 1 Aug 2016 05:52:34 +0300 Received: from unknown (HELO mdontu-l.bitdefender.biz) (mdontu@bitdefender.com@10.20.65.8) by smtp01.buh.bitdefender.com with AES128-SHA256 encrypted SMTP; 1 Aug 2016 05:52:34 +0300 From: =?UTF-8?q?Mihai=20Don=C8=9Bu?= To: xen-devel@lists.xen.org Date: Mon, 1 Aug 2016 05:52:29 +0300 Message-Id: <20160801025231.7211-2-mdontu@bitdefender.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20160801025231.7211-1-mdontu@bitdefender.com> References: <20160801025231.7211-1-mdontu@bitdefender.com> MIME-Version: 1.0 X-BitDefender-Scanner: Clean, Agent: BitDefender qmail 3.1.6 on smtp01.buh.bitdefender.com, sigver: 7.66612 X-BitDefender-Spam: No (0) X-BitDefender-SpamStamp: Build: [Engines: 2.15.6.911, Dats: 429454, Stamp: 3], Multi: [Enabled, t: (0.000009, 0.003092)], BW: [Enabled, t: (0.000006,0.000002)], RBL DNSBL: [Disabled], APM: [Enabled, Score: 500, t: (0.003026), Flags: 85D2ED72; NN_LEGIT_SUMM_400_WORDS; NN_NO_LINK_NMD; NN_LEGIT_BITDEFENDER; NN_LEGIT_S_SQARE_BRACKETS; NN_LEGIT_MAILING_LIST_TO], SGN: [Enabled, t: (0.020060)], URL: [Enabled, t: (0.000005)], RTDA: [Enabled, t: (0.011630), Hit: No, Details: v2.3.10; Id: 2m1ghhh.1aod4lplo.13lrk], total: 0(775) X-BitDefender-CF-Stamp: none Cc: Andrew Cooper , Zhi Wang , Jan Beulich Subject: [Xen-devel] [PATCH v3 2/3] x86/emulate: add support of emulating SSE2 instruction {, v}movd mm, r32/m32 and {, v}movq mm, r64 X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Found that Windows driver was using a SSE2 instruction MOVD. Signed-off-by: Zhi Wang Signed-off-by: Mihai Donțu --- Picked from the XenServer 7 patch queue, as suggested by Andrew Cooper Changed since v2: * handle the case where the destination is a GPR --- xen/arch/x86/x86_emulate/x86_emulate.c | 38 +++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 44de3b6..9f89ada 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -204,7 +204,7 @@ static uint8_t twobyte_table[256] = { /* 0x60 - 0x6F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ImplicitOps|ModRM, /* 0x70 - 0x7F */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ImplicitOps|ModRM, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ImplicitOps|ModRM, ImplicitOps|ModRM, /* 0x80 - 0x87 */ ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, @@ -4409,6 +4409,10 @@ x86_emulate( case 0x6f: /* movq mm/m64,mm */ /* {,v}movdq{a,u} xmm/m128,xmm */ /* vmovdq{a,u} ymm/m256,ymm */ + case 0x7e: /* movd mm,r/m32 */ + /* movq mm,r/m64 */ + /* {,v}movd xmm,r/m32 */ + /* {,v}movq xmm,r/m64 */ case 0x7f: /* movq mm,mm/m64 */ /* {,v}movdq{a,u} xmm,xmm/m128 */ /* vmovdq{a,u} ymm,ymm/m256 */ @@ -4432,7 +4436,17 @@ x86_emulate( host_and_vcpu_must_have(sse2); buf[0] = 0x66; /* SSE */ get_fpu(X86EMUL_FPU_xmm, &fic); - ea.bytes = (b == 0xd6 ? 8 : 16); + switch ( b ) + { + case 0x7e: + ea.bytes = 4; + break; + case 0xd6: + ea.bytes = 8; + break; + default: + ea.bytes = 16; + } break; case vex_none: if ( b != 0xe7 ) @@ -4452,7 +4466,17 @@ x86_emulate( ((vex.pfx != vex_66) && (vex.pfx != vex_f3))); host_and_vcpu_must_have(avx); get_fpu(X86EMUL_FPU_ymm, &fic); - ea.bytes = (b == 0xd6 ? 8 : (16 << vex.l)); + switch ( b ) + { + case 0x7e: + ea.bytes = 4; + break; + case 0xd6: + ea.bytes = 8; + break; + default: + ea.bytes = 16 << vex.l; + } } if ( ea.type == OP_MEM ) { @@ -4468,6 +4492,14 @@ x86_emulate( vex.b = 1; buf[4] &= 0x38; } + else if ( b == 0x7e ) + { + /* convert the GPR destination to (%rAX) */ + *((unsigned long *)&mmvalp) = (unsigned long)ea.reg; + rex_prefix &= ~REX_B; + vex.b = 1; + buf[4] &= 0x38; + } if ( !rc ) { copy_REX_VEX(buf, rex_prefix, vex);