From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2057.outbound.protection.outlook.com [40.107.8.57]) by sourceware.org (Postfix) with ESMTPS id 66B113858418 for ; Wed, 8 Nov 2023 11:14:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 66B113858418 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 66B113858418 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.8.57 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699442042; cv=pass; b=vUgLG5ENTR+3I4dAY8sSu+T4EzqzOHejb3rP3hTSC8qXIr35tvo9KucyVZ7Xucivi1r34xK+WfI1dhGYtUWC73sv5P1VJihSa96jqbLXX+F+c45jfnnTb8BW61JEoRnevrEybs93OU/4fKeaWy1+HJWBK2SgHkq1tu20DVtnImo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1699442042; c=relaxed/simple; bh=QZNIy11P+SWQmtS22/jKdyIWncoPidpqP2lPs4lNiyU=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=jCr3QkEvquuzp7WaWt2k/ihifDSuGN/EyLXyGF2vxXXFYqkMihfquV8jwbsBIPUb2K7/IMtKkwiixA9SM8kW7PkrmwavGV2bBa0HgdyNQb9t9zmtJXb2rhEP0YJPbqXk7SQpWFv8we99aJ0lt+LeZtM2UTwehndzL/dFSzHZLsI= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lrZAvAIUEO29+IYNpqldL6SWZGLHiiphp2+WQK4OpS6W0nYM7612sydul4sIHZ6JPAzZlut8lB7nVqt5AakV10JHkTuNCgjv2OgypZ9DMPOW8WRVnqjcH3Gq+/sgVdIugjrR3JE17Jq4OPV49FFsCX/6/gHbKo+/hls2LSpQjOd5FNRg2O0jOWDhShJq5N8lC0oQ2ABGRgz0oEClGJ4yjQfPNEMy9bKTCVkz4dyR5Zmps/L5OUKTb81p6vsACDAlNaSHkioZs352z8PCF5w4NLUg5F7fe1ZpeZkF4/Wdx/Wc4mWkaBJ5BbqmofRAVFU/ur/MFjRovVbjd/CZIf96OA== 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=AQXoCWB2Al/5JvIpvc3qcu0YVSUTqKaMLklnpFurlZ4=; b=bABiRKAQuZL/XFmc1OUOxnjVTI4+5qRfBuYTVAKstjXN7M4aSf98uyZWMM0IDM6h8xby/Gr38ssERAx/iIVfzZoayP1ol8BXLZ1/+BSbgI+Nt4Q3pHfhJtTffSr89wW8pd7zU2N+2koT//bPPTinsZal7OVgPQCNcUNhPcm7HpEH+ZSy3nFUdzklcuetLnLTr7Hoo547McGpTizUUsssPzhBE+W1PAkSvTcrE948N0FgEET/GoeEYCJ0cHxgUJcvsgVp1bPBdVidAE8yPbRVymFF3JoF14qxXvaWoGc+hrtcvUXEuWuUWj2zmvOi+qlvtb26UjBCmIWrrvmPsSJwmg== 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=AQXoCWB2Al/5JvIpvc3qcu0YVSUTqKaMLklnpFurlZ4=; b=RZYlTb7lijrc48sOZh9b7rJ2E7QPlmZuouLmriV4Ey2gjPdraNhrtg91OWqP5fVgWDN6FZThoRztsmE+5A8MQzlUNzaB7lXamGEHvIPDoRd3YV5tTb/sRXdd7RlHbrVbLD3V5KopwqqpP2behg3rCYZvKCt72g7sRg0fth9yRBd/nSeLPIG+5sBbKuFBsNNkXl1gvsRyvzJpMoRUhU1cCx9SnXIoDizvDlinF9/6nL462wqTZlpuv2ZED9dV5T/yBi4t9hYwfF5XS7oefmEjKrOCPeZ/yoM+LbB/jIiTZLiC/5KLnmf/7B3v8cIzG4exvsfn34gCiXa/VpzHjhcLtA== 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 AM9PR04MB8146.eurprd04.prod.outlook.com (2603:10a6:20b:3b5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.17; Wed, 8 Nov 2023 11:13:57 +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.018; Wed, 8 Nov 2023 11:13:57 +0000 Message-ID: Date: Wed, 8 Nov 2023 12:13:55 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH 5/8] Support APX NDD Content-Language: en-US To: "Cui, Lili" , konglin1 Cc: hongjiu.lu@intel.com, ccoutant@gmail.com, binutils@sourceware.org References: <20231102112911.2372810-1-lili.cui@intel.com> <20231102112911.2372810-6-lili.cui@intel.com> From: Jan Beulich In-Reply-To: <20231102112911.2372810-6-lili.cui@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR2P281CA0076.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9a::18) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8146:EE_ X-MS-Office365-Filtering-Correlation-Id: 44b1868a-5792-406e-e8fd-08dbe04bcd2c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tVzpxsrTuppxuvkhYYYl3cHlgYOhj/8NDGdZz+UNDfaH3fz/MgpyeW7Isi547VbjtQV8Lpd38TKwwOzbygp1tM1GrQzZHzanfqnONAGASkH/2Dp602e4AMI/P8UmsI2/BRuOoGWjIwlFqqdpSW45b5lpnzM0ceAxggTabNrOBttmr1qfGzoHIse+aQPmCgKcEQql80EyKByRBD//Y4FGGrPipXsekTTl8Zsb5uEb0v82/LKdq01Ke81myLuAHsNcyDMIKEAXf749r5qTG0LROHSquJe7wx5Fsi1/TE4L4YVrbLvAviyUV2x8y8CjAooEzzzDmGctBubSVtMKgfr8niHKkFElP/DCFt/BIy7/85idfNtfvbdYO9Uf11XgLfxFYY84NWK/y/JDRmmWd9ZNAtAgyOhx6Fg5Hn6pHMIs1jOwaII34NS4o22p+Q6CnqFunApBXIhicWuheckLI6iPQgU71IzSDTSO2IMduX2Rz31NzV+Yv1ardqlbjrh3TVlLfriLBaxjgjBJBya6ZMK2CGmrjpgkTV5FpY0SNlVEoZejYAyKwkjmkfgr8AtPh3KqZe1Bk0IicPgHhOMSdrBRUKpaP+Wz9HCyoG35HLGQ44Z+e+MmzN+MMz0FJDhklmw7LLCEkewp8+62dPmaEuH9+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)(366004)(396003)(39860400002)(136003)(376002)(346002)(230922051799003)(451199024)(186009)(64100799003)(1800799009)(2906002)(8936002)(4326008)(8676002)(86362001)(41300700001)(5660300002)(31696002)(36756003)(31686004)(478600001)(38100700002)(53546011)(6486002)(6506007)(6512007)(66476007)(66556008)(83380400001)(66946007)(26005)(110136005)(2616005)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UzM3SUtDYzk2Z2dxNmFFL2lsd2NNaGc5NEhLZ0F6aUVvRG85TVoybklZVlkx?= =?utf-8?B?MGVuT0JUcmY4Sk5zU0U5UzM2LzVOem90U25SbHdiWklPVTNpeUJsbmNFak1J?= =?utf-8?B?NURmdUNTOXltZ21kcWZvY212NXlMNWFSdmhaQitMN1hhTDFLU3VnV1FvQ1gr?= =?utf-8?B?ejZaNjYwRmMvU0haNSszKzRoS1N5NXlvbXRPNTB4c1A5MWdXaW41b2VzaTdK?= =?utf-8?B?Rno2NWpUVEZaaXlBaUVJVWRESC9SeDBlNnhxSkJCb1J5d3RvYTVhMXJNWXBJ?= =?utf-8?B?dXEzTmFVbnJ4Rmg5OFk1T3BReDYyNnRoY2dLcURhQWt2dE9XN1ZYVXNqdXlV?= =?utf-8?B?MGdHWUJZRXJkRTY2MDhYRUZoZFdmb0xEWUcxZTNkS0p3bDBYbGQ1T0tEbytI?= =?utf-8?B?cks5NE1MeVgyN1p3U0tCMzE1MXE2eGV2ajd0bHk3amJibTBzVXJ4VGRjQlNt?= =?utf-8?B?SmdjK2NrWUVlVTRZSjNhZ2Q4cUJTZWpySzBndy9xTjJGYmRxVFkxbno3RWNZ?= =?utf-8?B?RGtId3VlZXhGRjlqYUxnZ3dCN0lmZWJHY0V1R1RmU20zUFM5S0JnRTZ6eXFW?= =?utf-8?B?ai93TGl4SWtROTZYRUlKT1U1Smh4VzB5U0xiWW5lN1NpL1FDWUgxazZ4bGlS?= =?utf-8?B?NHJaVHY2Q1ZVS05vUEhPK2Frb2dtZnZyZjRJaFh1dXJTTm05Z0hBbE01bExB?= =?utf-8?B?MHJCNk5IREFOeHpKYUo4dEhmL2VMT3JoMVdEbEthU1VJU0tvWTd5bk9obE5C?= =?utf-8?B?ZzFURUViNTdRNTJETjhsQ2tZMjFVSm1oUlRTeUhkS3kxbGZVSTJ5YlRnbGdz?= =?utf-8?B?RzJiT0hjR1lZYUkrWDAvbmV6R05hZmJpb3kvY1VxbG94SVVtUjhsemhQVi9Q?= =?utf-8?B?dndkRHdLWmw2clVhMmN4QWlqdk1tWlZWUVQzZ3paMlkyWThpYWRRVlVERGdX?= =?utf-8?B?TUJkRkhBZHNxZ2cyVFBPcnhFRjRQZkJUQ2EvZ1dBOVRhWmtPdEI2bWFGNUhM?= =?utf-8?B?M3FrMytmOEtjMHY0VkxKdXZaUjd0MGhNSHd4TkRleEFIVldXMjhQYkNzL1Q4?= =?utf-8?B?d0h1UWJ4U1d2S1g0UmdTU3pUWEpKQnBjTFlMUUFOeWJlME50OHJNSE44T2Vv?= =?utf-8?B?bmRpakxXdFAxTFBYSmxqSElDNjZBdUovbk1jRlVDMVhwSWFyM0d2N3VOVUxv?= =?utf-8?B?RkdvVEI3NmJJSHhBRlBIeWUrWHJRYW8rWjlyWUxhbVI2MnZ2cFNEQ25xL01a?= =?utf-8?B?b01uNHEvL2FXU2tST0RxZ05zWkVwcTljNTJScEttWlNTWjh4MWhINkdKTXdV?= =?utf-8?B?MXNtRnZldGh3a0FHd09MdGdsQzd4WTZHRlhNUWVJc3ViVEE1RDdJSTg4SDR1?= =?utf-8?B?ZEY3ZWl1cDl4OXZiY09qckV6YytwNEl0ZFJRVFcrVjI3WTN5UFlYN3NJejhZ?= =?utf-8?B?WEhVOTc1TVdQYnZlU3lFSGFCWHJOVHgrdXhncElxVVpmb1ROK3VTa25aTEpH?= =?utf-8?B?QU9WSkR6UUFRQ1NXTGNJVlZrMng2c1VDeEFVRUhJVStEQWIyYzZNTi9MWUk4?= =?utf-8?B?R2hxSXFPVlliUW9aeVdGUlRwRUtqN25PV25MMFpmeDJlQ2hST1oxU2t4L3gx?= =?utf-8?B?dTF5V3dHdzJxQ3pwYm1DMWhRbDd5ZHNCdmNMUDZ0S29kbmxJMTFDVkZQTWpG?= =?utf-8?B?RUg0clFXQVJWajlNc2R6WkR6Uk95WDdacFc5ZUhvNEtTcHhYUkVwMXBZTnZ5?= =?utf-8?B?L3F0UHo1OE9yekFhL1lUMS8wU2lTL251T2NDdGVSRjhvNHMxVVFsUUNEVUd0?= =?utf-8?B?cUdtM0dwaWltSUV5Z3Q3UDFoTTRIQWNqZTVGV3lETFRBclhSTitOaUFJcjBi?= =?utf-8?B?Sm9sRzBCMDJNeisyTGR2d3dzNUtIT3JOd0YybDBOU3JSRjhNYktoZEhKN2c4?= =?utf-8?B?SElWRWZsZnpYZ1FhYUE3V2dha2lqOWlpcDE4Tkc2MmV5cDNTSkFraUpBczAx?= =?utf-8?B?RlV1Q1pxaktBK3UzaHZYM0pvb3JDcFVva2VXZTZlcGN1SENLUjRyaDJpVko5?= =?utf-8?B?K1dNTFdVNjJEMnV6b1BMTUkrdGlGZDN5UkJ4YkRWRUhlSmFYRlJBSFZuSU9h?= =?utf-8?Q?zjStl4VV2O+3dQ5kQvMt85+RY?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44b1868a-5792-406e-e8fd-08dbe04bcd2c X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2023 11:13:57.3793 (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: CPwdt2/UnADrYS4S2UB/SNqikgxrn0tLvuLYpMFuNcUbRj5LEnzytdB/YoemylzT6Ba1ZQtGM3TqhCp7qP6PUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8146 X-Spam-Status: No, score=-3028.2 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: > --- a/opcodes/i386-dis-evex-prefix.h > +++ b/opcodes/i386-dis-evex-prefix.h > @@ -338,10 +338,6 @@ > { "vcmpp%XH", { MaskG, Vex, EXxh, EXxEVexS, CMP }, 0 }, > { "vcmps%XH", { MaskG, VexScalar, EXw, EXxEVexS, CMP }, 0 }, > }, > - /* PREFIX_EVEX_MAP4_66 */ > - { > - { "wrssK", { M, Gdq }, 0 }, > - }, > /* PREFIX_EVEX_MAP4_D8 */ > { > { "sha1nexte", { XM, EXxmm }, 0 }, What's going on here? > --- a/opcodes/i386-dis-evex-reg.h > +++ b/opcodes/i386-dis-evex-reg.h > @@ -56,6 +56,36 @@ > { "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 }, > + { "andA", { VexGb, Eb, Ib }, 0 }, > + { "subA", { VexGb, Eb, Ib }, 0 }, > + { "xorA", { VexGb, Eb, Ib }, 0 }, > + }, > + /* 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 }, > + }, > + /* 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 }, > + }, No sign of prefix decoding, and also no PREFIX_OPCODE present? > @@ -63,3 +93,27 @@ > { "aesencwide256kl", { M }, 0 }, > { "aesdecwide256kl", { M }, 0 }, > }, > + /* REG_EVEX_MAP4_F6 */ > + { > + { Bad_Opcode }, > + { Bad_Opcode }, > + { "notA", { VexGb, Eb }, 0 }, > + { "negA", { VexGb, Eb }, 0 }, > + }, > + /* REG_EVEX_MAP4_F7 */ > + { > + { Bad_Opcode }, > + { Bad_Opcode }, > + { "notQ", { VexGv, Ev }, 0 }, > + { "negQ", { VexGv, Ev }, 0 }, > + }, > + /* REG_EVEX_MAP4_FE */ > + { > + { "incA", { VexGb ,Eb }, 0 }, > + { "decA", { VexGb ,Eb }, 0 }, > + }, > + /* REG_EVEX_MAP4_FF */ > + { > + { "incQ", { VexGv ,Ev }, 0 }, > + { "decQ", { VexGv ,Ev }, 0 }, > + }, Same here, plus for the inc/dec some commas are misplaced. Padding also looks to be incosnsitent (tab vs blanks). > --- a/opcodes/i386-dis-evex.h > +++ b/opcodes/i386-dis-evex.h >[...] > @@ -947,23 +947,23 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > /* 40 */ > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > + { "cmovoS", { VexGv, Gv, Ev }, 0 }, > + { "cmovnoS", { VexGv, Gv, Ev }, 0 }, > + { "cmovbS", { VexGv, Gv, Ev }, 0 }, > + { "cmovaeS", { VexGv, Gv, Ev }, 0 }, > + { "cmoveS", { VexGv, Gv, Ev }, 0 }, > + { "cmovneS", { VexGv, Gv, Ev }, 0 }, > + { "cmovbeS", { VexGv, Gv, Ev }, 0 }, > + { "cmovaS", { VexGv, Gv, Ev }, 0 }, > /* 48 */ > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > + { "cmovsS", { VexGv, Gv, Ev }, 0 }, > + { "cmovnsS", { VexGv, Gv, Ev }, 0 }, > + { "cmovpS", { VexGv, Gv, Ev }, 0 }, > + { "cmovnpS", { VexGv, Gv, Ev }, 0 }, > + { "cmovlS", { VexGv, Gv, Ev }, 0 }, > + { "cmovgeS", { VexGv, Gv, Ev }, 0 }, > + { "cmovleS", { VexGv, Gv, Ev }, 0 }, > + { "cmovgS", { VexGv, Gv, Ev }, 0 }, Considering CFCMOVcc which sits at the same opcode, doing things like this sets us up for needing to touch all of these again. Maybe that's the best that can be done, but I still wonder whether this couldn't be taken care of right away when introducing these entries. > @@ -989,7 +989,7 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > { "wrussK", { M, Gdq }, PREFIX_DATA }, > - { PREFIX_TABLE (PREFIX_EVEX_MAP4_66) }, > + { PREFIX_TABLE (PREFIX_0F38F6) }, Perhaps related to the earlier question: What's going on here? > @@ -1060,7 +1060,7 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > { Bad_Opcode }, > - { Bad_Opcode }, > + { "shldS", { VexGv, Ev, Gv, CL }, 0 }, > { Bad_Opcode }, > { Bad_Opcode }, > /* A8 */ > @@ -1069,9 +1069,9 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > { Bad_Opcode }, > + { "shrdS", { VexGv, Ev, Gv, CL }, 0 }, > { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > + { "imulS", { VexGv, Gv, Ev }, 0 }, PREFIX_OPCODE (or prefix decoding) again missing in all of these? > @@ -1091,8 +1091,8 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > /* C0 */ > - { Bad_Opcode }, > - { Bad_Opcode }, > + { REG_TABLE (REG_C0) }, > + { REG_TABLE (REG_C1) }, > { Bad_Opcode }, > { Bad_Opcode }, > { Bad_Opcode }, > @@ -1109,10 +1109,10 @@ static const struct dis386 evex_table[][256] = { > { Bad_Opcode }, > { Bad_Opcode }, > /* D0 */ > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > - { Bad_Opcode }, > + { REG_TABLE (REG_D0) }, > + { REG_TABLE (REG_D1) }, > + { REG_TABLE (REG_D2) }, > + { REG_TABLE (REG_D3) }, Some form of prefix decoding is going to be needed for these too, despite the goal of wanting to re-use the legacy table entries. Perhaps adding PREFIX_OPCODE there would be benign to the legacy insns? > --- a/opcodes/i386-dis.c > +++ b/opcodes/i386-dis.c >[...] > @@ -2660,47 +2668,47 @@ static const struct dis386 reg_table[][8] = { > }, > /* REG_D0 */ > { > - { "rolA", { Eb, I1 }, 0 }, > - { "rorA", { Eb, I1 }, 0 }, > - { "rclA", { Eb, I1 }, 0 }, > - { "rcrA", { Eb, I1 }, 0 }, > - { "shlA", { Eb, I1 }, 0 }, > - { "shrA", { Eb, I1 }, 0 }, > - { "shlA", { Eb, I1 }, 0 }, > - { "sarA", { Eb, I1 }, 0 }, > + { "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_D1 */ > { > - { "rolQ", { Ev, I1 }, 0 }, > - { "rorQ", { Ev, I1 }, 0 }, > - { "rclQ", { Ev, I1 }, 0 }, > - { "rcrQ", { Ev, I1 }, 0 }, > - { "shlQ", { Ev, I1 }, 0 }, > - { "shrQ", { Ev, I1 }, 0 }, > - { "shlQ", { Ev, I1 }, 0 }, > - { "sarQ", { Ev, I1 }, 0 }, > + { "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 }, > }, As mentioned on the assembler side already, I think we would be better off making const_1_mode print $1 in AT&T syntax at least for these new insn forms, to eliminate the ambiguity. > @@ -9061,6 +9069,15 @@ 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) > + { > + /* EVEX from legacy instructions, when the EVEX.ND bit is 0, > + all bits of EVEX.vvvv and EVEX.V' must be 1. */ > + if (!ins->vex.b && (ins->vex.register_specifier > + || !ins->vex.v)) > + return &bad_opcode; > + ins->rex |= REX_OPCODE; What is this line about? > @@ -9087,7 +9104,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; > else > { Is this change really needed for anything? > @@ -9530,6 +9547,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > { > oappend (&ins, "{bad}"); > continue; > + > } > > /* Instructions with a mask register destination allow for Stray and bogus change. > @@ -9553,7 +9571,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > > /* Check whether rounding control was enabled for an insn not > supporting it. */ > - if (ins.modrm.mod == 3 && ins.vex.b > + if (ins.modrm.mod == 3 && ins.vex.b && ins.evex_type == evex_default > && !(ins.evex_used & EVEX_b_used)) > { This could do with extending the comment, mentioning the aliasing of EVEX.brs and EVEX.nd. > @@ -11013,7 +11031,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_default) > { > if (!ins->vex.no_broadcast) > switch (bytemode) This aliasing would also be worthwhile mentioning here and ... > @@ -11946,7 +11964,7 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag) > print_operand_value (ins, disp & 0xffff, dis_style_text); > } > } > - if (ins->vex.b) > + if (ins->vex.b && ins->evex_type == evex_default) > { > ins->evex_used |= EVEX_b_used; ... here. > @@ -13307,6 +13325,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) > + { > + ins->evex_used |= EVEX_b_used; > + /* Here vex.b is treated as "EVEX.ND. */ Okay, here you have such a helpful comment, just that - nit - there's an unbalanced double-quote. (The comment would also more logically come first in this block.) Jan