From patchwork Tue Jul 4 15:18:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 115827 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp1294127vqx; Tue, 4 Jul 2023 08:18:47 -0700 (PDT) X-Google-Smtp-Source: APBJJlGdi62Uxqui8cqDZLU1FYQcVqfdpWHoupb4bs/UWCUn5U2v4Ztu4UbOaPjd3y35nj2XjsXk X-Received: by 2002:a17:906:c788:b0:98d:e139:1ca with SMTP id cw8-20020a170906c78800b0098de13901camr8914139ejb.27.1688483927682; Tue, 04 Jul 2023 08:18:47 -0700 (PDT) Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id bx14-20020a170906a1ce00b0098d373fa9e4si12476474ejb.1007.2023.07.04.08.18.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 08:18:47 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b="VnkgU/jN"; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c 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 4D333385700C for ; Tue, 4 Jul 2023 15:18:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4D333385700C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1688483920; bh=K5F12ocmPGLmEAskOXDMxbIxUF1SgEsw+a4iVAKuvzY=; 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=VnkgU/jN/hPUbLREEBdOq/0UGjJmlDXDD71ZzevC+qfmYmVz3VI40uK652d9MjOPr aOoIKXICSAGefaCIO1F8GxhRejDKrgb6RTnTyWoSUKwP28ssaRfjNcdOAwyKde78ZC P0dqUtpAJw0hxIy2vUt/t6fbkN2KsJDlZYiXa5ho= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2046.outbound.protection.outlook.com [40.107.105.46]) by sourceware.org (Postfix) with ESMTPS id 637893857734 for ; Tue, 4 Jul 2023 15:18:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 637893857734 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dYdMyv7ciutaajoqAROa2BTd2i3cEYzBc35OOVYViXbpP2kzYyCru/BpuM+frfxQHSXSmo9d+YjGxtNOdYjyA66oSHHK1tUCBGeMLQmDFmSjCGOdu/8g7wNZ6vDqtx5b07rtGj6mRBgqtd/j/Lg03bC2wmHzyRs7xxrHUCF2B48oNRtCQUcuCNFvAPCou5J1ldi8VBOemql0AhZrQi910ssk+LZnC3w5SFEoC9JWTHGkwdincJpW+Qi8MlDIk+kO6eu9AbvpXTNbi4UtUWGMN3GIRgOdWRRzAQ1NUomnhX6P2MspUzhlb9dTJJATA5gtBiIqbbBrUbM8J2R7qeTBUQ== 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=K5F12ocmPGLmEAskOXDMxbIxUF1SgEsw+a4iVAKuvzY=; b=YaEagfUEgbMwVdChjD/+0U7YSUNPBS+bu7VmU2mEuz5NJ0l9acr1CrQlrxIa+bjN4AXsNihY5ESvPe8e8W0t4zB0Mp/0AltNBce5jGFa8A2RcXQIcqvxiW98ez2O96KEaSiEtzNMHe6CHJahFm/tb6oK86x2mqbHiOKXbPxpVZLDEu1I5GWg7wiUMNFFnu8nRF8RYFDc6BS1S/5wJMxFnKVoEUMSaOtxy506BUsqXBWNDKYCpkosNhZvbVKCAc+KpwMmyes+EZbv2j+cZt+eJM2wvyldr5nTRjtBg4XbZ6dOsWlBXknyPB70RQCQgSTIyjRvBgMNoe13P53C1uQPpA== 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 PA4PR04MB9269.eurprd04.prod.outlook.com (2603:10a6:102:2a4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6544.24; Tue, 4 Jul 2023 15:18:25 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9bd3:48c9:ff58:9880]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9bd3:48c9:ff58:9880%4]) with mapi id 15.20.6544.024; Tue, 4 Jul 2023 15:18:25 +0000 Message-ID: Date: Tue, 4 Jul 2023 17:18:32 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: [PATCH 01/10] x86: fold certain legacy/VEX table entries Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0200.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a5::15) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|PA4PR04MB9269:EE_ X-MS-Office365-Filtering-Correlation-Id: a182dc93-3dfb-4dbd-e697-08db7ca1e963 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FK4EbUZ83v5I/H0430FztGS4qMzes8FplxMQj3S+QJHv351YqGzjiyV5Lh4B25e1l5qgPvGLdRC+uox5F/SPNRYulnLlqGs7AX+wOYWrhs5zq2oc+7Zr61XKi7zXUuH9qmIrrEIpB4H4oAIF5ew6vTZwgD6bOzPd8aka6EDz1K6taw9v3Du0xe8UP/diwJjsXb07rln79obP5RQB7UJ/kWFM6JQIIqKXEg/ugak4Ctj92S/QKw9uLlPmacJriTyZ3+sT7wKko56vUjxMikswavj7bHFJZDdfnqYySTbuhyAU4ZHKeb0S+9dq15NksXTrllA93icYre4t2RRjLy3njFYYIpQtB2+wp9W/dxyiffy1cpuKGAKk0epFcw/7Mxth4NSb//wm76fxBLU3YjwxlD6aSjz5RYJi7lkMBp4T/3mkV2BiBeFu06VeCpKP0yxLTmMGgMPAQbNQI4L4vxp8erq1if/XxDV9Im50OdSEcSH1GI94YVRS2iJQpcfCftB70AKPTgRMl3rQl4L+hBB+FI62OPJr/Msj4KHsVAK1KQA4m0TCTaUtQrqjk4/a5z38Y8jqtQSYQGU8jCFLtbiA+REU3XDeUfHhCQIkfNM35s7lU4bM9nwtQ94OTOnoirJfXYU8ljuXfTQs3DKhjNjjfw== 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:(13230028)(376002)(39850400004)(346002)(136003)(396003)(366004)(451199021)(26005)(31686004)(478600001)(6666004)(6512007)(6506007)(31696002)(86362001)(2616005)(186003)(38100700002)(66476007)(6916009)(66556008)(4326008)(66946007)(6486002)(316002)(8676002)(8936002)(30864003)(41300700001)(2906002)(5660300002)(36756003)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?lvM2r7LMJ+Ur9dm5jxRhOkfgSVIO?= =?utf-8?q?JJxNpNQEe1FNqaiJI24VXXYfYLU5mJLyn5a1Boc80K0/5ByWf+mPr5MhtLqXOA7k4?= =?utf-8?q?+qwj5Prys0JbR7+tkfEJRAwxxeoPAfffkEyeC46gN0mhwHkOXykt5qBpf2H61LILb?= =?utf-8?q?m0ty8T7Uz8vCFjWAVJEKDdxWtvvgcFQIdDLXgLbsnYORcxKaV9FWiglAxs+dV7uYX?= =?utf-8?q?ncqDKkQvDBlvCX84nkAS3uB08ZtCoG/GXH9NMK6yTZ4flbzsU+kPMOBcxuATquwtc?= =?utf-8?q?GQdP+NaD5ad8gIXMcjU2yZmmVBWt5NASYnIBkQwt4zmzcItieV76DvCnOmLQZCPL3?= =?utf-8?q?EK0zFSjGhaWxZBCaUaYXw+IDFULW88llOmjv7vDJ8xYhELwVkNKFOJ/j0XrEQCwi8?= =?utf-8?q?3tGIQAFCeI2vC+t1TSoJV4gdP90nXA21/RiweaIXN1u95q6BG6QUlra4js+AXyvUj?= =?utf-8?q?YIvyJVQB+8NkNCC4EL5mtruTHrusnyQv7AWl6ibmTAf8sVJt4ZKynLNV9flf20nMN?= =?utf-8?q?J3sVlOWeu8mHo+61HFuiH8n44Ps49hiz5QNC0mjKyXZZBT8EGFtE0aHibrBAe78/0?= =?utf-8?q?XnJpgC3NFzzONSIwifs1QbpEOOMs9UvnozVWDgqr2G8A4ecpxwkJQNf0Lky3U3kbD?= =?utf-8?q?+wTi1dKZStnB67oQ776zXznRMXFsswpavILGetUsPosZn4a7asAUS6Ab1Uf7exBTK?= =?utf-8?q?AY/4SrFBGlAtGz7Pr9XpWuL0bB5IKw7SZCUpmxjWu8M8urK38jsZLIaPFXgQ0idwR?= =?utf-8?q?uT1uL2bZcaruNjYEK0CUNBJHk5FB6Pgi3eclEDFjRPWHAFSvBkckG/+J37hzSSQgj?= =?utf-8?q?jsRDytPAwkVPGd0lrNgpehBsnBk1sLd5xXYjA/ryLKMOi/+nUSdM5WfbFOeiPQ2Sl?= =?utf-8?q?THIVMqDt6OItzD9LbMKaQsdDys9oPU+aqjO04Na/ACjk+xmiC8f60/OlOPzDzWQ0s?= =?utf-8?q?cTbkOHla9HvYVDxHr+ZwtLuIM3f6X1LVM5hc62XdeZ5sXYAx6fUb5crixBuvM6cu3?= =?utf-8?q?mB0/4JE45aSE/WK70o9FJO1pVriSJgZWw9qdq/5hdWn7pNtw3Zbn8t4ZU25aBt/pI?= =?utf-8?q?V9inDzwEgbAMGfZK59R1bXObRDTIMXVVEcSUfV5n+ZD0e2RzowueyLg/u/z59DwbB?= =?utf-8?q?EcPtOD4oJ5M+QuYObkbd8No//vc3Y+X98dWtFGeUX8gOQ5qREZcu91Thlfzw5jQI1?= =?utf-8?q?NAbBItLNWCy8cJBQ4UKTN25SQmnPra2GIL77BpAS2KoZHnmUyCz+DYVm49o9ZPene?= =?utf-8?q?8EQlpQdWETrRzDqnXWOOohaEYUehIicCZyQO6Q4rN+dnQeEAo5I41wtoWn15pk2pl?= =?utf-8?q?ZP42MAChXeK0zMSJg93zh3MjAm3w1WdI8Een/9e/C9Sl9If3e/NTWnnVfi0o/H3Jx?= =?utf-8?q?5CLhKb734KPG4r+R9vi7IDwukozQTAWU5gm0Ti+JmP/lI03Ignx53+pF3s6QuDwEu?= =?utf-8?q?5q6vaCXIX+ReFVTVWvXqm9ENxAyck1AL41UZY7taWU6dmoI7SX07a7N/lOW/s7Cz3?= =?utf-8?q?BDnPMy11Zz4M?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a182dc93-3dfb-4dbd-e697-08db7ca1e963 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2023 15:18:25.1107 (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: vcwNtzkb0Y96R2VzpKgN47GFRVP6w0zYHqaOMnziham/BHaCcW6w+GULEJaDjgHY6u1jvHsCZgPM3mIbdELeLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB9269 X-Spam-Status: No, score=-3027.8 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, T_SCC_BODY_TEXT_LINE, UPPERCASE_50_75 autolearn=no 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.29 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770503723181340465?= X-GMAIL-MSGID: =?utf-8?q?1770503723181340465?= Introduce macro V to expand to 'v' in the VEX/EVEX case, and replace a couple of abort()s where legacy code can now legitimately make it. While there for {,V}LDDQU drop hoing through mod_table[] - OP_M() rejects register operands quite fine. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -916,7 +916,6 @@ enum MOD_0FC7_REG_7, MOD_0FD7, MOD_0FE7_PREFIX_2, - MOD_0FF0_PREFIX_3, MOD_0F382A, MOD_0F38DC_PREFIX_1, MOD_0F38DD_PREFIX_1, @@ -947,7 +946,6 @@ enum MOD_VEX_0F47_L_1, MOD_VEX_0F4A_L_1, MOD_VEX_0F4B_L_1, - MOD_VEX_0F50, MOD_VEX_0F71, MOD_VEX_0F72, MOD_VEX_0F73, @@ -960,7 +958,6 @@ enum MOD_VEX_0FAE_REG_3, MOD_VEX_0FD7, MOD_VEX_0FE7, - MOD_VEX_0FF0_PREFIX_3, MOD_VEX_0F381A, MOD_VEX_0F382A, MOD_VEX_0F382C, @@ -1114,15 +1111,11 @@ enum PREFIX_0F38FB, PREFIX_0F38FC, PREFIX_0F3A0F, - PREFIX_VEX_0F10, - PREFIX_VEX_0F11, PREFIX_VEX_0F12, PREFIX_VEX_0F16, PREFIX_VEX_0F2A, PREFIX_VEX_0F2C, PREFIX_VEX_0F2D, - PREFIX_VEX_0F2E, - PREFIX_VEX_0F2F, PREFIX_VEX_0F41_L_1_M_1_W_0, PREFIX_VEX_0F41_L_1_M_1_W_1, PREFIX_VEX_0F42_L_1_M_1_W_0, @@ -1139,21 +1132,8 @@ enum PREFIX_VEX_0F4A_L_1_M_1_W_1, PREFIX_VEX_0F4B_L_1_M_1_W_0, PREFIX_VEX_0F4B_L_1_M_1_W_1, - PREFIX_VEX_0F51, - PREFIX_VEX_0F52, - PREFIX_VEX_0F53, - PREFIX_VEX_0F58, - PREFIX_VEX_0F59, - PREFIX_VEX_0F5A, - PREFIX_VEX_0F5B, - PREFIX_VEX_0F5C, - PREFIX_VEX_0F5D, - PREFIX_VEX_0F5E, - PREFIX_VEX_0F5F, PREFIX_VEX_0F6F, PREFIX_VEX_0F70, - PREFIX_VEX_0F7C, - PREFIX_VEX_0F7D, PREFIX_VEX_0F7E, PREFIX_VEX_0F7F, PREFIX_VEX_0F90_L_0_W_0, @@ -1168,10 +1148,6 @@ enum PREFIX_VEX_0F98_L_0_M_1_W_1, PREFIX_VEX_0F99_L_0_M_1_W_0, PREFIX_VEX_0F99_L_0_M_1_W_1, - PREFIX_VEX_0FC2, - PREFIX_VEX_0FD0, - PREFIX_VEX_0FE6, - PREFIX_VEX_0FF0, PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0, PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_1, PREFIX_VEX_0F384B_X86_64_L_0_W_0_M_0, @@ -1803,7 +1779,7 @@ struct dis386 { 'T' => print 'w', 'l'/'d', or 'q' if instruction has an operand size prefix or if suffix_always is true. 'U' unused. - 'V' unused. + 'V' => print 'v' for VEX/EVEX and nothing for legacy encodings. 'W' => print 'b', 'w' or 'l' ('d' in Intel mode) 'X' => print 's', 'd' depending on data16 prefix (for XMM) 'Y' => no output, mark EVEX.aaa != 0 as bad. @@ -3149,18 +3125,18 @@ static const struct dis386 prefix_table[ /* PREFIX_0F10 */ { - { "movups", { XM, EXx }, PREFIX_OPCODE }, - { "movss", { XM, EXd }, PREFIX_OPCODE }, - { "movupd", { XM, EXx }, PREFIX_OPCODE }, - { "movsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmovupX", { XM, EXEvexXNoBcst }, 0 }, + { "%XEVmovs%XS", { XMScalar, VexScalarR, EXd }, 0 }, + { "%XEVmovupX", { XM, EXEvexXNoBcst }, 0 }, + { "%XEVmovs%XD", { XMScalar, VexScalarR, EXq }, 0 }, }, /* PREFIX_0F11 */ { - { "movups", { EXxS, XM }, PREFIX_OPCODE }, - { "movss", { EXdS, XM }, PREFIX_OPCODE }, - { "movupd", { EXxS, XM }, PREFIX_OPCODE }, - { "movsd", { EXqS, XM }, PREFIX_OPCODE }, + { "%XEVmovupX", { EXxS, XM }, 0 }, + { "%XEVmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 }, + { "%XEVmovupX", { EXxS, XM }, 0 }, + { "%XEVmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 }, }, /* PREFIX_0F12 */ @@ -3260,99 +3236,99 @@ static const struct dis386 prefix_table[ /* PREFIX_0F2E */ { - { "ucomiss",{ XM, EXd }, 0 }, + { "%XEVucomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, { Bad_Opcode }, - { "ucomisd",{ XM, EXq }, 0 }, + { "%XEVucomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F2F */ { - { "comiss", { XM, EXd }, 0 }, + { "%XEVcomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, { Bad_Opcode }, - { "comisd", { XM, EXq }, 0 }, + { "%XEVcomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F51 */ { - { "sqrtps", { XM, EXx }, PREFIX_OPCODE }, - { "sqrtss", { XM, EXd }, PREFIX_OPCODE }, - { "sqrtpd", { XM, EXx }, PREFIX_OPCODE }, - { "sqrtsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVsqrtpX", { XM, EXx, EXxEVexR }, 0 }, + { "%XEVsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVsqrtpX", { XM, EXx, EXxEVexR }, 0 }, + { "%XEVsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F52 */ { - { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE }, - { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE }, + { "Vrsqrtps", { XM, EXx }, 0 }, + { "Vrsqrtss", { XMScalar, VexScalar, EXd }, 0 }, }, /* PREFIX_0F53 */ { - { "rcpps", { XM, EXx }, PREFIX_OPCODE }, - { "rcpss", { XM, EXd }, PREFIX_OPCODE }, + { "Vrcpps", { XM, EXx }, 0 }, + { "Vrcpss", { XMScalar, VexScalar, EXd }, 0 }, }, /* PREFIX_0F58 */ { - { "addps", { XM, EXx }, PREFIX_OPCODE }, - { "addss", { XM, EXd }, PREFIX_OPCODE }, - { "addpd", { XM, EXx }, PREFIX_OPCODE }, - { "addsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F59 */ { - { "mulps", { XM, EXx }, PREFIX_OPCODE }, - { "mulss", { XM, EXd }, PREFIX_OPCODE }, - { "mulpd", { XM, EXx }, PREFIX_OPCODE }, - { "mulsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5A */ { - { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE }, - { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE }, - { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE }, - { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, + { "%XEVcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "%XEVcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5B */ { - { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE }, - { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE }, - { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE }, + { "Vcvtdq2ps", { XM, EXx }, 0 }, + { "Vcvttps2dq", { XM, EXx }, 0 }, + { "Vcvtps2dq", { XM, EXx }, 0 }, }, /* PREFIX_0F5C */ { - { "subps", { XM, EXx }, PREFIX_OPCODE }, - { "subss", { XM, EXd }, PREFIX_OPCODE }, - { "subpd", { XM, EXx }, PREFIX_OPCODE }, - { "subsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5D */ { - { "minps", { XM, EXx }, PREFIX_OPCODE }, - { "minss", { XM, EXd }, PREFIX_OPCODE }, - { "minpd", { XM, EXx }, PREFIX_OPCODE }, - { "minsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F5E */ { - { "divps", { XM, EXx }, PREFIX_OPCODE }, - { "divss", { XM, EXd }, PREFIX_OPCODE }, - { "divpd", { XM, EXx }, PREFIX_OPCODE }, - { "divsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5F */ { - { "maxps", { XM, EXx }, PREFIX_OPCODE }, - { "maxss", { XM, EXd }, PREFIX_OPCODE }, - { "maxpd", { XM, EXx }, PREFIX_OPCODE }, - { "maxsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F60 */ @@ -3411,16 +3387,16 @@ static const struct dis386 prefix_table[ { { Bad_Opcode }, { Bad_Opcode }, - { "haddpd", { XM, EXx }, PREFIX_OPCODE }, - { "haddps", { XM, EXx }, PREFIX_OPCODE }, + { "Vhaddpd", { XM, Vex, EXx }, 0 }, + { "Vhaddps", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0F7D */ { { Bad_Opcode }, { Bad_Opcode }, - { "hsubpd", { XM, EXx }, PREFIX_OPCODE }, - { "hsubps", { XM, EXx }, PREFIX_OPCODE }, + { "Vhsubpd", { XM, Vex, EXx }, 0 }, + { "Vhsubps", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0F7E */ @@ -3523,10 +3499,10 @@ static const struct dis386 prefix_table[ /* PREFIX_0FC2 */ { - { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE }, - { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE }, - { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE }, - { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE }, + { "VcmppX", { XM, Vex, EXx, CMP }, 0 }, + { "Vcmpss", { XMScalar, VexScalar, EXd, CMP }, 0 }, + { "VcmppX", { XM, Vex, EXx, CMP }, 0 }, + { "Vcmpsd", { XMScalar, VexScalar, EXq, CMP }, 0 }, }, /* PREFIX_0FC7_REG_6_MOD_0 */ @@ -3554,8 +3530,8 @@ static const struct dis386 prefix_table[ { { Bad_Opcode }, { Bad_Opcode }, - { "addsubpd", { XM, EXx }, 0 }, - { "addsubps", { XM, EXx }, 0 }, + { "VaddsubpX", { XM, Vex, EXx }, 0 }, + { "VaddsubpX", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0FD6 */ @@ -3569,9 +3545,9 @@ static const struct dis386 prefix_table[ /* PREFIX_0FE6 */ { { Bad_Opcode }, - { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE }, - { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE }, - { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE }, + { "Vcvtdq2pd", { XM, EXxmmq }, 0 }, + { "Vcvttpd2dq%XY", { XMM, EXx }, 0 }, + { "Vcvtpd2dq%XY", { XMM, EXx }, 0 }, }, /* PREFIX_0FE7 */ @@ -3586,7 +3562,7 @@ static const struct dis386 prefix_table[ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_0FF0_PREFIX_3) }, + { "Vlddqu", { XM, M }, 0 }, }, /* PREFIX_0FF7 */ @@ -3687,22 +3663,6 @@ static const struct dis386 prefix_table[ { MOD_TABLE (MOD_0F3A0F_PREFIX_1)}, }, - /* PREFIX_VEX_0F10 */ - { - { "%XEvmovupX", { XM, EXEvexXNoBcst }, 0 }, - { "%XEvmovs%XS", { XMScalar, VexScalarR, EXd }, 0 }, - { "%XEvmovupX", { XM, EXEvexXNoBcst }, 0 }, - { "%XEvmovs%XD", { XMScalar, VexScalarR, EXq }, 0 }, - }, - - /* PREFIX_VEX_0F11 */ - { - { "%XEvmovupX", { EXxS, XM }, 0 }, - { "%XEvmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 }, - { "%XEvmovupX", { EXxS, XM }, 0 }, - { "%XEvmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 }, - }, - /* PREFIX_VEX_0F12 */ { { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) }, @@ -3742,20 +3702,6 @@ static const struct dis386 prefix_table[ { "%XEvcvtsd2si", { Gdq, EXq, EXxEVexR }, 0 }, }, - /* PREFIX_VEX_0F2E */ - { - { "%XEvucomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, - { Bad_Opcode }, - { "%XEvucomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, - }, - - /* PREFIX_VEX_0F2F */ - { - { "%XEvcomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, - { Bad_Opcode }, - { "%XEvcomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, - }, - /* PREFIX_VEX_0F41_L_1_M_1_W_0 */ { { "kandw", { MaskG, MaskVex, MaskE }, 0 }, @@ -3866,89 +3812,6 @@ static const struct dis386 prefix_table[ { "kunpckdq", { MaskG, MaskVex, MaskE }, 0 }, }, - /* PREFIX_VEX_0F51 */ - { - { "%XEvsqrtpX", { XM, EXx, EXxEVexR }, 0 }, - { "%XEvsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvsqrtpX", { XM, EXx, EXxEVexR }, 0 }, - { "%XEvsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F52 */ - { - { "vrsqrtps", { XM, EXx }, 0 }, - { "vrsqrtss", { XMScalar, VexScalar, EXd }, 0 }, - }, - - /* PREFIX_VEX_0F53 */ - { - { "vrcpps", { XM, EXx }, 0 }, - { "vrcpss", { XMScalar, VexScalar, EXd }, 0 }, - }, - - /* PREFIX_VEX_0F58 */ - { - { "%XEvaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F59 */ - { - { "%XEvmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5A */ - { - { "%XEvcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, - { "%XEvcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, - { "%XEvcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5B */ - { - { "vcvtdq2ps", { XM, EXx }, 0 }, - { "vcvttps2dq", { XM, EXx }, 0 }, - { "vcvtps2dq", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F5C */ - { - { "%XEvsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5D */ - { - { "%XEvminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, - }, - - /* PREFIX_VEX_0F5E */ - { - { "%XEvdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5F */ - { - { "%XEvmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, - }, - /* PREFIX_VEX_0F6F */ { { Bad_Opcode }, @@ -3964,22 +3827,6 @@ static const struct dis386 prefix_table[ { "vpshuflw", { XM, EXx, Ib }, 0 }, }, - /* PREFIX_VEX_0F7C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vhaddpd", { XM, Vex, EXx }, 0 }, - { "vhaddps", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F7D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vhsubpd", { XM, Vex, EXx }, 0 }, - { "vhsubps", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_VEX_0F7E */ { { Bad_Opcode }, @@ -4082,38 +3929,6 @@ static const struct dis386 prefix_table[ { "ktestd", { MaskG, MaskE }, 0 }, }, - /* PREFIX_VEX_0FC2 */ - { - { "vcmpps", { XM, Vex, EXx, CMP }, 0 }, - { "vcmpss", { XMScalar, VexScalar, EXd, CMP }, 0 }, - { "vcmppd", { XM, Vex, EXx, CMP }, 0 }, - { "vcmpsd", { XMScalar, VexScalar, EXq, CMP }, 0 }, - }, - - /* PREFIX_VEX_0FD0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaddsubpd", { XM, Vex, EXx }, 0 }, - { "vaddsubps", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE6 */ - { - { Bad_Opcode }, - { "vcvtdq2pd", { XM, EXxmmq }, 0 }, - { "vcvttpd2dq%XY", { XMM, EXx }, 0 }, - { "vcvtpd2dq%XY", { XMM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) }, - }, - /* PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0 */ { { "ldtilecfg", { M }, 0 }, @@ -6147,8 +5962,8 @@ static const struct dis386 vex_table[][2 { Bad_Opcode }, { Bad_Opcode }, /* 10 */ - { PREFIX_TABLE (PREFIX_VEX_0F10) }, - { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_0F10) }, + { PREFIX_TABLE (PREFIX_0F11) }, { PREFIX_TABLE (PREFIX_VEX_0F12) }, { MOD_TABLE (MOD_VEX_0F13) }, { "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, @@ -6180,8 +5995,8 @@ static const struct dis386 vex_table[][2 { MOD_TABLE (MOD_VEX_0F2B) }, { PREFIX_TABLE (PREFIX_VEX_0F2C) }, { PREFIX_TABLE (PREFIX_VEX_0F2D) }, - { PREFIX_TABLE (PREFIX_VEX_0F2E) }, - { PREFIX_TABLE (PREFIX_VEX_0F2F) }, + { PREFIX_TABLE (PREFIX_0F2E) }, + { PREFIX_TABLE (PREFIX_0F2F) }, /* 30 */ { Bad_Opcode }, { Bad_Opcode }, @@ -6219,23 +6034,23 @@ static const struct dis386 vex_table[][2 { Bad_Opcode }, { Bad_Opcode }, /* 50 */ - { MOD_TABLE (MOD_VEX_0F50) }, - { PREFIX_TABLE (PREFIX_VEX_0F51) }, - { PREFIX_TABLE (PREFIX_VEX_0F52) }, - { PREFIX_TABLE (PREFIX_VEX_0F53) }, + { MOD_TABLE (MOD_0F50) }, + { PREFIX_TABLE (PREFIX_0F51) }, + { PREFIX_TABLE (PREFIX_0F52) }, + { PREFIX_TABLE (PREFIX_0F53) }, { "vandpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vandnpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vxorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F58) }, - { PREFIX_TABLE (PREFIX_VEX_0F59) }, - { PREFIX_TABLE (PREFIX_VEX_0F5A) }, - { PREFIX_TABLE (PREFIX_VEX_0F5B) }, - { PREFIX_TABLE (PREFIX_VEX_0F5C) }, - { PREFIX_TABLE (PREFIX_VEX_0F5D) }, - { PREFIX_TABLE (PREFIX_VEX_0F5E) }, - { PREFIX_TABLE (PREFIX_VEX_0F5F) }, + { PREFIX_TABLE (PREFIX_0F58) }, + { PREFIX_TABLE (PREFIX_0F59) }, + { PREFIX_TABLE (PREFIX_0F5A) }, + { PREFIX_TABLE (PREFIX_0F5B) }, + { PREFIX_TABLE (PREFIX_0F5C) }, + { PREFIX_TABLE (PREFIX_0F5D) }, + { PREFIX_TABLE (PREFIX_0F5E) }, + { PREFIX_TABLE (PREFIX_0F5F) }, /* 60 */ { "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6268,8 +6083,8 @@ static const struct dis386 vex_table[][2 { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F7C) }, - { PREFIX_TABLE (PREFIX_VEX_0F7D) }, + { PREFIX_TABLE (PREFIX_0F7C) }, + { PREFIX_TABLE (PREFIX_0F7D) }, { PREFIX_TABLE (PREFIX_VEX_0F7E) }, { PREFIX_TABLE (PREFIX_VEX_0F7F) }, /* 80 */ @@ -6347,7 +6162,7 @@ static const struct dis386 vex_table[][2 /* c0 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FC2) }, + { PREFIX_TABLE (PREFIX_0FC2) }, { Bad_Opcode }, { VEX_LEN_TABLE (VEX_LEN_0FC4) }, { VEX_LEN_TABLE (VEX_LEN_0FC5) }, @@ -6363,7 +6178,7 @@ static const struct dis386 vex_table[][2 { Bad_Opcode }, { Bad_Opcode }, /* d0 */ - { PREFIX_TABLE (PREFIX_VEX_0FD0) }, + { PREFIX_TABLE (PREFIX_0FD0) }, { "vpsrlw", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsrld", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsrlq", { XM, Vex, EXxmm }, PREFIX_DATA }, @@ -6387,7 +6202,7 @@ static const struct dis386 vex_table[][2 { "vpavgw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmulhuw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmulhw", { XM, Vex, EXx }, PREFIX_DATA }, - { PREFIX_TABLE (PREFIX_VEX_0FE6) }, + { PREFIX_TABLE (PREFIX_0FE6) }, { MOD_TABLE (MOD_VEX_0FE7) }, /* e8 */ { "vpsubsb", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6399,7 +6214,7 @@ static const struct dis386 vex_table[][2 { "vpmaxsw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpxor", { XM, Vex, EXx }, PREFIX_DATA }, /* f0 */ - { PREFIX_TABLE (PREFIX_VEX_0FF0) }, + { PREFIX_TABLE (PREFIX_0FF0) }, { "vpsllw", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpslld", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsllq", { XM, Vex, EXxmm }, PREFIX_DATA }, @@ -8322,7 +8137,7 @@ static const struct dis386 mod_table[][2 { /* MOD_0F50 */ { Bad_Opcode }, - { "movmskpX", { Gdq, XS }, PREFIX_OPCODE }, + { "VmovmskpX", { Gdq, XS }, PREFIX_OPCODE }, }, { /* MOD_0F71 */ @@ -8427,10 +8242,6 @@ static const struct dis386 mod_table[][2 { "movntdq", { Mx, XM }, 0 }, }, { - /* MOD_0FF0_PREFIX_3 */ - { "lddqu", { XM, M }, 0 }, - }, - { /* MOD_0F382A */ { "movntdqa", { XM, Mx }, PREFIX_DATA }, }, @@ -8561,11 +8372,6 @@ static const struct dis386 mod_table[][2 { VEX_W_TABLE (VEX_W_0F4B_L_1_M_1) }, }, { - /* MOD_VEX_0F50 */ - { Bad_Opcode }, - { "vmovmskpX", { Gdq, XS }, PREFIX_OPCODE }, - }, - { /* MOD_VEX_0F71 */ { Bad_Opcode }, { REG_TABLE (REG_VEX_0F71_M_0) }, @@ -8622,10 +8428,6 @@ static const struct dis386 mod_table[][2 { "vmovntdq", { Mx, XM }, PREFIX_DATA }, }, { - /* MOD_VEX_0FF0_PREFIX_3 */ - { "vlddqu", { XM, M }, 0 }, - }, - { /* MOD_VEX_0F381A */ { VEX_LEN_TABLE (VEX_LEN_0F381A_M_0) }, }, @@ -11051,7 +10853,10 @@ putop (instr_info *ins, const char *in_t break; case 'V': if (l == 0) - abort (); + { + if (ins->need_vex) + *ins->obufp++ = 'v'; + } else if (l == 1) { switch (last[0]) @@ -11136,7 +10941,7 @@ putop (instr_info *ins, const char *in_t else if (l == 1 && last[0] == 'X') { if (!ins->need_vex) - abort (); + break; if (ins->intel_syntax || ((ins->modrm.mod == 3 || ins->vex.b) && !(sizeflag & SUFFIX_ALWAYS))) @@ -11531,11 +11336,9 @@ intel_operand_size (instr_info *ins, int case xmmq_mode: case evex_half_bcst_xmmqh_mode: case evex_half_bcst_xmmq_mode: - if (!ins->need_vex) - abort (); - switch (ins->vex.length) { + case 0: case 128: oappend (ins, "QWORD PTR "); break; @@ -12956,6 +12759,7 @@ print_vector_reg (instr_info *ins, unsig { switch (ins->vex.length) { + case 0: case 128: case 256: names = att_names_xmm; @@ -13625,7 +13429,7 @@ OP_VEX (instr_info *ins, int bytemode, i const char (*names)[8]; if (!ins->need_vex) - abort (); + return true; reg = ins->vex.register_specifier; ins->vex.register_specifier = 0; --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -20,8 +20,8 @@ static const struct dis386 evex_table[][ { Bad_Opcode }, { Bad_Opcode }, /* 10 */ - { PREFIX_TABLE (PREFIX_VEX_0F10) }, - { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_0F10) }, + { PREFIX_TABLE (PREFIX_0F11) }, { PREFIX_TABLE (PREFIX_VEX_0F12) }, { MOD_TABLE (MOD_VEX_0F13) }, { "%XEvunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, @@ -53,8 +53,8 @@ static const struct dis386 evex_table[][ { MOD_TABLE (MOD_VEX_0F2B) }, { PREFIX_TABLE (PREFIX_VEX_0F2C) }, { PREFIX_TABLE (PREFIX_VEX_0F2D) }, - { PREFIX_TABLE (PREFIX_VEX_0F2E) }, - { PREFIX_TABLE (PREFIX_VEX_0F2F) }, + { PREFIX_TABLE (PREFIX_0F2E) }, + { PREFIX_TABLE (PREFIX_0F2F) }, /* 30 */ { Bad_Opcode }, { Bad_Opcode }, @@ -93,7 +93,7 @@ static const struct dis386 evex_table[][ { Bad_Opcode }, /* 50 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F51) }, + { PREFIX_TABLE (PREFIX_0F51) }, { Bad_Opcode }, { Bad_Opcode }, { "%XEvandpX", { XM, Vex, EXx }, PREFIX_OPCODE }, @@ -101,14 +101,14 @@ static const struct dis386 evex_table[][ { "%XEvorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "%XEvxorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F58) }, - { PREFIX_TABLE (PREFIX_VEX_0F59) }, - { PREFIX_TABLE (PREFIX_VEX_0F5A) }, + { PREFIX_TABLE (PREFIX_0F58) }, + { PREFIX_TABLE (PREFIX_0F59) }, + { PREFIX_TABLE (PREFIX_0F5A) }, { PREFIX_TABLE (PREFIX_EVEX_0F5B) }, - { PREFIX_TABLE (PREFIX_VEX_0F5C) }, - { PREFIX_TABLE (PREFIX_VEX_0F5D) }, - { PREFIX_TABLE (PREFIX_VEX_0F5E) }, - { PREFIX_TABLE (PREFIX_VEX_0F5F) }, + { PREFIX_TABLE (PREFIX_0F5C) }, + { PREFIX_TABLE (PREFIX_0F5D) }, + { PREFIX_TABLE (PREFIX_0F5E) }, + { PREFIX_TABLE (PREFIX_0F5F) }, /* 60 */ { "%XEvpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, { "%XEvpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA },