From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2073.outbound.protection.outlook.com [40.107.6.73]) by sourceware.org (Postfix) with ESMTPS id 6BF523858D33 for ; Mon, 6 Nov 2023 15:39:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6BF523858D33 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6BF523858D33 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.6.73 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699285164; cv=pass; b=C06ciB7s1KzsziJekKJUDxtCRG96Zi1l1nwyGLRmRor7hil4C4wt55gfb3U4VwsqYTtoM/dCZWNdTxqdtQirFkDJRNo88tWtI5gkjCYqIjG/XGUp2xnxJUFPdx08D5X10JoztLU3w9BAljJyYjNucpsVk5ZC91bAGBImvz1dCFw= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699285164; c=relaxed/simple; bh=FK/KwikHpybXfNEl19zlG8ZQMKgfelQQ4uvdfqhiT9g=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=XEvJgC1RehVbc0xGaE8rvSJ6RnNmsN9oZ5qcOcv31psv8nNYytNvYXquGyRCggMao2F3yOi4xqgOe6GHtlCs+3aBq8ccAyXzLmBXRiZhIDypoL6ka5vT5tYDrfMTqopf55tGRFTgBrF9pYKNqwNTmMULRKElDIRAPQdzmt+nQvs= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J8f1yDdtTfhJ06gv/Ytb+P54/ZweWToxuDVmpBMtT+xmVcpy7KtbjwLULa4M421h2YhuB0vvDFYTEy3qavom7nozGfvMfeLcI5g/Utk5P8FcltzmQE5QiKR6tDYOV3QJPw/dqqb+hq7WTNyL+UnJJU8clfg7B12ELAHOsyrycD4EQ/xPYzFRlQnBrF7i1kH/do0LBr7KIlZ1ORyr/sA/xLss6dXRnd5CFNMfIOZ1Ca23joYRvIuH7XGCFgUawhANIySQV9w46Ge00/Lud9uI1dlN/oDVgZDG7MJJg9ueqw48DxjdiLFydoOKg95gdF+9XuB4IZ/p76JBfSOETK5vAg== 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=V2tYybZ3D0RdYi+wn0ZQty+nuMMPN5DOsJGfjbLCqfo=; b=GKNrqmG/8pgHlH/eXZryAWW6CsKc10lUle8xQMWAdVxiG64fjbT6dpe7XtJgiylQhSVVjWgTxl0SxkJzeztXnvsZo73UqtnMddTH5ySf2B37PZJNppCTYXYtZ437nE581W2UNR/OpBpkuy8nUYzUTDblxPhF+gmp+JJG+jsVjmm29kWlmd/CC4PORjMUveSwWCleSUkScmlwcc/OVKfizRVArx5izTUXFZMGHl9FIkgUKHVmhC2Cv0WqQHhaDisSA8ckEbBpaOE6D1BHUeerNeTjZtLXVFEGrR3AlzstN1jdmcyZRlbbu00f5lDpRZBBdADOg8FtyOqWH0AvjVXlzQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V2tYybZ3D0RdYi+wn0ZQty+nuMMPN5DOsJGfjbLCqfo=; b=uwqX+1msULQmM6G+QgEvJwwOn9nOyvuH9+1bJsUzRwYUbNHdAMXYMsINw47Rg1n1dagX6EiI48hDObnHhEezEBXVchTVeaA8S5+IJgbO0GvTft7jqOfV/3r5c0Laq7H3pE17MEhETAh/uBSx5y0Oxg9xDMEZY7K/RSl0pW7ufWav140U6wbzurJ96hzdUDGbYSd6052HizzYUXjMpsx+iKinXib0OY47gDX9rkwQpcXJ/PHpTL6VJb9CfC1DF/AH3UCsoqppQ4PHfb/sTMB5VO+hfZe+MZ5IkRtY7GdmquQiRS4lUjNu/xuJ2wL3oXhZYtq8JHRbR2KbGRhOBvSImA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by PAXPR04MB8640.eurprd04.prod.outlook.com (2603:10a6:102:21f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.16; Mon, 6 Nov 2023 15:39:19 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::eb8e:fa24:44c1:5d44]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::eb8e:fa24:44c1:5d44%3]) with mapi id 15.20.6977.016; Mon, 6 Nov 2023 15:39:19 +0000 Message-ID: <5807de3c-c509-69df-cdaf-e334ab26bc5f@suse.com> Date: Mon, 6 Nov 2023 16:39:17 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH 1/8] Support APX GPR32 with rex2 prefix Content-Language: en-US To: "Cui, Lili" Cc: hongjiu.lu@intel.com, ccoutant@gmail.com, binutils@sourceware.org References: <20231102112911.2372810-1-lili.cui@intel.com> <20231102112911.2372810-2-lili.cui@intel.com> From: Jan Beulich In-Reply-To: <20231102112911.2372810-2-lili.cui@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR4P281CA0201.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e5::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_|PAXPR04MB8640:EE_ X-MS-Office365-Filtering-Correlation-Id: 2621a95d-0d3d-4f73-4202-08dbdede8aa2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8WktyHYr7L+F9uifuOqGZtDwWPCDwszetQNZuvyDHs0/Nd+dUJy9Hy3ohiPnZleBG2NC5Drf6BfCC3OQS5vAGAK62GcbOm8uJOsYWYpj5M1FEl4CgDNxVfbrB7ISv0l0LLlEWGozfeY1nXT6pceHFBQdd7GrzGCviigpSClinjXb4nADPlrfcmQ3/rLyT8wmEn9Qe/A98UaFZsbpjtC2xUHHRnekpM1FoHfqd7fS7LT40PGyE9P0noYfJXKvVim9iX+KcpSJg9XE8JYM3K2oDJ0i3ZXCP2pfNjTlm0frteucT0qI9df1urCJNdM6+piYzAfYF8ra74lkGRsg9h7BkRn85OYJf/ooO1105aYjNuqILDB1zkxRry2Sasqvh3YhXL1br7BW2Fjn8OWOuYaSVTQ3kFqIInDpl9BnIHMUXqvfAspCHbEvcHYMPNwb48942LqH6UKKb6CAtraBFbyrWspsttzj+MouJGRdxG0fnEQ8LhEThelXsMr9cKncbnak4KtQ0DL4+o6b5adxeM3nLjCJpPE+D3vAAm0gVCCiuN9vd6JADA75XbH54a0LAgEea8f7JkjPjnUWsEiiZTFV1Td3Nramis/lCtggjWC0BPyzMgi2RvqdRtoC5/nU/dDi09wALrDBfB+dhrPdeL8DSg== 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)(366004)(39860400002)(346002)(396003)(376002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(66556008)(66476007)(66946007)(36756003)(6512007)(6506007)(53546011)(26005)(2616005)(31696002)(38100700002)(83380400001)(316002)(6916009)(86362001)(6486002)(478600001)(4326008)(2906002)(8676002)(8936002)(41300700001)(5660300002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Q3l0ZVpKcG5XVXc2ZzlsNVlyNmFVTnNFcGlKZGFBS1BSbVhrbFZUa3lCd3E1?= =?utf-8?B?bTBpd1RnRmdTS1FKVW83U3dUVXdrbHljd1QwMW1SVDYvYVFMakk5NmlLS1Rs?= =?utf-8?B?bmZ3REJaNDdSU0VPb3QzT1F4RTN6aWU4UlNsS016M2xkelJJT01vTmJTV3pF?= =?utf-8?B?Z0xKZUFXL2tZWC83YzVPY2lMRzZUZmdTV00rcmFhSlJwMVV0dU1IMEdvd1Fv?= =?utf-8?B?bU1EUXJldUFZbHlvbjlUMTdFb05MK1ZldUxOSE9RbFhvM3dhdEl6VkdmMVpJ?= =?utf-8?B?MXcyNHpDeE45UmFEd1ZZcWZzZWlMTDZHdGc3ZHBkQlVlSG9rUzJrMlQrd0Zq?= =?utf-8?B?N2NVd1pQaVRjaGZCYlFSNDBTSTF2RXJLSzRDb1VhN1ZONHJRUzZFNXhuamlp?= =?utf-8?B?SUppR2JCa0xlZjhNdDZkZnc0SlFNeThaU3Jkc2FzNmM5UUhTRzJrdmMrVHJm?= =?utf-8?B?cFVDeFpnR0owbVc1M0M1bHd1LzlBSXZXK3JiNCttcTRpWHVWbTJQMWo5NDNv?= =?utf-8?B?QTBWQTJ3NWJXc2dkaENtdFlpVk1ueXdob2R3YkhINXBBUlRHenB6Y01jSmha?= =?utf-8?B?Y2dIdzRuOHRhZ2VtV0J5eGdabXY2REJQWjlPSHdJelNCMThHM25TUUdaRTR5?= =?utf-8?B?NkJVaWNlUXhlRjNBRXM1S2ltQUo4WldqYVpjME1kTU8vdXhwTVFVbm1kbEoy?= =?utf-8?B?Um1pV2I2UVdXV3VLWmJQaElxdVhyQWZyR3hwQ0hVMTJjd1pHN0txWXk0NEVB?= =?utf-8?B?ZDd2QTFUcnBRemFUeHRXUnZhZTJ6ZUpINnd2NGxzUndtMVhIaFRjWmVPQVFC?= =?utf-8?B?Z2hJN0VhekxJaFNJUTBkcGU5S0pYNkJReVBpY010Ni92OGtxVzMyRTNvbHk0?= =?utf-8?B?b2tjeksyaWV6UFQwV2VlQ0pJZEJHMzVGVzRUSUQ1TlRrdk1PdzVwdVZGTjhq?= =?utf-8?B?MHlBWFFuN1RWdGFHV3FPdUpTeUNBWTJ1bjc5TkhxWHdSbmN2aU84cXJWUjhX?= =?utf-8?B?SXoyQmhROUZTY25lQTFKUURvR1FIM3YxQS90bldkSnVGcFdFeGVrQnNvWGJn?= =?utf-8?B?Y0NLMG1FeUFBOXZVdXZqTVF6Y3NldjZxSnBtd3l0b1Q2TTNoSmRUdVlyaE8z?= =?utf-8?B?dWZJQUs4Ung2QndXV1FBREszREZ0bjQ1Z0tQMlNrVklTMWRkTlo1VWxJMS9E?= =?utf-8?B?aktaWkJtUTFHcmJnb2VuUTlZU3A1anNTTnpWN0NsamNzNlN6aHRHMlB0Yy8y?= =?utf-8?B?Z1pNOG1OZ0UybUNPSGhMTEpTbGRhWWVOdjlVdExEL1g0WVd2QTJTZ3NaK1U4?= =?utf-8?B?M2xDV0tISWVoeTk5aU5rdERMVFdlM2lSTkl2R3lzV0J4WXN6YVB0VEQxM2RZ?= =?utf-8?B?bk1VSytFOCtzNERmUFlWWkZMZTdEK29HZlhPL2cxdjE3aWxsRkpiOUovU1JG?= =?utf-8?B?NXZKcDdvdVZQZWs5UlhhanBQOG9veWt0eEpBRDU5bTRlV0RaVFZTSE9XcWxJ?= =?utf-8?B?YVVpRFI3dlBjOHRGWDUyUUNMM1NDMXZjQUxDZDdkMTYrTnlReGE5azlnaExF?= =?utf-8?B?TDYvaHFGR3Q4a2RFcTJsUlNNNTYxUWpSVSs2b1ZIZjY0TUdRakZ0MDlPbEFj?= =?utf-8?B?UFBQZG1wS1RRTzBUNnk3OTJtTTMvYjd4ZjVZMDk1Vm5NRkQxeTdYRlYxU1dH?= =?utf-8?B?ZUJwYkJ2UUx3RzYvb08xbEF6L3piZE9tWE1BSVdGUnNxVmczZlpLVVMxU1VH?= =?utf-8?B?dDNaVnRYWW93dEsxd0pkbEdueEdJSHJNeGczSXF1SFVwOE9ISjNlR3JQT2hp?= =?utf-8?B?cXdPNFg0V3l4NHYrZG5qR0VjcjVuVmh5a3NFNFFFcHlqOGdMQWFSOXhDRjV4?= =?utf-8?B?ZGUxY0kvVWdlUlk1VUFMWWtETkgyQjFLMmZXT1VzTUs5REZoYzZMaTNXTDE1?= =?utf-8?B?M0NLS0QrTVBWcUh1K010R1NLNmlobXl1eTVzQWg3NHhyeC9vM1g0dkEwREFQ?= =?utf-8?B?VzRrMlBIeGtVZE5iYldsZjlXdDNGOTRBQld6MGpMRU1yUXhzQVFreWM1cXM4?= =?utf-8?B?emdWNVV6U0djN1M0ZXRpdDFuVXdKWkljZFFmMlVhaEdDUXRpcFRMTXRsM3JH?= =?utf-8?Q?oPXvNBzdUSWAdd/EJ+dihu8dQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2621a95d-0d3d-4f73-4202-08dbdede8aa2 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2023 15:39:19.4380 (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: 4lzlKBrgz0f4+2cj0m7J6OggFk4gbQdh2jgAFHL8H0EVko8J0kwnkoSZ+9VMYZvkSFcpxJCJFcMMCh12K4C/kw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8640 X-Spam-Status: No, score=-3028.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 02.11.2023 12:29, Cui, Lili wrote: > @@ -269,9 +275,17 @@ struct dis_private { > ins->rex_used |= REX_OPCODE; \ > } > > +#define USED_REX2(value) \ > + { \ > + if ((ins->rex2 & value)) \ > + ins->rex2_used |= value; \ > + } > + > > #define EVEX_b_used 1 Nit: Please avoid (re)introducing double blank lines. Instead ... > #define EVEX_len_used 2 > +/* M0 in rex2 prefix represents map0 or map1. */ > +#define REX2_M 0x8 ... a blank line ahead of this insertion would be helpful. > @@ -1872,23 +1888,23 @@ static const struct dis386 dis386[] = { > { "outs{b|}", { indirDXr, Xb }, 0 }, > { X86_64_TABLE (X86_64_6F) }, > /* 70 */ > - { "joH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jnoH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jbH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jaeH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jeH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jneH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jbeH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jaH", { Jb, BND, cond_jump_flag }, 0 }, > + { "joH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jnoH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jbH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jaeH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jeH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jneH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jbeH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jaH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > /* 78 */ > - { "jsH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jnsH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jpH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jnpH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jlH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jgeH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jleH", { Jb, BND, cond_jump_flag }, 0 }, > - { "jgH", { Jb, BND, cond_jump_flag }, 0 }, > + { "jsH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jnsH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jpH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jnpH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jlH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jgeH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jleH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > + { "jgH", { Jb, BND, cond_jump_flag }, PREFIX_REX2_ILLEGAL }, > /* 80 */ > { REG_TABLE (REG_80) }, > { REG_TABLE (REG_81) }, > @@ -1926,23 +1942,23 @@ static const struct dis386 dis386[] = { > { "sahf", { XX }, 0 }, > { "lahf", { XX }, 0 }, > /* a0 */ > - { "mov%LB", { AL, Ob }, 0 }, > - { "mov%LS", { eAX, Ov }, 0 }, > - { "mov%LB", { Ob, AL }, 0 }, > - { "mov%LS", { Ov, eAX }, 0 }, > - { "movs{b|}", { Ybr, Xb }, 0 }, > - { "movs{R|}", { Yvr, Xv }, 0 }, > - { "cmps{b|}", { Xb, Yb }, 0 }, > - { "cmps{R|}", { Xv, Yv }, 0 }, > + { "mov%LB", { AL, Ob }, PREFIX_REX2_ILLEGAL }, > + { "mov%LS", { eAX, Ov }, PREFIX_REX2_ILLEGAL }, > + { "mov%LB", { Ob, AL }, PREFIX_REX2_ILLEGAL }, > + { "mov%LS", { Ov, eAX }, PREFIX_REX2_ILLEGAL }, > + { "movs{b|}", { Ybr, Xb }, PREFIX_REX2_ILLEGAL }, > + { "movs{R|}", { Yvr, Xv }, PREFIX_REX2_ILLEGAL }, > + { "cmps{b|}", { Xb, Yb }, PREFIX_REX2_ILLEGAL }, > + { "cmps{R|}", { Xv, Yv }, PREFIX_REX2_ILLEGAL }, > /* a8 */ > - { "testB", { AL, Ib }, 0 }, > - { "testS", { eAX, Iv }, 0 }, > - { "stosB", { Ybr, AL }, 0 }, > - { "stosS", { Yvr, eAX }, 0 }, > - { "lodsB", { ALr, Xb }, 0 }, > - { "lodsS", { eAXr, Xv }, 0 }, > - { "scasB", { AL, Yb }, 0 }, > - { "scasS", { eAX, Yv }, 0 }, > + { "testB", { AL, Ib }, PREFIX_REX2_ILLEGAL }, > + { "testS", { eAX, Iv }, PREFIX_REX2_ILLEGAL }, > + { "stosB", { Ybr, AL }, PREFIX_REX2_ILLEGAL }, > + { "stosS", { Yvr, eAX }, PREFIX_REX2_ILLEGAL }, > + { "lodsB", { ALr, Xb }, PREFIX_REX2_ILLEGAL }, > + { "lodsS", { eAXr, Xv }, PREFIX_REX2_ILLEGAL }, > + { "scasB", { AL, Yb }, PREFIX_REX2_ILLEGAL }, > + { "scasS", { eAX, Yv }, PREFIX_REX2_ILLEGAL }, > /* b0 */ > { "movB", { RMAL, Ib }, 0 }, > { "movB", { RMCL, Ib }, 0 }, Like in the i386-gen.c adjustments for row E look to be missing here, too. > @@ -2091,12 +2107,12 @@ static const struct dis386 dis386_twobyte[] = { > { PREFIX_TABLE (PREFIX_0F2E) }, > { PREFIX_TABLE (PREFIX_0F2F) }, > /* 30 */ > - { "wrmsr", { XX }, 0 }, > - { "rdtsc", { XX }, 0 }, > - { "rdmsr", { XX }, 0 }, > - { "rdpmc", { XX }, 0 }, > - { "sysenter", { SEP }, 0 }, > - { "sysexit%LQ", { SEP }, 0 }, > + { "wrmsr", { XX }, PREFIX_REX2_ILLEGAL }, > + { "rdtsc", { XX }, PREFIX_REX2_ILLEGAL }, > + { "rdmsr", { XX }, PREFIX_REX2_ILLEGAL }, > + { "rdpmc", { XX }, PREFIX_REX2_ILLEGAL }, > + { "sysenter", { SEP }, PREFIX_REX2_ILLEGAL }, > + { "sysexit%LQ", { SEP }, PREFIX_REX2_ILLEGAL }, > { Bad_Opcode }, > { "getsec", { XX }, 0 }, > /* 38 */ Down from here row 8 also wants adjustment afaict. > @@ -8289,6 +8313,7 @@ ckprefix (instr_info *ins) > { > int i, length; > uint8_t newrex; > + unsigned char rex2_payload; Please can this be restricted to the inner scope where it's used? > @@ -9292,13 +9338,17 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > goto out; > } > > - if (*ins.codep == 0x0f) > + /* M0 in rex2 prefix represents map0 or map1. */ > + if (*ins.codep == 0x0f || (ins.rex2 & REX2_M)) I'm struggling with the M0 in the comment. DYM just M, or maybe REX2.M? Also is this, ... > { > unsigned char threebyte; > > - ins.codep++; > - if (!fetch_code (info, ins.codep + 1)) > - goto fetch_error_out; > + if (!ins.rex2) > + { > + ins.codep++; > + if (!fetch_code (info, ins.codep + 1)) > + goto fetch_error_out; > + } > threebyte = *ins.codep; > dp = &dis386_twobyte[threebyte]; > ins.need_modrm = twobyte_has_modrm[threebyte]; ... all the way to here, really correct for d5 00 0f? > @@ -9454,6 +9504,14 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > goto out; > } > > + if ((dp->prefix_requirement & PREFIX_REX2_ILLEGAL) > + && ins.last_rex2_prefix >= 0) > + { > + i386_dis_printf (info, dis_style_text, "(bad)"); > + ret = ins.end_codep - priv.the_buffer; > + goto out; > + } > + > switch (dp->prefix_requirement) > { > case PREFIX_DATA: > @@ -9468,6 +9526,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > ins.used_prefixes |= PREFIX_DATA; > /* Fall through. */ > case PREFIX_OPCODE: > + case PREFIX_OPCODE | PREFIX_REX2_ILLEGAL: May more robust to mask off PREFIX_REX2_ILLEGAL in the control expression of the switch()? Or else why don't you move the if() immediately ahead of the switch() into here, as a new case block? > @@ -9513,6 +9572,13 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > && !ins.need_vex && ins.last_rex_prefix >= 0) > ins.all_prefixes[ins.last_rex_prefix] = 0; > > + /* Check if the REX2 prefix is used. */ > + if (ins.last_rex2_prefix >= 0 > + && ((((ins.rex2 & 0x7) ^ (ins.rex2_used & 0x7)) == 0 > + && (ins.rex2 & 0x7)) DYM ((ins.rex2 & 7) & ~(ins.rex2_used & 7)) != 0 > + || dp == &bad_opcode)) What is this last part of the condition about? Other prefix zapping code doesn't have such. > + ins.all_prefixes[ins.last_rex2_prefix] = 0; > + > /* Check if the SEG prefix is used. */ > if ((ins.prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES > | PREFIX_FS | PREFIX_GS)) != 0 > @@ -9541,7 +9607,10 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > if (name == NULL) > abort (); > prefix_length += strlen (name) + 1; > - i386_dis_printf (info, dis_style_mnemonic, "%s ", name); > + if (ins.all_prefixes[i] == REX2_OPCODE) > + i386_dis_printf (info, dis_style_mnemonic, "{%s} ", name); Do braces really count as part of the mnemonic? > + else > + i386_dis_printf (info, dis_style_mnemonic, "%s ", name); > } Aren't you at risk of wrongly printing a REX prefix here if the high 4 bits of the REX2 payload were all zero, but some of the low 4 bits turned out unused? > @@ -11086,8 +11155,11 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask, > ins->illegal_masking = true; > > USED_REX (rexmask); > + USED_REX2 (rexmask); Do both really need tracking separately? Whatever consumes REX.B will also consume REX2.B4, an so on. Jan