From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2067.outbound.protection.outlook.com [40.107.22.67]) by sourceware.org (Postfix) with ESMTPS id E9A263858D20 for ; Thu, 28 Sep 2023 07:57:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E9A263858D20 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-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bMJzaAk7knLr404yqHp/Kn3yTuGUNgZ0B+8sxZh+s2l3CLCpWLRq2nTryD0qTRxwNb/lw29MBl/7orNQjj6qwJcEVfO38WtRGKpXfbd7CDY+pC57BgPkkcUSNDuH3yWVdGJ4lCNFuwXMNlhK3lS+rsHCIS2Atn7bMXwoYD3D7JaAfV3NMksUKt3tqYccoBYvtPsYeNDNAD4fn9S9Tg0akDli69+HQ559px3sR37EaBjMMq3/bcRbis9YIu9wyuOI5NimzN5/rETMzejlS4IhZItdW9up1qnfL+NAz7gyx6lotFiTyEmd46YMbZXSeLQ/gu/cZvOh7f1xl/ROI/2FCw== 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=XnLkqI2jog2l4tgOePwx56zOr0d7r9RaSu9diKQv3q0=; b=atHlytRWgqJgwnXZU8/uWas65vDwbEHxHJXS6ZPyiaZo1Jsab2Hq/mQAAQwhfZayb6DISAuWHN0OlhkQ5J6uLBEdgHbnDUGGULaO7gMd3SeF6dEIIVP67f9wJZNLHMWBMybvVoL7KmxFHcrXuGhx8Rrqt2i1/S2G1IaYK4Gy47s7KA2x0rD9DYfEYqGrRwhnFy86ApHKHQO7ncL26UjjQiusVwEZIiGJkEumaMyCHQ9nFUePosRMC6ISt+31jN3te0Km0RzfmuJg/M7sfgtdbPJys5X8w0937ZPx/GkTfY+UR2zZcTlCENv1PN1HFv+KEOhB0jRcENOc6HSxBF30Aw== 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=XnLkqI2jog2l4tgOePwx56zOr0d7r9RaSu9diKQv3q0=; b=c1ccDbk6ttOmLuWVk23HI7kXW7RuSIZypF3bIefOAaZBHG28978QUfzt7zigabGUTjWgGB+Sjuc7f2Yn2/WS0WNumvVDOMDPoimhA6oocHY+yaUBLzvES8aqA215wZ8Opq10h58rgpsumALbzSKRfawjXQfTJNP3YGfsxBVulXVi+FXewMy+t7Cj2A94Iy1qy7RLSqPlzl4gihMwd9oVM0U6KrwUD7Fo5TvTrHnHXk/++raXi3/b4H95xD9I4fkoOlAFhnrfYhLvwE36YgcmpJzBblnc42JIE6VjD1m/m6IWx1dcPzbBQdV/kq8sIU0qdi5nmWxq7lWTt2CIXxSTDA== 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 PAXPR04MB8302.eurprd04.prod.outlook.com (2603:10a6:102:1ca::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.34; Thu, 28 Sep 2023 07:57:46 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9f5d:8bed:7a5b:e75a]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9f5d:8bed:7a5b:e75a%6]) with mapi id 15.20.6838.016; Thu, 28 Sep 2023 07:57:46 +0000 Message-ID: <0f70237c-880d-27bb-56b5-b14bb7aadb20@suse.com> Date: Thu, 28 Sep 2023 09:57:43 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH 4/8] Support APX NDD Content-Language: en-US To: "Cui, Lili" Cc: hongjiu.lu@intel.com, konglin1 , binutils@sourceware.org References: <20230919152527.497773-1-lili.cui@intel.com> <20230919152527.497773-5-lili.cui@intel.com> From: Jan Beulich In-Reply-To: <20230919152527.497773-5-lili.cui@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR4P281CA0054.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:cc::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_|PAXPR04MB8302:EE_ X-MS-Office365-Filtering-Correlation-Id: 3b224116-d37a-4369-ef69-08dbbff89a0b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QXHixJ0c3mQ2hY9qJC07I1ug+zr/XPy/wgh+qZbCQ94VGCqFpYsO7mREKiVnqRtfn5Pf/GoYoxxTM9+gcVBVJ961Q4GW1vWIPttaHQ/mP5dkDHwk3d1DAnckl6Y70yGN8+HtD7D6P/XzZgXkSOpaRDB1v9SK6ggItWgwOF1RwX1PPadFJGPv5Bk9XfMS11G+VLlZWhqTAypjSA3ucHkBtcrI2xjn/GZB0NZ8yAwgx8511K7bMGynB0ucknEIxZp6EM0C0fjeDzdC3gY+zxctCgHNZZd2q0DzK1yYGMLtRI50bTyJ4Mcvq87Z+acslcbwHwstZNPg9Z7pTWBpuLgJxWjaUnDVxgj+X9i7SCdZC1sQ2mWjWseQ6+f46avB/ZI/OrN8MjiZoVZ77FOql1Qb7rJ5BY4IHvYWaf/J7BnDVlrO34l5oO/3IIFDYdL1gRj335SadLootsBHaI73eyToi5REVhpx71HCy8tcS13yM8Y+HNDLSN6zDtwTJCEzchCYaoQ+WDfTaBd1sXudVFMahIJo5htRDKEcvbDPRtDESF74Kghgv9Ru8eu4qMQ8Q5zne/FFDSy928ElAp9G5BwE+pInPdbdWLKLypCTfg3uZFxFI+TgBofkQGTJdahQMtQuSYzHipHcv1qAumqWtGg9bA== 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)(136003)(376002)(396003)(39860400002)(346002)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(31686004)(66899024)(6506007)(53546011)(6666004)(6486002)(478600001)(2616005)(38100700002)(86362001)(31696002)(41300700001)(83380400001)(26005)(6512007)(36756003)(6916009)(66556008)(66476007)(66946007)(316002)(5660300002)(2906002)(8676002)(4326008)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bUZSU29lNWwxRXlXN2Q0Q3Nld0VWMnZMWXM2SDBuRGdzZWEzek93T3dzcnNx?= =?utf-8?B?OUJXSlZJSmU3dnBuK3B1OHdkYkV0MEtmZGh3Mkl2VHJXcXIrenNNalBvUGt4?= =?utf-8?B?MFYxckk0RVp3WjVwcUNsVlpSa1dtSWhXM0lTY2Nhb21vV3N6Qkg5NXg0VTBw?= =?utf-8?B?TlNYd3pBb053WXVlYy9aRnRMWmhUbnc2ZG9MTE9pVEZza2xsemxsVW85WHNH?= =?utf-8?B?Vy9UNVJLc0tNTnVXeVA1SFcrTmJzWWVyZW1qZzE2c0FwaHlNQVdiNVArNTd3?= =?utf-8?B?UjhYNHRKT2lGUHpWY2VFbzhKQzdDQU5GblFoR095eEdWT2hrUXdlRGtmMHpD?= =?utf-8?B?ZXJxTjlyMWJqdUNoVG1lQWlGamE5dmNqRERMNkdRbldnUytZNUU0U0c4VXlY?= =?utf-8?B?Z3lpTWFLVEYwVVBuTnJPTFZrSzR4cWt3U01qRFFqNkdCYXAwUDBWQnJnQ0JI?= =?utf-8?B?ZmxjZUJSWDZLUXhVTUV4VzJ1WFZVb0VIdlExWWpoVnEvUVJ3dEhFN25wS0xL?= =?utf-8?B?UXdzR0tveWl3a3NhNGNMbHJkM1ZEVVIxUnphNkpEcjFmSkJwRlhDeVFqcXcz?= =?utf-8?B?UDlLbEltNzBGTGVjS0RkSnhGeXhwbjFDOU9UWXcwVEFEWmg3Sy8xa1M3S2Jh?= =?utf-8?B?VmpMeElETWpnbjU0Zm5xaXJOM0RHQ0RXQm05MEJrU0pGMER6WURIdmcrdFh2?= =?utf-8?B?aEpGOHE4ZjFIK29DTitNOVFlWTBuczFVdStLdlpXSmpoN0dna0hITmU3SHhj?= =?utf-8?B?b213N2tWL2I0SFYvUU45aFNpWjF1TWdwSkdySUxtV2h5T1ZKZTNRbHkweUla?= =?utf-8?B?VGYrWFRXN2l2YnArTXNJTzFQbkZvUWduYjB3YlAydmM0R2VYTlJGM2JqT2ZZ?= =?utf-8?B?WGdncVYxZHRoQTNVZ3VFSk9BVEJSbC9IM281WHY2ZURSNG93QnYrNGt4TDFl?= =?utf-8?B?a3hYREx0bWtIV3pIWmQ4L0E1RHh2YWxQajlqVk5MNDhNOXJDODVtZUt1NmRr?= =?utf-8?B?SUdjQVI1S3hkQWJDRTNKSGRPMmFTYTVPS0VnZ2lGNGxiZFV5LzhWN1VmRTda?= =?utf-8?B?S3NNUHg0M3Nzc2ZabGh4RDFKQW9EWmhYdUsvdkR5OEVQd1M4QnlSc3pocWdm?= =?utf-8?B?UHNwME96M2NQcEZKU3ZOUkJURkF3UmEydU1iajd2LzdpMDJpR2pobEpSWW9Z?= =?utf-8?B?U1ZUU3IvS0JTcUF5VE5LY1FnVnliZU4xSXB6L0VmaGp2VTdPQ2N2QnFrbW1J?= =?utf-8?B?Q3Q2bzVBOGNLY1dMQjV1bG5ESXdiUVBJTVNwekZNMVpnNkM3dldGOFM5b1Bn?= =?utf-8?B?Rk5MUG5MT25EWVJEcW8rUDRQMmdPZ1QwWE5jc1ZhdFMwWDRONWhMYnZsRDVu?= =?utf-8?B?WFNyYmsyUVVUWm83Ylh4VTJGdHExaisrUFJCMzJjbndFdmcwT1FUUGJBcURT?= =?utf-8?B?SEVEYVNTYVd4amo0aEJtQytJd0NHeXRGeGlHa2ZYc2k3cWhZaFpKUTY2N3B5?= =?utf-8?B?RDllVlRTS2pPbFE0clpFc0tzTElrUVFXWXFIYTBUL2M5SlgwQjBsaFBhemN3?= =?utf-8?B?OW5adDlUSTdHalYxcHRFczJ3Ykp6NEk4RWFsMHoxSFNuZ1NzMzdpaXVpeWdv?= =?utf-8?B?a2k3aWswdlQveFd5NVRPSEVxTGV2bHdrek0wMXNXKzB5YTJqVnlPRmdrbWNW?= =?utf-8?B?dGhnT0ZYSWxQWDlROExEUU5iYTh6WmlCZkR5U0VRNGxmQzNWOFp1V3FsNGRu?= =?utf-8?B?Si9jSy9QdWVnRW9JMXQ3NzBEZUFkYzBoRDdSbUl6UktZT24yTFY5UlF5QkNK?= =?utf-8?B?b3MwOVRGamNzeU9wRzRSaVFwVS9GM1FSRW55WjVpZG9pVnpUTVMrclZpNTV3?= =?utf-8?B?b1FjOHRldHpVdmFYbERHekRXSHp5Q3FucDVIeEV3c09jSVRVeDRqclVYeXJp?= =?utf-8?B?N3VXZWFxblMzLzNOZHdOUjRMVDkveC9PdVN3dkhGY3ZxTlJIb29BeEJHdHl2?= =?utf-8?B?Qzh1Um5WMFZDL29QQ0psUEI2QjlQTExYL09wY2ROWWJmS2pNN0N5bGJTWkc3?= =?utf-8?B?ZHhRRWVGV3F2WlJwdUp5SlUzdVRzbzJxbzJSNWRETHd6RDU4c2I0MFI3Mlph?= =?utf-8?Q?j8ldbHhQWqVKhl6zqkXMaDwKl?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b224116-d37a-4369-ef69-08dbbff89a0b X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2023 07:57:46.1533 (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: xR0F5lm4wQbzLJew3ooqN+3fqIhwcmiz0wgMeQdWLfXT3OlPWGpBQtpJtN82djjiAwB5FDddtJyJtyaZCuRNUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8302 X-Spam-Status: No, score=-3027.5 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 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 19.09.2023 17:25, Cui, Lili wrote: > --- a/opcodes/i386-dis-evex-prefix.h > +++ b/opcodes/i386-dis-evex-prefix.h > @@ -353,8 +353,8 @@ > /* PREFIX_EVEX_MAP4_66 */ > { > { MOD_TABLE (MOD_EVEX_MAP4_66_PREFIX_0) }, > - { "adoxS", { Gdq, Edq }, 0 }, > - { "adcxS", { Gdq, Edq }, 0 }, > + { "adoxS", { VexGdq, Gdq, Edq }, 0 }, > + { "adcxS", { VexGdq, Gdq, Edq }, 0 }, With the OP_VEX() change moved to the earlier patch, you wouldn't need to alter again right away what was just added there. > --- a/opcodes/i386-dis-evex-reg.h > +++ b/opcodes/i386-dis-evex-reg.h > @@ -56,6 +56,105 @@ > { "blsmskS", { VexGdq, Edq }, 0 }, > { "blsiS", { VexGdq, Edq }, 0 }, > }, > + /* REG_EVEX_MAP4_80 */ > + { > + { "addA", { VexGb, Eb, Ib }, 0 }, > + { "orA", { VexGb, Eb, Ib }, 0 }, > + { "adcA", { VexGb, Eb, Ib }, 0 }, > + { "sbbA", { VexGb, Eb, Ib }, 0 }, Aren't these two and other adc/sbb entries required already in the earlier patch, for consistency with what you add there on the assembler side? > + { "andA", { VexGb, Eb, Ib }, 0 }, > + { "subA", { VexGb, Eb, Ib }, 0 }, > + { "xorA", { VexGb, Eb, Ib }, 0 }, > + { Bad_Opcode }, > + }, > + /* REG_EVEX_MAP4_81 */ > + { > + { "addQ", { VexGv, Ev, Iv }, 0 }, > + { "orQ", { VexGv, Ev, Iv }, 0 }, > + { "adcQ", { VexGv, Ev, Iv }, 0 }, > + { "sbbQ", { VexGv, Ev, Iv }, 0 }, > + { "andQ", { VexGv, Ev, Iv }, 0 }, > + { "subQ", { VexGv, Ev, Iv }, 0 }, > + { "xorQ", { VexGv, Ev, Iv }, 0 }, > + { Bad_Opcode }, > + }, > + /* REG_EVEX_MAP4_83 */ > + { > + { "addQ", { VexGv, Ev, sIb }, 0 }, > + { "orQ", { VexGv, Ev, sIb }, 0 }, > + { "adcQ", { VexGv, Ev, sIb }, 0 }, > + { "sbbQ", { VexGv, Ev, sIb }, 0 }, > + { "andQ", { VexGv, Ev, sIb }, 0 }, > + { "subQ", { VexGv, Ev, sIb }, 0 }, > + { "xorQ", { VexGv, Ev, sIb }, 0 }, > + { Bad_Opcode }, > + }, While these are needed because of the differences (from existing table entries we have) in the last entry (albeit I don't think those last entries need to actually be spelled out; you don't spell out trailing invalid entries further down, and we don't do so elsewhere either), ... > + /* REG_EVEX_MAP4_C0 */ > + { > + { "rolA", { VexGb, Eb, Ib }, 0 }, > + { "rorA", { VexGb, Eb, Ib }, 0 }, > + { "rclA", { VexGb, Eb, Ib }, 0 }, > + { "rcrA", { VexGb, Eb, Ib }, 0 }, > + { "shlA", { VexGb, Eb, Ib }, 0 }, > + { "shrA", { VexGb, Eb, Ib }, 0 }, > + { "shlA", { VexGb, Eb, Ib }, 0 }, > + { "sarA", { VexGb, Eb, Ib }, 0 }, > + }, > + /* REG_EVEX_MAP4_C1 */ > + { > + { "rolQ", { VexGv, Ev, Ib }, 0 }, > + { "rorQ", { VexGv, Ev, Ib }, 0 }, > + { "rclQ", { VexGv, Ev, Ib }, 0 }, > + { "rcrQ", { VexGv, Ev, Ib }, 0 }, > + { "shlQ", { VexGv, Ev, Ib }, 0 }, > + { "shrQ", { VexGv, Ev, Ib }, 0 }, > + { "shlQ", { VexGv, Ev, Ib }, 0 }, > + { "sarQ", { VexGv, Ev, Ib }, 0 }, > + }, > + /* REG_EVEX_MAP4_D0 */ > + { > + { "rolA", { VexGb, Eb, I1 }, 0 }, > + { "rorA", { VexGb, Eb, I1 }, 0 }, > + { "rclA", { VexGb, Eb, I1 }, 0 }, > + { "rcrA", { VexGb, Eb, I1 }, 0 }, > + { "shlA", { VexGb, Eb, I1 }, 0 }, > + { "shrA", { VexGb, Eb, I1 }, 0 }, > + { "shlA", { VexGb, Eb, I1 }, 0 }, > + { "sarA", { VexGb, Eb, I1 }, 0 }, > + }, > + /* REG_EVEX_MAP4_D1 */ > + { > + { "rolQ", { VexGv, Ev, I1 }, 0 }, > + { "rorQ", { VexGv, Ev, I1 }, 0 }, > + { "rclQ", { VexGv, Ev, I1 }, 0 }, > + { "rcrQ", { VexGv, Ev, I1 }, 0 }, > + { "shlQ", { VexGv, Ev, I1 }, 0 }, > + { "shrQ", { VexGv, Ev, I1 }, 0 }, > + { "shlQ", { VexGv, Ev, I1 }, 0 }, > + { "sarQ", { VexGv, Ev, I1 }, 0 }, > + }, > + /* REG_EVEX_MAP4_D2 */ > + { > + { "rolA", { VexGb, Eb, CL }, 0 }, > + { "rorA", { VexGb, Eb, CL }, 0 }, > + { "rclA", { VexGb, Eb, CL }, 0 }, > + { "rcrA", { VexGb, Eb, CL }, 0 }, > + { "shlA", { VexGb, Eb, CL }, 0 }, > + { "shrA", { VexGb, Eb, CL }, 0 }, > + { "shlA", { VexGb, Eb, CL }, 0 }, > + { "sarA", { VexGb, Eb, CL }, 0 }, > + }, > + /* REG_EVEX_MAP4_D3 */ > + { > + { "rolQ", { VexGv, Ev, CL }, 0 }, > + { "rorQ", { VexGv, Ev, CL }, 0 }, > + { "rclQ", { VexGv, Ev, CL }, 0 }, > + { "rcrQ", { VexGv, Ev, CL }, 0 }, > + { "shlQ", { VexGv, Ev, CL }, 0 }, > + { "shrQ", { VexGv, Ev, CL }, 0 }, > + { "shlQ", { VexGv, Ev, CL }, 0 }, > + { "sarQ", { VexGv, Ev, CL }, 0 }, > + }, ... do we really need all these new entries? OP_VEX() checks need_vex first thing, so simply adjusting and then re-using the existing entries would seem possible. > @@ -9070,6 +9085,14 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) > ins->rex &= ~REX_B; > ins->rex2 &= ~REX_R; > } > + if (ins->evex_type == evex_from_legacy) > + { > + if (ins->vex.ll || ins->vex.zeroing > + || (!ins->vex.b && (ins->vex.register_specifier > + || !ins->vex.v))) > + return &bad_opcode; Don't these checks also apply to evex_from_vex? > + ins->rex |= REX_OPCODE; This, otoh, may truly be evex_from_legacy-only (but I'm not entirely certain). > @@ -9080,7 +9103,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) > return &err_opcode; > > /* Set vector length. */ > - if (ins->modrm.mod == 3 && ins->vex.b) > + if (ins->modrm.mod == 3 && ins->vex.b && ins->evex_type == evex_default) > ins->vex.length = 512; Down from here, still in the same function, there's another vex.b check which I think also wants qualifying. > @@ -10994,7 +11017,7 @@ print_displacement (instr_info *ins, bfd_signed_vma val) > static void > intel_operand_size (instr_info *ins, int bytemode, int sizeflag) > { > - if (ins->vex.b) > + if (ins->vex.b && ins->evex_type != evex_from_legacy) Wouldn't this better be ins->evex_type == evex_default, ... > @@ -11928,7 +11951,8 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag) > ins->vex.no_broadcast = true; > > if (!ins->vex.no_broadcast > - && (!ins->intel_syntax || !(ins->evex_used & EVEX_len_used))) > + && (!ins->intel_syntax || !(ins->evex_used & EVEX_len_used)) > + && ins->evex_type == evex_default) ... just like you have it here? However, for this change, doesn't this need moving to the enclosing if()? You should accidentally set EVEX_b_used here for APX insns. > @@ -13280,6 +13304,14 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED) > if (!ins->need_vex) > return true; > > + if (ins->evex_type == evex_from_legacy) > + { > + if (ins->vex.b) > + ins->evex_used |= EVEX_b_used; > + else > + return true; > + } When you reuse fields or definitions in places where their names don't match their purpose (the field dealt with here is "nd" after all, not "b"), a comment wants adding. There's also something odd with indentation here, but I suppose an if/else construct isn't needed in the first place. Jan