From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2089.outbound.protection.outlook.com [40.107.8.89]) by sourceware.org (Postfix) with ESMTPS id 4FC9A3858CDB for ; Wed, 25 Oct 2023 11:43:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4FC9A3858CDB 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 4FC9A3858CDB Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.8.89 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698234219; cv=pass; b=c1d6j9KCEUx1oRRScQjTW+Q2oLrDARq/tT0Nwp/c1LwrsyLuyMWSCycyC7aygj3bQxcdil2waLIEBuDyhKjrTnCjkbTnbyrdcp2ZneBPPtRHL69BqoHDY/d7ysFvScJHyf1Bfj8AsTCsyCKZmc/Rh4zV/KobDre0b0smoWAgiso= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698234219; c=relaxed/simple; bh=I64ktFkb+26ClI3FEHUb2QWs8NH4dR53MaAt7FXiz1M=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=enP60lGloxaiZ4dyyv7uRKBB+Qm6/NUEu6kGXkt07xFenjV78gXF5E2yI8M/AxJ8c/aisV2diKRb0IsoQmHqV5HJKQiZDruu5LWAetSroyExH2QhzY0vFTGkoXgQ7XlgEYa40xtej/CSC21XaFUt+esgKkp0mmF4557cyuUPF2I= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d1XUzWR9ptQf6d8ksO8Sz+uSHUZBaBUtR16rG/0psW2NwVkve7DMkQZFOsqNWY6+ZsqJJBassK1bVb+StZRov24ocMdlmQn+iI8Pq8NU4fplQp4Bb0aSLcu/nyWH3gbXybIMbT56+kJRQZCpfZRQhIb2I3cuQ4FJ4xHCFa1Yyn3g3Iiyo+pO1Znut8zJWeyfoDZSbIKZTIVcQVJCNNglz/HG5XetgZ8Gr+2z8ZsL2If0K20ukRIjMORHPPH/gyShgoxIZ/TkAsm9QSS5J8w8oBV9yBmHQohtYhI/4/agf/thdYVpfVgx9T1k9qfZqRzksdt4JusnhU9637NJDSZ5Bg== 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=XAfzXPCqtWj75tvEbJCIibuaVc89l2VgP4WcosvvOoo=; b=KRjCCYTuJYjudznpISQ8wp0Hoo9Jl4GRCRnbV19hRMYsjfrvbkIXpvGaG2I3QVCLF8SETr7mV6FQ75IQIBCGq2RFTJ8lrw4sMDGbQ2pDq//St5WJ1hY10BZVPSk0w9fxqqf8R8XWgWadrmPO3Z6sCBcPqkxKKNxAMPACoCWBOYvCFbRLN1LSPbaVS2ilkNQHfZGNL1i/uR65xmAA3qLrdcxXqhEZ5C5k5qYQioa9nWtYrMY9cYLlmb8MoLfLTO6gJnyY6w6PCsVTogQFK+7OtRNljm+ljNVZouIW6uDpMHAxVE4W29o4mrTHdJXliExH3z+rvxl5l3foSz01wRk7Mw== 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=XAfzXPCqtWj75tvEbJCIibuaVc89l2VgP4WcosvvOoo=; b=oxnBRHTQdDJngSw2T0bvOB9VEq0wFdhZEOd5QQWn5PMcfv7RMVX5zocL/TbYClOAZhSM8zut0dZxwz6MchUVFd67QmSbPoxfreKTJ+2NHCNO3XkHflvOagNZgA4hJ2MvJDMU8lFVB7tw+B+whIG4fF+wHhysKKJc2u8n4bGY7F05msCskv7Y63T2FY/r6hh2yObwHQmtsILpGxTN21oAcW+tv5TXcdfy4ji/LhcUdTk51VlgCRINlpM3/h9Nh+Mi0rHf92RAZ6ErfSfCDFZCbdUXekwE/phiBPY+Zwo3KhU2hA7Imo9uLLIoGGifplxAAC0rceOyFW/yiX0txMJJmw== 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 AS1PR04MB9557.eurprd04.prod.outlook.com (2603:10a6:20b:481::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.11; Wed, 25 Oct 2023 11:43:31 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::d924:b650:a2ad:7b25%3]) with mapi id 15.20.6933.011; Wed, 25 Oct 2023 11:43:30 +0000 Message-ID: <8a91a57b-9cd7-7541-557a-82c30a3debfc@suse.com> Date: Wed, 25 Oct 2023 13:43:28 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH][v3] Support Intel USER_MSR Content-Language: en-US To: "Hu, Lin1" Cc: hongjiu.lu@intel.com, binutils@sourceware.org References: <73e9aef8-802c-2df6-563d-787512e1f2ac@suse.com> <20231025091146.2362774-1-lin1.hu@intel.com> From: Jan Beulich In-Reply-To: <20231025091146.2362774-1-lin1.hu@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR4P281CA0252.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f5::17) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AS1PR04MB9557:EE_ X-MS-Office365-Filtering-Correlation-Id: a871f300-ce97-4b50-1cda-08dbd54f9c58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ds0PUKId1GfW5Bp2KpOK4bl72mOFEH4C5ux1cb7NPBdx69e+LAebVWupYMa9N4EpFoHtdiaVFtqeD2u4Z+w80pC4HW+77mBqZiRO+2Iknr5UUwhomzmlrhPkZQfkayRv35mQZS467a6MFacwFB/xh8SUggyO/u9QejZV+UIl5lSv+jA4gb8mgn73K3vKeYX+Yk5zQkDk6CZUjyLYKP6KSwpXVk8sfE1yNUwTgZQQU6haW4TFSpCI7+qdkeXSKwEzONVXBX1A27JkmbFFjSfTrHD1iKLlYwP6ppUfxLSgT32XBnHkjHAppXUDdeO4PNaf1ZsYH7KVpQgKz0kMLMS8CPtaSKhI9iCywwlP1cnjDzirjXj5pU1aFPeP+6P6HSkfdBXsS0tcI3ZbA8mJjrmjZGPPHIO69y0V+ndwPWDnJR5zOC8Rph0/tUh6Drz6RsrAwbVUHK97bnk+NgbamnTrmkjWgtRkz3p+PssPu23D8LLEcvdsQuQuNFU5ka2q1rrN09L2/I+qdZvTWt3iQdNu9muUsQrB+CIe+GdgSD5S7lXWgRI6d68jWlUSn22C2A4ZrFGjrngJFnGx9KQz3P84RTRyBj/r4HBL0KMj+IaxLv/k/vRTwz9iGElHn+lMxHmZ2zLq6+cG4LQoVL3CP0aqCA== 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)(39860400002)(396003)(366004)(376002)(136003)(346002)(230922051799003)(1800799009)(186009)(64100799003)(451199024)(36756003)(2616005)(53546011)(26005)(38100700002)(6512007)(6506007)(316002)(6916009)(66556008)(66946007)(86362001)(66476007)(31696002)(6486002)(478600001)(83380400001)(31686004)(4326008)(41300700001)(8936002)(8676002)(2906002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WlJFUHhtbWd4Rk0vZkdnak8rcENoWWYwZzVFejJOZWhCVDhDNStiQ3picmlT?= =?utf-8?B?c1A1ZVQyaVlLMFRNQWxNV0lsOUdzUXl0Q21nWWNPdXpUYzBVQjlVSGJ5SEE5?= =?utf-8?B?cllTcGlqMmZZYVVBK0ZjL2gvRW1pL09reDMveVBrb3BXOUJDc3JEa1V6dTc4?= =?utf-8?B?eG5qS2dGV08wczBOa0w3OEMxL0JyRkVaTmVQVEhsRDZxdjErVVJOUlVVT3FL?= =?utf-8?B?UFJib0NJSGhjcForQ3RmQlhpMis4aHoyMzZaSmlWSlBTaXN2cWZsRk9OY0Fn?= =?utf-8?B?S3hHUm9MbU9QcVViM2RKZ25DSXllOWhsTXo5dHZyTkNCT1JvTk84c2lFMXVZ?= =?utf-8?B?T2wwZXN4ZkEzenNnN3RuRjhuakNVT1VWUWc4YUhoK3ZkM1dCNWZuUHBXZkx2?= =?utf-8?B?QXhWbzZrNVBTSDlQcFVEWWVkOVRaQ1hObmdmcmZVMzRyckdiVlNwYmFmNyts?= =?utf-8?B?N2t2WVdSaWx5aHY5N0R6NTJiazQ4VG94RlJ5Z1kyaWllcmJ6dEl3YXloYlpr?= =?utf-8?B?K29lZ0hBOEpyY2lhbjNwZkx4QnN2dWhrVWp0aFIvV0RMd2lvUEh1RUtBdkRM?= =?utf-8?B?cko5dG1HcGlGTE9HWG9wTGxBVGJoY3JlalVJRTh6ZXVtaW5yMVM0SVdJMHp6?= =?utf-8?B?MmFDdUwrd2lONmZMWGtQSjJ3d3RiWENKR1p2b3dFMkNXajQrZXo2ZjdRanhV?= =?utf-8?B?VGpxRTJkaG1YWTB4M0lnUUlTa2s3WFJyRW9mMk9WQkFJbFQxa0M2Q2xFQ0R4?= =?utf-8?B?Q293M2xhSjlVOG1ONUdncWI1Q1dobkZNdzgrdzZFRVpvSzU4L1JFQUtoVEFl?= =?utf-8?B?cHlIWm5qTnQrNzA1WStFT0tMUkNEQklkaE8rcUVYWmw2UUFTc0RSQVpQRy9X?= =?utf-8?B?ZlBVSWFDQVlGVk5Zc1NvSVBsQnVvVHlaWHNteXVjRmxwWlQrVWNyQW5KeGZk?= =?utf-8?B?V0c1RU8waHpLSVZqSVRuVlFUMHpRSDhORjczaHd6V3lyd0RTQnQ2bXFTQ1JF?= =?utf-8?B?a1hqODZ0NmZQYzVVK2pHblV3aW1JemtMekUxN2JkMkI0ZFN5aWk5RFFDUzha?= =?utf-8?B?cmRJb3JkeFJnaU00cldKUmR2ZmQ5dFlSOW1uc2VWbkxEVFF3U0d0dnI4WmNH?= =?utf-8?B?dXN5YU93Umw0cTZUWGtWUDVacy9xL0NKK3VPQWRNZmNpUXhxRmxXc3QxdUVY?= =?utf-8?B?eDRrSU1sZmlsQ21XeGorQ2p5cVpCOTRzNktGdkE4V3lBV1Fnak9xOVkzNWIz?= =?utf-8?B?Z0puRExKRHJIcjdDdDJlY0hoNDlzSEl3Uk1mMkw5ei93WjVlbGQ2NHNJTVJF?= =?utf-8?B?bmdiZmtkaHQ0aDJYckk0Q1RHanRSdGEzOHkyazJRUWY3NzY0TGNVajFrRGVs?= =?utf-8?B?WWF2ZXNzaS9zbmd4YUU0b3lNNlVWUEpOWTMzUlVLY1JieTZHb2dmbEF2RGtw?= =?utf-8?B?K3pKMXNZeS9IRHJMM1BWR0RhVlpja21ZTWJKMnUzUEtXV09iRFpMcDlJc3Yv?= =?utf-8?B?QlpWUWZtY2laZXUzbUlZcHpRWkQ0NTQ4NTY1WEZINmJjU1ZQTVJYUkdPRmtx?= =?utf-8?B?RmZrZi9oaldzQTBjQkJkWkNCRG5uZ0tsQnJ2bDVBOFZsdEQxeVVGY0dtTnBp?= =?utf-8?B?SzFhYXhkaWU4eE5ySFpjRWMxbUZicUlnRytIcEtTNlVuQ0ZFYnk2QTVrejVm?= =?utf-8?B?SVRlbnc5d1RHSkc0WFcxUFlWQTBrQWJBci9XcHpsR1Q0VUllK2U3SnlHRVRV?= =?utf-8?B?TlM5NTBtcXZBR0lSb1dnQk42aHlPYmE0OUl2ODZhTllvaE5VZXM2WTJsZjBL?= =?utf-8?B?dERLdjlKQkpjRDlVcHFNaHZQK0ZNS0pISE5tZFBTUzgwdzBmTTVNM3dzc1pD?= =?utf-8?B?R2E0QUNDTFV6dnZCaG4yZGNMeDFLQi93KzlsSFo5dUcyYkR0RWdqRXkyTzN4?= =?utf-8?B?SHhWenphOFJnYkg1RWozcVVBeTNSTXhzWXhlWUhTUldMSDZxU3ppdXV4dkNv?= =?utf-8?B?S0I3TmhYMzFQbHdwU1lTZlR1Q2gzVEkrTEJGZVFQT0Y2OC91eUhVWWViYnNI?= =?utf-8?B?SnV3NDYvOVcvQ0l2SEpkb2RaWlhMSGF3WE1vWnFFTHBOOFIyRC9SK0pGTy84?= =?utf-8?Q?zdR44EU3XY7YPCZfnr5P7B5M6?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a871f300-ce97-4b50-1cda-08dbd54f9c58 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2023 11:43:30.6331 (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: G5Z+QtIjjaNdnOCytPyHOww9GGpY0ZZ5jogNGw6+EXk3a3S8L82iIaBFll6aP6ewZii/u1/GGO65C0eVS4220Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9557 X-Spam-Status: No, score=-3027.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,LOTS_OF_MONEY,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 25.10.2023 11:11, Hu, Lin1 wrote: > @@ -5235,6 +5237,17 @@ md_assemble (char *line) > if (i.imm_operands) This if() ... > optimize_imm (); > > + /* user_msr instructions can match Imm32 templates when > + guess_suffix == QWORD_MNEM_SUFFIX. */ > + if (t->mnem_off == MN_urdmsr) > + i.types[0] > + = operand_type_or (i.types[0], > + smallest_imm_type (i.op[0].imms->X_add_number)); > + if (t->mnem_off == MN_uwrmsr) > + i.types[1] > + = operand_type_or (i.types[1], > + smallest_imm_type (i.op[1].imms->X_add_number)); ... should now enclose all of these additions as well. Both for performance reasons (insns without immediates can skip the extra conditionals) and to avoid latent issues (i.op[].imms is not valid to de-reference without first checking [or knowing by implication] that the respective operand actually is an immediate; considering we're ahead of template matching, that'll need some further adjustment here anyway). But then the question is - do you actually need to go through optimize_imm() for these two insns? Or, worse, is it perhaps even wrong to do so? It looks at least latently risky to me. > @@ -7566,6 +7579,18 @@ match_template (char mnem_suffix) > break; > } > > + /* This pattern aims to put the unusually placed imm operand to a usual > + place. The constraints are currently only adapted to uwrmsr, and may > + need further tweaking when new similar instructions become available. */ > + if (i.operands > 0 > + && i.tm.operand_types[0].bitfield.class == Reg This part is needlessly strict. Altogether I'd suggest that you check that you have more than one operand, the last is an immediate (as you ... > + && operand_type_check (i.tm.operand_types[i.operands - 1], imm)) ... do already), and the first is not. Generated code wise the checks would likely be cheaper when done against the local variable operand_types[]. > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-user_msr.s > @@ -0,0 +1,31 @@ > +# Check 64bit USER_MSR instructions > + > + .allow_index_reg This doesn't look to have any meaning here. > + .text > +_start: > + urdmsr %r14, %r12 > + urdmsr %r14, %rax > + urdmsr %rdx, %r12 > + urdmsr %rdx, %rax > + urdmsr $51515151, %r12 > + urdmsr $51515151, %rax > + uwrmsr %r12, %r14 > + uwrmsr %rax, %r14 > + uwrmsr %r12, %rdx > + uwrmsr %rax, %rdx > + uwrmsr %r12, $51515151 > + uwrmsr %rax, $51515151 Considering the special handling of immediates, may I ask that you check further values. E.g. 0x7f, 0x7fff, and 0x80000000? It may further be worthwhile to have another testcase checking that out of range values (negative or too large) are properly rejected. > @@ -624,6 +629,8 @@ enum > d_swap_mode, > /* quad word operand */ > q_mode, > + /* 64-byte MM operand */ > + q_mm_mode, Byte or rather bit? > @@ -1240,6 +1252,7 @@ enum > X86_64_VEX_0F38ED, > X86_64_VEX_0F38EE, > X86_64_VEX_0F38EF, > + X86_64_VEX_MAP7_F8_L_0_W_0_R_0, > }; As you can observe from e.g. the change you're making here, ... > @@ -1259,7 +1272,8 @@ enum > { > VEX_0F = 0, > VEX_0F38, > - VEX_0F3A > + VEX_0F3A, > + VEX_MAP7 > }; ... it is beneficial to have a trailing comma in enumeration which may further be extended. > @@ -8803,7 +8872,12 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) > ins->need_vex = 3; > ins->codep++; > vindex = *ins->codep++; > - dp = &vex_table[vex_table_index][vindex]; > + if (vex_table_index == VEX_MAP7 && vindex == 0xf8) > + { > + dp = &map7_f8_opcode; > + } > + else > + dp = &vex_table[vex_table_index][vindex]; In the VEX_MAP7 case this is an out of bounds access now, isn't it? > @@ -9130,6 +9204,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > .last_rex_prefix = -1, > .last_seg_prefix = -1, > .fwait_prefix = -1, > + .has_skipped_modrm = 0, > }; No need to add explicit initializers when the value is zero. Omitting the line also would save me from demanding that you use "false", not "0". > @@ -10017,7 +10092,11 @@ dofloat (instr_info *ins, int sizeflag) > } > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > > dp = &float_reg[floatop - 0xd8][ins->modrm.reg]; > if (dp->name == NULL) > @@ -11299,7 +11378,11 @@ OP_Skip_MODRM (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, > > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > return true; > } > > @@ -11818,7 +11901,11 @@ OP_E (instr_info *ins, int bytemode, int sizeflag) > { > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > > if (ins->modrm.mod == 3) > { > @@ -12522,7 +12609,11 @@ OP_EM (instr_info *ins, int bytemode, int sizeflag) > > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > ins->used_prefixes |= (ins->prefixes & PREFIX_DATA); > reg = ins->modrm.rm; > if (ins->prefixes & PREFIX_DATA) > @@ -12558,7 +12649,11 @@ OP_EMC (instr_info *ins, int bytemode, int sizeflag) > > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > ins->used_prefixes |= (ins->prefixes & PREFIX_DATA); > oappend_register (ins, att_names_mm[ins->modrm.rm]); > return true; > @@ -12580,7 +12675,11 @@ OP_EX (instr_info *ins, int bytemode, int sizeflag) > > /* Skip mod/rm byte. */ > MODRM_CHECK; > - ins->codep++; > + if (!ins->has_skipped_modrm) > + { > + ins->codep++; > + ins->has_skipped_modrm = true; > + } > > if (bytemode == dq_mode) > bytemode = ins->vex.w ? q_mode : d_mode; Do you really need all of these adjustments? The only place I can see it's needed is ... > @@ -12623,9 +12722,10 @@ OP_R (instr_info *ins, int bytemode, int sizeflag) > { > case d_mode: > case dq_mode: > + case q_mode: > case mask_mode: > return OP_E (ins, bytemode, sizeflag); ... OP_E() for now. Otherwise, if you really want to do it uniformly, I think you'd want to fold this into MODRM_CHECK, such that the same code doesn't need repeating a whopping 9 times. Jan