From patchwork Sat Aug 10 04:12:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Bobek X-Patchwork-Id: 11088193 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C7748112C for ; Sat, 10 Aug 2019 04:19:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B57EE223A6 for ; Sat, 10 Aug 2019 04:19:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A669122B1F; Sat, 10 Aug 2019 04:19:09 +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=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 50448223A6 for ; Sat, 10 Aug 2019 04:19:09 +0000 (UTC) Received: from localhost ([::1]:34858 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hwIqS-0002Rm-KH for patchwork-qemu-devel@patchwork.kernel.org; Sat, 10 Aug 2019 00:19:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34768) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hwIkt-0005eZ-Jb for qemu-devel@nongnu.org; Sat, 10 Aug 2019 00:13:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hwIks-0004Lq-Fd for qemu-devel@nongnu.org; Sat, 10 Aug 2019 00:13:23 -0400 Received: from mail-ot1-x341.google.com ([2607:f8b0:4864:20::341]:42320) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hwIks-0004La-Ao for qemu-devel@nongnu.org; Sat, 10 Aug 2019 00:13:22 -0400 Received: by mail-ot1-x341.google.com with SMTP id l15so140514210otn.9 for ; Fri, 09 Aug 2019 21:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZHK0e9XvID8Cei/Jt59+/qv7qtS8MQ3X4OU+8rhkUPE=; b=ahsESW22KAjIWNotNXHxKR0VkHaaRXzx8cLpmbMyXWLQIULdRN2W3hVpU1soGVw7sO 7OjyfxH7ACbUBzopeND900CMDvTlsE24JzoEi5PBDhhTa6N/Pxt8M8gwntUMG25SA9lL 8xI8Y5OAbY56kvovR1cZgg8v6ZfnlA56w/VEAuRRVyWKeEubohR+0kxhfaABBuncogz/ cAG8TtDZwJ/C8hJ5vrWYnqZQO4DfiKtOGw6j26r5+XHe1+wpYrCua2cTbCVt7mSxVUVl 7l/1VD/1qAyvdf/VHqMBD9aIxrP8/N8XQKo60DLenskp7Q8TKO2gxckuHGyeu0t8A1YC jZyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZHK0e9XvID8Cei/Jt59+/qv7qtS8MQ3X4OU+8rhkUPE=; b=NiULbeEiDaiIDMr1p3mrlmAPLU4cRImpKlHieJD96b5yek3w9W9vAGYnafuStE9Ais SJ0G3vSdcjhGCN1ZKlswC8ytJIA67wn03caYQI4Fba8LNgOe8S7BUbT/M9s93zxQJDqk 06mcwDAU30GyFeLIj81Hjsrfby3GjewRTQjDvF6gkGQ6f8Ziquxa8CbHw9v4ZThrcpR8 ePULVLhwZgo/1c2KMAWilhDSb5iiNU3dW9L6Gw+ZF/+ext/r4ZSFad0ozsLfOBxmVe9d dYlbtkpgRjgZOPWEGsBjug5zqUPMlV4vP2HgkPFoa9w66F284hACh8j9LOGxv69BEJEN JAQA== X-Gm-Message-State: APjAAAUR3oz+TubZ8sVqp8vwMYp604VuKfQzDUwYF2iVxQSHBYJwZcUK dn1IAieJeGQs52iZ9x5fRYBGmN8O X-Google-Smtp-Source: APXvYqz2dsZGnx97vx1eckCs3GgLSgcOiFAq2evuyXwn8di1MQJf3G4X1N6hxIE3+JeB4rLtKxdSgw== X-Received: by 2002:a9d:17e6:: with SMTP id j93mr21134723otj.275.1565410401658; Fri, 09 Aug 2019 21:13:21 -0700 (PDT) Received: from dionysus.attlocal.net (69-222-133-165.lightspeed.tukrga.sbcglobal.net. [69.222.133.165]) by smtp.gmail.com with ESMTPSA id f84sm33383540oig.43.2019.08.09.21.13.21 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 09 Aug 2019 21:13:21 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Sat, 10 Aug 2019 00:12:31 -0400 Message-Id: <20190810041255.6820-16-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190810041255.6820-1-jan.bobek@gmail.com> References: <20190810041255.6820-1-jan.bobek@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::341 Subject: [Qemu-devel] [RFC PATCH v2 15/39] target/i386: introduce function ck_cpuid X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?utf-8?q?Alex_Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Introduce a helper function to take care of instruction CPUID checks. Signed-off-by: Jan Bobek Reviewed-by: Richard Henderson --- target/i386/translate.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 03b49411e5..508d584584 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4500,6 +4500,51 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b) #define tcg_gen_gvec_cmpgt(vece, dofs, aofs, bofs, oprsz, maxsz) \ tcg_gen_gvec_cmp(TCG_COND_GT, vece, dofs, aofs, bofs, oprsz, maxsz) +enum { + CK_CPUID_MMX = 1, + CK_CPUID_3DNOW, + CK_CPUID_SSE, + CK_CPUID_SSE2, + CK_CPUID_SSE3, + CK_CPUID_SSSE3, + CK_CPUID_SSE4_1, + CK_CPUID_SSE4_2, + CK_CPUID_SSE4A, + CK_CPUID_AVX, + CK_CPUID_AVX2, +}; + +static int ck_cpuid(CPUX86State *env, DisasContext *s, int ck_cpuid_feat) +{ + switch (ck_cpuid_feat) { + case CK_CPUID_MMX: + return !(s->cpuid_features & CPUID_MMX) + || !(s->cpuid_ext2_features & CPUID_EXT2_MMX); + case CK_CPUID_3DNOW: + return !(s->cpuid_ext2_features & CPUID_EXT2_3DNOW); + case CK_CPUID_SSE: + return !(s->cpuid_features & CPUID_SSE); + case CK_CPUID_SSE2: + return !(s->cpuid_features & CPUID_SSE2); + case CK_CPUID_SSE3: + return !(s->cpuid_ext_features & CPUID_EXT_SSE3); + case CK_CPUID_SSSE3: + return !(s->cpuid_ext_features & CPUID_EXT_SSSE3); + case CK_CPUID_SSE4_1: + return !(s->cpuid_ext_features & CPUID_EXT_SSE41); + case CK_CPUID_SSE4_2: + return !(s->cpuid_ext_features & CPUID_EXT_SSE42); + case CK_CPUID_SSE4A: + return !(s->cpuid_ext3_features & CPUID_EXT3_SSE4A); + case CK_CPUID_AVX: + return !(s->cpuid_ext_features & CPUID_EXT_AVX); + case CK_CPUID_AVX2: + return !(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_AVX2); + default: + g_assert_not_reached(); + } +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum {