From patchwork Thu Jul 14 09:56:24 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: 9229503 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 8731360574 for ; Thu, 14 Jul 2016 09:58:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 782CB27FA9 for ; Thu, 14 Jul 2016 09:58:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6CAB128111; Thu, 14 Jul 2016 09:58:57 +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 EE29427FA9 for ; Thu, 14 Jul 2016 09:58:56 +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 1bNdNe-000569-VK; Thu, 14 Jul 2016 09:56:30 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bNdNe-000563-3U for xen-devel@lists.xen.org; Thu, 14 Jul 2016 09:56:30 +0000 Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id 91/B5-03780-DC167875; Thu, 14 Jul 2016 09:56:29 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBIsWRWlGSWpSXmKPExsUSfTxjoe6ZxPZ wg0mrjC2WfFzM4sDocXT3b6YAxijWzLyk/IoE1ozm6QdZC7rFKqZvPczWwPiMv4uRk0NIwEPi e8taxi5GLiB7LaPErgvXWCCck4wS17duYISpmr2/iR0isZNR4vGix0AOBwebgK1E/x0fkBoRA WmJa58vg9UzCxhKtL49ygZiCwvYSUybdIEJxGYRUJVoWfIfzOYVsJY4+/46K4gtISAn8ffWRx aIuKDEyZlPWEDGMwuoS6yfJwQxUl6ieetsZojyHInbdzpZQUokBKQk/rcqQYQnskis32gCYct IPJp4k20Co/AsJENnIQydhWToAkbmVYwaxalFZalFuoZmeklFmekZJbmJmTm6hgbGermpxcWJ 6ak5iUnFesn5uZsYgSHOAAQ7GFdt9zzEKMnBpCTKq93fFi7El5SfUpmRWJwRX1Sak1p8iFGGg 0NJgvdPQnu4kGBRanpqRVpmDjDaYNISHDxKIrwP44DSvMUFibnFmekQqVOMilLivCdA+gRAEh mleXBtsAi/xCgrJczLCHSIEE9BalFuZgmq/CtGcQ5GJWHe+yBTeDLzSuCmvwJazAS02NocbHF JIkJKqoExRfhNNOObuoqcr1kmbwVlPCte1oWLrbXYKL4sWlvs9KTkV7yJvFXrJtb98g6rdJGw kDq6hjd1asfDvTO+ul4ylvSfevlsW0TYoY0zGn81RV40CrU/t6Tly2UJ54W80mbX4qVtvly1M Tuy9bgs44mvfP03+be6KbFu4UtvcldfpfA+bfJHDTklluKMREMt5qLiRABUReo26wIAAA== X-Env-Sender: mdontu@bitdefender.com X-Msg-Ref: server-5.tower-31.messagelabs.com!1468490188!47379310!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 32261 invoked from network); 14 Jul 2016 09:56:28 -0000 Received: from mx01.bbu.dsd.mx.bitdefender.com (HELO mx01.bbu.dsd.mx.bitdefender.com) (91.199.104.161) by server-5.tower-31.messagelabs.com with DHE-RSA-AES128-GCM-SHA256 encrypted SMTP; 14 Jul 2016 09:56:28 -0000 Received: (qmail 26911 invoked from network); 14 Jul 2016 12:56:27 +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; 14 Jul 2016 12:56:27 +0300 Received: from smtp03.buh.bitdefender.org (unknown [10.17.80.77]) by mx-sr.buh.bitdefender.com (Postfix) with ESMTP id D032E7FBF4 for ; Thu, 14 Jul 2016 12:56:27 +0300 (EEST) Received: (qmail 26553 invoked from network); 14 Jul 2016 12:56:27 +0300 Received: from unknown (HELO mdontu-l.bitdefender.biz) (mdontu@bitdefender.com@10.20.65.41) by smtp03.buh.bitdefender.org with AES128-SHA256 encrypted SMTP; 14 Jul 2016 12:56:27 +0300 From: =?UTF-8?q?Mihai=20Don=C8=9Bu?= To: xen-devel@lists.xen.org Date: Thu, 14 Jul 2016 12:56:24 +0300 Message-Id: <20160714095624.31017-1-mdontu@bitdefender.com> X-Mailer: git-send-email 2.9.1 MIME-Version: 1.0 X-BitDefender-Scanner: Clean, Agent: BitDefender qmail 3.1.6 on smtp03.buh.bitdefender.org, sigver: 7.66314 X-BitDefender-Spam: No (0) X-BitDefender-SpamStamp: Build: [Engines: 2.15.6.911, Dats: 426414, Stamp: 3], Multi: [Enabled, t: (0.000010, 0.003554)], BW: [Enabled, t: (0.000007,0.000001)], RBL DNSBL: [Disabled], APM: [Enabled, Score: 500, t: (0.002804), 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.009999)], URL: [Enabled, t: (0.000005)], RTDA: [Enabled, t: (0.014359), Hit: No, Details: v2.3.10; Id: 2m1ghjn.1amgkn6ss.1pe3h], total: 0(775) X-BitDefender-CF-Stamp: none Cc: andrew.cooper3@citrix.com, jbeulich@suse.com Subject: [Xen-devel] [PATCH] x86/emulate: add support for movq xmm,xmm/m64 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 Signed-off-by: Mihai Donțu --- tools/tests/x86_emulator/test_x86_emulator.c | 23 +++++++++++++++++++++++ xen/arch/x86/x86_emulate/x86_emulate.c | 7 ++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tools/tests/x86_emulator/test_x86_emulator.c b/tools/tests/x86_emulator/test_x86_emulator.c index c7f572a..d18b2d2 100644 --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -697,6 +697,29 @@ int main(int argc, char **argv) else printf("skipped\n"); + printf("%-40s", "Testing movq %%xmm0, 32(%%eax)..."); + if ( stack_exec && cpu_has_mmx ) + { + decl_insn(movq_to_mem2); + + asm volatile ( "pcmpgtb %%xmm0, %%xmm0\n" + put_insn(movq_to_mem2, "movq %%xmm0, 32(%%eax)") + :: ); + + *((unsigned long *)res + 4) = 0xbdbdbdbdbdbdbdbd; + set_insn(movq_to_mem2); + regs.ecx = 0; + regs.eax = (unsigned long)res; + rc = x86_emulate(&ctxt, &emulops); + if ( rc != X86EMUL_OKAY || !check_eip(movq_to_mem2) ) + goto fail; + if ( *((unsigned long *)res + 4) ) + goto fail; + printf("okay\n"); + } + else + printf("skipped\n"); + printf("%-40s", "Testing movdqu %xmm2,(%ecx)..."); if ( stack_exec && cpu_has_sse2 ) { diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index fe594ba..fcf5694 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -245,7 +245,7 @@ static uint8_t twobyte_table[256] = { ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, /* 0xD0 - 0xDF */ - 0, 0, 0, 0, 0, 0, 0, 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, /* 0xE0 - 0xEF */ 0, 0, 0, 0, 0, 0, 0, ImplicitOps|ModRM, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xFF */ @@ -4412,6 +4412,7 @@ x86_emulate( case 0x7f: /* movq mm,mm/m64 */ /* {,v}movdq{a,u} xmm,xmm/m128 */ /* vmovdq{a,u} ymm,ymm/m256 */ + case 0xd6: /* movq xmm,xmm/m64 */ { uint8_t *buf = get_stub(stub); struct fpu_insn_ctxt fic = { .insn_bytes = 5 }; @@ -4429,9 +4430,9 @@ x86_emulate( case vex_66: case vex_f3: host_and_vcpu_must_have(sse2); - buf[0] = 0x66; /* movdqa */ + buf[0] = 0x66; /* movq, movdqa */ get_fpu(X86EMUL_FPU_xmm, &fic); - ea.bytes = 16; + ea.bytes = (b == 0xd6 ? 8 : 16); break; case vex_none: if ( b != 0xe7 )