From patchwork Tue Jul 4 15:22:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 115834 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp1297427vqx; Tue, 4 Jul 2023 08:24:01 -0700 (PDT) X-Google-Smtp-Source: APBJJlEwFUXTwyTrx4rTRFpZ74l8xXsnB4r+Wehn6wtmenIYi8yUZoBMhHT+sUh/vldGqrybBQYH X-Received: by 2002:a2e:91c5:0:b0:2b5:85a9:7e9b with SMTP id u5-20020a2e91c5000000b002b585a97e9bmr11136829ljg.33.1688484240931; Tue, 04 Jul 2023 08:24:00 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id ck19-20020a170906c45300b00992d281e886si6125803ejb.411.2023.07.04.08.24.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 08:24:00 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=wMnj8UqN; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 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 5971D385781F for ; Tue, 4 Jul 2023 15:23:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5971D385781F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1688484211; bh=skdW6F99peWEhthrC//nltMYQqZoCn20Q8VzyGVz4n8=; 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=wMnj8UqNgJQX/E4hY0Mf5WfhD5CSVUXHK7aHHt6jOmNwTsCnee/ExBsl86kcm9m3c /BGuvm99k/ZNN/urHmsJOsPBsSzQtyFJnaCKmGfzWEim1j0UbhyM85b97TPwWqpB8V NSJkGpvh8jqx7PTZGg/ovwf1ENhZt7QhJ4whGzoI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2046.outbound.protection.outlook.com [40.107.249.46]) by sourceware.org (Postfix) with ESMTPS id 1E6AD385771F for ; Tue, 4 Jul 2023 15:22:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1E6AD385771F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VSRZZSEHOug49THelN+B6GkjVPiLYyn3OKF5dA5Oj0TZJBjOqy7CCyuglxTbIG5+l5lNxhKJcScVj29/LXVKvKAAHm8Tpx/P5URtYhwWnzK25v2gFPukTe2YkNRTARfYWC3vhkxgh6qLuKTE56L8AxxCsMgSAL2FuhfgSKpyVY34ObuW/iniIpH184d4zrDAySwuqddxr8LFWnLiA1dl+a+iyDSjVtSFp6S4ElFjcG0byll0t3BVTGgA4ebyE1pYK4iIoOjS0kYn/avq9vpisRkv72T+Ib4DzIFuutBa7GF7nfXU5swBDQtAzJ7JiLtvQtMNKNfL8jEvO/stvcw9gQ== 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=skdW6F99peWEhthrC//nltMYQqZoCn20Q8VzyGVz4n8=; b=D7t6JSrbIPAWM/WRxF1TSz8JG0fOVI7U9dO7tiZA1pcNYxZLkRVAzkN5uRVJhjsbeaved5i2Bn/oufTnLHhQLkROvlP/rCyLsFXgnEomuqau4wN98yo//7FKMGLWOF5D3yh1GDB4XuRlvsLrYx/2gKsoQ4tLWIVB35QKvjdxpBmxa6zSL8gM82M82aP/7mfcYewAsMCshz4rNs4cqyOekHGBLJLaujRlxp6jUldP68WakYbnYcspbZMcfTZsr1lU/X1Ckaxe4AEYuwJUj4p1Ba3+BmiZkCYfyorPn5qbqUhht5AN6kxtZcD2Kf0vtSaPdaKFZdBzJDhH4DWdvhOgdA== 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 AS8PR04MB8692.eurprd04.prod.outlook.com (2603:10a6:20b:42b::15) 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:21:59 +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:21:59 +0000 Message-ID: Date: Tue, 4 Jul 2023 17:22:06 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: [PATCH 06/10] x86: slightly rework handling of some register-only insns Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0115.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a8::14) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AS8PR04MB8692:EE_ X-MS-Office365-Filtering-Correlation-Id: a8b5e9d8-6654-437c-2527-08db7ca2690d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q8rVil14iWN0U7ts3x3K+k9hcV7o9a51UJLFu3ZTotHI+Fz5x9tRCMYUpJ7hZY8s2Pmho5yqSAHZ10QPypH+p79ZmXzHg06rHl82j1hbWmLg4/1NR4f+YE301iB1JIKdbLd/hxrQqfzEw54o+EV7O9N2C/qbOcFl8vT/53+uxcT9g7MFrZI8s9dFclecLz3f0uQpF2UI54JEypqV8Vrim6zNr/Tf9hhGJnOKQqz/6dYgzehdRN4JviyfgdSM4x13qRPblpxlHVETvHmmWpoTVDa5/J1xMFtsuPELwd/ViI/bBkc1cHOgk92Y3rKT1WpAyQZQSFk6LKMy/Jw5GmM/MtrO6p6dehpxtrRNK+MARowTK/cKsuHpHLfeFi9pN8c59l6NXUpwxnRGvln+x6vFa6ymg9nb2XHMBIUtxg0OjqWobyksuVdsYfaD/g5OyVSrRNYITodoRti2mE97hdu+zE1BIRsUY1Yq3/L7KaQQgdHBtG7gaIdioorFGB7vrL/9H9ND3LlZmoax6SitjZauF5pB1JYRe2owR5QPOHiY1YZTqRzOYI0aNDH+W3BDslkTuM44cqgx0I0dYVFsrH1r987yS1h01t8qii3GYEyPhzL0GwKdnrD2mesAn+6zTMCzHThwXE3uZQ0tQ36r1plMug== 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)(136003)(39850400004)(376002)(346002)(366004)(396003)(451199021)(478600001)(6666004)(5660300002)(8676002)(36756003)(8936002)(31696002)(86362001)(2906002)(38100700002)(66476007)(4326008)(66946007)(66556008)(6916009)(316002)(41300700001)(26005)(31686004)(186003)(6506007)(2616005)(6486002)(6512007)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?zi1E6RgOjk4d1kKmlNbe8C6AzG1w?= =?utf-8?q?1xUAc2n105Lgkk5S0/Wrh0budqjV7cN5plcqsT2vYX+jbqdUwe89eZcq6d09uHFw8?= =?utf-8?q?eDUQjmABXIzlI2aW3V4eTba4cwfOK/OgOk2nYzzaCCaGWDOypB14E3zcZs8niCHWy?= =?utf-8?q?ajMAhGQyHSqb2PNeaxC7mH/I+H/uD6UWVXcPOhcKTBKfoB1eubOym6oDgXH1ix4GW?= =?utf-8?q?GyxDJbDrrAoSVNpP352LOGhLJmZRGX0npQZIymTy0RE4UR8ZmDxZ88hzW+BPQNxJx?= =?utf-8?q?VpZtpVolxBPfPW47CmRAFSbstzy35KoUQMJjsJFvdnkMbRITc//EC0BxECbunfRLg?= =?utf-8?q?LYuKDJAhkdiaVDpKasrZGwPgzxDMsAvzWI6zpzJrjlD1W6EoygAz+M1zm/KpVNamH?= =?utf-8?q?NbGuz1d065ArntnEmgicfkDlsQmLXlNmQ1C+aw8wqUBuKqVsQ+pYNdljD2rlz/cZt?= =?utf-8?q?9UQprNPdqcrOJNoU0JgXV01wmfGTOpiHTUw3IZ4xImQvbeH0R3xRslCtI2aOegweO?= =?utf-8?q?enxPvRaoNMJ+CQJ1ejGuwTUnc4A+07aH9j/J+QAOKxIX1V2nqQEibbpjACIp4ltcc?= =?utf-8?q?RzCOhbcLiD612qAQ9cKT9OCoBtbsRUu6Ud4NHmcXt1eKYWPlsCPywatHkghBlI4U4?= =?utf-8?q?zGTxpIeNCK1ABZBhyaljhBVLseKFCUAYCVX5dKtpKnpLfJBB+THj619VPNTAZr/sI?= =?utf-8?q?/X31SMzO2i6hIrjlMR9rGVh2uhC5Klyw0xhzhYUewrc4bIXwMnYoTiRUhdqE6a5Ek?= =?utf-8?q?LclrEX7u1rkD47lPwihIvH2JQ1RnktoJe9fcvUeKeI+sW3MRm5vSj5ebqNmR06h2b?= =?utf-8?q?lyUbWYHbJP3NA1BCFbYGQP+SzrqLkFF3sVW3uwNoMhdwX57XDrafl3ABszHhfE9OF?= =?utf-8?q?ES0dRVsu3gwuIvDt4Dzy7MGk8PCZ8UGVXhV1jRad1t0ADsv3c2RT3Uq6tMt261DbF?= =?utf-8?q?SEu6RQjhvCDpTz0yiluqSoB9mcf+8ljHb6GM3tsXdWq3QmQauuvg4vMsCEmGdmpL5?= =?utf-8?q?2GsguGyhohs26jXGGhAA0Su0/YsZDbtasFvrnDyaw01NK1ZwS7q/eUH9gecOTjVzX?= =?utf-8?q?DycteKJhO6FJLMp1Yr188H/Z1r7cjxygRgLOuOAHHtiujU8z+7S1g3AYIh3LeqcSH?= =?utf-8?q?U+VFvl3FePpG93lgFnM5BIdXuwUdYSUoUvenyLwFwN9yE+t3eW6ClVrF4AUCMgUo5?= =?utf-8?q?v664xYQjoVtE3rCj4dHMhwD/xz+epdnqPBqvi9oM1DT/WSGfhkOZ2k0Kiy4eF2CNp?= =?utf-8?q?SfGnnA1YXbXNIULJZVRV3S6wFdxQEZk7KN7+Z7CUI53fS0G1S6SGlU61RQHC+6sNk?= =?utf-8?q?CaTIsfVtlxa8RRnX+TtHsGqaIc/ZGKJl1IVkhrHpFBHbLJ8U2051TqRdtC/gkMlPm?= =?utf-8?q?fLxzrUYlUGQZY1ZGwRnFjX1CNI5aZz8IbcDjRwioPICayflNB20dFDQAjpVnQ3zIE?= =?utf-8?q?wkM2uLnvRtLVDrNtZKRb2C2Fdw5DR0yiIbkj1ivocTzdA4/Ynv03E6fVVbPWd8Z01?= =?utf-8?q?H+SRzh+h2NO8?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8b5e9d8-6654-437c-2527-08db7ca2690d 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:21:59.2777 (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: q+RG2Uyufrg/a2MFZfBu7iHPt7JAgRKBQhJRDXUz2qfnFB3/UoW+LZijnMHfk+pJqVqnpEe0jE7/gJ5DXorvZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8692 X-Spam-Status: No, score=-3027.4 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 autolearn=ham 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?1770504051883172130?= X-GMAIL-MSGID: =?utf-8?q?1770504051883172130?= Fold OP_MS() and OP_XS() into OP_R(), paralleling OP_M(). Use operand names (largely) matching those in the SDM. For 128-bit-only forms use Uxmm though, marking 256-bit forms as bad. This then allows no longer going through vex_len_table[] for two of the insns. Specifically _do not_ continue to mis-use v_mode. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -74,8 +74,7 @@ static bool OP_EM (instr_info *, int, in static bool OP_EX (instr_info *, int, int); static bool OP_EMC (instr_info *, int,int); static bool OP_MXC (instr_info *, int,int); -static bool OP_MS (instr_info *, int, int); -static bool OP_XS (instr_info *, int, int); +static bool OP_R (instr_info *, int, int); static bool OP_M (instr_info *, int, int); static bool OP_VEX (instr_info *, int, int); static bool OP_VexR (instr_info *, int, int); @@ -527,8 +526,9 @@ fetch_error (const instr_info *ins) #define EXymmq { OP_EX, ymmq_mode } #define EXEvexXGscat { OP_EX, evex_x_gscat_mode } #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode } -#define MS { OP_MS, v_mode } -#define XS { OP_XS, v_mode } +#define Nq { OP_R, q_mode } +#define Ux { OP_R, x_mode } +#define Uxmm { OP_R, xmm_mode } #define EMCq { OP_EMC, q_mode } #define MXC { OP_MXC, 0 } #define OPSUF { OP_3DNowSuffix, 0 } @@ -1329,9 +1329,7 @@ enum VEX_LEN_0FAE_R_2, VEX_LEN_0FAE_R_3, VEX_LEN_0FC4, - VEX_LEN_0FC5, VEX_LEN_0FD6, - VEX_LEN_0FF7, VEX_LEN_0F3816, VEX_LEN_0F3819, VEX_LEN_0F381A, @@ -2276,7 +2274,7 @@ static const struct dis386 dis386_twobyt { PREFIX_TABLE (PREFIX_0FC2) }, { "movntiS", { Mdq, Gdq }, PREFIX_OPCODE }, { "pinsrw", { MX, Edw, Ib }, PREFIX_OPCODE }, - { "pextrw", { Gd, MS, Ib }, PREFIX_OPCODE }, + { "pextrw", { Gd, Nq, Ib }, PREFIX_OPCODE }, { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE }, { REG_TABLE (REG_0FC7) }, /* c8 */ @@ -2743,32 +2741,32 @@ static const struct dis386 reg_table[][8 { { Bad_Opcode }, { Bad_Opcode }, - { "psrlw", { MS, Ib }, PREFIX_OPCODE }, + { "psrlw", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psraw", { MS, Ib }, PREFIX_OPCODE }, + { "psraw", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psllw", { MS, Ib }, PREFIX_OPCODE }, + { "psllw", { Nq, Ib }, PREFIX_OPCODE }, }, /* REG_0F72 */ { { Bad_Opcode }, { Bad_Opcode }, - { "psrld", { MS, Ib }, PREFIX_OPCODE }, + { "psrld", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psrad", { MS, Ib }, PREFIX_OPCODE }, + { "psrad", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "pslld", { MS, Ib }, PREFIX_OPCODE }, + { "pslld", { Nq, Ib }, PREFIX_OPCODE }, }, /* REG_0F73 */ { { Bad_Opcode }, { Bad_Opcode }, - { "psrlq", { MS, Ib }, PREFIX_OPCODE }, - { "psrldq", { XS, Ib }, PREFIX_DATA }, + { "psrlq", { Nq, Ib }, PREFIX_OPCODE }, + { "psrldq", { Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "psllq", { MS, Ib }, PREFIX_OPCODE }, - { "pslldq", { XS, Ib }, PREFIX_DATA }, + { "psllq", { Nq, Ib }, PREFIX_OPCODE }, + { "pslldq", { Ux, Ib }, PREFIX_DATA }, }, /* REG_0FA6 */ { @@ -2822,32 +2820,32 @@ static const struct dis386 reg_table[][8 { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrlw", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsraw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsraw", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsllw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsllw", { Vex, Ux, Ib }, PREFIX_DATA }, }, /* REG_VEX_0F72 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrld", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrld", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsrad", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrad", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpslld", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpslld", { Vex, Ux, Ib }, PREFIX_DATA }, }, /* REG_VEX_0F73 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlq", { Vex, XS, Ib }, PREFIX_DATA }, - { "vpsrldq", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrlq", { Vex, Ux, Ib }, PREFIX_DATA }, + { "vpsrldq", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "vpsllq", { Vex, XS, Ib }, PREFIX_DATA }, - { "vpslldq", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsllq", { Vex, Ux, Ib }, PREFIX_DATA }, + { "vpslldq", { Vex, Ux, Ib }, PREFIX_DATA }, }, /* REG_VEX_0FAE */ { @@ -3309,16 +3307,16 @@ static const struct dis386 prefix_table[ { {"vmread", { Em, Gm }, 0 }, { Bad_Opcode }, - {"extrq", { XS, Ib, Ib }, 0 }, - {"insertq", { XM, XS, Ib, Ib }, 0 }, + {"extrq", { Uxmm, Ib, Ib }, 0 }, + {"insertq", { XM, Uxmm, Ib, Ib }, 0 }, }, /* PREFIX_0F79 */ { {"vmwrite", { Gm, Em }, 0 }, { Bad_Opcode }, - {"extrq", { XM, XS }, 0 }, - {"insertq", { XM, XS }, 0 }, + {"extrq", { XM, Uxmm }, 0 }, + {"insertq", { XM, Uxmm }, 0 }, }, /* PREFIX_0F7C */ @@ -3475,9 +3473,9 @@ static const struct dis386 prefix_table[ /* PREFIX_0FD6 */ { { Bad_Opcode }, - { "movq2dq",{ XM, MS }, 0 }, + { "movq2dq",{ XM, Nq }, 0 }, { "movq", { EXqS, XM }, 0 }, - { "movdq2q",{ MX, XS }, 0 }, + { "movdq2q",{ MX, Ux }, 0 }, }, /* PREFIX_0FE6 */ @@ -3505,9 +3503,9 @@ static const struct dis386 prefix_table[ /* PREFIX_0FF7 */ { - { "maskmovq", { MX, MS }, PREFIX_OPCODE }, + { "maskmovq", { MX, Nq }, PREFIX_OPCODE }, { Bad_Opcode }, - { "maskmovdqu", { XM, XS }, PREFIX_OPCODE }, + { "maskmovdqu", { XM, Ux }, PREFIX_OPCODE }, }, /* PREFIX_0F38D8 */ @@ -6103,7 +6101,7 @@ static const struct dis386 vex_table[][2 { PREFIX_TABLE (PREFIX_0FC2) }, { Bad_Opcode }, { VEX_LEN_TABLE (VEX_LEN_0FC4) }, - { VEX_LEN_TABLE (VEX_LEN_0FC5) }, + { "vpextrw", { Gd, Uxmm, Ib }, PREFIX_DATA }, { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* c8 */ @@ -6159,7 +6157,7 @@ static const struct dis386 vex_table[][2 { "vpmuludq", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmaddwd", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsadbw", { XM, Vex, EXx }, PREFIX_DATA }, - { VEX_LEN_TABLE (VEX_LEN_0FF7) }, + { "vmaskmovdqu", { XM, Uxmm }, PREFIX_DATA }, /* f8 */ { "vpsubb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsubw", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6900,21 +6898,11 @@ static const struct dis386 vex_len_table { "%XEvpinsrwY", { XM, Vex, Edw, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0FC5 */ - { - { "%XEvpextrw", { Gd, XS, Ib }, PREFIX_DATA }, - }, - /* VEX_LEN_0FD6 */ { { "%XEvmovqY", { EXqS, XMScalar }, PREFIX_DATA }, }, - /* VEX_LEN_0FF7 */ - { - { "vmaskmovdqu", { XM, XS }, PREFIX_DATA }, - }, - /* VEX_LEN_0F3816 */ { { Bad_Opcode }, @@ -8031,7 +8019,7 @@ static const struct dis386 mod_table[][2 { /* MOD_0F50 */ { Bad_Opcode }, - { "VmovmskpX", { Gdq, XS }, PREFIX_OPCODE }, + { "VmovmskpX", { Gdq, Ux }, PREFIX_OPCODE }, }, { /* MOD_0FAE_REG_0 */ @@ -8086,7 +8074,7 @@ static const struct dis386 mod_table[][2 { /* MOD_0FD7 */ { Bad_Opcode }, - { "pmovmskb", { Gdq, MS }, 0 }, + { "pmovmskb", { Gdq, Nq }, 0 }, }, { /* MOD_0F38DC_PREFIX_1 */ @@ -8175,7 +8163,7 @@ static const struct dis386 mod_table[][2 { /* MOD_VEX_0FD7 */ { Bad_Opcode }, - { "vpmovmskb", { Gdq, XS }, PREFIX_DATA }, + { "vpmovmskb", { Gdq, Ux }, PREFIX_DATA }, }, { /* MOD_VEX_0F3849_X86_64_L_0_W_0 */ @@ -12674,19 +12662,22 @@ OP_EX (instr_info *ins, int bytemode, in } static bool -OP_MS (instr_info *ins, int bytemode, int sizeflag) +OP_R (instr_info *ins, int bytemode, int sizeflag) { - if (ins->modrm.mod == 3) - return OP_EM (ins, bytemode, sizeflag); - return BadOp (ins); -} + if (ins->modrm.mod != 3) + return BadOp (ins); -static bool -OP_XS (instr_info *ins, int bytemode, int sizeflag) -{ - if (ins->modrm.mod == 3) - return OP_EX (ins, bytemode, sizeflag); - return BadOp (ins); + switch (bytemode) + { + case q_mode: + return OP_EM (ins, x_mode, sizeflag); + case xmm_mode: + if (ins->vex.length <= 128) + break; + return BadOp (ins); + } + + return OP_EX (ins, bytemode, sizeflag); } static bool --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -223,7 +223,7 @@ static const struct dis386 evex_table[][ { PREFIX_TABLE (PREFIX_EVEX_0FC2) }, { Bad_Opcode }, { VEX_LEN_TABLE (VEX_LEN_0FC4) }, - { VEX_LEN_TABLE (VEX_LEN_0FC5) }, + { "%XEvpextrw", { Gd, Uxmm, Ib }, PREFIX_DATA }, { "%XEvshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* C8 */