From patchwork Wed Sep 2 08:27:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Shenoy, Rohan Radhesh" X-Patchwork-Id: 142682 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 52E3B4BA23ED for ; Wed, 2 Sep 2026 08:31:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 52E3B4BA23ED Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=j+gUyNO0 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazlp170120001.outbound.protection.outlook.com [IPv6:2a01:111:f403:c10d::1]) by sourceware.org (Postfix) with ESMTPS id 562494BA2E07 for ; Wed, 2 Sep 2026 08:30:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 562494BA2E07 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=amd.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 562494BA2E07 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c10d::1 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1788337828; cv=pass; b=vsItNhmCL1PLo9ETgR9BaYpojgNrw8HPW5Nvsr9LLuRmxRHKr8iEKZ//hh7Gmhha5IEEJYYVB4ZKC9oCpvGhSa3+w4uqIAZohgffAL1K9nBle0EiR8rVhcP7pAuIcgBNNrCkifOBY2EAO76N8o5PvU3i5EroSypsMFCuBkQvbYs= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1788337828; c=relaxed/simple; bh=uGHpVgZ2VABfxfwAyMR0Kl8DcWpWN9fue9+D+YWKeYQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=gdgvsJoM/eggkY5cT+g5DHPvvoxTtwjBCmljbHGDXgk7jW3eIsKhpHMpRSGL0Kx+3uYIKh6VD89pYOlOU+QTonJdKI7EA1KGCfxh47ogW+kC2hr01Rk2nDEP90eE6DVUaKi918kw+fT9v1YpAF2jMYi9nuTWKsJ6qqz7qqkLdf4= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=j+gUyNO0 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 562494BA2E07 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kUohYLeL1Zdpc8MNpxAA+boL4DPCIEgUnWn1Vn7um+XLS2fsnRMR7eHxgOibu1s1v6U+MfrwFm1ylhxoDPCNHh9ug6XbMOCIfFeonLxXF7o+gJDU3VQhV0tLA9XChKeFgJPS3y1dDpcGaT7ywdHO98/F+hj12tLObFMVck3nLqGPZDMEqIhzOt8uAO+8wtbyAGFchpB/7iODKf34BplkjbX54Y9KlTAxCe+eqhlVsbaypglhY3AFojP1SSiz1nOExLo5+Gvz/jzFp1el71Q+kCaASa7PBX8cz/4CvbewEXTizvX8GZ8SRoo6A+6wWxEBojLTBioACES2YPVRfLrO4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=SFMcqKkH2NnL9rjNOuhdkVcwZYZtmgyHF9Epr5O4/lc=; b=ay/lG9qFWC2wiLMdM5ZpmW0EWK88Zxovgqa/OHQ9D03tshdqgBpgmwZ58UtfuTeW1f3Vk2E16qZ8i6gzgXUicQK6lIKsX9MDJzOhen8BiqJ3zuJHom0rPcR0SZN9zcNAlM7wI+5UonHRafvX9CwatWOYmA0YspWN6Y83L6gAJZKBMwnMeSqrHkV/kVnNWn5mSOaaH95VQyFFOE6x4b37mKLnWggo1q7hXKs4rG4XyJdO+NQI6FVR//8c1p/UVi1BLMhUrexrU0eZr731ED9IWlxTP5o9lgklgLBcohuHA6aOsDqqsIppLjAHrOh/omtohpCvI1MdV5AnzbCEYM94rQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=sourceware.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SFMcqKkH2NnL9rjNOuhdkVcwZYZtmgyHF9Epr5O4/lc=; b=j+gUyNO0dldhYca9JjPJleP2hK+1ikSQhm4bY22aWJJVPfYLk33VvN2PTPH+zB9B5E4RWX/P+F25jDJANe4bpuL5yFeEUs1tUQBruT+kLvvKktE5X4FkXNKo41lZEVXvijbj0tqclAf5IrnedpU+RLFyfr9TAuf8oSXVQArZAhY= Received: from BN0PR04CA0020.namprd04.prod.outlook.com (2603:10b6:408:ee::25) by IA1PR12MB7589.namprd12.prod.outlook.com (2603:10b6:208:42b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Wed, 2 Sep 2026 08:30:17 +0000 Received: from LV8PEPF00000068.namprd03.prod.outlook.com (2603:10b6:408:ee:cafe::3b) by BN0PR04CA0020.outlook.office365.com (2603:10b6:408:ee::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.11 via Frontend Transport; Wed, 2 Sep 2026 08:30:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by LV8PEPF00000068.mail.protection.outlook.com (10.167.248.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Wed, 2 Sep 2026 08:30:16 +0000 Received: from aocc-opt-zen4-7.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Wed, 2 Sep 2026 03:30:08 -0500 From: Rohan Shenoy To: CC: , , , , , Rohan Shenoy Subject: [PATCH v2] x86: support further AMD Zen6 instructions Date: Wed, 2 Sep 2026 13:57:17 +0530 Message-ID: <20260902082715.4025598-1-RohanRadhesh.Shenoy@amd.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV8PEPF00000068:EE_|IA1PR12MB7589:EE_ X-MS-Office365-Filtering-Correlation-Id: 6dc362ea-caaa-452c-e683-08df08cc6ab5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|23010399003|36860700016|18002099003|3023799007|56012099006|13003099007|10067099003|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: icjRjyCtS4HXq4GVdzmtROdklsnAK3A5O3oPJOPUzF51AyWOhGKlnIw4d2HhQcN+ttxSF0HnWFOqjjaBdFj0aY5yNodHGAy/5AhVxUN5j8flRGvAuoz2eCKn0zjuWWvPD4BvkYsnb8zFKUFfklqZDLXTigHdgArQMOlRTE95LzLKHSgkg20CZgKVGkv7+Mkelj2TU8Q1diMDdbYVCQ6iV/GDyabuelaoW9gd61ZTRHZkhyvnuZxmcaocnA37ZAdX8+lE0G5+xBh+pxhEFYXF+7QSNvkKsIhE88jYTGQwQhD48+YxztcYeBcGov/VXALtYqVPrmnfY+MEqiVhhjaq/XxP9360MBx6axMgNHD9bMDiX3CT25bpcMJD/HtkBMRWPJu0RHdJOt1mqsCXKOC5azVaB0OUpPepzFDArcOPQleg6jJ5nroSDe83uYICapUdStdOeWe2A9sGOylINiqejLj3/+m28ndUN30YOmI8Un9UV+khVYnFcrzXbNkYaBTcx4BMj1nfA6y8KlG3mhNLWpkrb3OHgAxb1iaIjCoylnwvfAuP+U6Y7Ihed9YYcIg5fmdgUj+cgVaqfqfWKx8eihMHyJbe/mvsu31DXk9rxVZTAFFLUlFiojDHRefaQstXajq90SdS1X2YgzWiBdWA9euOhIsRPjII4OIb538yj4wTarbwncavdDTDra4Rwb7azA/eBsObeIsLCQU+jhzucA== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:satlexmb07.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(23010399003)(36860700016)(18002099003)(3023799007)(56012099006)(13003099007)(10067099003)(11063799006)(6133799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: E7DtMqbioNe4tWEvWSz4PfARxVRHucLT152l0kFwVE1w9exW7FG0a/HKTY1lFCLRXG6M/Ahth1BpYiEPObS+M6d5NzU0HXU7UUMVjWUv8KniUX7RYK18zizHVoRvGydX06U5th2XzT/yNX3N5K44NJVxwrDC0zGF/gvYIoC2cQeh3V2YbDQFHL1mwJ2Miqga3350i1nLYpsX1CcpzyGDTMTL9FNKejqIEZ48/8+l683YJihEBS1j+iPWo+i42vilWrmOLTJTgCGZwcF7yB9zYLdmbzIX0nCg6qKiPKqj5GEQ2VX4Xuenb3pGloK3boRwQQJJUBK29aUbiP3R6yfHDzi4zgC0tezQ79w28fpKmYhJH8ZrUNMsvwL/lcrkJJxipBAVuJqFYdGT/nbp4V+MjrbuoOUQ0QxH+32kmTqxOttwWlBDugX8+Fn39DxwdNdI X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2026 08:30:16.6159 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6dc362ea-caaa-452c-e683-08df08cc6ab5 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: LV8PEPF00000068.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7589 X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_SHORT, LOCAL_AUTHENTICATION_FAIL_SPF, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org - Add support for RMPOPT and RMPCHKD instructions. - Enable FRED on znver6. https://docs.amd.com/api/khub/documents/pVy9DHmRU6S3gKD2150uhg/content https://docs.amd.com/api/khub/documents/dSDYo9rxWwNDSJkmMJCxYQ/content --- Notes: Changes in V2: - Added explicit-operand version for rmpopt and rmpchkd. - Linked to documentation. gas/config/tc-i386.c | 5 +++- gas/doc/c-i386.texi | 5 +++- gas/testsuite/gas/i386/rmpchkd.d | 20 +++++++++++++++ gas/testsuite/gas/i386/rmpchkd.s | 13 ++++++++++ gas/testsuite/gas/i386/rmpopt.d | 20 +++++++++++++++ gas/testsuite/gas/i386/rmpopt.s | 13 ++++++++++ gas/testsuite/gas/i386/x86-64-arch-6-znver6.d | 4 +++ gas/testsuite/gas/i386/x86-64-arch-6.d | 4 +++ gas/testsuite/gas/i386/x86-64-arch-6.s | 4 +++ gas/testsuite/gas/i386/x86-64.exp | 2 ++ opcodes/i386-dis.c | 25 ++++++++++++++++++- opcodes/i386-gen.c | 8 +++++- opcodes/i386-opc.h | 6 +++++ opcodes/i386-opc.tbl | 14 +++++++++++ 14 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 gas/testsuite/gas/i386/rmpchkd.d create mode 100644 gas/testsuite/gas/i386/rmpchkd.s create mode 100644 gas/testsuite/gas/i386/rmpopt.d create mode 100644 gas/testsuite/gas/i386/rmpopt.s diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 1b28415540a..ce9cc8236fa 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1245,6 +1245,8 @@ static const arch_entry cpu_arch[] = SUBARCH (rao_int, RAO_INT, RAO_INT, false), SUBARCH (rmpquery, RMPQUERY, ANY_RMPQUERY, false), SUBARCH (rmpread, RMPREAD, ANY_RMPREAD, false), + SUBARCH (rmpdirty, RMPDIRTY, ANY_RMPDIRTY, false), + SUBARCH (rmpopt, RMPOPT, ANY_RMPOPT, false), SUBARCH (fred, FRED, ANY_FRED, false), SUBARCH (lkgs, LKGS, ANY_LKGS, false), VECARCH (avx_vnni_int16, AVX_VNNI_INT16, ANY_AVX_VNNI_INT16, reset), @@ -7397,7 +7399,8 @@ i386_assemble (char *line) /* All Intel opcodes have reversed operands except for "bound", "enter", "invlpg*", "monitor*", "mwait*", "tpause", "umwait", "pvalidate", - "rmpadjust", "rmpquery", and deprecated forms of "rmpupdate". + "rmpadjust", "rmpquery", "rmpopt", "rmpchkd", and deprecated forms of + "rmpupdate". We also don't reverse intersegment "jmp" and "call" instructions with 2 immediate operands so that the immediate segment precedes the offset consistently in Intel and AT&T modes. */ diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi index dbc905a33ef..3ce70810d4e 100644 --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -293,6 +293,8 @@ accept various extension mnemonics. For example, @code{tlbsync}, @code{rmpquery}, @code{rmpread}, +@code{rmpdirty}, +@code{rmpopt}, @code{svme}, @code{gmism2}, @code{gmiccs}, @@ -1742,7 +1744,8 @@ supported on the CPU specified. The choices for @var{cpu_type} are: @item @samp{.lwp} @tab @samp{.fma4} @tab @samp{.xop} @tab @samp{.cx16} @item @samp{.padlock} @tab @samp{.clzero} @tab @samp{.mwaitx} @tab @samp{.rdpru} @item @samp{.mcommit} @tab @samp{.sev_es} @tab @samp{.snp} @tab @samp{.invlpgb} -@item @samp{.tlbsync} @tab @samp{.rmpquery} @tab @samp{.rmpread} @tab @samp{.apx_f} +@item @samp{.tlbsync} @tab @samp{.rmpquery} @tab @samp{.rmpread} @tab @samp{.rmpdirty} +@item @samp{.rmpopt} @tab @samp{.apx_f} @item @samp{.apx_nci} @tab @samp{.apx_ndd} @tab @samp{.apx_nf} @tab @samp{.apx_nci_ndd_nf} @item @samp{.gmism2} @tab @samp{.gmiccs} @tab @samp{.padlockrng2} @tab @samp{.padlockphe2} @item @samp{.padlockxmodx} diff --git a/gas/testsuite/gas/i386/rmpchkd.d b/gas/testsuite/gas/i386/rmpchkd.d new file mode 100644 index 00000000000..55bb1e9cd2a --- /dev/null +++ b/gas/testsuite/gas/i386/rmpchkd.d @@ -0,0 +1,20 @@ +#as: -march=generic64+rmpdirty +#objdump: -dw +#name: 64-bit RMPCHKD insn +#source: rmpchkd.s + +.*: +file format .* + + +Disassembly of section \.text: + +0+ : +[ ]*[a-f0-9]+:[ ]+f3 0f 01 fc[ ]+rmpchkd[ ]* +[ ]*[a-f0-9]+:[ ]+f3 0f 01 fc[ ]+rmpchkd[ ]* +[ ]*[a-f0-9]+:[ ]+67 f3 0f 01 fc[ ]+addr32 rmpchkd[ ]* + +[0-9a-f]+ : +[ ]*[a-f0-9]+:[ ]+f3 0f 01 fc[ ]+rmpchkd[ ]* +[ ]*[a-f0-9]+:[ ]+f3 0f 01 fc[ ]+rmpchkd[ ]* +[ ]*[a-f0-9]+:[ ]+67 f3 0f 01 fc[ ]+addr32 rmpchkd[ ]* +#pass diff --git a/gas/testsuite/gas/i386/rmpchkd.s b/gas/testsuite/gas/i386/rmpchkd.s new file mode 100644 index 00000000000..a67faf9ca96 --- /dev/null +++ b/gas/testsuite/gas/i386/rmpchkd.s @@ -0,0 +1,13 @@ +# Check RMPCHKD instruction + + .text +att: + rmpchkd + rmpchkd %rax, %rcx + rmpchkd %eax, %rcx + + .intel_syntax noprefix +intel: + rmpchkd + rmpchkd rax, rcx + rmpchkd eax, rcx diff --git a/gas/testsuite/gas/i386/rmpopt.d b/gas/testsuite/gas/i386/rmpopt.d new file mode 100644 index 00000000000..c15d9adf35a --- /dev/null +++ b/gas/testsuite/gas/i386/rmpopt.d @@ -0,0 +1,20 @@ +#as: -march=generic64+rmpopt +#objdump: -dw +#name: 64-bit RMPOPT insn +#source: rmpopt.s + +.*: +file format .* + + +Disassembly of section \.text: + +0+ : +[ ]*[a-f0-9]+:[ ]+f2 0f 01 fc[ ]+rmpopt[ ]* +[ ]*[a-f0-9]+:[ ]+f2 0f 01 fc[ ]+rmpopt[ ]* +[ ]*[a-f0-9]+:[ ]+67 f2 0f 01 fc[ ]+addr32 rmpopt[ ]* + +[0-9a-f]+ : +[ ]*[a-f0-9]+:[ ]+f2 0f 01 fc[ ]+rmpopt[ ]* +[ ]*[a-f0-9]+:[ ]+f2 0f 01 fc[ ]+rmpopt[ ]* +[ ]*[a-f0-9]+:[ ]+67 f2 0f 01 fc[ ]+addr32 rmpopt[ ]* +#pass diff --git a/gas/testsuite/gas/i386/rmpopt.s b/gas/testsuite/gas/i386/rmpopt.s new file mode 100644 index 00000000000..7718334d0f4 --- /dev/null +++ b/gas/testsuite/gas/i386/rmpopt.s @@ -0,0 +1,13 @@ +# Check RMPOPT instruction + + .text +att: + rmpopt + rmpopt %rax, %rcx + rmpopt %eax, %rcx + + .intel_syntax noprefix +intel: + rmpopt + rmpopt rax, rcx + rmpopt eax, rcx diff --git a/gas/testsuite/gas/i386/x86-64-arch-6-znver6.d b/gas/testsuite/gas/i386/x86-64-arch-6-znver6.d index 54c63742fe3..d1a8c5f56d3 100644 --- a/gas/testsuite/gas/i386/x86-64-arch-6-znver6.d +++ b/gas/testsuite/gas/i386/x86-64-arch-6-znver6.d @@ -13,4 +13,8 @@ Disassembly of section \.text: [\s]*[a-f0-9]+:[\s]*c4 e2 f1 b5 d1[\s]*\{vex\} vpmadd52huq %xmm1,%xmm1,%xmm2 [\s]*[a-f0-9]+:[\s]*c4 e2 6f 50 d9[\s]*vpdpbssd %ymm1,%ymm2,%ymm3 [\s]*[a-f0-9]+:[\s]*62 f5 6c 48 58 d9[\s]*vaddph %zmm1,%zmm2,%zmm3 +[\s]*[a-f0-9]+:[\s]*f2 0f 01 ca[\s]*erets +[\s]*[a-f0-9]+:[\s]*f3 0f 01 ca[\s]*eretu +[\s]*[a-f0-9]+:[\s]*f3 0f 01 fc[\s]*rmpchkd +[\s]*[a-f0-9]+:[\s]*f2 0f 01 fc[\s]*rmpopt #pass diff --git a/gas/testsuite/gas/i386/x86-64-arch-6.d b/gas/testsuite/gas/i386/x86-64-arch-6.d index 4fb1f0d31ae..350166627b7 100644 --- a/gas/testsuite/gas/i386/x86-64-arch-6.d +++ b/gas/testsuite/gas/i386/x86-64-arch-6.d @@ -11,4 +11,8 @@ Disassembly of section \.text: [\s]*[a-f0-9]+:[\s]*62 f2 f5 08 b5 d1[\s]*vpmadd52huq %xmm1,%xmm1,%xmm2 [\s]*[a-f0-9]+:[\s]*c4 e2 6f 50 d9[\s]*vpdpbssd %ymm1,%ymm2,%ymm3 [\s]*[a-f0-9]+:[\s]*62 f5 6c 48 58 d9[\s]*vaddph %zmm1,%zmm2,%zmm3 +[\s]*[a-f0-9]+:[\s]*f2 0f 01 ca[\s]*erets +[\s]*[a-f0-9]+:[\s]*f3 0f 01 ca[\s]*eretu +[\s]*[a-f0-9]+:[\s]*f3 0f 01 fc[\s]*rmpchkd +[\s]*[a-f0-9]+:[\s]*f2 0f 01 fc[\s]*rmpopt #pass diff --git a/gas/testsuite/gas/i386/x86-64-arch-6.s b/gas/testsuite/gas/i386/x86-64-arch-6.s index f8017844bbf..74970bf508c 100644 --- a/gas/testsuite/gas/i386/x86-64-arch-6.s +++ b/gas/testsuite/gas/i386/x86-64-arch-6.s @@ -6,3 +6,7 @@ vpmadd52huq %xmm1, %xmm1, %xmm2 #AVX_IFMA vpdpbssd %ymm1, %ymm2, %ymm3 #AVX_VNNI_INT8 vaddph %zmm1, %zmm2, %zmm3 #AVX512-FP16 + erets #FRED + eretu #FRED + rmpchkd #RMPDIRTY + rmpopt #RMPOPT diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp index fee205b9659..eb10d9b8b9f 100644 --- a/gas/testsuite/gas/i386/x86-64.exp +++ b/gas/testsuite/gas/i386/x86-64.exp @@ -181,6 +181,8 @@ run_dump_test "x86-64-arch-3" run_dump_test "x86-64-arch-4" run_dump_test "x86-64-arch-4-1" run_dump_test "rmpquery" +run_dump_test "rmpchkd" +run_dump_test "rmpopt" run_dump_test "x86-64-arch-5" run_dump_test "x86-64-arch-6" run_dump_test "x86-64-arch-2-lzcnt" diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index fe61c6fe2f5..ec1d149d9dc 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -1018,6 +1018,7 @@ enum PREFIX_0F01_REG_5_MOD_3_RM_6, PREFIX_0F01_REG_5_MOD_3_RM_7, PREFIX_0F01_REG_7_MOD_3_RM_2, + PREFIX_0F01_REG_7_MOD_3_RM_4, PREFIX_0F01_REG_7_MOD_3_RM_5, PREFIX_0F01_REG_7_MOD_3_RM_6, PREFIX_0F01_REG_7_MOD_3_RM_7, @@ -1363,6 +1364,8 @@ enum X86_64_0F01_REG_5_MOD_3_RM_5_PREFIX_1, X86_64_0F01_REG_5_MOD_3_RM_6_PREFIX_1, X86_64_0F01_REG_5_MOD_3_RM_7_PREFIX_1, + X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_1, + X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_3, X86_64_0F01_REG_7_MOD_3_RM_5_PREFIX_1, X86_64_0F01_REG_7_MOD_3_RM_5_PREFIX_3, X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_1, @@ -3287,6 +3290,14 @@ static const struct dis386 prefix_table[][4] = { { "mcommit", { Skip_MODRM }, 0 }, }, + /* PREFIX_0F01_REG_7_MOD_3_RM_4 */ + { + { "clzero", { Skip_MODRM }, 0 }, + { X86_64_TABLE (X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_1) }, + { Bad_Opcode }, + { X86_64_TABLE (X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_3) }, + }, + /* PREFIX_0F01_REG_7_MOD_3_RM_5 */ { { "rdpru", { Skip_MODRM }, 0 }, @@ -4672,6 +4683,18 @@ static const struct dis386 x86_64_table[][2] = { { "stui", { Skip_MODRM }, 0 }, }, + /* X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_1 */ + { + { Bad_Opcode }, + { "rmpchkd", { Skip_MODRM }, 0 }, + }, + + /* X86_64_0F01_REG_7_MOD_3_RM_4_PREFIX_3 */ + { + { Bad_Opcode }, + { "rmpopt", { Skip_MODRM }, 0 }, + }, + /* X86_64_0F01_REG_7_MOD_3_RM_5_PREFIX_1 */ { { Bad_Opcode }, @@ -8763,7 +8786,7 @@ static const struct dis386 rm_table[][8] = { { "rdtscp", { Skip_MODRM }, 0 }, { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_2) }, { "mwaitx", { { OP_Mwait, eBX_reg } }, PREFIX_OPCODE }, - { "clzero", { Skip_MODRM }, 0 }, + { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_4) }, { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_5) }, { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_6) }, { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_7) }, diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c index b8d7ad2b0b1..cf37d8786e9 100644 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -99,7 +99,7 @@ static const dependency isa_dependencies[] = { "ZNVER5", "ZNVER4|AVX_VNNI|MOVDIRI|MOVDIR64B|AVX512_VP2INTERSECT|PREFETCHI" }, { "ZNVER6", - "ZNVER5|AVX512_BMM|AVX_NE_CONVERT|AVX_IFMA|AVX_VNNI_INT8|AVX512_FP16" }, + "ZNVER5|AVX512_BMM|AVX_NE_CONVERT|AVX_IFMA|AVX_VNNI_INT8|AVX512_FP16|FRED|RMPDIRTY|RMPOPT" }, { "BTVER1", "GENERIC64|FISTTP|MONITOR|CX16|LAHF_SAHF|Rdtscp|SSSE3|SSE4A|ABM|PRFCHW|Clflush|FISTTP|SVME" }, { "BTVER2", @@ -261,6 +261,10 @@ static const dependency isa_dependencies[] = "SNP|64" }, { "RMPREAD", "SNP|64" }, + { "RMPDIRTY", + "SNP|64" }, + { "RMPOPT", + "SNP|64" }, { "TSX", "RTM|HLE" }, { "TSXLDTRK", @@ -500,6 +504,8 @@ static bitfield cpu_flags[] = BITFIELD (SNP), BITFIELD (RMPQUERY), BITFIELD (RMPREAD), + BITFIELD (RMPDIRTY), + BITFIELD (RMPOPT), BITFIELD (APX_NCI), BITFIELD (APX_NDD), BITFIELD (APX_NF), diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h index 4da0ceffa96..cd8f228f5a9 100644 --- a/opcodes/i386-opc.h +++ b/opcodes/i386-opc.h @@ -328,6 +328,10 @@ enum i386_cpu CpuRMPQUERY, /* RMPREAD instruction required */ CpuRMPREAD, + /* RMPDIRTY instruction required */ + CpuRMPDIRTY, + /* RMPOPT instruction required */ + CpuRMPOPT, /* Intel APX New Conditional Instructions support required. */ CpuAPX_NCI, /* Intel APX Non-Destructive Destination support required. */ @@ -573,6 +577,8 @@ typedef union i386_cpu_flags unsigned int cpusnp:1; unsigned int cpurmpquery:1; unsigned int cpurmpread:1; + unsigned int cpurmpdirty:1; + unsigned int cpurmpopt:1; unsigned int cpuapx_nci:1; unsigned int cpuapx_ndd:1; unsigned int cpuapx_nf:1; diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl index 413ad4f2879..8ff7bf1828e 100644 --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -3205,6 +3205,20 @@ rmpread, 0xf20f01fd, RMPREAD&x64, IsString|NoSuf|NoRex64, { Acc|Qword, RegC|Unsp // RMPREAD instruction end +// RMPCHKD instruction + +rmpchkd, 0xf30f01fc, RMPDIRTY, NoSuf, {} +rmpchkd, 0xf30f01fc, RMPDIRTY, AddrPrefixOpReg|NoSuf, { Acc|Dword|Qword, RegC|Qword } + +// RMPCHKD instruction end + +// RMPOPT instruction + +rmpopt, 0xf20f01fc, RMPOPT, NoSuf, {} +rmpopt, 0xf20f01fc, RMPOPT, AddrPrefixOpReg|NoSuf, { Acc|Dword|Qword, RegC|Qword } + +// RMPOPT instruction end + // RDPRU instruction rdpru, 0x0f01fd, RDPRU, NoSuf, {}