From patchwork Tue Jul 4 15:22:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 115833 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp1296974vqx; Tue, 4 Jul 2023 08:23:19 -0700 (PDT) X-Google-Smtp-Source: APBJJlHF0x7+d04UA4hS49pULrJJykXdg+WUZqb2MiD9qqz/F46PaROyHyq309AEY+siawI6XG9H X-Received: by 2002:ac2:5e3a:0:b0:4fb:bc46:7c09 with SMTP id o26-20020ac25e3a000000b004fbbc467c09mr1720758lfg.6.1688484198820; Tue, 04 Jul 2023 08:23:18 -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 a3-20020aa7d743000000b0051e0f836ddesi2702575eds.57.2023.07.04.08.23.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 08:23:18 -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=nGoCqFDE; 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 D4F2B3856DFE for ; Tue, 4 Jul 2023 15:23:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D4F2B3856DFE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1688484184; bh=3Op91fSgt0hrOLjGIatNbavk2eQ6YbrHaYjxn5hqJwY=; 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=nGoCqFDErf4m8sdccGU3PYlOkIUPJNZW1DmjFtv1io41pbCRnSp40LSvzspepZGmG qYiRpss/UpEpPr8NGXj5QmUlGe8t6G962knYsCsRz6rKuHVa5DD8YLLz48ZgrjE58D oiwW/SIhVV7nOcZMoWbt2283NZ6JPyIjNtqoFfUU= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2049.outbound.protection.outlook.com [40.107.105.49]) by sourceware.org (Postfix) with ESMTPS id E2F383857033 for ; Tue, 4 Jul 2023 15:22:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E2F383857033 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F92WLSS+/gFuWxd4jWkiWV10AL+W2I9zU2/p5VYm8MTnltIGzi/zvOKQ+EOc7sVgVVxJP0iiNbFrbzCJKBQQSRSlqZT3IUkv0p2oi585hCSUCJcvU/Lw94+k6jUkx4qH5WKTAcopeOu6qq9fnNuB5MZq3ZCQqXLDfrWxDd27RGpslbHx05lgbw5CAz7TR9p3MbYg6emaMfcryJx01E8YkqrwPyvWF3qQsDKbDgS/Yp7a0SXGKEGeT+uEgimvDP+8C/XlYOIslo2UdVZ3NeuZpxGPPxyIkk/80aaRp+cc4tOVX5oaVKhZjRRt6VPvXpm5uQ5NS+4XcvReatjB7s3n/Q== 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=3Op91fSgt0hrOLjGIatNbavk2eQ6YbrHaYjxn5hqJwY=; b=FOSDhru6Ya956eT0Pl0q2GBm7UQ+PHuFqMb+4clFv90ZiKGAWwpmlkl3FjTClzyQK6vEaGLhM2pXAs1nBL4fk0HP8u3RDMcRv6fPHlhSnejEv7QkIk1T3AxB81cZI98hFlE5RYVnqO/44sBdfLVfT9V50c44Mg+K8GvJ7Cxl2Rd1sRheBBWhpkps6J+K7Yt5wdrHA15W8OBeGfNIy+1yfylb/eNYWer0ii86xG8GiAgZMFvY1l1lXmnMbauDmbosB38QMSfBVvqbEpk7OezPlqGJhjTWcCSPpeKTiplGHZJTaaRRknUiDGQYoQyyODgJgw+7PPPnQ0924/CYvfS4UQ== 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:22:52 +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:22:52 +0000 Message-ID: <54b1c54f-ddad-4d5a-f5d0-e585cd3aaa3e@suse.com> Date: Tue, 4 Jul 2023 17:22:59 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: [PATCH 08/10] x86: misc further register-only insns don't need to go through mod_table[] Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a9::9) 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: 85f52cbd-5b8a-4004-8b23-08db7ca28875 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DxIM/nP6hGPUzQeu8grPb1dxufmQwvx1Uxr8BRXzNQ44cWCZMcO1O7MtUayqnbSTV/cLDYf0VSmIEO5keq/Bl+McdyAk1M3NndgiVa5u6g0s4+wcgrrSOF98eGpufG/1FkYMaQrPTTDn9JJHHpJye9mPBIUDY+zG32RB4I5ybw02bDNSaGDZfgRUfBeIq6sU9irQT91As8BWLDQwAs1X/xtPHqfmxXm1wJj8V0HM7hhSm2eUKdlWDLm1qxYQ7D9q9o30B9epet+ougxr+mHqICyyLL5Sd7lf8SsDBLxqZhB2K0t12Du1mFie10WE0t+QkXuZXAg0bEY/wtfWYfTBUhNRjFSsCkU01jZPNLjN6Ta1RWYUxd1vunA4TFfn14nhWQSuTfdNTjjHhewZ5R8l5x7CP/TC0ey8XDwgoH/ZN2SkP7TtP9sTwxXMtSfvh/xgSrB1GRxvmZGijlJZBs31cHCGsCm9e6boOw7XAVRVwbOsUWiKtXm8OAXWTkLogQd+uKSA8eNX8+cT3gGBjoeU+zvL+0u4yL2jTfLoW+axCKWbVuDcgQ6OiUYoStTlPpb5J8P/yMLVwnSTv34Hr7WGNqtozFdJ7YQJb6DjzlEdWgup9my8GytbrQw9oYS6eMaOVdb1rNVdFaIEcRTWrSd0ww== 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)(5660300002)(8676002)(36756003)(8936002)(30864003)(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?flh0s9OtaIV22xhaSmWYkTIqlPgy?= =?utf-8?q?iIzWwCJjl9KpFJVYMwRDa5b2b5fSJqyuYAeRBlWSE2SlkV1nWG6UhCcgZsL8uT18r?= =?utf-8?q?099scbSkBFnJPulImh4XNUAVx1a8fGURfYGtDXqp5GjXG9xbAYC4gN1k4QknZTyRz?= =?utf-8?q?nL3IY3EnnOAy6GpzgK6mt5Iv+EwsFUxRpoAbz+i2cABaoTVq6ooMVpk11LgCeDpXv?= =?utf-8?q?oOhtH+A0bJ3sHrfkfpwrjFg7c+Vpe2zAwh8zZ1whyIM5VlR6w3p5YAJl4u0KQwOU0?= =?utf-8?q?Ss6fAEzTqkOvwlP9vz9j5MPtH7b33T2GyPE3ea4iRV1v4zE0HIyRz/UVRn3qB49ce?= =?utf-8?q?wnRvOoBojTLLy115lDdbMRjE7+vettm8kCdk5B9hrPXU6ymBP2zhp8SIy7Fykfidj?= =?utf-8?q?24zlR+FGXn4OXX0T9q5tFgv2HMhbbxFAryTmInz1JTCPbn/ucCntAT4o+SjXM1GuK?= =?utf-8?q?Rt/UVZmTnqUxoE+tuAVRTAdGoNt/RjpRKHKIHZtL8vfZJ3ykQSRoiIKkE4q05xY6t?= =?utf-8?q?kNBTZN5qzb0L+dHRPQu0Jr+ZA77dd3+W1+sqtco2BcNsM+esjFrS3JOoMejcQyzg+?= =?utf-8?q?qKPljyits8K/zRbI5VA1eHq6TtARPFFWrhyiKgujUS00Gt58MPBAUwMwyGWL9Y/M0?= =?utf-8?q?+uT+sq4qxGgYelS/iDXi5nsyAKxdGTcoWdyJOkuI2FjY8DWF7DWQkSoQUlcdXdqnC?= =?utf-8?q?XU7/CRfH1cw2aZmwQUFqnj1u6vTEeNzixQ8YDytD34EDzoZnwYc5FdiBD/+dwJdjd?= =?utf-8?q?WaHD/jBhFx9Us+/lq5sk+s3bX/GnHzvCI0DXX1fha9zHoTyNeH2BVZ0VR+xAtUllH?= =?utf-8?q?1mEcMmCJYBnZa5wxCguR0TJZ8y0Hape/yD0rdQHSreLCuZEINRGoOxflaoV513lTe?= =?utf-8?q?ZhPegEyJESJ79skjzNjrCLjL4A5vnWPSSOiwr3GniHF1AhxzRQAmvF1UYvWUhFRHc?= =?utf-8?q?I61D/LD5lRH0dXIGpmFhk6dbpBAzOBGadFSTfCwnYovlbkJt4ItI+8d3vGDoEZqk7?= =?utf-8?q?IKJtR8nE8mWP1hPUIamwjaGV41RipBvd96O5LxEaC2I/3vZ3rg96vLPIy3QH/yP24?= =?utf-8?q?RcmOD7mJcq0hm4tRWvDrMJOPfJ5nT+wr7qzolkPrRUy/FPGJ0cpd6OlzQrCYs0BqF?= =?utf-8?q?c7p2JgcVYQBeKP2TLT6mVeOyk0LYEPIZYIH2O32Z1qg5FmStM7BBK0XtX+U3nI5vf?= =?utf-8?q?+OvwEvUsTIp0Ad3In33dTBSJ3LtS0NgZzpiRj+Zjrkc0rKa2FuBdfKbEqMONvsnYp?= =?utf-8?q?VTB40GVe5k0muaehp62ZfBfaw291c4PMCJFWWT6KLWFZDUyGkfhdSm/3F5tLMlHv1?= =?utf-8?q?9UVJkuKM+4on6+j+jejaCrpQ7EesfuVEqErML7RY4uSwBYnBGiWCXVGekW/NWLVHX?= =?utf-8?q?mO3X6tExaYMZp6hPLZKlOcstGeIuEGu2PdymL9WFjrm8bjxJY7jcDIfQRIAOABD79?= =?utf-8?q?epa3w10KdqySYYsQUrsA4w8dDF1kID88mR9Ko3cY2dTcwaTcD89Gy3vdtwtbcv3Yl?= =?utf-8?q?GqubxYYnVbU7?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85f52cbd-5b8a-4004-8b23-08db7ca28875 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:22:52.0847 (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: Ve+MkR0Wz1rzQtox25TjdjlQ9Jc0eZ2/LoayeguHxZa2wGM8yIWA6iwVKra1EHj2LgVT4givhLstzLbTStvqvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8692 X-Spam-Status: No, score=-3017.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, UNWANTED_LANGUAGE_BODY 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?1770504007035159709?= X-GMAIL-MSGID: =?utf-8?q?1770504007035159709?= Several already use OP_R(), which rejects the memory forms of insns, and a few others can easily be converted to do so as well. Note that for it to be able to use BadOp() without forward declaration, OP_Skip_MODRM() is moved down. While there add the previously missing PREFIX_OPCODE to legacy opcode 0FD7. --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -516,7 +516,6 @@ fetch_error (const instr_info *ins) #define EXxS { OP_EX, x_swap_mode } #define EXxmm { OP_EX, xmm_mode } #define EXymm { OP_EX, ymm_mode } -#define EXtmm { OP_EX, tmm_mode } #define EXxmmq { OP_EX, xmmq_mode } #define EXxmmqh { OP_EX, evex_half_bcst_xmmqh_mode } #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode } @@ -526,10 +525,12 @@ 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 Rd { OP_R, d_mode } #define Rdq { OP_R, dq_mode } #define Nq { OP_R, q_mode } #define Ux { OP_R, x_mode } #define Uxmm { OP_R, xmm_mode } +#define Rtmm { OP_R, tmm_mode } #define EMCq { OP_EMC, q_mode } #define MXC { OP_MXC, 0 } #define OPSUF { OP_3DNowSuffix, 0 } @@ -829,7 +830,7 @@ enum REG_0F1C_P_0_MOD_0, REG_0F1E_P_1_MOD_3, REG_0F38D8_PREFIX_1, - REG_0F3A0F_PREFIX_1_MOD_3, + REG_0F3A0F_P_1, REG_0F71, REG_0F72, REG_0F73, @@ -847,7 +848,7 @@ enum REG_XOP_09_01_L_0, REG_XOP_09_02_L_0, - REG_XOP_09_12_M_1_L_0, + REG_XOP_09_12_L_0, REG_XOP_0A_12_L_0, REG_EVEX_0F71, @@ -862,8 +863,6 @@ enum MOD_62_32BIT = 0, MOD_C4_32BIT, MOD_C5_32BIT, - MOD_C6_REG_7, - MOD_C7_REG_7, MOD_0F01_REG_0, MOD_0F01_REG_1, MOD_0F01_REG_2, @@ -885,7 +884,6 @@ enum MOD_0F1B_PREFIX_1, MOD_0F1C_PREFIX_0, MOD_0F1E_PREFIX_1, - MOD_0F50, MOD_0FAE_REG_0, MOD_0FAE_REG_1, MOD_0FAE_REG_2, @@ -896,23 +894,9 @@ enum MOD_0FAE_REG_7, MOD_0FC7_REG_6, MOD_0FC7_REG_7, - MOD_0FD7, MOD_0F38DC_PREFIX_1, - MOD_0F38FA_PREFIX_1, - MOD_0F38FB_PREFIX_1, - MOD_0F3A0F_PREFIX_1, - MOD_VEX_0FD7, MOD_VEX_0F3849_X86_64_L_0_W_0, - MOD_VEX_0F385C_X86_64, - MOD_VEX_0F385E_X86_64, - MOD_VEX_0F386C_X86_64, - - MOD_XOP_09_12, - - MOD_EVEX_0F387A_W_0, - MOD_EVEX_0F387B_W_0, - MOD_EVEX_0F387C, }; enum @@ -928,7 +912,7 @@ enum RM_0F1E_P_1_MOD_3_REG_7, RM_0FAE_REG_6_MOD_3_P_0, RM_0FAE_REG_7_MOD_3, - RM_0F3A0F_P_1_MOD_3_REG_0, + RM_0F3A0F_P_1_R_0, RM_VEX_0F3849_X86_64_L_0_W_0_M_1_P_0_R_0, RM_VEX_0F3849_X86_64_L_0_W_0_M_1_P_3, @@ -1074,9 +1058,9 @@ enum PREFIX_VEX_0F384B_X86_64_L_0_W_0, PREFIX_VEX_0F3850_W_0, PREFIX_VEX_0F3851_W_0, - PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0, - PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0, - PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0, + PREFIX_VEX_0F385C_X86_64_L_0_W_0, + PREFIX_VEX_0F385E_X86_64_L_0_W_0, + PREFIX_VEX_0F386C_X86_64_L_0_W_0, PREFIX_VEX_0F3872, PREFIX_VEX_0F38B0_W_0, PREFIX_VEX_0F38B1_W_0, @@ -1319,9 +1303,9 @@ enum VEX_LEN_0F3849_X86_64, VEX_LEN_0F384B_X86_64, VEX_LEN_0F385A, - VEX_LEN_0F385C_X86_64_M_1, - VEX_LEN_0F385E_X86_64_M_1, - VEX_LEN_0F386C_X86_64_M_1, + VEX_LEN_0F385C_X86_64, + VEX_LEN_0F385E_X86_64, + VEX_LEN_0F386C_X86_64, VEX_LEN_0F38DB, VEX_LEN_0F38F2, VEX_LEN_0F38F3, @@ -1381,7 +1365,7 @@ enum VEX_LEN_0FXOP_08_EF, VEX_LEN_0FXOP_09_01, VEX_LEN_0FXOP_09_02, - VEX_LEN_0FXOP_09_12_M_1, + VEX_LEN_0FXOP_09_12, VEX_LEN_0FXOP_09_82_W_0, VEX_LEN_0FXOP_09_83_W_0, VEX_LEN_0FXOP_09_90, @@ -1479,9 +1463,9 @@ enum VEX_W_0F3858, VEX_W_0F3859, VEX_W_0F385A_L_0, - VEX_W_0F385C_X86_64_M_1_L_0, - VEX_W_0F385E_X86_64_M_1_L_0, - VEX_W_0F386C_X86_64_M_1_L_0, + VEX_W_0F385C_X86_64_L_0, + VEX_W_0F385E_X86_64_L_0, + VEX_W_0F386C_X86_64_L_0, VEX_W_0F3872_P_1, VEX_W_0F3878, VEX_W_0F3879, @@ -2124,7 +2108,7 @@ static const struct dis386 dis386_twobyt { "cmovleS", { Gv, Ev }, 0 }, { "cmovgS", { Gv, Ev }, 0 }, /* 50 */ - { MOD_TABLE (MOD_0F50) }, + { "movmskpX", { Gdq, Ux }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F51) }, { PREFIX_TABLE (PREFIX_0F52) }, { PREFIX_TABLE (PREFIX_0F53) }, @@ -2275,7 +2259,7 @@ static const struct dis386 dis386_twobyt { "paddq", { MX, EM }, PREFIX_OPCODE }, { "pmullw", { MX, EM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0FD6) }, - { MOD_TABLE (MOD_0FD7) }, + { "pmovmskb", { Gdq, Nq }, PREFIX_OPCODE }, /* d8 */ { "psubusb", { MX, EM }, PREFIX_OPCODE }, { "psubusw", { MX, EM }, PREFIX_OPCODE }, @@ -2546,7 +2530,7 @@ static const struct dis386 reg_table[][8 { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_C6_REG_7) }, + { RM_TABLE (RM_C6_REG_7) }, }, /* REG_C7 */ { @@ -2557,7 +2541,7 @@ static const struct dis386 reg_table[][8 { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_C7_REG_7) }, + { RM_TABLE (RM_C7_REG_7) }, }, /* REG_D0 */ { @@ -2714,9 +2698,9 @@ static const struct dis386 reg_table[][8 { "aesencwide256kl", { M }, 0 }, { "aesdecwide256kl", { M }, 0 }, }, - /* REG_0F3A0F_PREFIX_1_MOD_3 */ + /* REG_0F3A0F_P_1 */ { - { RM_TABLE (RM_0F3A0F_P_1_MOD_3_REG_0) }, + { RM_TABLE (RM_0F3A0F_P_1_R_0) }, }, /* REG_0F71 */ { @@ -2867,10 +2851,10 @@ static const struct dis386 reg_table[][8 { Bad_Opcode }, { "blci", { VexGdq, Edq }, 0 }, }, - /* REG_XOP_09_12_M_1_L_0 */ + /* REG_XOP_09_12_L_0 */ { - { "llwpcb", { Edq }, 0 }, - { "slwpcb", { Edq }, 0 }, + { "llwpcb", { Rdq }, 0 }, + { "slwpcb", { Rdq }, 0 }, }, /* REG_XOP_0A_12_L_0 */ { @@ -3557,13 +3541,13 @@ static const struct dis386 prefix_table[ /* PREFIX_0F38FA */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38FA_PREFIX_1) }, + { "encodekey128", { Gd, Rd }, 0 }, }, /* PREFIX_0F38FB */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38FB_PREFIX_1) }, + { "encodekey256", { Gd, Rd }, 0 }, }, /* PREFIX_0F38FC */ @@ -3577,7 +3561,7 @@ static const struct dis386 prefix_table[ /* PREFIX_0F3A0F */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F3A0F_PREFIX_1)}, + { REG_TABLE (REG_0F3A0F_P_1) }, }, /* PREFIX_VEX_0F12 */ @@ -3884,27 +3868,27 @@ static const struct dis386 prefix_table[ { "%XVvpdpbusds", { XM, Vex, EXx }, 0 }, { "vpdpbssds", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F385C_X86_64_L_0_W_0 */ { { Bad_Opcode }, - { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tdpbf16ps", { TMM, Rtmm, VexTmm }, 0 }, { Bad_Opcode }, - { "tdpfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tdpfp16ps", { TMM, Rtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F385E_X86_64_L_0_W_0 */ { - { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 }, + { "tdpbuud", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbsud", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbusd", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbssd", {TMM, Rtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F386C_X86_64_L_0_W_0 */ { - { "tcmmrlfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tcmmrlfp16ps", { TMM, Rtmm, VexTmm }, 0 }, { Bad_Opcode }, - { "tcmmimfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tcmmimfp16ps", { TMM, Rtmm, VexTmm }, 0 }, }, /* PREFIX_VEX_0F3872 */ @@ -4283,19 +4267,19 @@ static const struct dis386 x86_64_table[ /* X86_64_VEX_0F385C */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F385C_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64) }, }, /* X86_64_VEX_0F385E */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F385E_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64) }, }, /* X86_64_VEX_0F386C */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F386C_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64) }, }, /* X86_64_VEX_0F38E0 */ @@ -5296,7 +5280,7 @@ static const struct dis386 xop_table[][2 /* 10 */ { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_XOP_09_12) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_12) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5951,7 +5935,7 @@ static const struct dis386 vex_table[][2 { Bad_Opcode }, { Bad_Opcode }, /* 50 */ - { MOD_TABLE (MOD_0F50) }, + { "vmovmskpX", { Gdq, Ux }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F51) }, { PREFIX_TABLE (PREFIX_0F52) }, { PREFIX_TABLE (PREFIX_0F53) }, @@ -6102,7 +6086,7 @@ static const struct dis386 vex_table[][2 { "vpaddq", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmullw", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_LEN_TABLE (VEX_LEN_0FD6) }, - { MOD_TABLE (MOD_VEX_0FD7) }, + { "vpmovmskb", { Gdq, Ux }, PREFIX_DATA }, /* d8 */ { "vpsubusb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsubusw", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6929,19 +6913,19 @@ static const struct dis386 vex_len_table { VEX_W_TABLE (VEX_W_0F385A_L_0) }, }, - /* VEX_LEN_0F385C_X86_64_M_1 */ + /* VEX_LEN_0F385C_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F385C_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F385C_X86_64_L_0) }, }, - /* VEX_LEN_0F385E_X86_64_M_1 */ + /* VEX_LEN_0F385E_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F385E_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_L_0) }, }, - /* VEX_LEN_0F386C_X86_64_M_1 */ + /* VEX_LEN_0F386C_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F386C_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F386C_X86_64_L_0) }, }, /* VEX_LEN_0F38DB */ @@ -7247,9 +7231,9 @@ static const struct dis386 vex_len_table { REG_TABLE (REG_XOP_09_02_L_0) }, }, - /* VEX_LEN_0FXOP_09_12_M_1 */ + /* VEX_LEN_0FXOP_09_12 */ { - { REG_TABLE (REG_XOP_09_12_M_1_L_0) }, + { REG_TABLE (REG_XOP_09_12_L_0) }, }, /* VEX_LEN_0FXOP_09_82_W_0 */ @@ -7573,16 +7557,16 @@ static const struct dis386 vex_w_table[] { "vbroadcasti128", { XM, Mxmm }, PREFIX_DATA }, }, { - /* VEX_W_0F385C_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F385C_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64_L_0_W_0) }, }, { - /* VEX_W_0F385E_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F385E_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_L_0_W_0) }, }, { - /* VEX_W_0F386C_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F386C_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_L_0_W_0) }, }, { /* VEX_W_0F3872_P_1 */ @@ -7883,16 +7867,6 @@ static const struct dis386 mod_table[][2 { VEX_C5_TABLE (VEX_0F) }, }, { - /* MOD_C6_REG_7 */ - { Bad_Opcode }, - { RM_TABLE (RM_C6_REG_7) }, - }, - { - /* MOD_C7_REG_7 */ - { Bad_Opcode }, - { RM_TABLE (RM_C7_REG_7) }, - }, - { /* MOD_0F01_REG_0 */ { X86_64_TABLE (X86_64_0F01_REG_0) }, { RM_TABLE (RM_0F01_REG_0) }, @@ -7998,11 +7972,6 @@ static const struct dis386 mod_table[][2 { REG_TABLE (REG_0F1E_P_1_MOD_3) }, }, { - /* MOD_0F50 */ - { Bad_Opcode }, - { "VmovmskpX", { Gdq, Ux }, PREFIX_OPCODE }, - }, - { /* MOD_0FAE_REG_0 */ { "fxsave", { FXSAVE }, 0 }, { PREFIX_TABLE (PREFIX_0FAE_REG_0_MOD_3) }, @@ -8053,60 +8022,15 @@ static const struct dis386 mod_table[][2 { PREFIX_TABLE (PREFIX_0FC7_REG_7_MOD_3) } }, { - /* MOD_0FD7 */ - { Bad_Opcode }, - { "pmovmskb", { Gdq, Nq }, 0 }, - }, - { /* MOD_0F38DC_PREFIX_1 */ { "aesenc128kl", { XM, M }, 0 }, { "loadiwkey", { XM, EXx }, 0 }, }, { - /* MOD_0F38FA_PREFIX_1 */ - { Bad_Opcode }, - { "encodekey128", { Gd, Ed }, 0 }, - }, - { - /* MOD_0F38FB_PREFIX_1 */ - { Bad_Opcode }, - { "encodekey256", { Gd, Ed }, 0 }, - }, - { - /* MOD_0F3A0F_PREFIX_1 */ - { Bad_Opcode }, - { REG_TABLE (REG_0F3A0F_PREFIX_1_MOD_3) }, - }, - { - /* MOD_VEX_0FD7 */ - { Bad_Opcode }, - { "vpmovmskb", { Gdq, Ux }, PREFIX_DATA }, - }, - { /* MOD_VEX_0F3849_X86_64_L_0_W_0 */ { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0) }, { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_1) }, }, - { - /* MOD_VEX_0F385C_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_M_1) }, - }, - { - /* MOD_VEX_0F385E_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_M_1) }, - }, - { - /* MOD_VEX_0F386C_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64_M_1) }, - }, - { - /* MOD_XOP_09_12 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_12_M_1) }, - }, #include "i386-dis-evex-mod.h" }; @@ -8205,7 +8129,7 @@ static const struct dis386 rm_table[][8] { "sfence", { Skip_MODRM }, 0 }, }, { - /* RM_0F3A0F_P_1_MOD_3_REG_0 */ + /* RM_0F3A0F_P_1_R_0 */ { "hreset", { Skip_MODRM, Ib }, 0 }, }, { @@ -9949,16 +9873,6 @@ swap_operand (instr_info *ins) } static bool -OP_Skip_MODRM (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, - int sizeflag ATTRIBUTE_UNUSED) -{ - /* Skip mod/rm byte. */ - MODRM_CHECK; - ins->codep++; - return true; -} - -static bool dofloat (instr_info *ins, int sizeflag) { const struct dis386 *dp; @@ -11249,6 +11163,19 @@ BadOp (instr_info *ins) } static bool +OP_Skip_MODRM (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, + int sizeflag ATTRIBUTE_UNUSED) +{ + if (ins->modrm.mod != 3) + return BadOp (ins); + + /* Skip mod/rm byte. */ + MODRM_CHECK; + ins->codep++; + return true; +} + +static bool OP_E_memory (instr_info *ins, int bytemode, int sizeflag) { int add = (ins->rex & REX_B) ? 8 : 0; @@ -12566,6 +12493,7 @@ OP_R (instr_info *ins, int bytemode, int switch (bytemode) { + case d_mode: case dq_mode: case mask_mode: return OP_E (ins, bytemode, sizeflag); --- a/opcodes/i386-dis-evex-mod.h +++ b/opcodes/i386-dis-evex-mod.h @@ -1,15 +1 @@ - /* MOD_EVEX_0F387A_W_0 */ - { - { Bad_Opcode }, - { "vpbroadcastb", { XM, Ed }, PREFIX_DATA }, - }, - /* MOD_EVEX_0F387B_W_0 */ - { - { Bad_Opcode }, - { "vpbroadcastw", { XM, Ed }, PREFIX_DATA }, - }, - /* MOD_EVEX_0F387C */ - { - { Bad_Opcode }, - { "vpbroadcastK", { XM, Edq }, PREFIX_DATA }, - }, +/* Nothing at present. */ --- a/opcodes/i386-dis-evex-w.h +++ b/opcodes/i386-dis-evex-w.h @@ -363,11 +363,11 @@ }, /* EVEX_W_0F387A */ { - { MOD_TABLE (MOD_EVEX_0F387A_W_0) }, + { "vpbroadcastb", { XM, Rd }, PREFIX_DATA }, }, /* EVEX_W_0F387B */ { - { MOD_TABLE (MOD_EVEX_0F387B_W_0) }, + { "vpbroadcastw", { XM, Rd }, PREFIX_DATA }, }, /* EVEX_W_0F3883 */ {