From patchwork Tue Sep 19 15:44:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 141977 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3486300vqi; Tue, 19 Sep 2023 08:45:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IElbJph3mUjshB83R5t9L7uYtRBZ9f9KNoIaaEwMa9y6cZMxDshhmHGi9nJR6UeLv3qBdfR X-Received: by 2002:aa7:d68d:0:b0:525:70b3:72c2 with SMTP id d13-20020aa7d68d000000b0052570b372c2mr10285956edr.14.1695138309630; Tue, 19 Sep 2023 08:45:09 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id w16-20020aa7d290000000b00523bb5e4029si10870292edq.486.2023.09.19.08.45.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 08:45:09 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=rnp+fK1Z; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 33E6D3858404 for ; Tue, 19 Sep 2023 15:45:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 33E6D3858404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1695138306; bh=fbBmsylpyGl5gCdDx/IAahsZWumwVrwVTnPneUHWg64=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=rnp+fK1ZrGo7/3mAGsLoZGw/HxCd592kIjooCjXp05pwmDNsce0cc7A7JrFBVM0Qk VurMFIAWI2A6LVIduBbvDR9KCfB6A6fRY7ppFXnwRLjUPf5OVr/ZVq8oyna2wnkCME SXe/9PpIMijsrJXqgcX+YwH1OTzFp6AYVlM6KFl8= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2077.outbound.protection.outlook.com [40.107.247.77]) by sourceware.org (Postfix) with ESMTPS id A895C3858D39 for ; Tue, 19 Sep 2023 15:44:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A895C3858D39 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hofQ9g3pgiACFHr87ESOjmp1C1nvkYRtCeTp7lQLXZlKkFBPMIpWi5G9wE04H5Oflwp0QQZceJCUBmNScokvxSoIxlqCDhBkuRTqV3vYbHC7Jjj0ZOQi+B9N9tQksSRMMbMrrV1CVPZj1sqFcJThL2pQEJ076kOIgzqz9qKgV9Bhx92YAcmX4myiscbcuGmBWniPWJpw6OJ2yy5RcEworIMaxGzUtMFzJw3R6HQGLQ5V5znAz/WzL1qqtnqTdcphkx5wfVYPA+h6EbDty3c9YAhW36Mkf4XjwENpzbLXLfeYTFnDjdcP9aDv/Zmvg3h1RrEZIAJ1Hu93Ru4FlBvwSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fbBmsylpyGl5gCdDx/IAahsZWumwVrwVTnPneUHWg64=; b=e5Ract28hVM+jGljRkG1P/4BfTRy8RZMUHW+ZqoHDdG8WRArrp/9R0jfnd/6U2S8gCuIwHoMmyNXCNjv9bIITVRMATV/hzcCYxi8f5CN2UOnq/84snBWjmN6uxD/W4Z0Cbg/YJStV2dRXmvoAGdY569YQkYS5yrmIKlXNgSFhPo5lfQ+Zn3Hz6LLBukP+g420hUVxtBxtUykkBFuol2J1zur1EdTDnRyFt/F+Hp8YxPJRCfnHu2zqvkAvDzpT/MS0teC5tahGFHlWGSr94GqHdxcpd6xUwRUrcq7x9JSOHHYEdEoTF6/Y6uhB6fC8/nuEYUoDmwxtnh9nrK/WR/eOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM9PR04MB8194.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Tue, 19 Sep 2023 15:44:28 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654%6]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 15:44:28 +0000 Message-ID: Date: Tue, 19 Sep 2023 17:44:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH v2 1/4] x86: fold certain VEX and EVEX templates Content-Language: en-US To: Binutils Cc: "H.J. Lu" , Lili Cui References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0046.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::23) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8194:EE_ X-MS-Office365-Filtering-Correlation-Id: de6a00be-2420-435e-edc0-08dbb9274f08 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M7dvAsX4whdzzyVM2zTlqEUAheqygswOe1bSb4wfAW8y5lwfnuxn6fQxTSvE77uZrqazwPwq6/YcIxfd7fKSGaqgblf9HwDQiBA0yjx07E2LiCH235ABV3E2UGBAJ+Eu1RFb8u0rHiyxQYh6XTlwrbpzlly3X922IFCbLAEle9S7ks2rF1NY79NxzBgUrqeSz4bRgEJQCqLtCNj5m8/vhalxwFUhLm9ayKKOs/P3XG+g67aBzzGsgQ9L9US5IEzOMFCMkf8Iup9N+kk/eqJDY0fIq1E8NOovljYbJvIcqg5FzWf1K/JULDYodwOT/uoVG6JD8bZura3gDTE5926+gwjWiDHBmRvAStaLvlFjmM3BumKXTbEWm9cKsI1Iq1GG75RmxxFS1t+OaCoN7IobSwPeuQR3OVRRnuvTiuE9sth5+HEqrV5tmG7NPXsPizypR1Kq03acooD3B7Vrf+SpWS0EpUc34WIBpSVyHdf3ikJ/LIfICo8+n3QJZ3yVmnOZsQ1+/SSQhE4X/f3+0Ohs5YaxgR0r20P6QNcS/2qeNXpKf115mNgpHuzTmfcPNzWkT1JhcWTKkoOtAvHF0AGQQ1Bb499ZpfkeopCHBGTfO2MfoQORizwG+rEHBX4OrhQlFW78ZDXJlgfE9r6Wqtmj+w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(39860400002)(366004)(136003)(376002)(346002)(451199024)(186009)(1800799009)(36756003)(31686004)(5660300002)(30864003)(8676002)(83380400001)(86362001)(41300700001)(4326008)(8936002)(6506007)(6486002)(2616005)(26005)(6512007)(66899024)(2906002)(66946007)(66556008)(478600001)(66476007)(31696002)(38100700002)(54906003)(316002)(6916009)(19627235002)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?JIjQwJ9TB0bGqRNMTrbZjcC3rXky?= =?utf-8?q?ZdwjySwe8fWjhyNCm/6NGu4fyjfthZ1ZEBZvmFN8az3C7t0o/7BwlmoUsTAcyAkK9?= =?utf-8?q?pAvDCR0/Q8ZOddIiCN5Kzkbymc+IPjUBQx7tmT2BwnrcsRj2DHwO/BAByHqZQZfQL?= =?utf-8?q?iHG84ofpIlXf6MNlhhbGsNJUijnibCJV7rOCoRUwXtpCtjq4Uj9CW4JECowVTxZD+?= =?utf-8?q?vaCZFyfkOfl77vyaZzLrS5L14fwlzjvf+uTMowrU/TSfT6lfO5dLFOq6SX3ma9joq?= =?utf-8?q?gZRsiD5DYfQIQtaOeZM+/NVJ9is1ceOnK3km3fXusByuNEd1mePcJSuvbIJeQ5Wj9?= =?utf-8?q?YdBVfpH2I7ghRN4bQf+svma5P+zCwcriR/HfOOE3hNR63nm74EOqOa1omhEBhITJ8?= =?utf-8?q?IcOBhDzmALM7vKgYXBWlwqfifV0R3azUvBNFO031AHYzhZL6DmjdcJub67SzHypys?= =?utf-8?q?ef2vVJp2HgcNKF1s8Ihq+ZixnOTVNYjXjFp7mWK98YoPQw09RqEy6Oxr0xkptLF/q?= =?utf-8?q?Rgc29ZZ18q2UXyFr6H/ZFX2mfWjFgHdqpDyVrW3oQFvHxwHlq/jrVdxxTxNL6k8bC?= =?utf-8?q?KJhDhny9Eg9eghecKPWstypHYxMC1YsbUqvso0ikpWE/Gc79q0AcKG0LgvTH0SKok?= =?utf-8?q?Y8cz6fPMSiN6HNDEE9/I1NKBJypV3aGA02JXu3E1HFN/ik8n2oxJpRIhXdXE0mdZE?= =?utf-8?q?alD491d9p18YzsB6RmhYrwslLeV+Y4sC+QLlaGELyuS2O4R1/vaDxYig4rDzJ7oVF?= =?utf-8?q?6LUIKY+vHXL97IhWgta0F3WYX9V8hvfEer0zzg9YBRZEGu5f/CEqnDNrf941vU7cT?= =?utf-8?q?B0pqg+XOTpj6agIwo4/DzHoCN0t8HJDFuDjJlTI/imm9JnO+y/ojvXeADOu+HWD24?= =?utf-8?q?nJzc93xMhAH9VPdi8n9BH9LnhVuiV8arE2kbefQwP3ImqWuV8iaYNapx8R9sTepKg?= =?utf-8?q?Em47Gkq3eRIBB5YIZ8Us6hXt/W+ZfXBH62ihV5uVXqrg4uQvxMdkiwCVznULP599S?= =?utf-8?q?Bn1xFjog40XzC+Q071taCfdermi77oAevxEgvkaHGFQ/qQqLrwvLlxWnZyEYiFiLI?= =?utf-8?q?7HSLA/X/KoCEaNbLSCKtTFCDDNGxQ2j7eaTJRg5xn8/0sIzmV6wF68Nxz7McWUu8M?= =?utf-8?q?OFD9cdkYiK5eOwP/ZOnI3rwuM9m8O8XkO+fyTOjhGZ29zLmEg3ss2u20FGKeT5/KV?= =?utf-8?q?e7t8oVIB8YXJkgroBxLJmAfmVnpKL7TXIEL1WSCJlWRyFUeMMsCzl/yfDeNaNhKnw?= =?utf-8?q?zdLCJE7cil9gbf8bTyBZcBWtOYpk2oWdBRvX71PwwqCuzq2irp4QKJYvyQrr818TJ?= =?utf-8?q?IBaAlYvEtrs6Z3kb+05g/obp6OzMNiwKeO2qyQk62p5ifLlEds8CMeaQNM6HXISVu?= =?utf-8?q?kkcwGwGT+Rv6EsID04em/bHkq2fQQPkkZZMUSJZaqoy5HjH6Hir9sMDnb9gwy1b/a?= =?utf-8?q?KChp0G7CVyWvnL83njWwJIIu1q2TgDYgTlfY++/vq1h3cPcCD3uRuyUkjQu5QmOl0?= =?utf-8?q?OPzM9cNFsHPF?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: de6a00be-2420-435e-edc0-08dbb9274f08 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 15:44:28.6593 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sfrJMb8ze7nC589nYvYWB5WmRr0bTtVW4EcgsLFufdblGvagScqeLVHbm/MSiEhQ9I+OEPNgTpppLLOUvMhRKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8194 X-Spam-Status: No, score=-3026.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777481347902111149 X-GMAIL-MSGID: 1777481347902111149 In anticipation of APX introduce logic to reduce the number of templates we have now, allowing to limit some the number of ones we then need to gain. The fundamental requirements are that - attributes be compatible, which specifically means VexW needs to be the same in the templates (which often isn't the case, for VEX encodings having far more WIG tha, EVEX ones), - the EVEX form being AVX512F (with or without AVX512VL), not any of its extensions (the same will then be required for APX - it'll need to be APX_F). Note that in check_register() there's now a redundant zmm check. Since this logic will need revisiting for APX anyway, I'd like to keep it that way for now. (Similarly a couple of if()-s which could be folded are kept separate, to reduce code churn when adding APX support.) --- RFC: Of course there are quite a few code changes, so there is the question of the savings being worth it. The AVX512F constraint may be possible to relax, but the change is big enough already. --- v2: Deal with need_evex_encoding() being unreliable ahead of operand parsing (the difference really is largely benign here, but becomes relevant in subsequent changes). --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -436,6 +436,7 @@ struct _i386_insn vex_encoding_vex, vex_encoding_vex3, vex_encoding_evex, + vex_encoding_evex512, vex_encoding_error } vec_encoding; @@ -1872,6 +1873,13 @@ cpu_flags_and_not (i386_cpu_flags x, i38 static const i386_cpu_flags avx512 = CPU_ANY_AVX512F_FLAGS; +static INLINE bool need_evex_encoding (void) +{ + return i.vec_encoding == vex_encoding_evex + || i.vec_encoding == vex_encoding_evex512 + || i.mask.reg; +} + #define CPU_FLAGS_ARCH_MATCH 0x1 #define CPU_FLAGS_64BIT_MATCH 0x2 @@ -1899,6 +1907,29 @@ cpu_flags_match (const insn_template *t) /* This instruction is available only on some archs. */ i386_cpu_flags cpu = cpu_arch_flags; + /* Dual VEX/EVEX templates may need stripping of one of the flags. */ + if (t->opcode_modifier.vex && t->opcode_modifier.evex) + { + /* Dual AVX/AVX512F templates need to retain AVX512F only if we already + know that EVEX encoding will be needed. */ + if ((x.bitfield.cpuavx || x.bitfield.cpuavx2) + && x.bitfield.cpuavx512f) + { + if (need_evex_encoding ()) + { + x.bitfield.cpuavx = 0; + x.bitfield.cpuavx2 = 0; + } + /* need_evex_encoding() isn't reliable before operands were + parsed. */ + else if (i.operands) + { + x.bitfield.cpuavx512f = 0; + x.bitfield.cpuavx512vl = 0; + } + } + } + /* AVX512VL is no standalone feature - match it and then strip it. */ if (x.bitfield.cpuavx512vl && !cpu.bitfield.cpuavx512vl) return match; @@ -1924,6 +1955,8 @@ cpu_flags_match (const insn_template *t) && (!x.bitfield.cpupclmulqdq || cpu.bitfield.cpupclmulqdq)) match |= CPU_FLAGS_ARCH_MATCH; } + else if (x.bitfield.cpuavx2 && cpu.bitfield.cpuavx2) + match |= CPU_FLAGS_ARCH_MATCH; else if (x.bitfield.cpuavx512f) { /* We need to check a few extra flags with AVX512F. */ @@ -3646,6 +3679,27 @@ install_template (const insn_template *t i.tm = *t; + /* Dual VEX/EVEX templates need stripping one of the possible variants. */ + if (t->opcode_modifier.vex && t->opcode_modifier.evex) + { + if ((is_cpu (t, CpuAVX) || is_cpu (t, CpuAVX2)) + && is_cpu (t, CpuAVX512F)) + { + if (need_evex_encoding ()) + { + i.tm.opcode_modifier.vex = 0; + i.tm.cpu.bitfield.cpuavx = 0; + if (is_cpu (&i.tm, CpuAVX2)) + i.tm.cpu.bitfield.isa = 0; + } + else + { + i.tm.opcode_modifier.evex = 0; + i.tm.cpu.bitfield.cpuavx512f = 0; + } + } + } + /* Note that for pseudo prefixes this produces a length of 1. But for them the length isn't interesting at all. */ for (l = 1; l < 4; ++l) @@ -4553,6 +4607,8 @@ optimize_encoding (void) i.tm.opcode_modifier.vex = VEX128; i.tm.opcode_modifier.vexw = VEXW0; i.tm.opcode_modifier.evex = 0; + i.vec_encoding = vex_encoding_vex; + i.mask.reg = NULL; } else if (optimize > 1) i.tm.opcode_modifier.evex = EVEX128; @@ -5438,6 +5494,11 @@ md_assemble (char *line) if (optimize && !i.no_optimize && i.tm.opcode_modifier.optimize) optimize_encoding (); + /* Past optimization there's no need to distinguish vex_encoding_evex and + vex_encoding_evex512 anymore. */ + if (i.vec_encoding == vex_encoding_evex512) + i.vec_encoding = vex_encoding_evex; + if (use_unaligned_vector_move) encode_with_unaligned_vector_move (); @@ -5467,6 +5528,7 @@ md_assemble (char *line) if (i.tm.operand_types[j].bitfield.tmmword) i.xstate |= xstate_tmm; else if (i.tm.operand_types[j].bitfield.zmmword + && !i.tm.opcode_modifier.vex && vector_size >= VSZ512) i.xstate |= xstate_zmm; else if (i.tm.operand_types[j].bitfield.ymmword @@ -6468,7 +6530,8 @@ check_VecOperands (const insn_template * cpu = cpu_flags_and (cpu_flags_from_attr (t->cpu), avx512); if (!cpu_flags_all_zero (&cpu) && !is_cpu (t, CpuAVX512VL) - && !cpu_arch_flags.bitfield.cpuavx512vl) + && !cpu_arch_flags.bitfield.cpuavx512vl + && (!t->opcode_modifier.vex || need_evex_encoding ())) { for (op = 0; op < t->operands; ++op) { @@ -6779,6 +6842,8 @@ check_VecOperands (const insn_template * /* Check vector Disp8 operand. */ if (t->opcode_modifier.disp8memshift + && (!t->opcode_modifier.vex + || need_evex_encoding ()) && i.disp_encoding <= disp_encoding_8bit) { if (i.broadcast.type || i.broadcast.bytes) @@ -6874,7 +6939,8 @@ VEX_check_encoding (const insn_template return 1; } - if (i.vec_encoding == vex_encoding_evex) + if (i.vec_encoding == vex_encoding_evex + || i.vec_encoding == vex_encoding_evex512) { /* This instruction must be encoded with EVEX prefix. */ if (!is_evex_encoding (t)) @@ -11211,6 +11277,10 @@ s_insn (int dummy ATTRIBUTE_UNUSED) goto done; } + /* No need to distinguish vex_encoding_evex and vex_encoding_evex512. */ + if (i.vec_encoding == vex_encoding_evex512) + i.vec_encoding = vex_encoding_evex; + /* Are we to emit ModR/M encoding? */ if (!i.short_form && (i.mem_operands @@ -11633,6 +11703,12 @@ RC_SAE_specifier (const char *pstr) return NULL; } + if (i.vec_encoding == vex_encoding_default) + i.vec_encoding = vex_encoding_evex512; + else if (i.vec_encoding != vex_encoding_evex + && i.vec_encoding != vex_encoding_evex512) + return NULL; + i.rounding.type = RC_NamesTable[j].type; return (char *)(pstr + RC_NamesTable[j].len); @@ -11692,6 +11768,12 @@ check_VecOperations (char *op_string) } op_string++; + if (i.vec_encoding == vex_encoding_default) + i.vec_encoding = vex_encoding_evex; + else if (i.vec_encoding != vex_encoding_evex + && i.vec_encoding != vex_encoding_evex512) + goto unknown_vec_op; + i.broadcast.type = bcst_type; i.broadcast.operand = this_operand; @@ -13953,8 +14035,17 @@ static bool check_register (const reg_en } } - if (vector_size < VSZ512 && r->reg_type.bitfield.zmmword) - return false; + if (r->reg_type.bitfield.zmmword) + { + if (vector_size < VSZ512) + return false; + + if (i.vec_encoding == vex_encoding_default) + i.vec_encoding = vex_encoding_evex512; + else if (i.vec_encoding != vex_encoding_evex + && i.vec_encoding != vex_encoding_evex512) + i.vec_encoding = vex_encoding_error; + } if (vector_size < VSZ256 && r->reg_type.bitfield.ymmword) return false; @@ -13979,7 +14070,8 @@ static bool check_register (const reg_en || flag_code != CODE_64BIT) return false; - if (i.vec_encoding == vex_encoding_default) + if (i.vec_encoding == vex_encoding_default + || i.vec_encoding == vex_encoding_evex512) i.vec_encoding = vex_encoding_evex; else if (i.vec_encoding != vex_encoding_evex) i.vec_encoding = vex_encoding_error; --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -209,6 +209,11 @@ operatorT i386_operator (const char *nam || i386_types[j].sz[0] > 8 || (i386_types[j].sz[0] & (i386_types[j].sz[0] - 1))) return O_illegal; + if (i.vec_encoding == vex_encoding_default) + i.vec_encoding = vex_encoding_evex; + else if (i.vec_encoding != vex_encoding_evex + && i.vec_encoding != vex_encoding_evex512) + return O_illegal; if (!i.broadcast.bytes && !i.broadcast.type) { i.broadcast.bytes = i386_types[j].sz[0]; --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -131,6 +131,8 @@ #define EVexLIG EVex=EVEXLIG #define EVexDYN EVex=EVEXDYN +#define Disp8ShiftVL Disp8MemShift=DISP8_SHIFT_VL + #define Vsz256 Vsz=VSZ256 #define Vsz512 Vsz=VSZ512 @@ -1518,8 +1520,8 @@ vdivs, 0x5e, AVX, Modrm|Vex vdppd, 0x6641, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vdpps, 0x6640, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vextractf128, 0x6619, AVX, Modrm|Vex=2|Space0F3A|VexW=1|NoSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } -vextractps, 0x6617, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -vextractps, 0x6617, AVX|x64, RegMem|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg64 } +vextractps, 0x6617, AVX|AVX512F, Modrm|Vex128|EVex128|Space0F3A|VexWIG|Disp8MemShift=2|NoSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } +vextractps, 0x6617, AVX|AVX512F|x64, RegMem|Vex128|EVex128|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg64 } vhaddpd, 0x667c, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vhaddps, 0xf27c, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vhsubpd, 0x667d, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1541,7 +1543,7 @@ vmovap, 0x28, AVX, D|Modrm| // by Intel AVX spec). To avoid extra template in gcc x86 backend and // support assembler for AMD64, we accept 64bit operand on vmovd so // that we can use one template for both SSE and AVX instructions. -vmovd, 0x666e, AVX, D|Modrm|Vex=1|Space0F|NoSuf, { Reg32|Unspecified|BaseIndex, RegXMM } +vmovd, 0x666e, AVX|AVX512F, D|Modrm|Vex128|EVex128|Space0F|Disp8MemShift=2|NoSuf, { Reg32|Unspecified|BaseIndex, RegXMM } vmovd, 0x667e, AVX|x64, D|RegMem|Vex=1|Space0F|VexW=2|NoSuf|Size64, { RegXMM, Reg64 } vmovddup, 0xf212, AVX, Modrm|Vex|Space0F|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vmovddup, 0xf212, AVX, Modrm|Vex=2|Space0F|VexWIG|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM } @@ -1559,7 +1561,7 @@ vmovntdqa, 0x662a, AVX|AVX2, Modrm|Vex|S vmovntp, 0x2b, AVX, Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } vmovq, 0xf37e, AVX, Load|Modrm|Vex=1|Space0F|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vmovq, 0x66d6, AVX, Modrm|Vex=1|Space0F|VexWIG|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } -vmovq, 0x666e, AVX|x64, D|Modrm|Vex=1|Space0F|VexW=2|NoSuf, { Reg64|Unspecified|BaseIndex, RegXMM } +vmovq, 0x666e, AVX|AVX512F|x64, D|Modrm|Vex128|EVex128|Space0F|VexW1|Disp8MemShift=3|NoSuf, { Reg64|Unspecified|BaseIndex, RegXMM } vmovs, 0x10, AVX, D|Modrm|VexLIG|Space0F|VexWIG|NoSuf, { |Unspecified|BaseIndex, RegXMM } vmovs, 0x10, AVX, D|Modrm|VexLIG|Space0F|VexVVVV|VexWIG|NoSuf, { RegXMM, RegXMM, RegXMM } vmovshdup, 0xf316, AVX, Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } @@ -1599,8 +1601,10 @@ vpcmpgtq, 0x6637, AVX|AVX2, Modrm|Vex|Sp vpcmpistri, 0x6663, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpistrm, 0x6662, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vperm2f128, 0x6606, AVX, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpermilp, 0x660c | , AVX, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpermilp, 0x6604 | , AVX, Modrm|Vex|Space0F3A|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } +vpermilps, 0x660c, AVX|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpermilps, 0x6604, AVX|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F3A|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpermilpd, 0x660d, AVX, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpermilpd, 0x6605, AVX, Modrm|Vex|Space0F3A|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vpextr, 0x6616, AVX|, Modrm|Vex|Space0F3A||NoSuf, { Imm8, RegXMM, |Unspecified|BaseIndex } vpextrw, 0x66c5, AVX, Load|Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf, { Imm8, RegXMM, Reg32|Reg64 } vpextr, 0x6614 | , AVX, RegMem|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Reg64 } @@ -1632,18 +1636,18 @@ vpminub, 0x66da, AVX|AVX2, Modrm|C|Vex|S vpminud, 0x663b, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpminuw, 0x663a, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpmovmskb, 0x66d7, AVX|AVX2, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf, { RegXMM|RegYMM, Reg32|Reg64 } -vpmovsxbd, 0x6621, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxbq, 0x6622, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxbd, 0x6621, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovsxbq, 0x6622, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=1|NoSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } vpmovsxbw, 0x6620, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vpmovsxdq, 0x6625, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxwd, 0x6623, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxwq, 0x6624, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxbd, 0x6631, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxbq, 0x6632, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxwd, 0x6623, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovsxwq, 0x6624, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovzxbd, 0x6631, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovzxbq, 0x6632, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=1|NoSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } vpmovzxbw, 0x6630, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vpmovzxdq, 0x6635, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxwd, 0x6633, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxwq, 0x6634, AVX, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxwd, 0x6633, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovzxwq, 0x6634, AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } vpmuldq, 0x6628, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpmulhrsw, 0x660b, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpmulhuw, 0x66e4, AVX|AVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1710,39 +1714,40 @@ vzeroupper, 0x77, AVX, Vex|Space0F|VexWI // 256bit integer AVX2 instructions. -vpmovsxbd, 0x6621, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovsxbq, 0x6622, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovsxbd, 0x6621, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovsxbq, 0x6622, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vpmovsxbw, 0x6620, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovsxdq, 0x6625, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovsxwd, 0x6623, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovsxwq, 0x6624, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxbd, 0x6631, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxbq, 0x6632, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovsxwd, 0x6623, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } +vpmovsxwq, 0x6624, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovzxbd, 0x6631, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovzxbq, 0x6632, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vpmovzxbw, 0x6630, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovzxdq, 0x6635, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxwd, 0x6633, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxwq, 0x6634, AVX2, Modrm|Vex=2|Space0F38|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovzxwd, 0x6633, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } +vpmovzxwq, 0x6634, AVX2|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } // New AVX2 instructions. vbroadcasti128, 0x665A, AVX2, Modrm|Vex=2|Space0F38|VexW=1|NoSuf, { Xmmword|Unspecified|BaseIndex, RegYMM } vbroadcastsd, 0x6619, AVX2, Modrm|Vex=2|Space0F38|VexW=1|NoSuf, { RegXMM, RegYMM } -vbroadcastss, 0x6618, AVX2, Modrm|Vex|Space0F38|VexW=1|NoSuf, { RegXMM, RegXMM|RegYMM } +vbroadcastss, 0x6618, AVX2|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexW0|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpblendd, 0x6602, AVX2, Modrm|Vex|Space0F3A|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpbroadcast, 0x6678 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } -vpbroadcast, 0x6658 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf|Optimize, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcastd, 0x6658, AVX2|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexW0|Disp8MemShift|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastq, 0x6659, AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf|Optimize, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM } vperm2i128, 0x6646, AVX2, Modrm|Vex=2|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpermd, 0x6636, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpermpd, 0x6601, AVX2, Modrm|Vex=2|Space0F3A|VexW1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM } -vpermps, 0x6616, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpermq, 0x6600, AVX2, Modrm|Vex=2|Space0F3A|VexW1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM } +vpermd, 0x6636, AVX2|AVX512F, Modrm|Vex256|EVexDYN|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermpd, 0x6601, AVX2|AVX512F, Modrm|Vex256|EVexDYN|Masking|Space0F3A|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } +vpermps, 0x6616, AVX2|AVX512F, Modrm|Vex256|EVexDYN|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermq, 0x6600, AVX2|AVX512F, Modrm|Vex256|EVexDYN|Masking|Space0F3A|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } vextracti128, 0x6639, AVX2, Modrm|Vex=2|Space0F3A|VexW=1|NoSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } vinserti128, 0x6638, AVX2, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } vpmaskmov, 0x668e, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { RegXMM|RegYMM, RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } vpmaskmov, 0x668c, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } -vpsllv, 0x6647, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsravd, 0x6646, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsrlv, 0x6645, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpsllv, 0x6647, AVX2|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsravd, 0x6646, AVX2|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsrlv, 0x6645, AVX2|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX gather instructions vgatherdpd, 0x6692, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW1|SwapSources|CheckOperandSize|NoSuf|VecSIB128, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex, RegXMM|RegYMM } @@ -1779,7 +1784,7 @@ vpclmulhqhqdq, 0x6644/0x11, AVX|PCLMULQD vgf2p8affineinvqb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV|VexW1|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vgf2p8affineqb, 0x66ce, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV|VexW1|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vgf2p8mulb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vgf2p8mulb, 0x66cf, GFNI|AVX|AVX512F, Modrm|Vex|EVexDYN|Masking|Space0F38|VexVVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // FSGSBASE, RDRND and F16C @@ -2082,8 +2087,6 @@ vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, // AVX512F instructions. -#define Disp8ShiftVL Disp8MemShift=DISP8_SHIFT_VL - , 0x6615, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vprorv, 0x6614, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsllv, 0x6647, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrav, 0x6646, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrlv, 0x6645, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsravq, 0x6646, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpternlog, 0x6625, AVX512F, Modrm|Masking|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vbroadcastf32x4, 0x661A, AVX512F, Modrm|Masking|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { XMMword|Unspecified|BaseIndex, RegYMM|RegZMM } @@ -2153,10 +2154,9 @@ vbroadcasti32x4, 0x665A, AVX512F, Modrm| vbroadcastf64x4, 0x661B, AVX512F, Modrm|EVex=1|Masking|Space0F38|VexW=2|Disp8MemShift=5|NoSuf, { YMMword|Unspecified|BaseIndex, RegZMM } vbroadcasti64x4, 0x665B, AVX512F, Modrm|EVex=1|Masking|Space0F38|VexW=2|Disp8MemShift=5|NoSuf, { YMMword|Unspecified|BaseIndex, RegZMM } -vbroadcastss, 0x6618, AVX512F, Modrm|Masking|Space0F38|VexW0|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vbroadcastsd, 0x6619, AVX512F, Modrm|Masking|Space0F38|VexW1|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } -vpbroadcast, 0x6658 | , AVX512F, Modrm|Masking|Space0F38||Disp8MemShift|NoSuf, { RegXMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastq, 0x6659, AVX512F, Modrm|Masking|Space0F38|VexW1|Disp8MemShift|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcast, 0x667c, AVX512F, Modrm|Masking|Space0F38||NoSuf, { , RegXMM|RegYMM|RegZMM } vcmpp, 0xC2/0x, AVX512F, Modrm|Masking|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } @@ -2246,9 +2246,6 @@ vextracti32x4, 0x6639, AVX512F, Modrm|Ma vextractf64x4, 0x661B, AVX512F, Modrm|EVex=1|Masking|Space0F3A|VexW=2|Disp8MemShift=5|NoSuf, { Imm8, RegZMM, RegYMM|Unspecified|BaseIndex } vextracti64x4, 0x663B, AVX512F, Modrm|EVex=1|Masking|Space0F3A|VexW=2|Disp8MemShift=5|NoSuf, { Imm8, RegZMM, RegYMM|Unspecified|BaseIndex } -vextractps, 0x6617, AVX512F, Modrm|EVex128|Space0F3A|VexWIG|Disp8MemShift=2|NoSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -vextractps, 0x6617, AVX512F|x64, RegMem|EVex128|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg64 } - vfixupimmp, 0x6654, AVX512F, Modrm|Masking|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|SAE, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vfixupimms, 0x6655, AVX512F, Modrm|EVexLIG|Masking|Space0F3A|VexVVVV||Disp8MemShift|NoSuf|SAE, { Imm8|Imm8S, RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } @@ -2304,8 +2301,6 @@ vmovap, 0x28, AVX512F, D|Mo vmovntp, 0x2B, AVX512F, Modrm|Space0F||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM, XMMword|YMMword|ZMMword|Unspecified|BaseIndex } vmovup, 0x10, AVX512F, D|Modrm|Masking|Space0F||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vmovd, 0x666E, AVX512F, D|Modrm|EVex=2|Space0F|Disp8MemShift=2|NoSuf, { Reg32|Unspecified|BaseIndex, RegXMM } - vmovddup, 0xF212, AVX512F, Modrm|Masking|Space0F|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Unspecified|BaseIndex, RegYMM|RegZMM } vmovdqa64, 0x666F, AVX512F, D|Modrm|Masking|Space0F|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -2322,7 +2317,6 @@ vmovhp, 0x17, AVX512F, Modr vmovlp, 0x12, AVX512F, Modrm|EVexLIG|Space0F|VexVVVV||Disp8MemShift=3|NoSuf, { Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmovlp, 0x13, AVX512F, Modrm|EVexLIG|Space0F||Disp8MemShift=3|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex } -vmovq, 0x666E, AVX512F|x64, D|Modrm|EVex128|Space0F|VexW1|Disp8MemShift=3|NoSuf, { Reg64|Unspecified|BaseIndex, RegXMM } vmovq, 0xF37E, AVX512F, Load|Modrm|EVex=2|Space0F|VexW1|Disp8MemShift=3|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vmovq, 0x66D6, AVX512F, Modrm|EVex=2|Space0F|VexW1|Disp8MemShift=3|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } @@ -2360,15 +2354,10 @@ vpcmpu, 0x661e/, AVX vptestm, 0x6627, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vptestnm, 0xf327, AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpermd, 0x6636, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vpermps, 0x6616, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } - -vpermilp, 0x6604 | , AVX512F, Modrm|Masking|Space0F3A||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpermilp, 0x660C | , AVX512F, Modrm|Masking|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpermilpd, 0x6605, AVX512F, Modrm|Masking|Space0F3A|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpermilpd, 0x660d, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpermpd, 0x6601, AVX512F, Modrm|Masking|Space0F3A|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } vpermpd, 0x6616, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vpermq, 0x6600, AVX512F, Modrm|Masking|Space0F3A|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } vpermq, 0x6636, AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vpmovdb, 0xF331, AVX512F, Modrm|EVex=1|Masking|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegZMM, RegXMM|Unspecified|BaseIndex } @@ -2593,31 +2582,11 @@ vpmovsqw, 0xF324, AVX512F|AVX512VL, Modr vpmovusqw, 0xF314, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexW0|Disp8MemShift=2|NoSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } vpmovusqw, 0xF314, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexW0|Disp8MemShift=3|NoSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovsxbd, 0x6621, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovsxbd, 0x6621, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } -vpmovzxbd, 0x6631, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovzxbd, 0x6631, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } - -vpmovsxbq, 0x6622, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=1|NoSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } -vpmovsxbq, 0x6622, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vpmovzxbq, 0x6632, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=1|NoSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } -vpmovzxbq, 0x6632, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } - vpmovsxdq, 0x6625, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexW0|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovsxdq, 0x6625, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } vpmovzxdq, 0x6635, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexW0|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovzxdq, 0x6635, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovsxwd, 0x6623, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } -vpmovsxwd, 0x6623, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovzxwd, 0x6633, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } -vpmovzxwd, 0x6633, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } - -vpmovsxwq, 0x6624, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovsxwq, 0x6624, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } -vpmovzxwq, 0x6634, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexWIG|Disp8MemShift=2|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovzxwq, 0x6634, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexWIG|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } - // AVX512VL instructions end. // AVX512BW instructions. @@ -2960,7 +2929,6 @@ vpshufbitqmb, 0x668f, AVX512_BITALG, Mod vgf2p8affineinvqb, 0x66cf, GFNI|AVX512F, Modrm|Masking|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vgf2p8affineqb, 0x66ce, GFNI|AVX512F, Modrm|Masking|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vgf2p8mulb, 0x66cf, GFNI|AVX512F, Modrm|Masking|Space0F38|VexVVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512 + GFNI instructions end From patchwork Tue Sep 19 15:45:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 141978 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3486480vqi; Tue, 19 Sep 2023 08:45:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFab5eseAzoqg4JcHdpfvoWFo7LQhBwmE6RMm4LaeqQIoHSO7hLnJHpSYJ1B6+2Kt3uPzIr X-Received: by 2002:a17:906:844a:b0:9a2:225a:8d01 with SMTP id e10-20020a170906844a00b009a2225a8d01mr11581376ejy.7.1695138323475; Tue, 19 Sep 2023 08:45:23 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id r15-20020a170906364f00b00997e1a43c28si9336950ejb.381.2023.09.19.08.45.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 08:45:23 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Al9hUzxa; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 389F4385770D for ; Tue, 19 Sep 2023 15:45:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 389F4385770D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1695138317; bh=URz59eXzeF5Oh7GUg5ygG6DZNsYgIwTLhfuvLG1DdlQ=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Al9hUzxaA7huib4XPHib/5BReFKCn8P3d4RlxTKwKu2UDEhoKPyzVW8dhRPiKWzBA 715b2qKv2QuaN/f9P47Oz1bV/2pM51QAxs14mEQZpTX6PL0AY1wLpEV1jNtfyRFCzl kUJeko4V2ZmnxBGEgw7dcAPj2gIO0F5j+Bm4SgaQ= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2088.outbound.protection.outlook.com [40.107.247.88]) by sourceware.org (Postfix) with ESMTPS id 341843858031 for ; Tue, 19 Sep 2023 15:45:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 341843858031 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CBX6EjIPmN7wat8i3An+fjF123ltBoRhj5Mce8ovxzzp/LdlrwlmrXJRbRgdftg4pwkLKZdQsPQ7sW8L4eO8v/ehuoXZSdpE3rwKQ/dWkSUcp5QOMyprSJTbngmSSuR8Fj6/XQIRXSY2OabUK9FvG8qLclT7BAWs4u+EMcXWm1j3ybfnTiBioW2eVh1tS6Vt8tDGlnVxiZzg3yw/bf4fjnAQPvZ1Qg046ATJMV1yJra6pkypo+fNdiqOrkCav0L4lzcGB/VGs3oOf3WFqLvbYntj3T0nUQTwyjXajUmjMziWU3vAvjP27FXQkITHARafOmCbYxzkDM4h2d0fAUIO5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=URz59eXzeF5Oh7GUg5ygG6DZNsYgIwTLhfuvLG1DdlQ=; b=Zij1fqVQl4o7C8EohwEGkiQtb4GxiTe2v9gIb1K3bb9drsStB63mglEqbgO5CrKZCP80XABlwXKL/VIX6fDBSHfl+KpT2r+ptVoBxilTsGUkqSIytpvqgEgXwYGRuYzS2mgEtbWwyrKpeGgb2gEa0CAiMtlZlcvGWUsJipOiLjWZGGF1HCSjo14BQqGuUnU0JqWsMacjU8VQtSpMZ2Wc4v21+KD7JYdPzc+u/Icz6Ycvax56nXPMbMc7XC/ILLMGrp5yhUvR1t6A8pECjfrXAMImi0FjhAFGcxL2f9OKWnBOA0cvOsn6fquBUCPbVwzjDVipy4ViPZhmvgU6rYJyLg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM9PR04MB8194.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Tue, 19 Sep 2023 15:45:04 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654%6]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 15:45:04 +0000 Message-ID: Date: Tue, 19 Sep 2023 17:45:02 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH v2 2/4] x86: fold VAES/VPCLMULQDQ VEX and EVEX templates Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0039.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::22) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8194:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ec2540c-3bf1-47fb-5d9d-08dbb927643a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ugHDKHE1LepOPC+jPyA/hcswarw+lIiogb3mToRnqOl5qAg/paZblRPj5EeYLW+K+ZlNXEH9jmoxVJGrRJ6jeLKgLVZnxMcfHsQTtL+c0+tzEwv0rouIV9GpY92FNWPXeQgxnN1b+IJVGVRKpX6IyAvlLJJSqI8/5ldQNYsktRQ/4QRPJl4O7nrYZmN1H28p6Itx9sQ26AwAkwoAakZ6mPEmghBRyNy9WZgckhvEt9oTIGroTE8yT6IVpFa4Xkk64zJUQSAKVBFOFzFFiQzRc9FyI8mAy1b+E76Kp605ucOCX5HubU27K8I8QHrK8CueMXYImtM82lRFNgSli1nCjzSu+lnVU6GZKFWBSeEEM/4M8kT1RApR3FIvvuBgY2pbYofy9VywpxBkP5G8WCnJP3TDhV0sTkaL0oGLdaX8jXiQW3s4u+Yl4w7xEOA/iV/Rl7WO1HtVdb5O6fXXMdb6RQU6oXEIPHVfufNt/KO+ep7OOFILYsjrYocl2zS52wTAn29Pa3fnX+jl7WTapfJugO5jwJ40cWL7TwJlhYPhMtqvSQ7bbS67Z9vmnuvLAtOFcckMR44uBU8KhvL8hE+fwxCGF177zl2YjOdCXFgfYRBkzYvzGL2x2D7hLY6ylg8PORQyc2xRmO6sy8vifPKdfg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(39860400002)(366004)(136003)(376002)(346002)(451199024)(186009)(1800799009)(36756003)(31686004)(5660300002)(8676002)(86362001)(41300700001)(4326008)(8936002)(6506007)(6486002)(2616005)(26005)(6512007)(2906002)(66946007)(66556008)(478600001)(66476007)(31696002)(38100700002)(316002)(6916009)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?wIeAHwi5f64GitEQDS1TaLU2Ptck?= =?utf-8?q?sJQDTchSAqtQdNKsRrqwCGkCAt/n1lfH4iIGpnlt3n347z6EVr4dHvkjs4PIClqRn?= =?utf-8?q?L4gLjB2Q0p03mJ6ImAzDAuYuCIQc0thXMIMxo0eHtsy7Wh7uWS+wmFrrygwvqLGfY?= =?utf-8?q?X2bCbqnxpu7sQO0qU/J3t6IkKaPMMwLp4AyD/UeDUK63Nv+Rto8VXbfHiQo3PBgSp?= =?utf-8?q?fKkBy0PiyuIlqdbTrwEROQ0tO0ehVqjtByOSEBvqgp7U35CFxXT1qg1TV6qo0wvk8?= =?utf-8?q?GEEldCaVZp5177djf1Sv0nwBE8Njhgh6X57tShFSHBDZhzvkdmX2DZSA7a6aEUuhR?= =?utf-8?q?Zq6l+UPg6eRkJj/Yuh65+p3Wfo4Dknmpa7mAMfiLRYjjxx0lKtX2LNN4XZKXwUNLN?= =?utf-8?q?lJqcLsG2z5v8OMPWJWNkYwq8DMhrtqmNKMBllhgT4hX3zkIfbrMFV54UUSWaoipZ9?= =?utf-8?q?HhSi7V1kRgEHyA13xyzWhUMPOAMoEGUrv1wQ42DoQ9JDrX+ggCchEwQByO4xUyxIn?= =?utf-8?q?IjWnHUYsvqzCmLPE6MMYKb3lGc+UpcqJJWbLZLXdBxwGC3TaVUpVQI2b2h9dmFhLR?= =?utf-8?q?YiWBt3GfzOuwv7/fgdxtlvLj9T9F0tt/6ZhAsH5U/039DAvSH1k9QWbSXFYpVh4mR?= =?utf-8?q?DWMrF1vd1mGqVuvT1iU7dIh4iH0fPA8CyR9fjHjyw1K8nNj8FuNJo4YHFC3UvRyT+?= =?utf-8?q?XC6Tn134AsI0JhRnjNUS/oiQbRjfMsPNgNaIBNQU8lWmLBHonDrWz8sr2e9mM9/5Q?= =?utf-8?q?xQQt1s7LBHKNW5P2VelpEek5y9E5+YImS4kmf+awc0aaxS0qYvg/jAeHDyt4Kw3dw?= =?utf-8?q?15OEBhLnXJ6ijNQzVBmz58GQOooHVIXlMgzBczWGhEUt6w9BpvxRQZvoLmex6n+FF?= =?utf-8?q?CeY1sACn7VJ3+2fwaqjpd00GON4FjhD4nxgBfXWHsOU5MsElICR42+iiYPUcfyhQd?= =?utf-8?q?1KCEM5Hryc683BVEVjCQ9eZL269yH2g/98TQ/QEfZ3/Fq6fsFs3X0cX8SiFV5gZhu?= =?utf-8?q?vLYYcWdyfFAMHVv0CZ8yvSsbEMibCNxZUGcA2aARMlRD225Bk192UKnbvBwlYiGWB?= =?utf-8?q?UxBpBRh6TfqclsYSrC8gc1iC7rXOmh+jpkDzaA+kfRCHFIUsjpi1VwVVU1CbrGhbX?= =?utf-8?q?ErU9itJeETJPfbxJy64Ydcyk+Y64n8I3IOD+cpl4335kHWEsNNLuu/tqsf8xR/Ruc?= =?utf-8?q?Saem5H0xRi82qnYM92dt2Y71FTPtmV+2VJX6sziTv1j9vY5CsfVp5dvvjAXvQArY4?= =?utf-8?q?8n4TN5bOAaBJ/pJ+FQVHyr+7kSoJsYyjVC/Fa6FQLRwliB/h+6b06KVTKBqCXdgyA?= =?utf-8?q?xBScO1gx7pHgqr/jMOqiXAn3hHlmatRh1cPAcuqy+I8NRgX4xkf2SjL++n4J+BHBK?= =?utf-8?q?fdu5wDPnuI9FLNTHIUWEXfiHdw6PPpAxpPCfNDXJQvOdxvaParm3yt82QYPYpO3k3?= =?utf-8?q?d0ger+O5snfpA8F8CFVtV02fExdOsvlcaPq5DONvgVSUqsgvFwge6wZtbCgm7xGKh?= =?utf-8?q?EY5w9gEluqxo?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ec2540c-3bf1-47fb-5d9d-08dbb927643a X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 15:45:04.0658 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3eMA/hPwgcoccsBvZGZE/Z1nUfG4DbfLj58D8MV00Ul2NNeCyk+0pK6HV5wc7abnbLIEE8Pe5XQI0tBVQ1d3uA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8194 X-Spam-Status: No, score=-3026.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777481363098929920 X-GMAIL-MSGID: 1777481363098929920 Following the folding of some generic AVX/AVX2 templates with their AVX512F counterpart ones, do this for VAES and VPCLMULQDQ ones as well. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1944,7 +1944,17 @@ cpu_flags_match (const insn_template *t) cpu = cpu_flags_and (x, cpu); if (!cpu_flags_all_zero (&cpu)) { - if (x.bitfield.cpuavx) + if (t->cpu.bitfield.cpuavx && t->cpu.bitfield.cpuavx512f) + { + if ((need_evex_encoding () + ? cpu.bitfield.cpuavx512f + : cpu.bitfield.cpuavx) + && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni) + && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes) + && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq)) + match |= CPU_FLAGS_ARCH_MATCH; + } + else if (x.bitfield.cpuavx) { /* We need to check a few extra flags with AVX. */ if (cpu.bitfield.cpuavx @@ -1961,9 +1971,7 @@ cpu_flags_match (const insn_template *t) { /* We need to check a few extra flags with AVX512F. */ if (cpu.bitfield.cpuavx512f - && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni) - && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes) - && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq)) + && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)) match |= CPU_FLAGS_ARCH_MATCH; } else --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -2068,20 +2068,20 @@ vsm4rnds4, 0xf2da, SM4, Modrm|Space0F38| // VAES -vaesdec, 0x66de, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } -vaesdeclast, 0x66df, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } -vaesenc, 0x66dc, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } -vaesenclast, 0x66dd, VAES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vaesdec, 0x66de, VAES|AVX|AVX512F, Modrm|Vex|EVexDYN|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesdeclast, 0x66df, VAES|AVX|AVX512F, Modrm|Vex|EVexDYN|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesenc, 0x66dc, VAES|AVX|AVX512F, Modrm|Vex|EVexDYN|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesenclast, 0x66dd, VAES|AVX|AVX512F, Modrm|Vex|EVexDYN|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // VAES instructions end // VPCLMULQDQ instructions -vpclmulqdq, 0x6644, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, Modrm|Vex|Space0F3A|VexWIG|VexVVVV|CheckOperandSize|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpclmulqdq, 0x6644, VPCLMULQDQ|AVX|AVX512F, Modrm|Space0F3A|Vex|EVexDYN|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ|AVX|AVX512F, Modrm|Space0F3A|Vex|EVexDYN|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ|AVX|AVX512F, Modrm|Space0F3A|Vex|EVexDYN|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ|AVX|AVX512F, Modrm|Space0F3A|Vex|EVexDYN|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ|AVX|AVX512F, Modrm|Space0F3A|Vex|EVexDYN|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // VPCLMULQDQ instructions end @@ -2932,25 +2932,6 @@ vgf2p8affineqb, 0x66ce, GFNI|AVX512F, Mo // AVX512 + GFNI instructions end -// AVX512 + VAES instructions - -vaesdec, 0x66de, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesdeclast, 0x66df, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesenc, 0x66dc, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesenclast, 0x66dd, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } - -// AVX512 + VAES instructions end - -// AVX512 + VPCLMULQDQ instructions - -vpclmulqdq, 0x6644, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } - -// AVX512 + VPCLMULQDQ instructions end - // INVLPGB instructions invlpgb, 0xf01fe, INVLPGB, NoSuf, {} From patchwork Tue Sep 19 15:45:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 141979 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3487500vqi; Tue, 19 Sep 2023 08:46:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFRvt9pAwfHuDBFYoMWDW5aFHo5C1wpnwHN2G/NuNIaXOA3ed7OdJSl2r6bw5oXaPF0s86w X-Received: by 2002:a17:906:530e:b0:9ae:6d0:84ec with SMTP id h14-20020a170906530e00b009ae06d084ecmr5797202ejo.25.1695138409122; Tue, 19 Sep 2023 08:46:49 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c24-20020a170906925800b0099bc8c2fbcfsi9512728ejx.718.2023.09.19.08.46.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 08:46:49 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=yK6YTxOU; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 51E833857713 for ; Tue, 19 Sep 2023 15:46:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 51E833857713 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1695138382; bh=ZuLFUnOnjksehRNTyl1SkMk3P4vWcQ2aBnEdu1qA5m8=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=yK6YTxOULm+Bh7uZK3AEJvVZGlTL67b/WLP41GIcvHpqmDmh6suB/E2hEv9/HKlwK ZPFFunrLuFU32pPBFNnuqbvfY0fMoShEcubqcvDeu57Xb4xpU1Llon85fUUtUduMgc Ts+iHfjXjjY8XhqVNzl51KGh6CpwSGyjyKevasdg= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2080.outbound.protection.outlook.com [40.107.247.80]) by sourceware.org (Postfix) with ESMTPS id 518F43857355 for ; Tue, 19 Sep 2023 15:45:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 518F43857355 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CTtMMaaUIbJSyuILe8729ungW+Y9krB1jy2+B58jhKMGtq1yKBhPDkBXeCrvS1B0tvLaKKo36Jlfs10hVYME+rJ5W0EpZ77G6hYVZR5u0ArYqp5NIZZHnqSv8cbJL0zHZGlhcd5PSiuXWf+7JVoI1QbdfQ7GcxMjaVL3a1+xM+j6+wVeMvlm4F7Q3/YFE1KclEb5LDQPtzieL5/zgmg5Fbx1XMowLxpfx/96whn72uT2+tplmsYuQ2gvnGTZ8hJk1Kpf73RH1yR7ZPH6WLDK0QuT/jZYTBEMjQoYow2jkiIUA+pW9w5teuaTSXGO6HCcr+LwjNqKjbivrH0c53eHaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZuLFUnOnjksehRNTyl1SkMk3P4vWcQ2aBnEdu1qA5m8=; b=FdJvCeV17t1rYkoeabvE8YcKstpea3y/jfxlxysv3lZoI7X+Bd6ZVjK2CpUU2YILteD4vu5ldANMETpuifSOnPn+0GyElh7HwWo645WAZ3lHEteHAw2wEreE3f8z1GNq+Bdi7y92id3i+W3fRhlfqb7qA6JFv/RqyQNzL31rYGRcS/438leshEh4rC0b3Pmdy3azgPyIqu5/CwppCUO7A32X+bJM2YxDQytsnitVv2ImxxLjlwNitbLm1Lu5KLTqz700cMfJXUbSpOZ4DCPn1FnNXbg2qYAtVYWFN/0z0efdQH0+WBgHHCzOSGrr+Fr1d7cogCIKeaE7iBFMj1OAGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM9PR04MB8194.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Tue, 19 Sep 2023 15:45:33 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654%6]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 15:45:33 +0000 Message-ID: <82732557-00aa-9532-b27b-3669c93ba706@suse.com> Date: Tue, 19 Sep 2023 17:45:31 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH v2 3/4] x86: fold FMA VEX and EVEX templates Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0168.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:b4::17) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8194:EE_ X-MS-Office365-Filtering-Correlation-Id: d5f994a8-1552-4cb3-9c3e-08dbb9277582 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qywMMzH5P/xOQZjWruyfA2IdmkJ5wiGlGxIKLV/G7+ijkbr2HbZiX7RSpr6612BKYrzuHD/IVt8s4fa+ztwTt+2qZbevJvm1P4m4QRuET2glZDxV51sHVDGgKGTn6Lkjjd+218nH/nOiwU+3VeG2r4xbSuFb/+Mx3xVGt72Sy/5r7JaTYTPfMOaL52h4KU5PYRnAJXfBO7AZpF8V/o+l1HoSHLGsiOXUKv/uwkJqp9n+kIc31F89IbPyTx3cnAT2qAdur/8t6upCCe5HhHJVNRAbxMtay5fvMuWgMT+6lWBiyaKMn7eTzlNMYBSQh1UafowKZV21oJ1NMkKQDIMk/uvhhMFXNMfLcNrwUeoPZjap3NrOc9YDom6ZWrYxJheGtwqb4xUWLZz0bzUUQXhSn235uB2U4sBbLq1gIwxw/SwYzpfeQgme+sQVJsGsdE5/YPnDLjJPu5yRmhi5k+r70yqFEVpLF/f9tOFnd9IuWM5CmlzUWys/uzG1ejM1KcM6ieqW+ylatKROCpdzJbRwY1773HskshJhj6/mrSXdble7N0ip2JHBJDV44EMegmyKFcA8HbfqLebg5K53ctmfcsrEVY6ctG1g7jYqd4P4D3keGtW24qhW0xezDT/hwtm0pkip3X8kSxOrr8fDaxvi+Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(39860400002)(366004)(136003)(376002)(346002)(451199024)(186009)(1800799009)(36756003)(31686004)(5660300002)(8676002)(86362001)(41300700001)(4326008)(8936002)(6506007)(6486002)(2616005)(26005)(6512007)(2906002)(66946007)(66556008)(478600001)(66476007)(31696002)(38100700002)(316002)(6916009)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?qOkc+styp7gjN6cwBtzjxE56aGbQ?= =?utf-8?q?1nb8l33BuVWNP13hxJxTM38xjJY0sCyA8IRn12V6t3VRN7GyCtWTSeUOYLob8+AJG?= =?utf-8?q?uQEVN4yIRVcNSvZTOjHYU6mABN5e5LHZnPVqMVQ15bavAU6iUwwJP8+uO0+RqiQ9w?= =?utf-8?q?jpYGoKmDvxvJ3Pa/xnIQBJuo7kcfoJxKAVVfs3FUQTy0kiEikFC51BlgObF3UA7Oo?= =?utf-8?q?cd/VfXEFppU583NBohs1mZBZvqZwflymuvr2e/7wPhYUhmy5tkh8F6Z1zRlyYiKQq?= =?utf-8?q?Ap/W9tDYbBp+qLGdCnzY6StToL/34VUvCBH5PVfqZ7TwA31mJBGlPccjqylimGuun?= =?utf-8?q?QfNLxLL2Z5J02ZFRzeOdnbwvaEF8AAhnxDC8nXzG7sal0nQipKdzcdDZ9nR5ovlb1?= =?utf-8?q?fhXkkBadfSX9ry+hyg7JvoYK+VWmp4mnH9QRCeZ/UZUHEmOGYDmmSp5GFHY9XJsbx?= =?utf-8?q?YW3eQmt4haAOKZryPSnx1r0sMwh2nWWIyC8ewcIYG0fjnbcMjvBtuZxlxp+2aZHkm?= =?utf-8?q?+AQ2F60yx0AOe6n6KhNtGSX5dfsl/eldE4Dd+rtXXVqKDXy44Iq8YzHNKc+aXC9QT?= =?utf-8?q?ERONI+6CnNWk6cOPVYCdr50mMqjp0ztSrYuhRo+8Gp3ZbnY360Jd5LTm7Y95MdqdW?= =?utf-8?q?LqRSfWzfwhcI60hvxsdBKyIRQ2CcKIZs8nV9//C2KbzhlSU5DFWrTMv5k5XTbqxVY?= =?utf-8?q?3zpCeMR5/iRscWFspwsMV6/V2QvsOCVVFluujtKE/oUCKxTUSAEmx/9EJp0j9QZM0?= =?utf-8?q?v9FOy38wkL5VS3F5ClW88Y022X7ozVh+Mu3WAiYcf1DwpFxsPN2ICzqPqrRxxQJyX?= =?utf-8?q?UNwi1c6sMrdqa8YOT0Z6/T3gM0oHmW3N1jtKkgNaXR0hcEB30OK0hCthJU2z6Qvez?= =?utf-8?q?84/Tjxczqaihs3JCgkvgcR32H5V+yIrC1yzvkiUhKWgXI2b7HJpsXrs0Zj+BDjR1x?= =?utf-8?q?i7Q0MK+PcXPepP9kwZcnZHqgeem/EoCqItaOLYXJvM5awhXrATBMeU581A+YkQcJG?= =?utf-8?q?rvd4T0OI/TSL4nfU7LLA1B1noQOyhya/FCassaEnDv44cTNGkQUrDWB2rr+hbrct8?= =?utf-8?q?5LqjI2a/gc5+Er3UdB6Pz5EuTEQSQQ6kga7gl2TWpFFc0y49tNKBFccRtqUJwC+vU?= =?utf-8?q?yCaMerRcZfMHt1OZcZA4AxcksRqQMe+tLFirE31wSN00Jdr8ZHRi3R20oIWMTLVGl?= =?utf-8?q?oy8b3RaqMaQCJ9U0RYpaqVjujsVJXNk/3lLErA/cjldXOolK9uoPjbExQvQ9ML6gN?= =?utf-8?q?VWu3Kgevi7KV4Tf757J2iKfhHmKidjG+C47kq/BqAeAjJMjlenZff8xfo3U8xp4Qe?= =?utf-8?q?YlwdqzS8UnH48bcxCZuQ+YZeSiFX2I+HXheKgtA2tUdNJ65BQx1RXUls7KyUxV6f6?= =?utf-8?q?Qyn2pEBQBHNrxZtZTWyS1dLcGBQPDaSmNKHCSA9EtS0XIdiJvYStJOOpsIQHjb66g?= =?utf-8?q?m7yJYHCfVniIK+Q93E82VNndwgY0je0Orj+ezTd1CUIKhhSQXKh0POribvlw9e1Th?= =?utf-8?q?AMp44zMrM6GQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5f994a8-1552-4cb3-9c3e-08dbb9277582 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 15:45:33.0454 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Km3yPtMUj5C+OgLLbcnzQRDrGBp1SZLtFoVqQy8ADkcE0W4LUknKfDqyQ0sugTxiH4yubnPgTQ165pLQ9kIP8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8194 X-Spam-Status: No, score=-3026.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777481452623845854 X-GMAIL-MSGID: 1777481452623845854 Following the folding of some generic AVX/AVX2 templates with their AVX512F counterpart ones, do this for FMA ones as well, requiring one further adjustment to cpu_flags_match(). --- v2: Eliminate unwanted side effect. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1926,6 +1926,8 @@ cpu_flags_match (const insn_template *t) { x.bitfield.cpuavx512f = 0; x.bitfield.cpuavx512vl = 0; + if (x.bitfield.cpufma && !cpu.bitfield.cpufma) + x.bitfield.cpuavx = 0; } } } @@ -1949,6 +1951,8 @@ cpu_flags_match (const insn_template *t) if ((need_evex_encoding () ? cpu.bitfield.cpuavx512f : cpu.bitfield.cpuavx) + && (!x.bitfield.cpufma || cpu.bitfield.cpufma + || cpu_arch_flags.bitfield.cpuavx512f) && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni) && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes) && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq)) --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -1802,16 +1802,21 @@ vcvtps2ph, 0x661d, F16C, Modrm|Vex=2|Spa -vfmaddp, 0x6688 | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmadds, 0x6689 | 0x, FMA, Modrm|VexLIG|Space0F38|VexVVVV||NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmaddsubp, 0x6686 | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmsubp, 0x668a | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmsubs, 0x668b | 0x, FMA, Modrm|VexLIG|Space0F38|VexVVVV||NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsubaddp, 0x6687 | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmaddp, 0x668c | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmadds, 0x668d | 0x, FMA, Modrm|VexLIG|Space0F38|VexVVVV||NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsubp, 0x668e | 0x, FMA, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmsubs, 0x668f | 0x, FMA, Modrm|VexLIG|Space0F38|VexVVVV||NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } + + +vfmaddp, 0x6688 | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfmadds, 0x6689 | 0x, , Modrm||Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } +vfmaddsubp, 0x6686 | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfmsubp, 0x668a | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfmsubs, 0x668b | 0x, , Modrm||Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsubaddp, 0x6687 | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfnmaddp, 0x668c | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfnmadds, 0x668d | 0x, , Modrm||Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsubp, 0x668e | 0x, , Modrm||Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vfnmsubs, 0x668f | 0x, , Modrm||Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } // HLE prefixes @@ -2087,11 +2092,6 @@ vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ|A // AVX512F instructions. - - // is used for EVEX instructions with x/y suffixes. , 0x27, vrndscalep, 0x08 | , , Modrm|Masking|Space0F3A||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|SAE, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vrndscales, 0x0a | , , Modrm|EVexLIG|Masking|Space0F3A|VexVVVV||Disp8MemShift|NoSuf|SAE, { Imm8, RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vfmaddp, 0x6688 | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfmadds, 0x6689 | 0x, , Modrm|EVexLIG|Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vfmaddsubp, 0x6686 | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfmsubp, 0x668a | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfmsubs, 0x668b | 0x, , Modrm|EVexLIG|Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vfmsubaddp, 0x6687 | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfnmaddp, 0x668c | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfnmadds, 0x668d | 0x, , Modrm|EVexLIG|Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vfnmsubp, 0x668e | 0x, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vfnmsubs, 0x668f | 0x, , Modrm|EVexLIG|Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } - vscalefp, 0x662c, , Modrm|Masking||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vscalefs, 0x662d, , Modrm|EVexLIG|Masking||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } From patchwork Tue Sep 19 15:45:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 141982 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3488177vqi; Tue, 19 Sep 2023 08:47:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEyUF48Imd1zRDt0OLxoyMxjchuvXyXraahPpI3Y3w55w1vAeACPLDepdUaWV/dzeaT/q2J X-Received: by 2002:a17:906:31da:b0:9ad:f60c:7287 with SMTP id f26-20020a17090631da00b009adf60c7287mr99582ejf.28.1695138472069; Tue, 19 Sep 2023 08:47:52 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id um10-20020a170906cf8a00b009a205e2e6e3si9826875ejb.231.2023.09.19.08.47.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 08:47:52 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=f5o9xSKm; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 81259385609B for ; Tue, 19 Sep 2023 15:47:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 81259385609B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1695138445; bh=1IEe3wcAHFvvqyhHCGsLjR6bXD91E5Rtgt+j+EQ/XEE=; h=Date:Subject:To:Cc:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=f5o9xSKmVhPqCqKhMxca12SnCHT5Ev6t4d8PvQ4AxZ3IgE2X5Z+lzN/rRUAS/B3fe vgbQeSGDRweYzE070a1o1rrvVlmJyUNxjIPZIn1axAfQeU6Nh8M5PdnPWsyjRQISO4 ToFPLATzs5fYJGVAau+4axsqd1GNlZQ01uE2l2EI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2064.outbound.protection.outlook.com [40.107.105.64]) by sourceware.org (Postfix) with ESMTPS id 9D518385CC90 for ; Tue, 19 Sep 2023 15:46:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9D518385CC90 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mjhf0iMFkHCsgoJBxQ1GgwCxKwO3FwGLyAmINP85mUaFF1c0AzHMo0jn2tDWvvdkp/kkq+DooBR6you6rrACiiFvHsdw1a275jDlqm/5sh1sAwg7Oq1BCovvzoJyAit6BcBlxfed3mInc/lTrZ+8kV5jzQj3l4HetcS4XMhQqTLEtvJ/Yl3wmAWcbFeLQyQnwsDP/FCGxtQk/mOitCtnoAwjNA4yuujRnr1S0CuP3jSO/pTtvAUL6zhuZ9yqfoXvi+UbTObhBxlTcVdYdDYyeuqV9vIZJ4CExWjv7+t0e6djszAV2glOFUltBTSM63xjxxAe435z19TdToWxFVH4nA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1IEe3wcAHFvvqyhHCGsLjR6bXD91E5Rtgt+j+EQ/XEE=; b=lB+ClvBJPrgLUOSs6D80Uz1Q2aOz4C3RExVVFPxE7kpN0eD1Z9rVJCMMLSPNjYfxAW0OFNrhh1VVOLp+NvHZZ1H111R7T1TgrmYTLoCQ3zRFnTpcmHHmaF7jkwjWrDqavJvSiH8dCsoRxWr2N9CDD5TSrRQ8IfBQIYPlY+Jf/WDniwSCTZlCUdz+uorGvPUQkbUCsR5XVFZWRuHOAQ/OgGoZv0/QmXmqnjoTNPe1tJ0RUCl7DkIYyDTgLrdXTxu7insRQ1gXcuJ5UWZzWoLTG05DJeeG/VIvm+nLRG+EWLG3I/GyuUJNwYF1ivJ4IV9ApT93WwEzcueaXGHki9hb9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM9PR04MB8194.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Tue, 19 Sep 2023 15:46:01 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::f749:b27f:2187:6654%6]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 15:46:01 +0000 Message-ID: <4dacf33d-8770-775c-cfee-8741d159e08d@suse.com> Date: Tue, 19 Sep 2023 17:45:59 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [PATCH v2 4/4] x86: fold F16C VEX and EVEX templates Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0128.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:97::10) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8194:EE_ X-MS-Office365-Filtering-Correlation-Id: bfff11d9-f308-4a3a-cd4d-08dbb9278698 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kJFuzPhzQoOMPKMNP/dztE4BHXID405epK19YzOuqsXIs+6uAOFgL3TWhlytLdkfiQ/56kKay3y8BNe97rWTNWcn6jLrGBKLiUaEPhcUG7O6eM3G5OCS0lZjYvR9osP3adRLEVg0aXBTW7tN+fSvYXVLVmjcfiQ1KK3kC0AapsV2gFIIB0beMOay7let9YTWAdlSXz+w6uzf81wdOrjRM27HvxD1owmztB2iWuSI/EwuWsPuNMXjhlo5fQsiFIXzPKSTMo6ktSFKi7qocDYO+Yn6wkNAecbzq4CeKP+OzBcEB6uVG2hvv83GdyYydE4yMonIros6U2vehCunpLjNYVANA8sjhN3TB19l7/1WPbrbGPETZxlhZPGFE/LeK8NBIVBS+q4FzmTf4aNmJkYc4PiUUlF7qBim60G9LXZG341RiZLJxqzk2wWu6ZO9VKqFySfTg1gNKMrl8RqK/e6Z+1EWIWxMZQ9OQ8htg9Napd8gYATBEHmWQ/LQyWfkdJ97nZfyiN5p/U6RhgFPXvP8J1rhHIcZoxaLd+M+Nq1Z8rwwVh1t7WHqIqpaR4XfhMfPt3fA83JDh0A3lwuPWLbu/S3Zd17OHLRpZy3HZ9hMa6HDtorxOBlTCUEQFxy2cgccw67JnYKc//996U/DK04Uvg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(39860400002)(366004)(136003)(376002)(346002)(451199024)(186009)(1800799009)(36756003)(31686004)(5660300002)(8676002)(86362001)(41300700001)(4326008)(8936002)(6506007)(6486002)(2616005)(26005)(6512007)(2906002)(66946007)(66556008)(478600001)(66476007)(31696002)(38100700002)(316002)(6916009)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?9S3tUoolDd2xLCc5BCHCto6TY+LE?= =?utf-8?q?6OQy2YmhsojeH4+xT7xutlPclFcULLK0uJmKGFnOMTL8ydr6iMwK42ij4AQPUCil+?= =?utf-8?q?7FnPm6WKCXnDh60nUOh3x01EiWC4/zzhYYFECz1BQjRbiXEQ3VHz38Uo8CTtytojs?= =?utf-8?q?uF1Soy//HtghvIawAM1aQ7Lbcmu11yEXld/ZQiPN1Klf2ltsLrQld4pTk/Bg0ra2B?= =?utf-8?q?wL6mIr7eKZxvUGGV9PRkOe3LLVGlOHLBAVz/oAVpwqSNBHTFpaRh/gIQISwxmWKQZ?= =?utf-8?q?rw0OYT6np5KQ+lcmCz9StsAEpx99IKFO3U/3zSASNLUS9h+9nX6N1QHPLnN1gwQ1/?= =?utf-8?q?a93c0HqlHj3xQIkur+37pSEXlDha/Bnz3auspf7wxMOix3g/8fe3comIbM3gVTimn?= =?utf-8?q?kccP8UacaABQ6fJKPrXM1bPh1cBDUPpHfdaCAM45XLg02q1DGZtzwKWfdac4R2U2K?= =?utf-8?q?pDZgXUkftnpAIqn3dToTvLv6dKvHlsiBGHKjao/T05aBwB+Z0UgSPrGbFOZnaxV/0?= =?utf-8?q?LByUudqpS5NGVXSN/gCne0a5JDP135xDOlPWhUtX03LhxJSBYFxPmv+NWTNMYsIMd?= =?utf-8?q?TZMd82uFpAmpAp2bX3/ZtAhW3bgVN86drH+vM3/uaDoQIiIxbwcUNXwHTMY6DWhZD?= =?utf-8?q?obx1IuRJ5Tm+/kus7r1POJJp71Z67FwHbI26KXirGUT9S7DHIGnyCuMtyIysrg7xT?= =?utf-8?q?UaMpt9Q0VgLpYiWIg3FggzaJKTQWE/jcBtPknGtAfdxUiJEE07JVa23ANL6YKW3hy?= =?utf-8?q?osRdXlglTCJQkxd03VFbhAbyKE9YXajRK+uss1AmjwRjQzfHp0VwsrOdnt+xOJ4ky?= =?utf-8?q?O42fp+gzrAL4WYQqSLhwBWA4NpWWN+elWKrIMSgkKQutC4hdljFEBv/8raSIY1bI9?= =?utf-8?q?Z4aEXKMA6XW4qmC8/bY5v+ZU1R/eucwf5K8zv3WuuLVsGTnGzLTFYN6ocnFXFcu0v?= =?utf-8?q?R6/1ZfPSVRHSB+5KeDcSRQhipo3TAb4tVm3mwPpihDcJnTOBhe3t6NPkS5JoluhKf?= =?utf-8?q?P/ZXXMVxCvzRfHNwJHxk6MViTs4dZphCmyRNGHKvEFmO1Xn99KVCLYHKgLKBTfUqF?= =?utf-8?q?mIysmfUNQkatNnKs+PDi8Bt1DxxrLqUsv9OCL9Y3UOYejEe0xewzyymA/mMAVsee+?= =?utf-8?q?MpLZ2Fphn8+XFk73Dt0yrUexCy6sJwhxGQI4llfD3+kbpG3y+SvSMLzR1AYTMOq75?= =?utf-8?q?l7XrbjlisJnBuvU06jUp942+GbUGudXsZZCNUi0fEUyHrjRiiLDYgGL8pCyt68mBD?= =?utf-8?q?vy0JSB8EtQqpsjx/or1UM8UZvrmaQfPyb76+YGh/t8dEexOx8jpTW94RsSsRjthHj?= =?utf-8?q?IWCztoqsUXT4RRrnYd/zw14vIFVE0tHfDQ+x39t75qQCa/3diG3FJEvazoQ65e7BZ?= =?utf-8?q?AnWtR9HDHgHh9mb6vv4YEgHQmg/ilVQNxWIUKIJ2SqMg01HQX4I42hJOf6skkkoDF?= =?utf-8?q?87IhXFfzd1h14Hi6Ks6OK8ebdMiViZxYO3pn/51csdnvUf25TEdSMFwvxSHdJkGNl?= =?utf-8?q?hqodoxSdQ6Wn?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: bfff11d9-f308-4a3a-cd4d-08dbb9278698 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 15:46:01.7166 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 16sR8rkBmHZcr5xwxW+l/p/+7bdS8pmW34b3mOE968j+7QFlOhP+WhlGbISz8Rb62AfU2Q4HGk9TQZQFWvo9HQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8194 X-Spam-Status: No, score=-3026.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777481518547307868 X-GMAIL-MSGID: 1777481518547307868 Following the folding of some generic AVX/AVX2 templates with their AVX512F counterpart ones, do this for F16C ones as well, requiring one further adjustment to cpu_flags_match(). Note that there is a slight asymmetry with the FMA checks, resulting from the various vector lengths having separate insn templates here, but being a single combined one (each) for FMA. --- TBD: Unlike for FMA the gains aren't as big yet the code changes are slightly bigger. The change may therefore be deemed to not be worth it. --- v2: Eliminate unwanted side effect. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1926,9 +1926,12 @@ cpu_flags_match (const insn_template *t) { x.bitfield.cpuavx512f = 0; x.bitfield.cpuavx512vl = 0; - if (x.bitfield.cpufma && !cpu.bitfield.cpufma) + if ((x.bitfield.cpufma && !cpu.bitfield.cpufma) + || (x.bitfield.cpuf16c && !cpu.bitfield.cpuf16c)) x.bitfield.cpuavx = 0; } + else if (cpu.bitfield.cpuf16c) + x.bitfield.cpuavx512vl = 0; } } @@ -1953,6 +1956,8 @@ cpu_flags_match (const insn_template *t) : cpu.bitfield.cpuavx) && (!x.bitfield.cpufma || cpu.bitfield.cpufma || cpu_arch_flags.bitfield.cpuavx512f) + && (!x.bitfield.cpuf16c || cpu.bitfield.cpuf16c + || cpu_arch_flags.bitfield.cpuavx512f) && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni) && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes) && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq)) --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -1793,10 +1793,10 @@ rdgsbase, 0xf30fae/1, FSGSBase, Modrm|Ig rdrand, 0xfc7/6, RdRnd, Modrm|NoSuf, { Reg16|Reg32|Reg64 } wrfsbase, 0xf30fae/2, FSGSBase, Modrm|IgnoreSize|NoSuf, { Reg32|Reg64 } wrgsbase, 0xf30fae/3, FSGSBase, Modrm|IgnoreSize|NoSuf, { Reg32|Reg64 } -vcvtph2ps, 0x6613, F16C, Modrm|Vex|Space0F38|VexW0|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vcvtph2ps, 0x6613, F16C, Modrm|Vex=2|Space0F38|VexW=1|NoSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vcvtps2ph, 0x661d, F16C, Modrm|Vex|Space0F3A|VexW0|NoSuf, { Imm8, RegXMM, Qword|Unspecified|BaseIndex|RegXMM } -vcvtps2ph, 0x661d, F16C, Modrm|Vex=2|Space0F3A|VexW=1|NoSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } +vcvtph2ps, 0x6613, F16C|AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F38|VexW0|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtph2ps, 0x6613, F16C|AVX|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F38|VexW0|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } +vcvtps2ph, 0x661D, F16C|AVX|AVX512F|AVX512VL, Modrm|Vex128|EVex128|Masking|Space0F3A|VexW0|Disp8MemShift=3|NoSuf, { Imm8, RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vcvtps2ph, 0x661D, F16C|AVX|AVX512F|AVX512VL, Modrm|Vex256|EVex256|Masking|Space0F3A|VexW0|Disp8MemShift=4|NoSuf, { Imm8, RegYMM, RegXMM|Unspecified|BaseIndex } // FMA instructions @@ -2525,15 +2525,9 @@ vcvtdq2pd, 0xF3E6, AVX512F|AVX512VL, Mod vcvtudq2pd, 0xF37A, AVX512F|AVX512VL, Modrm|EVex128|Masking|Space0F|VexW0|Broadcast|Disp8MemShift=3|NoSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } vcvtudq2pd, 0xF37A, AVX512F|AVX512VL, Modrm|EVex256|Masking|Space0F|VexW0|Broadcast|Disp8MemShift=4|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vcvtph2ps, 0x6613, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexW0|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } -vcvtph2ps, 0x6613, AVX512F|AVX512VL, Modrm|EVex=3|Masking|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } - vcvtps2pd, 0x5A, AVX512F|AVX512VL, Modrm|EVex128|Masking|Space0F|VexW0|Broadcast|Disp8MemShift=3|NoSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } vcvtps2pd, 0x5A, AVX512F|AVX512VL, Modrm|EVex256|Masking|Space0F|VexW0|Broadcast|Disp8MemShift=4|NoSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vcvtps2ph, 0x661D, AVX512F|AVX512VL, Modrm|EVex128|Masking|Space0F3A|VexW0|Disp8MemShift=3|NoSuf, { Imm8, RegXMM, RegXMM|Qword|Unspecified|BaseIndex } -vcvtps2ph, 0x661D, AVX512F|AVX512VL, Modrm|EVex256|Masking|Space0F3A|VexW0|Disp8MemShift=4|NoSuf, { Imm8, RegYMM, RegXMM|Unspecified|BaseIndex } - vmovddup, 0xF212, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F|VexW1|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovdb, 0xF331, AVX512F|AVX512VL, Modrm|EVex=2|Masking|Space0F38|VexW0|Disp8MemShift=2|NoSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex }