From patchwork Fri Mar 10 10:19:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67319 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp787952wrd; Fri, 10 Mar 2023 02:19:38 -0800 (PST) X-Google-Smtp-Source: AK7set+sz2f9/0KJek5hOTaB2Z83NSy6cLCk/sPL/5Q+jAmC08etSjB2kAYDRulGOqERmOJuLKZZ X-Received: by 2002:a17:906:8145:b0:8f4:9ef9:27bd with SMTP id z5-20020a170906814500b008f49ef927bdmr28207612ejw.12.1678443578662; Fri, 10 Mar 2023 02:19:38 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id u13-20020a170906124d00b008ddc228b077si1997190eja.387.2023.03.10.02.19.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:19:38 -0800 (PST) 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=ag9y4sIT; 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 B6BF13858002 for ; Fri, 10 Mar 2023 10:19:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B6BF13858002 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443575; bh=nW0zQycjUJHiOCSnuHTmVyo5aIfpVOH0I683+zeM+sU=; 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=ag9y4sIThCmIxO9nyixAJFdz2/GK++pU9A6RUz8z3liV+nTP02El4yFEYoC/B8pWH kP2w6iaKIZyx29nHULc7E7p62T8CsX7mIjm45pj5gk3ug9xld6VhcPhIuGMNl7ALXT 2ITgVOq4yG7FPYR3pwNJ6oa7tqFrnXVSp92Ja4jQ= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on2081.outbound.protection.outlook.com [40.107.15.81]) by sourceware.org (Postfix) with ESMTPS id 5B48C3858C54 for ; Fri, 10 Mar 2023 10:19:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5B48C3858C54 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YP/FxP42qYWKELpoJkZTKcmMHmermZXgz2NJVLWb4GoL2mETYeNXBlBKC+t/F5KuUHyk2kvIrSXRGznw8vOtj6rYgIutk/NxrcmEzYVnYktG2Yk9CCOmIErHBwJE1B/hbg1Vzpm9iOcjra6bakpwr+qOWE3r8Q1WOGvCop4qJpBdOx/Vch1GIExXay/+q3MMMjn45/Bq4sLdMaXSfLkxLYrsy1sdD4NIjPx4nvhDFCoEBUjKfWbXM43RBydAGSKEXVCrbgK3OqO72opzYT/1RyiflQuD+PhAlZ2DswhIM/sGNBCD6iLVWo8O1rpmyoCAOe96r4tmVY0XITj6MzmlYg== 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=nW0zQycjUJHiOCSnuHTmVyo5aIfpVOH0I683+zeM+sU=; b=G5n67cl8gBJr6M2BeguUZ1R4X9GWZ030nqIBGfdW3t6VI9A5Lx80foUchp3KNLGqvCouuvPJTRkA8klvml8oLZAezelDU/gjpGG8Kw1qQYWfS0SiLqGYUmS2zfRLEtuenuS+++DoIl5b/a9Zh1+o79pZwkaSiL87rCs3q2zIENxhNIVseBHbZ3FNo7wa0vqq3p08szMYeegdxuugqfnwmnPEU9eV0DHAK2YaGS61CmnqXqQU4+U1oret3jrxxsq+rEX1RMU4aTICIL9lMPxgxJWNC+3J8tuwDIT32ektoug+KJDYdXbOwhZM2LobsZfSmPppbYggQAy7U2eM0lZUGA== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:19:24 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:19:24 +0000 Message-ID: <97d9240d-2d1a-d7a4-35e4-7cec1f418f38@suse.com> Date: Fri, 10 Mar 2023 11:19:22 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 01/14] x86: introduce .insn directive Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0032.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::19) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 29e55422-554d-42ee-5419-08db2150ec08 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cMGf8YWa9txLXh0qaZld22nwv3NaeKi3oJTZzPRb6GDmsXnqZy1tiryFzR8xkXudqvWm4P3ZgRMFRkfIrwh9fA4NOSeLEfya0flB4E3lk1CpSnlYKoI8jkzQnKuH0Ty269S/oTdEtb72AzSvyI0g1PRd84jsiTnU2xKrbZPPwhkHQMH0Ru75YYreI51UR28n0S/3HOH2LXhGG3PVWxF8CGUI65H2+3XzMCE6ftrRAFQH5FMgUEKPPHFZ+MszeHAR2KGYWj+7ngylrKrkGarBqZFqb3p5pZdgUTlCq8vBBPKfHvO4SM9fb7oPGurauFeG3Br6klNtWTAw9rA/bT6MnevMeA9AVbioSLNex4RtCwcbtOLf75dVzP7BLQZ0WChVIReWvdmfUcFPhp5gcAcX9AoVYy660Rj2RsRK7/PaeROEOzDaYBdvepd2lGAfim36XZMVXNuiYRvVoz7uFoMxqZzWBqtt6W2fjCSoeGdUxrXeleHy+Z/d33hIPq65i32P7LPCibobD5FqNnEvyp4nK2/MD/iEgrI7zAjUmeX1i5mbKWDSJ+UIviSbRCLZJlFZSAe3/0/dWhZizGZkMtvHLHa0FsNQFAG7ioz1cYCCUL1lcuahq7qj1L52qAxL6PzVEWCdO1G4YrXhHK+XHUsSIxyfWahq3LCWBb5114rc0v33PaBnEkqgpcY7i4/khUHKrPB3P0QYNGb9sdySHPhX5z3bbTndeO5LZdIskv7W+pocuzJXQAH1lrKFBB+M+H/I X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(66899018)(31686004)(142923001)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?r/Md3f4Cn50yMGmfQp+LNbqnMZ50?= =?utf-8?q?eGZZoI6ewls/H4/Dy+RvtL6Pg6UdTGzYFu7Mv/0e/a0lRBpnMYE7lx6YRcXtEzto0?= =?utf-8?q?Z24Q/UUJa3nQLazGBgVNlenWTb4Puy5urrcq5LkUoHgAYu+Pn4TERIYtRbfyXaY2x?= =?utf-8?q?U7mUky11iiwKqYLqpUnGw5XoCNg8EZuhD0JUX3EKY4mKIyNRb8Wrv374DLbHxXgvp?= =?utf-8?q?ePk8Kosa2AJL6LJJvjKTrTbALl4DG5pc/t6khEHbAqVgHyXQ9iXl9JaC2dYwGriAB?= =?utf-8?q?LdU75bRq5GvNXUoesHdzLxEX6OfY1OHM1c68g7QXCrp6lSn0AJ9SegucAz3mDObU4?= =?utf-8?q?4W2bgrsy/O294MK/RRYPMK3VLRr9kZNGwYW4PLZ19GYEEUKwdwFX3V2NJHA/W2Z1U?= =?utf-8?q?/pXWAQUHoIKfn0vCyvtdwjfsJ95juaNSMBF7mTinhjxuM+5qZe3xTY5uqeb1V1U9q?= =?utf-8?q?RrT04cDRGwmFgNJler0/Dc9RgEYFEtk03XHU3MZQGlpr8eOEi7BHYVsS69krEw2Io?= =?utf-8?q?iWrsR89f23vSkVuyW5eCQX5IdR5dEs2+Vl2im8IK7Yu0q1yfWsIAJfH1YnSKOoow7?= =?utf-8?q?vgWizvbPsWmTFatNdd8MociiyVB3o8WHeg4eI6Va+tEvAq5cABg0U24gH3vFKYFo9?= =?utf-8?q?3jo2OFV8Jn3qH+fEtbgvRhjQmBBOpL4BR1HfMLhkMYkfIAwaPGnCuXrJJadL2qNQ7?= =?utf-8?q?I3HizJdz/OGVn2M6rZOLLu6ZPF97XpMpt2dhNwKIGdkomGco8fhQvZXcqhHETVoDx?= =?utf-8?q?rQm2jyWFmZ7X2TYgo0qMwEU+U9W/szAZEtAUXo+1DBXn4qHkYt3r8+RJ/tGKkxSDJ?= =?utf-8?q?yJ5MVtyHT1iyvz6tPppz4BZ4E3yeG3lV43SnIGB116wwZLYSVZvKKKSShj0UvJYLM?= =?utf-8?q?wGgQjUH+cs6fXtRX9ukhACu7WuOF0pJy7SUsUZZwDVPTFRGKl2XTFX/h9gE63mIzM?= =?utf-8?q?ZmHuSSr9huAji+iY71FFX0/t3inkxtwf1/jWgRMDeyE/ciLxHQKFQkxbp5dIgN/jh?= =?utf-8?q?X8wb3p98gSOMQsrfdEhrBreGnKbLHBesOhx2IO2sVBMN1IboCEy5mk64LIkcnnIp+?= =?utf-8?q?zSJtuqYo0na022q2ayEgNTNtUrhUmgXKE5pmfmUI1oWUc/17I3smeNYhL3heKRIH6?= =?utf-8?q?ikPms2+sH3dUrdXvo51uNdFIIsIv+nKq6k+gnjmPHsj381G+zOPYE0M/PpswploTx?= =?utf-8?q?PDFC0OIkC0fihKTvFut67ger1AZj2YoAh66iHJN1BS1SQFPupxgOpj0AxGk4NFUvT?= =?utf-8?q?ginbuiFEJaQCEToDRvZ+9SHDaiqzSZ9987ZlC0c76FWntHLH9GGwlzrPVUhwouhwy?= =?utf-8?q?e7d0vcmTF4/F0jZJvVFRbJffd4XA1yTarYRJn6+nTKtKxsyot+qx4gF7IKGjpsLr+?= =?utf-8?q?UAEklyO542YLLKd3m6v8PMkOtL+C3XfugJZKSLQLawM51jR7wOsX66TMSIcEUIUSv?= =?utf-8?q?UrI7bzC+K+y/PaIR2NiTkDLOQkXRF4xTdcCdzconKksQMrls1L42zfUroxaRbx4vd?= =?utf-8?q?wNY6jfSZQddq?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29e55422-554d-42ee-5419-08db2150ec08 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:19:24.5532 (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: S6MzYSLGfjAULor6kMezOch7t3Dv5VZwcL6QeZzRu0F1ozET0dg5wJZqo6wehWCtPcmq6s9+1Dx5tw3cObcw4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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 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?1759975653793457163?= X-GMAIL-MSGID: =?utf-8?q?1759975653793457163?= For starters this deals with only very basic constructs. --- Subsequently a dot_insn() predicate will be introduced. If deemed better than parse_insn()'s new parameter, its introduction could be pulled ahead into here, and the predicate then be used there instead. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -137,6 +137,7 @@ typedef struct arch_entry; static void update_code_flag (int, int); +static void s_insn (int); static void set_code_flag (int); static void set_16bit_gcc_code_flag (int); static void set_intel_syntax (int); @@ -159,7 +160,7 @@ static int i386_intel_operand (char *, i static int i386_intel_simplify (expressionS *); static int i386_intel_parse_name (const char *, expressionS *); static const reg_entry *parse_register (char *, char **); -static const char *parse_insn (const char *, char *); +static const char *parse_insn (const char *, char *, bool); static char *parse_operands (char *, const char *); static void swap_operands (void); static void swap_2_operands (unsigned int, unsigned int); @@ -1198,6 +1199,7 @@ const pseudo_typeS md_pseudo_table[] = {"bfloat16", float_cons, 'b'}, {"value", cons, 2}, {"slong", signed_cons, 4}, + {"insn", s_insn, 0}, {"noopt", s_ignore, 0}, {"optim", s_ignore, 0}, {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT}, @@ -4856,6 +4858,20 @@ insert_lfence_before (void) } } +/* Shared helper for md_assemble() and s_insn(). */ +static void init_globals (void) +{ + unsigned int j; + + memset (&i, '\0', sizeof (i)); + i.rounding.type = rc_none; + for (j = 0; j < MAX_OPERANDS; j++) + i.reloc[j] = NO_RELOC; + memset (disp_expressions, '\0', sizeof (disp_expressions)); + memset (im_expressions, '\0', sizeof (im_expressions)); + save_stack_p = save_stack; +} + /* Helper for md_assemble() to decide whether to prepare for a possible 2nd parsing pass. Instead of introducing a rarely use new insn attribute this utilizes a common pattern between affected templates. It is deemed @@ -4888,19 +4904,13 @@ md_assemble (char *line) /* Initialize globals. */ current_templates = NULL; retry: - memset (&i, '\0', sizeof (i)); - i.rounding.type = rc_none; - for (j = 0; j < MAX_OPERANDS; j++) - i.reloc[j] = NO_RELOC; - memset (disp_expressions, '\0', sizeof (disp_expressions)); - memset (im_expressions, '\0', sizeof (im_expressions)); - save_stack_p = save_stack; + init_globals (); /* First parse an instruction mnemonic & call i386_operand for the operands. We assume that the scrubber has arranged it so that line[0] is the valid start of a (possibly prefixed) mnemonic. */ - end = parse_insn (line, mnemonic); + end = parse_insn (line, mnemonic, false); if (end == NULL) { if (pass1_mnem != NULL) @@ -5439,7 +5449,7 @@ static INLINE bool q_suffix_allowed(cons } static const char * -parse_insn (const char *line, char *mnemonic) +parse_insn (const char *line, char *mnemonic, bool prefix_only) { const char *l = line, *token_start = l; char *mnem_p; @@ -5469,6 +5479,8 @@ parse_insn (const char *line, char *mnem || (*l != PREFIX_SEPARATOR && *l != ','))) { + if (prefix_only) + break; as_bad (_("invalid character %s in mnemonic"), output_invalid (*l)); return NULL; @@ -5590,6 +5602,9 @@ parse_insn (const char *line, char *mnem break; } + if (prefix_only) + return token_start; + if (!current_templates) { /* Deprecated functionality (new code should use pseudo-prefixes instead): @@ -10705,6 +10720,136 @@ signed_cons (int size) cons_sign = -1; } +static void +s_insn (int dummy ATTRIBUTE_UNUSED) +{ + char mnemonic[MAX_MNEM_SIZE], *line = input_line_pointer; + char *saved_ilp = find_end_of_line (line, false), saved_char; + const char *end; + unsigned int j; + valueT val; + bool vex = false, xop = false, evex = false; + static const templates tt = { &i.tm, &i.tm + 1 }; + + init_globals (); + + saved_char = *saved_ilp; + *saved_ilp = 0; + + end = parse_insn (line, mnemonic, true); + if (end == NULL) + { + bad: + *saved_ilp = saved_char; + ignore_rest_of_line (); + return; + } + line += end - line; + + current_templates = &tt; + i.tm.mnem_off = MN__insn; + + if (startswith (line, "VEX") + && (line[3] == '.' || is_space_char (line[3]))) + { + vex = true; + line += 3; + } + else if (startswith (line, "XOP") && ISDIGIT (line[3])) + { + char *e; + unsigned long n = strtoul (line + 3, &e, 16); + + if (e == line + 5 && n >= 0x08 && n <= 0x1f + && (*e == '.' || is_space_char (*e))) + { + xop = true; + line = e; + } + } + else if (startswith (line, "EVEX") + && (line[4] == '.' || is_space_char (line[4]))) + { + evex = true; + line += 4; + } + + if (vex || xop + ? i.vec_encoding == vex_encoding_evex + : evex + ? i.vec_encoding == vex_encoding_vex + || i.vec_encoding == vex_encoding_vex3 + : i.vec_encoding != vex_encoding_default) + { + as_bad (_("pseudo-prefix conflicts with encoding specifier")); + goto bad; + } + + if (line > end && *line == '.') + { + } + + input_line_pointer = line; + val = get_absolute_expression (); + line = input_line_pointer; + + for (j = 1; j < sizeof(val); ++j) + if (!(val >> (j * 8))) + break; + + /* Trim off a prefix if present. */ + if (j > 1 && !vex && !xop && !evex) + { + uint8_t byte = val >> ((j - 1) * 8); + + switch (byte) + { + case DATA_PREFIX_OPCODE: + case REPE_PREFIX_OPCODE: + case REPNE_PREFIX_OPCODE: + if (!add_prefix (byte)) + goto bad; + val &= ((uint64_t)1 << (--j * 8)) - 1; + break; + } + } + + /* Trim off encoding space. */ + if (j > 1 && !i.tm.opcode_space && (val >> ((j - 1) * 8)) == 0x0f) + { + uint8_t byte = val >> ((--j - 1) * 8); + + i.tm.opcode_space = SPACE_0F; + switch (byte & -(j > 1)) + { + case 0x38: + i.tm.opcode_space = SPACE_0F38; + --j; + break; + case 0x3a: + i.tm.opcode_space = SPACE_0F3A; + --j; + break; + } + val &= ((uint64_t)1 << (j * 8)) - 1; + } + + if (j > 2) + { + as_bad (_("opcode residual (%#"PRIx64") too wide"), val); + goto bad; + } + i.opcode_length = j; + i.tm.base_opcode = val; + + output_insn (); + + *saved_ilp = saved_char; + input_line_pointer = line; + + demand_empty_rest_of_line (); +} + #ifdef TE_PE static void pe_directive_secrel (int dummy ATTRIBUTE_UNUSED) --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -68,6 +68,7 @@ if [gas_32_check] then { run_dump_test "intelok" run_dump_test "prefix" run_list_test "prefix32" "-al" + run_dump_test "insn-32" run_dump_test "lea" run_dump_test "lea16" run_dump_test "amd" @@ -873,6 +874,7 @@ if [gas_64_check] then { run_dump_test "x86-64-sysenter-mixed" run_dump_test "x86-64-sysenter-amd" run_list_test "x86-64-sysenter-amd" "-mamd64" + run_dump_test "insn-64" run_dump_test "noreg64" run_list_test "noreg64" run_dump_test "noreg64-data16" --- /dev/null +++ b/gas/testsuite/gas/i386/insn-32.d @@ -0,0 +1,14 @@ +#objdump: -dw +#name: .insn (32-bit code) + +.*: +file format .* + +Disassembly of section .text: + +0+ : +[ ]*[a-f0-9]+: 90[ ]+nop +[ ]*[a-f0-9]+: f3 90[ ]+pause +[ ]*[a-f0-9]+: f3 90[ ]+pause +[ ]*[a-f0-9]+: d9 ee[ ]+fldz +[ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +#pass --- /dev/null +++ b/gas/testsuite/gas/i386/insn-32.s @@ -0,0 +1,14 @@ + .text +insn: + # nop + .insn 0x90 + + # pause + .insn 0xf390 + .insn repe 0x90 + + # fldz + .insn 0xd9ee + + # setssbsy + .insn 0xf30f01e8 --- /dev/null +++ b/gas/testsuite/gas/i386/insn-64.d @@ -0,0 +1,14 @@ +#objdump: -dw +#name: .insn (64-bit code) + +.*: +file format .* + +Disassembly of section .text: + +0+ : +[ ]*[a-f0-9]+: 90[ ]+nop +[ ]*[a-f0-9]+: f3 90[ ]+pause +[ ]*[a-f0-9]+: f3 90[ ]+pause +[ ]*[a-f0-9]+: d9 ee[ ]+fldz +[ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +#pass --- /dev/null +++ b/gas/testsuite/gas/i386/insn-64.s @@ -0,0 +1,14 @@ + .text +insn: + # nop + .insn 0x90 + + # pause + .insn 0xf390 + .insn repe 0x90 + + # fldz + .insn 0xd9ee + + # setssbsy + .insn 0xf30f01e8 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -1814,6 +1814,9 @@ process_i386_opcodes (FILE *table) l = l1; } + fprintf (table, " \"\\0\"\".insn\"\n"); + fprintf (fp, "#define MN__insn %#x\n", offs + 1); + fprintf (table, ";\n"); fclose (fp); --- a/opcodes/i386-mnem.h +++ b/opcodes/i386-mnem.h @@ -2339,3 +2339,4 @@ extern const char i386_mnemonics[]; #define MN__rex_ 0x469c #define MN__evex_ 0x46a2 #define MN__vex_ 0x46a9 +#define MN__insn 0x46af --- a/opcodes/i386-tbl.h +++ b/opcodes/i386-tbl.h @@ -60199,6 +60199,7 @@ const char i386_mnemonics[] = "\0""{rex}" "\0""{evex}" "\0""{vex}" + "\0"".insn" ; /* i386 register table. */ From patchwork Fri Mar 10 10:19:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67320 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp788127wrd; Fri, 10 Mar 2023 02:20:10 -0800 (PST) X-Google-Smtp-Source: AK7set/qT1dCVR0T8LUOPozenXt22yaeyuuKD7zJXs9xwB1Xbj2xWCXZmsdqN/Y21UcezmESfCGm X-Received: by 2002:a17:907:7212:b0:8b1:75c4:abd with SMTP id dr18-20020a170907721200b008b175c40abdmr30721375ejc.15.1678443610628; Fri, 10 Mar 2023 02:20:10 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id h6-20020a170906590600b008c660960fa5si1477688ejq.336.2023.03.10.02.20.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:20:10 -0800 (PST) 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=Lwqt3tkX; 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 65737385B516 for ; Fri, 10 Mar 2023 10:20:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 65737385B516 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443605; bh=AQrE54d80o+ktge0VRbtWG/fK9romdcaT1bfeROoOFo=; 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=Lwqt3tkXDuJfQNDqP2P+JzFkNTK1oTW+bTSYpOqu8PaBmvXAWid19e/WC1N1TQahL uIDVSyn7EGQmFg+1MqDLGetXvbbX6SdIKSte+XLxL7ozwFj+7n5T6wlimnRz5pA1OM gV8WZtpG79bGzCDWPPkEJC1uveK6g3p3CmmCu2iI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2049.outbound.protection.outlook.com [40.107.8.49]) by sourceware.org (Postfix) with ESMTPS id D72523858296 for ; Fri, 10 Mar 2023 10:19:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D72523858296 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mt2T/L45iU+WD6cMQHhMM6lIqAuTtSgGz8a83Wwm90npu2FffuqnUfq6OKIqACQMpZvioPQAxiGPUOlS5kHLJ6msRtcxXxrZP2x3QlK6IAXFsS4hiuriAsJ7a4TeobILZ2RP+mfPA+rThrM49bJT2fTe/G2jXyGKOJn5Rg77oUqkK3xA/YFRqhtzpDTWrCSb1pqXMcTZHi2gfD9W/7N5nUzWqStDZenHtqidOektzLarCDslcnamOEZN3/5BcBQJ3UxcEeYnm3afeFXNu91T8uSkWyYiXru7t3Um8ETo1GlXnxklsffVhZK+yR43VisAuPiCdr1YgJKm/hQDNLtZsw== 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=AQrE54d80o+ktge0VRbtWG/fK9romdcaT1bfeROoOFo=; b=BgilLlUqgOjEg0Y+/VKlRhzp+MdAfK6RM7BXWlVRgZvZenaRXgG9PCEMAVv0p5ch/KzS1Nv1GJKT1WKr8ZjKTewkcDcNx8U/wqAtJ4leqqVSXWzOys5pzSHVoH1Xz+G16tXQDiFjosC8nXAe9xVH44yl3xY1ZEJ2lVxNX39MEVGUc+zdK/Ay3lMsQXwDWLWBflwgj5vb9z95y/h/Hfgny+pIMnM3/j4bWl7KmfR+OEtqyemOHdJ5BJ82TU7ZVbjsXMZJeIgJCxfMyy9H7WxrmCJpM1pPDq/96mWGxkKUT2H+JQIh0yRCPk14GdbsXxccAlnKiMeStCNXzOLcSd/LhA== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:19:52 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:19:52 +0000 Message-ID: <8df023f9-58a5-dca7-badd-f3354ed18442@suse.com> Date: Fri, 10 Mar 2023 11:19:50 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 02/14] x86: parse VEX and alike specifiers for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0019.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::6) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 700ae67c-cd13-49db-6f36-08db2150fcc4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zFxq74lonEzFukbiOTeiQ2jOVz8xPqu09or4DJEAgCROCsOMqi84nS0lqhDbKMBvOHVvcu+IuP/pPzLDKmdx7YDuxmXr3RZhoosOtivlWkD69N1iNagmk2OVJy78qUjQcoGrccLkRVu7biohhtsdIGLORz1N+t7K+v0OucfPQEpzaJVnQ8lXP2EkZrMKTr+tJUUE8WOXyXHMSq8bI2rur+GengCSb55NtYBBDzAQ5QJKUJSm23fG3Bm2D/W6LoS92+n+75LaLMKnBzmF7q4KcHRb6HjErii6mjvNygI+92pTvQkDHsztu1BU1JqL1HWqb0Fc/Cz/+DLl5oBVQFZE8S1icd5lh1uj8oAg89tk77ruJtkzCS58/fPdI61KBqhEfHlEcb1W8aNcH+ncgcR7Xora8uUGyFo9xQWwluWbvtxZ+hl23tqtpC5cUAr0GrDxsiHAfIfJyhja+vLHCND0LoeCAlfrTxFTGrUGk3qHmlhHEMPVJibHsMLoYnyF0w6xJxoYhk3O0HFOQv6jmRhPiBTuXwUPKBcSatb2z38DYkzis5NfQzgzd17u0TuJbfsuSBdxi8ur2S7UJxT5vaov8/aStWrLuitYwpzlD3jDDGwxfnDAx3sOIoZtht1a6iN92aMnpxAzUPaKCKMBrVonLh2jNCF+OtcToJ9xuUsnJIoyBlnUKjtp6hXqX9gYtZbC9OuuXZZySRUDeGJKlguU7umIrzwwyEJP2VBOabyJ4NXPhJtE29iJTWc09YRWlCYa X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(31686004)(142923001)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ZYrNgF6BIUhIoXka/LMF+6KDrf9N?= =?utf-8?q?I0p/s9zv9mFrxnsJDTJt1nSmzqHDUYdOyFFp/7/j3uBzGNeNBbGncF2lh7n9dBa3/?= =?utf-8?q?2dDPIpekd6zRZzMS1w1yY/v22gDOTR0X1MjHqsaff+Yc6/4VnB/WBz0mL45xQM7d/?= =?utf-8?q?2sOqRv0mVv7pNLcPGlRO60LXLVe47hm4ayP8KZzJAVW1RjBwVPZabzewknQjfgFFH?= =?utf-8?q?KX2QYL7YEul62gse8lk+kKlp1yIo9gElV/1j/CWCUwW+F7vzKzff3GUmmFsqKqIdZ?= =?utf-8?q?CH4wMl6i1LQchTYhd9yIFiS8hB7M3HeDF9Hp/yLD8FQuimY0x9rfLceYdp8rcAZFk?= =?utf-8?q?NQPhuFRisd3ye2kreIY6GgSwJTd/peExknPGLRzg3Q0jxkxcKt4xrAD28kt/4f6QX?= =?utf-8?q?2gPIRgth7q0w0ktONbojdmNYhCekKAe4YO15vwNfdsdFOtiSbLovhygslc7jdGpWk?= =?utf-8?q?/K+JW6y1LISuWh7Lox6h1kGWH0mvR1uo+6m3Wxl12+KAxWxvU7icr95Oxl+yxQvhw?= =?utf-8?q?1hwQRmnmfG5ffOzrfNhgZus7yrgW0ENAhiNZz98KEVKCovZKeOxLgWHIqkcSRvtWO?= =?utf-8?q?GnVJsyZQGU+vUE1e25tSa0xbqxZfULcGiXnpGfktI9dyGbYovZuNF0ErA5kx3d++S?= =?utf-8?q?xE08oeXU755Nfc9ucBJUJT7DPj4yCdb47bnAG4k8U+fbLiIO1AZCS0XaTYPK1hJak?= =?utf-8?q?DRe423xEuMhagWABWzwFIBFR67gpFOHvwrOE41RUW0QoW8mRWej4W+jYzPpvTiCCw?= =?utf-8?q?d4IUbLrjyzlE2J62vZlfEREdPatRMqWvaES99bhiF/iuUy+sXvGFURF8XgCinUrBj?= =?utf-8?q?hbb+geNfv+mONOzfMaNyibWMOiPb0OcVJRQz5DV+V27wNSCMt8echs9i4evttGpcQ?= =?utf-8?q?xwJpp5qCExrHb5afVginHiHGr1vbPczcP3rkegt3udOsdwyTMwV2cBV95agRFzqKL?= =?utf-8?q?thrZr+EJRNIUgLwsSDSrR9N9fqFQJHKyfvGzbDnPRogGnwzaPYYntUHd/nxA/K4w/?= =?utf-8?q?el/KCMQ7RZbs1fOOHP82cFbkwCsV8XrX55FuC40/VooVvgk0Tyhmen4hlOiwLCbKQ?= =?utf-8?q?caFHAinmhBPXzVBALDcWiVh6ISwTbZhkTng/Of59g+rGOTC020k7BRnnrcj/M3Nef?= =?utf-8?q?bwjReZM/B+uG7BjN3V1Cg72dz/wckxczA3Nkt7MelDBpWX8KztVfu7BtO1CLRdxr/?= =?utf-8?q?243ihHAWegvwaagZkBDeSlUbw8jgEjbQgFdd5K/Wt/keNSts6e0/n9d5cc+G4BAoy?= =?utf-8?q?8QBSxbA8U3XJUwPogNx8dBjyRWO4D9aX3zjkPeEN89WeHaEVtxESu6e4kicuYSXVF?= =?utf-8?q?8KS7uIKWDVoRHgJSBzSfD3PMmsVtD7YLi5J82yry9oPJVANRL4f1KytoSTky/MNek?= =?utf-8?q?1dt3SJJtsDc9sdvRD0jVczenXe7+LUUBPx/YPUPmhnFPqmTHVXHiecCNS1WL/YtjN?= =?utf-8?q?oXFBqOC0cM2pfCoFgp5NKRmjg6s7DV3dBnpduzcb8bTHGlgBq4ChHzffXb3NNpzsG?= =?utf-8?q?WjRc/wcpwpRi?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 700ae67c-cd13-49db-6f36-08db2150fcc4 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:19:52.6295 (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: 7l0moMB9k+hO1AJGCju37jaYMXo/K4VT3+GwrcbdZ8kT8TRYsMPqmYBIOJ+rk8sDN/U5wEWFcdAFdOEUDL9/xg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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 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?1759975687192385155?= X-GMAIL-MSGID: =?utf-8?q?1759975687192385155?= All encoding spaces can be used this way; there's a certain risk that the bits presently reserved could be used for other purposes down the road, but people using .insn are expected to know what they're doing anyway. Plus this way there's at least _some_ way to have those bits set. For now this will only allow operand-less insns to be encoded this way. --- For now only numeric parts of the specifiers are handled in a case- insensitive manner. All other parts have to use upper case letters. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -307,6 +307,9 @@ struct _i386_insn unsigned int prefixes; unsigned char prefix[MAX_PREFIXES]; + /* .insn allows for reserved opcode spaces. */ + unsigned char insn_opcode_space; + /* Register is in low 3 bits of opcode. */ bool short_form; @@ -568,6 +571,9 @@ static expressionS im_expressions[MAX_IM /* Current operand we are working on. */ static int this_operand = -1; +/* Are we processing a .insn directive? */ +#define dot_insn() (i.tm.mnem_off == MN__insn) + /* We support four different modes. FLAG_CODE variable is used to distinguish these. */ @@ -3648,6 +3654,8 @@ build_vex_prefix (const insn_template *t vector_length = avxscalar; else if (i.tm.opcode_modifier.vex == VEX256) vector_length = 1; + else if (dot_insn () && i.tm.opcode_modifier.vex == VEX128) + vector_length = 0; else { unsigned int op; @@ -3715,7 +3723,9 @@ build_vex_prefix (const insn_template *t /* The high 3 bits of the second VEX byte are 1's compliment of RXB bits from REX. */ - i.vex.bytes[1] = (~i.rex & 0x7) << 5 | i.tm.opcode_space; + i.vex.bytes[1] = ((~i.rex & 7) << 5) + | (!dot_insn () ? i.tm.opcode_space + : i.insn_opcode_space); i.vex.bytes[2] = (w << 7 | register_specifier << 3 @@ -3851,7 +3861,9 @@ build_evex_prefix (void) bits from REX. */ gas_assert (i.tm.opcode_space >= SPACE_0F); gas_assert (i.tm.opcode_space <= SPACE_EVEXMAP6); - i.vex.bytes[1] = (~i.rex & 0x7) << 5 | i.tm.opcode_space; + i.vex.bytes[1] = ((~i.rex & 7) << 5) + | (!dot_insn () ? i.tm.opcode_space + : i.insn_opcode_space); /* The fifth bit of the second EVEX byte is 1's compliment of the REX_R bit in VREX. */ @@ -3968,6 +3980,13 @@ build_evex_prefix (void) case EVEX512: vec_length = 2 << 5; break; + case EVEX_L3: + if (dot_insn ()) + { + vec_length = 3 << 5; + break; + } + /* Fall through. */ default: abort (); break; @@ -10742,6 +10761,7 @@ s_insn (int dummy ATTRIBUTE_UNUSED) bad: *saved_ilp = saved_char; ignore_rest_of_line (); + i.tm.mnem_off = 0; return; } line += end - line; @@ -10764,6 +10784,9 @@ s_insn (int dummy ATTRIBUTE_UNUSED) && (*e == '.' || is_space_char (*e))) { xop = true; + /* Arrange for build_vex_prefix() to emit 0x8f. */ + i.tm.opcode_space = SPACE_XOP08; + i.insn_opcode_space = n; line = e; } } @@ -10787,6 +10810,188 @@ s_insn (int dummy ATTRIBUTE_UNUSED) if (line > end && *line == '.') { + /* Length specifier (VEX.L, XOP.L, EVEX.L'L). */ + switch (line[1]) + { + case 'L': + switch (line[2]) + { + case '0': + if (evex) + i.tm.opcode_modifier.evex = EVEX128; + else + i.tm.opcode_modifier.vex = VEX128; + break; + + case '1': + if (evex) + i.tm.opcode_modifier.evex = EVEX256; + else + i.tm.opcode_modifier.vex = VEX256; + break; + + case '2': + if (evex) + i.tm.opcode_modifier.evex = EVEX512; + break; + + case '3': + if (evex) + i.tm.opcode_modifier.evex = EVEX_L3; + break; + + case 'I': + if (line[3] == 'G') + { + if (evex) + i.tm.opcode_modifier.evex = EVEXLIG; + else + i.tm.opcode_modifier.vex = VEXScalar; /* LIG */ + ++line; + } + break; + } + + if (i.tm.opcode_modifier.vex || i.tm.opcode_modifier.evex) + line += 3; + break; + + case '1': + if (line[2] == '2' && line[3] == '8') + { + if (evex) + i.tm.opcode_modifier.evex = EVEX128; + else + i.tm.opcode_modifier.vex = VEX128; + line += 4; + } + break; + + case '2': + if (line[2] == '5' && line[3] == '6') + { + if (evex) + i.tm.opcode_modifier.evex = EVEX256; + else + i.tm.opcode_modifier.vex = VEX256; + line += 4; + } + break; + + case '5': + if (evex && line[2] == '1' && line[3] == '2') + { + i.tm.opcode_modifier.evex = EVEX512; + line += 4; + } + break; + } + } + + if (line > end && *line == '.') + { + /* embedded prefix (VEX.pp, XOP.pp, EVEX.pp). */ + switch (line[1]) + { + case 'N': + if (line[2] == 'P') + line += 3; + break; + + case '6': + if (line[2] == '6') + { + i.tm.opcode_modifier.opcodeprefix = PREFIX_0X66; + line += 3; + } + break; + + case 'F': case 'f': + if (line[2] == '3') + { + i.tm.opcode_modifier.opcodeprefix = PREFIX_0XF3; + line += 3; + } + else if (line[2] == '2') + { + i.tm.opcode_modifier.opcodeprefix = PREFIX_0XF2; + line += 3; + } + break; + } + } + + if (line > end && !xop && *line == '.') + { + /* Encoding space (VEX.mmmmm, EVEX.mmmm). */ + switch (line[1]) + { + case '0': + if (TOUPPER (line[2]) != 'F') + break; + if (line[3] == '.' || is_space_char (line[3])) + { + i.insn_opcode_space = SPACE_0F; + line += 3; + } + else if (line[3] == '3' + && (line[4] == '8' || TOUPPER (line[4]) == 'A') + && (line[5] == '.' || is_space_char (line[5]))) + { + i.insn_opcode_space = line[4] == '8' ? SPACE_0F38 : SPACE_0F3A; + line += 5; + } + break; + + case 'M': + if (ISDIGIT (line[2]) && line[2] != '0') + { + char *e; + unsigned long n = strtoul (line + 2, &e, 10); + + if (n <= (evex ? 15 : 31) + && (*e == '.' || is_space_char (*e))) + { + i.insn_opcode_space = n; + line = e; + } + } + break; + } + } + + if (line > end && *line == '.' && line[1] == 'W') + { + /* VEX.W, XOP.W, EVEX.W */ + switch (line[2]) + { + case '0': + i.tm.opcode_modifier.vexw = VEXW0; + break; + + case '1': + i.tm.opcode_modifier.vexw = VEXW1; + break; + + case 'I': + if (line[3] == 'G') + { + i.tm.opcode_modifier.vexw = VEXWIG; + ++line; + } + break; + } + + if (i.tm.opcode_modifier.vexw) + line += 3; + } + + if (line > end && *line && !is_space_char (*line)) + { + /* Improve diagnostic a little. */ + if (*line == '.' && line[1] && !is_space_char (line[1])) + ++line; + goto done; } input_line_pointer = line; @@ -10815,24 +11020,30 @@ s_insn (int dummy ATTRIBUTE_UNUSED) } /* Trim off encoding space. */ - if (j > 1 && !i.tm.opcode_space && (val >> ((j - 1) * 8)) == 0x0f) + if (j > 1 && !i.insn_opcode_space && (val >> ((j - 1) * 8)) == 0x0f) { uint8_t byte = val >> ((--j - 1) * 8); - i.tm.opcode_space = SPACE_0F; + i.insn_opcode_space = SPACE_0F; switch (byte & -(j > 1)) { case 0x38: - i.tm.opcode_space = SPACE_0F38; + i.insn_opcode_space = SPACE_0F38; --j; break; case 0x3a: - i.tm.opcode_space = SPACE_0F3A; + i.insn_opcode_space = SPACE_0F3A; --j; break; } + i.tm.opcode_space = i.insn_opcode_space; val &= ((uint64_t)1 << (j * 8)) - 1; } + if (!i.tm.opcode_space && (vex || evex)) + /* Arrange for build_vex_prefix() to properly emit 0xC4/0xC5. + Also avoid hitting abort() there or in build_evex_prefix(). */ + i.tm.opcode_space = i.insn_opcode_space == SPACE_0F ? SPACE_0F + : SPACE_0F38; if (j > 2) { @@ -10842,12 +11053,33 @@ s_insn (int dummy ATTRIBUTE_UNUSED) i.opcode_length = j; i.tm.base_opcode = val; + if (vex || xop) + { + if (!i.tm.opcode_modifier.vex) + i.tm.opcode_modifier.vex = VEXScalar; /* LIG */ + + build_vex_prefix (NULL); + i.rex &= REX_OPCODE; + } + else if (evex) + { + if (!i.tm.opcode_modifier.evex) + i.tm.opcode_modifier.evex = EVEXLIG; + + build_evex_prefix (); + i.rex &= REX_OPCODE; + } + output_insn (); + done: *saved_ilp = saved_char; input_line_pointer = line; demand_empty_rest_of_line (); + + /* Make sure dot_insn() won't yield "true" anymore. */ + i.tm.mnem_off = 0; } #ifdef TE_PE --- a/gas/testsuite/gas/i386/insn-32.d +++ b/gas/testsuite/gas/i386/insn-32.d @@ -11,4 +11,6 @@ Disassembly of section .text: [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: d9 ee[ ]+fldz [ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +[ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall +[ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall #pass --- a/gas/testsuite/gas/i386/insn-32.s +++ b/gas/testsuite/gas/i386/insn-32.s @@ -12,3 +12,7 @@ insn: # setssbsy .insn 0xf30f01e8 + + # vzeroall + .insn VEX.256.0F.WIG 0x77 + .insn {vex3} VEX.L1 0x0f77 --- a/gas/testsuite/gas/i386/insn-64.d +++ b/gas/testsuite/gas/i386/insn-64.d @@ -11,4 +11,6 @@ Disassembly of section .text: [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: d9 ee[ ]+fldz [ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +[ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall +[ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall #pass --- a/gas/testsuite/gas/i386/insn-64.s +++ b/gas/testsuite/gas/i386/insn-64.s @@ -12,3 +12,7 @@ insn: # setssbsy .insn 0xf30f01e8 + + # vzeroall + .insn VEX.256.0F.WIG 0x77 + .insn {vex3} VEX.L1 0x0f77 --- a/opcodes/i386-opc.h +++ b/opcodes/i386-opc.h @@ -643,12 +643,14 @@ enum 3: 256bit EVEX prefix. 4: Length-ignored (LIG) EVEX prefix. 5: Length determined from actual operands. + 6: L'L = 3 (reserved, .insn only) */ #define EVEX512 1 #define EVEX128 2 #define EVEX256 3 #define EVEXLIG 4 #define EVEXDYN 5 +#define EVEX_L3 6 EVex, /* AVX512 masking support: From patchwork Fri Mar 10 10:20:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67321 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp788655wrd; Fri, 10 Mar 2023 02:21:34 -0800 (PST) X-Google-Smtp-Source: AK7set86/iaQ6rLY4oktPVzsY99beF5g8vFh+KFKeKC53pIX6oze1hZ7qRYQIY/aJHquPHrr4Asx X-Received: by 2002:aa7:cad1:0:b0:4ac:d90e:92b with SMTP id l17-20020aa7cad1000000b004acd90e092bmr1019385edt.10.1678443694235; Fri, 10 Mar 2023 02:21:34 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gt11-20020a1709072d8b00b008c960203230si2115953ejc.351.2023.03.10.02.21.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:21:34 -0800 (PST) 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=NMAjgoq9; 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 901813857365 for ; Fri, 10 Mar 2023 10:21:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 901813857365 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443666; bh=2hI7Ej2sCmJ6Bch/OyCrt08AWxotLifBZ1v0J//Kvk0=; 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=NMAjgoq9oPVOFpRGnS07J9uLtatAHlc2eVfYzuTZNxJ6eWRHSNj7sHYPHVm9FY712 wzSNSmtGcAUjpIBA//6cAdXhpCGphpiaTLRuuZguaShMHYWqv2ZW012zW9TgG8014q IC512EgDWf2PAsg4doua8gQBZDpndgnN1tsUTE8I= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2048.outbound.protection.outlook.com [40.107.8.48]) by sourceware.org (Postfix) with ESMTPS id 415D43850232 for ; Fri, 10 Mar 2023 10:20:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 415D43850232 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PL3BiJeRPUcMrzUgKbrjFQw/pdvPrNA8hYjMJNwPRZ5VohjMcu2QtifJFLOg6CJtiQQBWt7kNsI5LRqPz8043VyxSvmx2G0YldvRCRvp2cel7lN1QG2mQ2J8/q04mJi8smU5D5PjkQlBnf6jl5wFF4HI7K5ZB0yDYWhPX0hrOCVmogrDHxvINi5tqsGxb6uBaGWbKURkIX2wGuXFl2EZNk1H36bkF6nR41dcaz/NaP5Y8Tf7/Xu5m8qZc3GsWSebXeZGlb/aENAKDl3P1c8TV71CA9rLcN2mZBPEE0zVOS7Ohci1J0dmPIlzVzb1S2k1SOx6xrQYFZ/lsKnDRpqj+g== 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=2hI7Ej2sCmJ6Bch/OyCrt08AWxotLifBZ1v0J//Kvk0=; b=eJn422n99V3iRCCMSYPN5Ju6fFtxr3bAavCMucJIcHdZSLGO86yqOj3MMb7+pLrzDC4I4NYY8NgLdgUghLWo8+PtVepS2uHHTCaoUC98sHfgTGEOg3lb+M6coynTuDvxKGnvYv2yqC94S4QALbqmDjvg+PopUXyEBiBuTBdxfYnJvW9SN/757ePoWhushY8GYW9SNMzwsABpM2cNHtbdkTccifmhP87qqW4mM/yYqMNrDCXrpADU4zLINxxuxmd8XWVXE1pN9ELTfpjcz4DX82Kwh5IzmQkzzi6rAFZiB+OGz4Iu1LWzjHznBPO0TjwrDQvcQ0eTcpVbphumWqoBOQ== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:20:28 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:20:28 +0000 Message-ID: <5771df73-12d8-e880-a051-86c09d6bdb06@suse.com> Date: Fri, 10 Mar 2023 11:20:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 03/14] x86: parse special opcode modifiers for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0053.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 9cb5348b-3781-4a15-2c1a-08db21511226 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: csKLAwS0S2AJONTtpqGPCy8t9ucVuHEIY9ohSQXalC2GbIeqBlKqsaaRStF+X+szD1wIJSo+tx02dJBc+vEbEljusb4grIDY4sy9UCurX65wnY1YbGLtTWI7qNd3bCMsYyB5bp5urFacjbeYm2XJHcTalLF5yBRE5sv35uCdpIlWGkjeoJbGKzlNBJvixr+GQOkDL4E+DTyo2jKRjgazxPsej7QvOHNBs+BapW/rdsnKX+ACPCfqGw4EPdwRMU4RvqfZOwxCZw82rEUQZGQo099tkhF33fjph1+FLJJvm59VZomcG7eW8KNyT1V+rZaItmmUG/I8h9UghjaisIlZtiYOXPMersVgxTjKspy4pNCKhwOlLbnjWXt/k8Ct+3x68LuiovBwUoYPtyTj3+6zsHxCHrk9RWEHqnQVrCxbePN/t2U6I4r2B5jly9B/dHWO4sJxGRFlEm0nBl3lQm1/oBf9LdIhjsds5IWY0qf0YLd6IrQeBczf44koRUMWmnaPracH65js+SOTLvoFTe34B58J141KivhN9iJqM36caDaG6TaE1SM2uX9ryu1u+K5phPKGZGbgZxvvOSJI5kWqVxo/Q8AAHJmCPUJuvnJj5wELwjrOH0Gw6aWFK2m3AotebvthEGZZ7OJ73h+K2cG1aUiVOyCNEkF6VZE/d6ZiUu4IWz3oGlO2Rzwz28Y02mzN86QTjyF6KNegRYBBBN6o0mZeWa+d590WiTfVougd+vKNYonKLSA2K3gRTVllHXEBdP1j4vWPtKKGgJX9W8sdEA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(31686004)(142923001)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ts0q/cHtuQ34wR0kJRZ1MfVo5OcR?= =?utf-8?q?t7rVGoEehjerW0qzfbYHWZKHUCb7GtdD1stFBd6g7edzzsh+sibXO8tDz5kCFPDzq?= =?utf-8?q?Q266/3bb/J1xwBywqs8p4GrSWYihmMmwdNuUoHoW4Lm2+o4idZ52XiAFuoQ1ddwcy?= =?utf-8?q?6baUahCaIqowlaSKN5T/qFbDvhwjQw3me6SoQrJ+zEVu+57iny9IXbVkwC77HTuq2?= =?utf-8?q?RmRQfyNDugk2msz+q79XkrDaad/lDjzqyLnzcFkFl9dh1RJndBfNJEGpNIlXxjI1J?= =?utf-8?q?lHlO2CWcxsKa7/0OhhL54rDcOlWwyIV1pD0Tt8EEiLo+Tunl1kQ9mSR4lvu9h8nmW?= =?utf-8?q?pXix2/K7DFFahwA+sqANPCNwffLvXI7/bra6Saqlh7wSrZ8YDzqXrwtLX5b9+K3jx?= =?utf-8?q?igz5dFEnbjZfs1PDIVklQ+p0mKlLyqC9qSMqB5eGeMjXje5PxvrhrriztAxa8QUKo?= =?utf-8?q?9YdmVyxRihorUizfBHVfhChS75VyDsVxQgJ0r3a3G9WqqZBm1IBWCWw3hQaH6PE4/?= =?utf-8?q?i9jBppT7mZTDjZUfQ+SI51AwcGkHPNd7an8q3mGuNk/MaBjwEQh/rddt120wTC00Q?= =?utf-8?q?dNXt3vpfHIxWBEdZIn3j8tpVuEA2q7wgDRJSyL5YSkkLZ+dZAYUSV7xzAwku9oIdU?= =?utf-8?q?fsOPOoohOkrJPiwBxLl7msMy0UpKoyhbmcExdcAyR3xTzqXO+mwdSh64jdTpIyaur?= =?utf-8?q?MuG03BP9iSskJ2+b1Nhzmz9tsI8X5Gn/q6WAJjfUAE3wtCSQpgtgDkA6LeWEpLNI8?= =?utf-8?q?01vDDYpyfNuCnTgNpGdw5qd65AA2aB2FSiB/surEfeh1/ESntFKiR4DU+m7ikNX6J?= =?utf-8?q?nGIZ5gcfPgXpfmPxpiA5fSZLP/NibhQJmecJYuWSnfvUhe0dBhvJXeRN7q8tQrZpo?= =?utf-8?q?9asL1mUJueXJ1o4OdIHtz8UV/NbWbTk8mY5ktDAKf9t1ZMKEJIOMPwJwNJZ4AIed8?= =?utf-8?q?8RC+mKXrMR7iFlDjsGD8qiWTEk9+JWWPiTntjj/o9jOkaSVJwXoEmbhoSmwMAVlc6?= =?utf-8?q?K9L+g3AmMZpPkrInpZJ3EBz7M5wqWTfGYexx65eXBVwEY5NPG4PmWjUCnMwVD427j?= =?utf-8?q?T4o29tyqn9ZrIYd7ZkyjV+XO6xUrbvNdOOgBDWYZOTdAJ2alJvtsC+alN1pMTys+V?= =?utf-8?q?1g4S0HiNwdRWMSW2LmbWbeRZ3gtBTIVhcMACf1IeLJ8/71KyNnhTtYAoBmLN8Ih2v?= =?utf-8?q?JJW+4+aMh54kk2DIH7NEu/7ihRFXwSWB/peNS9oymD97I/4/gSpE+Mf9cNoW9qbgo?= =?utf-8?q?WMPd/hPc3HQthzPLqFT4aKHaAx65hJPVz7VeyWn7XGjAXv4KmbNLufYO+wveDT1DZ?= =?utf-8?q?rsIwYrUqHJQyOlr2g+yjDgxOrrHkrDoMgElW8LfxUDEjEFMlaNYMGVYM640XCzHTJ?= =?utf-8?q?Kox6Z+xsJuXMbrb+QvMtNXidIIf4q5Fws7Jx31L0yyjj12CfLrs642MPJUrou2/c5?= =?utf-8?q?edBpiEmeFEMNkbLYdRJhRllaOI41HyvQgX7vPBYFDQv9ziTn25ktyqI6Rfg2JNn7T?= =?utf-8?q?hJqx69Q+IqeM?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9cb5348b-3781-4a15-2c1a-08db21511226 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:20:28.5491 (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: pNQ7pvbRdBBSXZ8aNhuuEAFzpgBdFzH09Dy1/7hg9M7Eif9c3D17XPIbb1q4NAkiDdIaJwAx0WYt2bsjWSsOOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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 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?1759975774980126582?= X-GMAIL-MSGID: =?utf-8?q?1759975774980126582?= So called "short form" encoding is specified by a trailing "+r", whereas a possible extension opcode is specified by the usual "/". Take these off the expression before handing it to get_absolute_expression(). Note that on targets where / starts a comment, --divide needs passing to gas in order to make use of the extension opcode functionality. --- I don't think it makes sense to further complicate things and also consider the use of quotation inside the major opcode expression. Ambiguities in particular with "/" can easily be resolved by simply parenthesizing the actual expression part of the construct. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10742,7 +10742,7 @@ signed_cons (int size) static void s_insn (int dummy ATTRIBUTE_UNUSED) { - char mnemonic[MAX_MNEM_SIZE], *line = input_line_pointer; + char mnemonic[MAX_MNEM_SIZE], *line = input_line_pointer, *ptr; char *saved_ilp = find_end_of_line (line, false), saved_char; const char *end; unsigned int j; @@ -10768,6 +10768,7 @@ s_insn (int dummy ATTRIBUTE_UNUSED) current_templates = &tt; i.tm.mnem_off = MN__insn; + i.tm.extension_opcode = None; if (startswith (line, "VEX") && (line[3] == '.' || is_space_char (line[3]))) @@ -10994,10 +10995,46 @@ s_insn (int dummy ATTRIBUTE_UNUSED) goto done; } + /* Before processing the opcode expression, find trailing "+r" or + "/" specifiers. */ + for (ptr = line; ; ++ptr) + { + unsigned long n; + char *e; + + ptr = strpbrk (ptr, "+/,"); + if (ptr == NULL || *ptr == ',') + break; + + if (*ptr == '+' && ptr[1] == 'r' + && (ptr[2] == ',' || (is_space_char (ptr[2]) && ptr[3] == ','))) + { + *ptr = ' '; + ptr[1] = ' '; + i.short_form = true; + break; + } + + if (*ptr == '/' && ISDIGIT (ptr[1]) + && (n = strtoul (ptr + 1, &e, 8)) < 8 + && e == ptr + 2 + && (ptr[2] == ',' || (is_space_char (ptr[2]) && ptr[3] == ','))) + { + *ptr = ' '; + ptr[1] = ' '; + i.tm.extension_opcode = n; + i.tm.opcode_modifier.modrm = 1; + break; + } + } + input_line_pointer = line; val = get_absolute_expression (); line = input_line_pointer; + if (i.short_form && (val & 7)) + as_warn ("`+r' assumes low three opcode bits to be clear"); + for (j = 1; j < sizeof(val); ++j) if (!(val >> (j * 8))) break; From patchwork Fri Mar 10 10:21:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67322 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp788751wrd; Fri, 10 Mar 2023 02:21:50 -0800 (PST) X-Google-Smtp-Source: AK7set+YV7yGp06QatIiB6BlDDVl5I3SkvaxkhtA8VsS5KSjqR5ZNXdnusErgNJw3tmw4svnUBAY X-Received: by 2002:a17:906:1c13:b0:86c:a3ed:1442 with SMTP id k19-20020a1709061c1300b0086ca3ed1442mr23198443ejg.4.1678443710229; Fri, 10 Mar 2023 02:21:50 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id p26-20020a1709065dda00b008c4abcbbde5si1515340ejv.504.2023.03.10.02.21.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:21:50 -0800 (PST) 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=pVRNtVsa; 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 C584B385B53B for ; Fri, 10 Mar 2023 10:21:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C584B385B53B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443686; bh=u1nFIsGTKMsR80NROZ9e3I7Ny5JmIHy+otziwPd6ERw=; 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=pVRNtVsaOQ752bCZWDGPrsD5dUzJ96pNxByee1EjqI3GQunCbPEHTuIm0spsRBPfU NEtoOjJHsTjMWMAiWaMpvHNxA+5gC4BU/ThTEintOeSb3WNFHqs9t3VNP1jwUdI7WX F9YmRcLTyLogjkfs0YOS75Wtc7Zoep0QIYlCtRHQ= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2083.outbound.protection.outlook.com [40.107.104.83]) by sourceware.org (Postfix) with ESMTPS id 297593850871 for ; Fri, 10 Mar 2023 10:21:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 297593850871 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WgVgiiSnWPLYIOOs5VR3OZJUjA0xfnntKV112g68CsQPfXuT6aurmmsiCrxb8okj+FeCjoTpoqw9C0aPH0eWukqy1o2G/cDh5fzs0Tu8P9eEHj1DXruT6S2CGF1S22ATayMCXjAmoKgomD86mSVPAAclwDeqxjbchYZPvya0QRvPhgKN5KGzfmP9ZLLSo0Lc1b67gD/dk5ES7qdGiZC3Be/r1MdH0ZDBB0dAU/VrDocpzVUg+5Kq//DmhKODozCHEd1b6AZqnO06ZMVg/qQXEST6XBZqKOJcuEMXtHw10FYEDUzgNLv07ev/9Zcor4YAso8T+phHQedtobXwgDLncQ== 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=u1nFIsGTKMsR80NROZ9e3I7Ny5JmIHy+otziwPd6ERw=; b=eeG2bZTbPT+QeNcVmlhb83xVqbM8QNZxL6v6S3y+hgWjJdIDMO4rPr8XIjF8yBEMK4l+OrXhIavwTjo+8vvnGs+Defhsh/GbDzbNoC5vyG36ayovJ8d+7RQVjnupARrJQACYc441MSxJ04ZsjZJ5g+VnVH4VcUxWpme/vVhTcUrzxHUpqfOJBJ7eP4LFp+BEyTarlyotX92BOF5NNeRqvCdqi6u+xKQ8orCQbBobXkTHNvbX/NWkGv51MdBM940KDDA2MjSznjqqAOnI40oihBZFEwO8DPl9CIP+NbVXmhrgGoV3uS4CpmdfcbkPrjtoBIojRRYqN6K0idbVJ6E2MQ== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8339.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:21:14 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:21:14 +0000 Message-ID: Date: Fri, 10 Mar 2023 11:21:11 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 04/14] x86: re-work build_modrm_byte()'s register assignment Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0126.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:94::16) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8339:EE_ X-MS-Office365-Filtering-Correlation-Id: b14dde7a-70aa-4d59-8f5e-08db21512d57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PAvst0OJx1nYlMvInlbZZOtZWL9z+BPsoS0CddSJynQc1o0b7pDcFeOxjKvZJ0CJzgKyyC5b8xp7x9QZvBqQj3NVD1wW3uh0fbKK0WKAAmiBu+prQuL06Qcnfvk/CQCHy2BF3+Np7R0v303NkIus+FWYuVgKPN6obEisXDaGJEzqQS2InkjJN+7qsUi3GsQy3e12KJV2Jh43F851ogVlZMi5U/j+Hz98wcLwDEKFbplPAdJNqsIUVe/R9raq86YqqueOqm2RaDju52ErbtB/SFt+7wzzEASxblyP1Dck5tb9C9UMT/zYghSXAWVkYIj/qnBD00ZWMe6BADRC2fwQqQtj2PTgXK57NPBO7wvkkE/GEtHrEDgf9uEEFD1agQZy649OkxFh+m2WUrCmF2tU+xUFRBM2FkT9o6cE8b5RLf17CAwW1z35mO9GfztVXQbboW/k1bP/2DPdUTHgVWda26xE03eBLacfbTR4f1a06y9BgVPE2guFkO0jIvREBNl4kPCleCGRMQxxwYhuIGdMetdXG0Sd201dUsyaLLQAGiWGf0PI6ocfJP8PbhfcxksdqT2OkdJr6IQ8XjJ5mFtyOzue38hIf7lGI0ki1MO6UMmclUGbu0ZCh6hatOmLgKc40Wq1FwsCeyaCXBu6VDwe5re/vUf7975a1OaJv+pZmFvhED+TSAZHePydpWqNXnmzG9DyYFapdZZKjJIoNMUWYeyKPV3CarvI+X1D5lIUl2U= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(39860400002)(396003)(136003)(346002)(366004)(376002)(451199018)(38100700002)(36756003)(54906003)(6916009)(478600001)(6486002)(316002)(5660300002)(66556008)(8936002)(2906002)(30864003)(66476007)(8676002)(41300700001)(66946007)(4326008)(26005)(83380400001)(31696002)(86362001)(6666004)(6506007)(186003)(2616005)(6512007)(31686004)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Uk1WSA2zutsIgmEHy6j88/CK4DyK?= =?utf-8?q?Y3qQP1S+3RWZSOT1BReN7++QNMa2Twrepaga7WCZXJpG+m1R1OuxsM3UmZbwN3PEn?= =?utf-8?q?x0BAgoSdS/HpUoBChSmqQG1NxIlGcbkSJhSkMHMsRBEys4YMZJ7poRlNcitUw9EXz?= =?utf-8?q?Ncu4Uzhwhj2FByu8Son/IeZl09Fr+VkwReg2NVA/zN4c9PFDcaiJnQE2t6SJiOEkd?= =?utf-8?q?bnsT56+i+hPODoN5K+SA4Ksai6Vi7ZKhh2TzW6qoLF5ptMk7YQxPNYCiNOCRZ/zUT?= =?utf-8?q?vnyjrWEy8jcymrCOMbKnlG4RovVb2h4E4QVBqRgYcjoyg9l4m+wQ7nOM6OTWOtafq?= =?utf-8?q?l+1WJKPbLTQ5st4i3msxbpFrdjnF/6f6N+uak274ah+N74r89IDaVvsOEE7eOCCMt?= =?utf-8?q?AdqSF0/pUJDio9VjpblPrQzzZVflUM/GX5NGhqoGAKix7+P5+bcgsQnBmGfwr9fcV?= =?utf-8?q?Dt2r22TcwWR9s0QX//nr2Gs2NSLJz3h4PFjUqOWF2jYJCsxb5+G2EM3bGV00vCR74?= =?utf-8?q?UZwWaIda6GXm/NT0ca/pTNvjlh1DH8Lhxt2kQj2oXL4GXm+fwInlscBPynUVkyw3f?= =?utf-8?q?sCzUobSqEw5ZI+XRpLWD0gNgwt30hhL+y+KwhjOhUC55bSeUHTlwwsywu6ZatpfHr?= =?utf-8?q?UQve1EKnVzLcz4Z7d5kSFgyBzGvAmX9b9UZ0jlY6heTArB5UKRlPOIWSPGRzqkc0c?= =?utf-8?q?ZTnzqmWZpSKP/Ai2YYi3loZgS5dIGS/h4u1TJc7R0k0CnNlTx6fQT4N/UEfOrua+V?= =?utf-8?q?SJRo+7vxUjqi/7y0w99gCW+7+0NzJz8MMZ2PaBzo5MrX5bybuMe6d1qOEcnORxS2L?= =?utf-8?q?jEzg6wVrh0K3saB92fB/nmRydNlelbZb+QQyzk2oQiTaCNi1RBt6xsQFGwr6tosK0?= =?utf-8?q?nZYVK/2A9Rl0/dyeW2DgEnUazqkr4QhOX9Fi8mNk1wCl2i3dacLnersLmJmP2es6I?= =?utf-8?q?yIh/K5qBFMifRfzZnTzyXptgDdp8kdZFHDgr0gAZ1O7vq3SX+mlu6YhJS9QYxpa8R?= =?utf-8?q?SRIBmqtxU+QoBfqNgFRvaiEvHhGtW8nkXBW7gac5mbPjCKXBZE7lsFvYkvlk9LQFF?= =?utf-8?q?wFsPrXKh1GeX/rLb9hWXQQ5Odc5367uFHdo0AgLn7PpRe5Iq99bSL2VeSpF9M5xxQ?= =?utf-8?q?nx5tcNGYliKBlNYEuNJhf7rP4A3Jslp8Rq3dztoRAm4BKZFz971Yt4DYtwcBedO2s?= =?utf-8?q?Kr4LbNULY9TtpXpDsIXji9dV+oD6bi9rwjJwN91DYitWYSxXk0wjpvKd9rqYGsQMg?= =?utf-8?q?MvyDlhQy/YC3zNsSfOV16r/FMsYA3XIA0HTCyB0mrCNd+Tyq5IsJPnDqmWCC1ySMb?= =?utf-8?q?pCiTbgVpEa6+0yzzYOH/Y9YvZB0gBXli96ZmJM7kfyHphYB6OsLSVkz7BhqoSNTh0?= =?utf-8?q?g3aQ4iEI1X66Ij7mbBXCxBeGZSjRJmhi7JY0HV2XdBHSH3KW2GIJkE7E8KQcpmuR5?= =?utf-8?q?GJjqB2xYhky9TSUx+DGJ5lqrpg+Oy6NbD6+gdW6BtTslIo/Q5IRfzOvfmO+GlOZOD?= =?utf-8?q?8svt2JbPbU/T?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14dde7a-70aa-4d59-8f5e-08db21512d57 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:21:14.1243 (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: +pbQZtonA15SaD05Uh9MIR06RLA7hoD3d5hgCyCJMl0VaNsGDYN3WazlZdCYzXuQaNclqvxx0vSJc7qRcXDUnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8339 X-Spam-Status: No, score=-3028.2 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_NONE, 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 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?1759975791662834743?= X-GMAIL-MSGID: =?utf-8?q?1759975791662834743?= The function has accumulated a number of special cases for no real reason. Some were necessary because insn attributes (SwapSources in particular) weren't suitably utilized instead. Note that the addition of SwapSources actually increases consistency among the templates: Like others which already have the attribute, these are all insns where the VEX.VVVV-encoded register comes first (or last when looking at the SDM). Note that the vexvvvv attribute now has merely boolean meaning anymore, in line with the SDM long having dropped the NDS/NDD/DDS concept of identifying encoding variants. The fallout will be taken care of subsequently, though, to not further clutter the change here. As to the TILEZERO special case: If more instructions like this appeared, a new attribute would likely be the way to go. But as long as it's only a single insn, going from the mnemonic is cheaper. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -8056,6 +8056,22 @@ process_operands (void) else if (i.tm.opcode_modifier.immext) process_immext (); + /* TILEZERO is unusual in that it has a single operand encoded in ModR/M.reg, + not ModR/M.rm. To avoid special casing this in build_modrm_byte(), fake a + new destination operand here, while converting the source one to register + number 0. */ + if (i.tm.mnem_off == MN_tilezero) + { + i.op[1].regs = i.op[0].regs; + i.op[0].regs -= i.op[0].regs->reg_num; + i.types[1] = i.types[0]; + i.tm.operand_types[1] = i.tm.operand_types[0]; + i.flags[1] = i.flags[0]; + i.operands++; + i.reg_operands++; + i.tm.operands++; + } + if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv) { static const i386_operand_type regxmm = { @@ -8287,17 +8303,27 @@ static const reg_entry * build_modrm_byte (void) { const reg_entry *default_seg = NULL; - unsigned int source, dest; - bool vex_3_sources = (i.reg_operands + i.mem_operands == 4); + unsigned int source = i.imm_operands - i.tm.opcode_modifier.immext + /* Compensate for kludge in md_assemble(). */ + + i.tm.operand_types[0].bitfield.imm1; + unsigned int dest = i.operands - 1 - i.tm.opcode_modifier.immext; + unsigned int v, op, reg_slot = ~0; + + /* Accumulator (in particular %st), shift count (%cl), and alike need + to be skipped just like immediate operands do. */ + if (i.tm.operand_types[source].bitfield.instance) + ++source; + while (i.tm.operand_types[dest].bitfield.instance) + --dest; + + for (op = source; op < i.operands; ++op) + if (i.tm.operand_types[op].bitfield.baseindex) + break; - if (vex_3_sources) + if (i.reg_operands + i.mem_operands + (i.tm.extension_opcode != None) == 4) { - unsigned int nds, reg_slot; expressionS *exp; - dest = i.operands - 1; - nds = dest - 1; - /* There are 2 kinds of instructions: 1. 5 operands: 4 register operands or 3 register operands plus 1 memory operand plus one Imm4 operand, VexXDS, and @@ -8309,18 +8335,12 @@ build_modrm_byte (void) && i.tm.opcode_modifier.vexw && i.tm.operand_types[dest].bitfield.class == RegSIMD); - /* If VexW1 is set, the first non-immediate operand is the source and - the second non-immediate one is encoded in the immediate operand. */ - if (i.tm.opcode_modifier.vexw == VEXW1) - { - source = i.imm_operands; - reg_slot = i.imm_operands + 1; - } + /* Of the first two non-immediate operands the one with the template + not allowing for a memory one is encoded in the immediate operand. */ + if (source == op) + reg_slot = source + 1; else - { - source = i.imm_operands + 1; - reg_slot = i.imm_operands; - } + reg_slot = source++; if (i.imm_operands == 0) { @@ -8350,159 +8370,42 @@ build_modrm_byte (void) |= register_number (i.op[reg_slot].regs) << 4; gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0); } - - gas_assert (i.tm.operand_types[nds].bitfield.class == RegSIMD); - i.vex.register_specifier = i.op[nds].regs; } - else - source = dest = 0; - - /* i.reg_operands MUST be the number of real register operands; - implicit registers do not count. If there are 3 register - operands, it must be a instruction with VexNDS. For a - instruction with VexNDD, the destination register is encoded - in VEX prefix. If there are 4 register operands, it must be - a instruction with VEX prefix and 3 sources. */ - if (i.mem_operands == 0 - && ((i.reg_operands == 2 - && i.tm.opcode_modifier.vexvvvv <= VEXXDS) - || (i.reg_operands == 3 - && i.tm.opcode_modifier.vexvvvv == VEXXDS) - || (i.reg_operands == 4 && vex_3_sources))) - { - switch (i.operands) - { - case 2: - source = 0; - break; - case 3: - /* When there are 3 operands, one of them may be immediate, - which may be the first or the last operand. Otherwise, - the first operand must be shift count register (cl) or it - is an instruction with VexNDS. */ - gas_assert (i.imm_operands == 1 - || (i.imm_operands == 0 - && (i.tm.opcode_modifier.vexvvvv == VEXXDS - || (i.types[0].bitfield.instance == RegC - && i.types[0].bitfield.byte)))); - if (operand_type_check (i.types[0], imm) - || (i.types[0].bitfield.instance == RegC - && i.types[0].bitfield.byte)) - source = 1; - else - source = 0; - break; - case 4: - /* When there are 4 operands, the first two must be 8bit - immediate operands. The source operand will be the 3rd - one. - - For instructions with VexNDS, if the first operand - an imm8, the source operand is the 2nd one. If the last - operand is imm8, the source operand is the first one. */ - gas_assert ((i.imm_operands == 2 - && i.types[0].bitfield.imm8 - && i.types[1].bitfield.imm8) - || (i.tm.opcode_modifier.vexvvvv == VEXXDS - && i.imm_operands == 1 - && (i.types[0].bitfield.imm8 - || i.types[0].bitfield.imm8s - || i.types[i.operands - 1].bitfield.imm8))); - if (i.imm_operands == 2) - source = 2; - else - { - if (i.types[0].bitfield.imm8) - source = 1; - else - source = 0; - } - break; - case 5: - gas_assert (!is_evex_encoding (&i.tm)); - gas_assert (i.imm_operands == 1 && vex_3_sources); - break; - default: - abort (); - } - - if (!vex_3_sources) - { - dest = source + 1; - - if (i.tm.opcode_modifier.vexvvvv == VEXXDS) - { - /* For instructions with VexNDS, the register-only source - operand must be a 32/64bit integer, XMM, YMM, ZMM, or mask - register. It is encoded in VEX prefix. */ - i386_operand_type op; - unsigned int vvvv; - - /* Swap two source operands if needed. */ - if (i.tm.opcode_modifier.operandconstraint == SWAP_SOURCES) - { - vvvv = source; - source = dest; - } - else - vvvv = dest; + for (v = source + 1; v < dest; ++v) + if (v != reg_slot) + break; + if (v >= dest) + v = ~0; + if (i.tm.extension_opcode != None) + { + if (dest != source) + v = dest; + dest = ~0; + } + gas_assert (source < dest); + if (i.tm.opcode_modifier.operandconstraint == SWAP_SOURCES + && source != op) + { + unsigned int tmp = source; - op = i.tm.operand_types[vvvv]; - if ((dest + 1) >= i.operands - || ((op.bitfield.class != Reg - || (!op.bitfield.dword && !op.bitfield.qword)) - && op.bitfield.class != RegSIMD - && op.bitfield.class != RegMask)) - abort (); - i.vex.register_specifier = i.op[vvvv].regs; - dest++; - } - } + source = v; + v = tmp; + } - i.rm.mode = 3; - /* One of the register operands will be encoded in the i.rm.reg - field, the other in the combined i.rm.mode and i.rm.regmem - fields. If no form of this instruction supports a memory - destination operand, then we assume the source operand may - sometimes be a memory operand and so we need to store the - destination in the i.rm.reg field. */ - if (!i.tm.opcode_modifier.regmem - && operand_type_check (i.tm.operand_types[dest], anymem) == 0) - { - i.rm.reg = i.op[dest].regs->reg_num; - i.rm.regmem = i.op[source].regs->reg_num; - set_rex_vrex (i.op[dest].regs, REX_R, i.tm.opcode_modifier.sse2avx); - set_rex_vrex (i.op[source].regs, REX_B, false); - } - else - { - i.rm.reg = i.op[source].regs->reg_num; - i.rm.regmem = i.op[dest].regs->reg_num; - set_rex_vrex (i.op[dest].regs, REX_B, i.tm.opcode_modifier.sse2avx); - set_rex_vrex (i.op[source].regs, REX_R, false); - } - if (flag_code != CODE_64BIT && (i.rex & REX_R)) - { - if (i.types[!i.tm.opcode_modifier.regmem].bitfield.class != RegCR) - abort (); - i.rex &= ~REX_R; - add_prefix (LOCK_PREFIX_OPCODE); - } + if (v < MAX_OPERANDS) + { + gas_assert (i.tm.opcode_modifier.vexvvvv); + i.vex.register_specifier = i.op[v].regs; } - else - { /* If it's not 2 reg operands... */ - unsigned int mem; + if (op < i.operands) + { if (i.mem_operands) { unsigned int fake_zero_displacement = 0; - unsigned int op; - for (op = 0; op < i.operands; op++) - if (i.flags[op] & Operand_Mem) - break; - gas_assert (op < i.operands); + gas_assert (i.flags[op] & Operand_Mem); if (i.tm.opcode_modifier.sib) { @@ -8732,140 +8635,62 @@ build_modrm_byte (void) exp->X_add_symbol = (symbolS *) 0; exp->X_op_symbol = (symbolS *) 0; } + } + else + { + i.rm.mode = 3; + i.rm.regmem = i.op[op].regs->reg_num; + set_rex_vrex (i.op[op].regs, REX_B, false); + } - mem = op; + if (op == dest) + dest = ~0; + if (op == source) + source = ~0; + } + else + { + i.rm.mode = 3; + if (!i.tm.opcode_modifier.regmem) + { + gas_assert (source < MAX_OPERANDS); + i.rm.regmem = i.op[source].regs->reg_num; + set_rex_vrex (i.op[source].regs, REX_B, + dest >= MAX_OPERANDS && i.tm.opcode_modifier.sse2avx); + source = ~0; } else - mem = ~0; - - if (i.tm.opcode_modifier.vexvvvv == VEXLWP) { - i.vex.register_specifier = i.op[2].regs; - if (!i.mem_operands) - { - i.rm.mode = 3; - i.rm.regmem = i.op[1].regs->reg_num; - if ((i.op[1].regs->reg_flags & RegRex) != 0) - i.rex |= REX_B; - } + gas_assert (dest < MAX_OPERANDS); + i.rm.regmem = i.op[dest].regs->reg_num; + set_rex_vrex (i.op[dest].regs, REX_B, i.tm.opcode_modifier.sse2avx); + dest = ~0; } - /* Fill in i.rm.reg or i.rm.regmem field with register operand - (if any) based on i.tm.extension_opcode. Again, we must be - careful to make sure that segment/control/debug/test/MMX - registers are coded into the i.rm.reg field. */ - else if (i.reg_operands) - { - unsigned int op; - unsigned int vex_reg = ~0; - - for (op = 0; op < i.operands; op++) - if (i.types[op].bitfield.class == Reg - || i.types[op].bitfield.class == RegBND - || i.types[op].bitfield.class == RegMask - || i.types[op].bitfield.class == SReg - || i.types[op].bitfield.class == RegCR - || i.types[op].bitfield.class == RegDR - || i.types[op].bitfield.class == RegTR - || i.types[op].bitfield.class == RegSIMD - || i.types[op].bitfield.class == RegMMX) - break; - - if (vex_3_sources) - op = dest; - else if (i.tm.opcode_modifier.vexvvvv == VEXXDS) - { - /* For instructions with VexNDS, the register-only - source operand is encoded in VEX prefix. */ - gas_assert (mem != (unsigned int) ~0); - - if (op > mem || i.tm.cpu_flags.bitfield.cpucmpccxadd) - { - vex_reg = op++; - gas_assert (op < i.operands); - } - else - { - /* Check register-only source operand when two source - operands are swapped. */ - if (!i.tm.operand_types[op].bitfield.baseindex - && i.tm.operand_types[op + 1].bitfield.baseindex) - { - vex_reg = op; - op += 2; - gas_assert (mem == (vex_reg + 1) - && op < i.operands); - } - else - { - vex_reg = op + 1; - gas_assert (vex_reg < i.operands); - } - } - } - else if (i.tm.opcode_modifier.vexvvvv == VEXNDD) - { - /* For instructions with VexNDD, the register destination - is encoded in VEX prefix. */ - if (i.mem_operands == 0) - { - /* There is no memory operand. */ - gas_assert ((op + 2) == i.operands); - vex_reg = op + 1; - } - else - { - /* There are only 2 non-immediate operands. */ - gas_assert (op < i.imm_operands + 2 - && i.operands == i.imm_operands + 2); - vex_reg = i.imm_operands + 1; - } - } - else - gas_assert (op < i.operands); - - if (vex_reg != (unsigned int) ~0) - { - i386_operand_type *type = &i.tm.operand_types[vex_reg]; - - if ((type->bitfield.class != Reg - || (!type->bitfield.dword && !type->bitfield.qword)) - && type->bitfield.class != RegSIMD - && type->bitfield.class != RegMask) - abort (); - - i.vex.register_specifier = i.op[vex_reg].regs; - } - - /* Don't set OP operand twice. */ - if (vex_reg != op) - { - /* If there is an extension opcode to put here, the - register number must be put into the regmem field. */ - if (i.tm.extension_opcode != None) - { - i.rm.regmem = i.op[op].regs->reg_num; - set_rex_vrex (i.op[op].regs, REX_B, - i.tm.opcode_modifier.sse2avx); - } - else - { - i.rm.reg = i.op[op].regs->reg_num; - set_rex_vrex (i.op[op].regs, REX_R, - i.tm.opcode_modifier.sse2avx); - } - } + } - /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we - must set it to 3 to indicate this is a register operand - in the regmem field. */ - if (!i.mem_operands) - i.rm.mode = 3; - } + /* Fill in i.rm.reg field with extension opcode (if any) or the + appropriate register. */ + if (i.tm.extension_opcode != None) + i.rm.reg = i.tm.extension_opcode; + else if (!i.tm.opcode_modifier.regmem && dest < MAX_OPERANDS) + { + i.rm.reg = i.op[dest].regs->reg_num; + set_rex_vrex (i.op[dest].regs, REX_R, i.tm.opcode_modifier.sse2avx); + } + else + { + gas_assert (source < MAX_OPERANDS); + i.rm.reg = i.op[source].regs->reg_num; + set_rex_vrex (i.op[source].regs, REX_R, false); + } - /* Fill in i.rm.reg field with extension opcode (if any). */ - if (i.tm.extension_opcode != None) - i.rm.reg = i.tm.extension_opcode; + if (flag_code != CODE_64BIT && (i.rex & REX_R)) + { + gas_assert (i.types[!i.tm.opcode_modifier.regmem].bitfield.class == RegCR); + i.rex &= ~REX_R; + add_prefix (LOCK_PREFIX_OPCODE); } + return default_seg; } --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -1749,18 +1749,18 @@ vpsravd, 0x6646, AVX2, Modrm|Vex|Space0F vpsrlv, 0x6645, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } // AVX gather instructions -vgatherdpd, 0x6692, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW1|CheckOperandSize|NoSuf|VecSIB128, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex, RegXMM|RegYMM } -vgatherdps, 0x6692, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vgatherdps, 0x6692, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } -vgatherqp, 0x6693, AVX2, Modrm|Vex|Space0F38|VexVVVV||NoSuf|VecSIB128, { RegXMM, |Unspecified|BaseIndex, RegXMM } -vgatherqpd, 0x6693, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW1|NoSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } -vgatherqps, 0x6693, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 0x6690, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 0x6690, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } -vpgatherdq, 0x6690, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW1|CheckOperandSize|NoSuf|VecSIB128, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex, RegXMM|RegYMM } -vpgatherq, 0x6691, AVX2, Modrm|Vex|Space0F38|VexVVVV||NoSuf|VecSIB128, { RegXMM, |Unspecified|BaseIndex, RegXMM } -vpgatherqd, 0x6691, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW0|NoSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherqq, 0x6691, AVX2, Modrm|Vex=2|Space0F38|VexVVVV|VexW1|NoSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vgatherdpd, 0x6692, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW1|SwapSources|CheckOperandSize|NoSuf|VecSIB128, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex, RegXMM|RegYMM } +vgatherdps, 0x6692, AVX2, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vgatherdps, 0x6692, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } +vgatherqp, 0x6693, AVX2, Modrm|Vex|Space0F38|VexVVVV||SwapSources|NoSuf|VecSIB128, { RegXMM, |Unspecified|BaseIndex, RegXMM } +vgatherqpd, 0x6693, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW1|SwapSources|NoSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vgatherqps, 0x6693, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 0x6690, AVX2, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 0x6690, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } +vpgatherdq, 0x6690, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW1|SwapSources|CheckOperandSize|NoSuf|VecSIB128, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex, RegXMM|RegYMM } +vpgatherq, 0x6691, AVX2, Modrm|Vex128|Space0F38|VexVVVV||SwapSources|NoSuf|VecSIB128, { RegXMM, |Unspecified|BaseIndex, RegXMM } +vpgatherqd, 0x6691, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherqq, 0x6691, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW1|SwapSources|NoSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } // AES + AVX @@ -3321,7 +3321,7 @@ prefetchit1, 0xf18/6, PREFETCHI|x64, Mod // CMPCCXADD instructions. -cmpxadd, 0x66e, CMPCCXADD|x64, Modrm|Vex|Space0F38|VexVVVV|CheckOperandSize|NoSuf, { Reg32|Reg64, Reg32|Reg64, Dword|Qword|Unspecified|BaseIndex } +cmpxadd, 0x66e, CMPCCXADD|x64, Modrm|Vex|Space0F38|VexVVVV|SwapSources|CheckOperandSize|NoSuf, { Reg32|Reg64, Reg32|Reg64, Dword|Qword|Unspecified|BaseIndex } // CMPCCXADD instructions end. From patchwork Fri Mar 10 10:21:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67325 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp789271wrd; Fri, 10 Mar 2023 02:23:13 -0800 (PST) X-Google-Smtp-Source: AK7set/Ninlise32Yz7ysocQQpSfqTgBYr3v7MQKX4AB3r2bqUGUq6cA1c8WtMtNRowMZtUZXtSh X-Received: by 2002:a17:907:6091:b0:8b1:7de0:c854 with SMTP id ht17-20020a170907609100b008b17de0c854mr32456404ejc.41.1678443793308; Fri, 10 Mar 2023 02:23:13 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id l7-20020a056402344700b004abd2054781si2079594edc.92.2023.03.10.02.23.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:23:13 -0800 (PST) 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=HbiCcOhb; 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 968E2385023F for ; Fri, 10 Mar 2023 10:22:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 968E2385023F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443762; bh=bNnqek9bw7m4ktZfitOwdWY3SZ93Ih/fMsh9FVzkYlY=; 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=HbiCcOhbv7e4Je65E0cHj9Hjh7gWPUed180BZ+nxZJQuNZWltUug4V8faKlGe755A vS7teJ2AiClOPqjTud5NLwXJyZwfpLKDNLkNj921Cpiy14/VazqcuP9h/6bLlP4MtU ijpG3W+J8l+xVsYlRayY+x6B7U393JxATLCmgU+w= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2072.outbound.protection.outlook.com [40.107.104.72]) by sourceware.org (Postfix) with ESMTPS id 7F2D33850206 for ; Fri, 10 Mar 2023 10:21:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7F2D33850206 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NxU5QQ5mbpdVM8EAqZM4tDtaSKYWoZiKHwGGozCue3cIEGo8zgjWeDzHDZPZB7g4GjDbe+u0/plmcIkiieERzX902XIAwgrn281efEU0+5zG9GJcmFSMj56YMGlrYBaepW/Q+GYE/JKcwRizh+27P8NZnnCkX0AFvh1IQ0lF6lyDKYhIcbIA0LQzO+0bUFCpiIVc5Ozo5K5b8K3P3cuccvrqeTfG3KOawVYkapaOZM9h118fZjUuiRcFleU+eNy3SWzlsriJ/sBJSi+nUGHjFdwDI4+h9mgFmzR2Bofe4/N28SFaBoVacJQTyGsLcnLsVaYBRNW3Bmdmasr694n0Vg== 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=bNnqek9bw7m4ktZfitOwdWY3SZ93Ih/fMsh9FVzkYlY=; b=EGiH1SZZCRqrAeqPltnztZTQMgoLILb7TM5u2k5gm+pOYYhKTcrX8ATw5DOa1EAMmwxH0lDVRnv5+WzYsb4LBjRCKErfQGknVpwSKEQTtBldQ3Nz3rEaevWHboh1wjXVEo69J9YE3IJEtUtrbwcev2CNmqswjIYCSkmNlknyu7pnQBIH9HS7dc6kuJmCZ+mRGDTxYNfsXwx3+GxM7YAfTWhp5JFiJw76DqRdzhX6Ka8Yal9MP3ovHU0ANgeesFvzu9fCnnXs73DBzYiHhgrf+K72yVnE8m8Rh2iJqq8ugk239Yp7A+sW3g5+VmXLEFjv6wzRo51bd6KAIAmvKG7Q/Q== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8339.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:21:51 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:21:50 +0000 Message-ID: <08829d31-820b-7dea-5609-de609bf69aa9@suse.com> Date: Fri, 10 Mar 2023 11:21:48 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 05/14] x86: VexVVVV is now merely a boolean Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0143.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:95::6) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8339:EE_ X-MS-Office365-Filtering-Correlation-Id: ff42e8a9-6ad3-4ca7-d47c-08db2151431f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Sf9HVKTivT1cEsDVc3ei0B889oq2vGTJeREPOqFXGr+L0jjWfpUGmDs5hyiJUwy2PFE4nG5Atm0k4gNTkA5tV4IIoWWNdzqQdV1N3TqxVcIsWv8gihj2UeabbjCvTxt1McbvhKZJd4AQV3EoznkhnyygxsBRwkN+4DioeonMuH0mSJ3CEg5l3cPGeAusF82Acu6cLGmRZZzeABXLWU8I7+hEaKydJtx8s3VstBNitOjBXL5mwQGe74KQSIJH+g3nzp4l2A7EeUNNdwDtUhTue2i7bkrydNmATgkYxiqY7bhppAYGgvX9YEtOOqvMIx/m4GgVMzOkL/l59vOFScxCSt4ineGTMLfaQObtOWO4eQU5a4+8+fMOD/1X99afDpvxAy/i4lkM90qXxFPihAgIjGFQLtqX4K9WvulJ1dAkFBj42dqDVJZRumuWdmjbGI0/jGuyrY+9sCsrxCm0PvDBvQueEsb+fAeNbcoAttm+NbNL29kXM0TWOcM9BlhG0FWVs4pEnhcz0ch9DllUWBqwX/hW5EWPMs5Og++mXoDFXC/cn33B4aIU877GIUw0emUd20XqUIUNI7t1dY+s4XC7fjgmcJQ0nSXB1DHG50Br/PVBNVf8/nYBILUGy6a7TKI/HKkbdENMzpUFVamh+BBb7kZPhXo5u1eVKlS0dfp1ASgssQxBx9owvqkZ4MEqP+hAGK6D0zcgQZn1oLhKaDfVpEmap+3FEcHPVhFGYCUi/0mAIWZqrXW084Q0bPf45lu3S3cJvS4kslsfqflVLDMFGQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(39860400002)(396003)(136003)(346002)(366004)(376002)(451199018)(38100700002)(36756003)(54906003)(6916009)(478600001)(6486002)(316002)(5660300002)(66556008)(8936002)(2906002)(30864003)(66476007)(8676002)(41300700001)(66946007)(4326008)(26005)(83380400001)(31696002)(86362001)(6506007)(186003)(2616005)(6512007)(31686004)(43740500002)(45980500001)(559001)(579004)(473944003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?eOMgl/pJamDdDtU0goHVz6qaq9xt?= =?utf-8?q?DOchPLOKJCuJBhYIXUwYIhdQBuEw7G3K7vNXJovRCG0EESE6wqOA5xrrOJeClic2Z?= =?utf-8?q?5Ee29ngOyu4w056LUjY31QNkCpAXBPaknVTes+gKxwitH74pShdfmgc4I0B2ut7BH?= =?utf-8?q?Nn7JqWdklF501DxVzj0Hq7lrWTjHMxXBfDO8lvDvTjxdkhyi/mndypiW7kTdVn3jw?= =?utf-8?q?7RTQpcpnX88ThYYjwHQigwGfoMykHZWLhgealEmWSOowE6U75aKUjBAChAriQTltU?= =?utf-8?q?KiB2CeiOLydhdQumGEh+SQKLrBt+EfJypF5tScNCKufhIXLTQBUm5IMnlzR9+V60K?= =?utf-8?q?9REbaMLeRfIu+IgEj/LY4efoULfobEeSemhtfKsg1slD3QKOXPkZwrGOsi7kwk568?= =?utf-8?q?YjCP78aHNbjCuxuKWvnjtXHvOpPxyEgXpujXguPlFiKKDSYmta302q3K9dxoutsr+?= =?utf-8?q?qm4O2i+M8ZiT5sKI0Bdlzno0dyuPq95fNMnTQP5I8TF6Jge18xpxM6Ufl8MzH+SqC?= =?utf-8?q?qYlfVTHaawAockRnTll7iguV46LdeYq/4eaSJfMRDUTTZOdmDnbrpJQTfBUq/57aV?= =?utf-8?q?KyHtbc+FEqg7/0sgJKmguUE+0POklLirqC9C8eE+ng+ZYQTS9F+dlmrIyh4/K4d9K?= =?utf-8?q?CO3MY7slmkfWrGzDJ4whhiWnGN5L/FjNWHYgMU1NSWJzV7wWjKfNfCDEHXquwwM1o?= =?utf-8?q?nPJn0obeZSXQhBFBYl7YnVga3PVD2Rbv2xmfyt0fmuu0jLthRiDK9Ccpv8R2j3pkM?= =?utf-8?q?1Jd0G4XD/UiBg/KYW2WRjVnVLrGYKMYfXBPkiAt2oE08jGILTc7EnCGZx0Dei+qIF?= =?utf-8?q?vsN2gWpzZDUb0NTsKwrJna56SXgGkBQ3qHgywIXgtCqwjXJP5re/lZr4+8ulioDOm?= =?utf-8?q?KZwLdfrjFqMkSA9mcoysmBkuNW81i+5w+E4Ro9/oiq0Y2KKmmEoSCUn8v4PQTx9YV?= =?utf-8?q?Rm7N1tmHP/zPun0IE5JwfQtIAFur/DdtnY8uKUQaOqjN6m/y0W93si0hoA1IrZE2W?= =?utf-8?q?3zG5y+meApuDNVi+lyAG6Y38m4UynUBUrowb7RzXUQiiGrTMg/qcUSHXwGDqg4myp?= =?utf-8?q?pBqU/eWTAedVxi1pRAUQN01ZhVj14VA1hVcg58sCbEjuDmyHKdskJgm9PPJY9f+28?= =?utf-8?q?8h7weBZzktCQxFv2rRczI2o2WupOgE2Z5pSoexpIM47wa6CceFTX8tpmWhKUdbYkN?= =?utf-8?q?ZaIN9giUYtnO1/uaYfhuVxO+QagXT2DOcLz9Mlu2rF58WuYUpehjy4rjfJM/DEJlb?= =?utf-8?q?I0tl21sH94qrFtyITbPmDIQV7/Mji9X6jabxaFZ89TsyCmgTM0fPK4MN8OLDwgA+B?= =?utf-8?q?T4raftjrDQuONXZz29P4PJs9Bj2yc+UYZWeNC2eUq4f/EhGmeiHsl3kB9HmrvLN4r?= =?utf-8?q?yCCtQrtFedx7DlfNYkr7b3REq+qOQz/JyVwjqbvQfBTNFNlod8CYimEYPjSd+lLSG?= =?utf-8?q?0I/5NZDembEkBKufHx+zLWQIxoFA0HZMgOJue3uMvBry1rhzpjUqhjVO+froR7CjK?= =?utf-8?q?hmgV89fzOP7s?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff42e8a9-6ad3-4ca7-d47c-08db2151431f X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:21:50.8409 (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: J1vlRWwCZhuT8uSKx6fJm4ld9AZMbSullOj6zO4grKVYGPS14eD79/CkrKCDWVuhQEahV00BEEJy75eIHYgUHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8339 X-Spam-Status: No, score=-3028.2 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_NONE, 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 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?1759975878615586016?= X-GMAIL-MSGID: =?utf-8?q?1759975878615586016?= With the SDM long having dropped the NDS/NDD/DDS concept of identifying encoding variants, we can finally do away with this concept as well. Of the few consumers of the attribute, only an assertion was still checking for a particular value, which we don't really need to retain. When touching lines anyway, modernize other aspects as well. This often improves similarity to adjacent lines. --- Actually, apparently except for SSE2AVX, the attribute should not be necessary anymore at all. Like done for .insn, whether an operand needs encoding in VEX.VVVV can be derived from the number of operands (when counting extension_opcode != None as one operand). --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -8331,7 +8331,7 @@ build_modrm_byte (void) ZMM register. 2. 4 operands: 4 register operands or 3 register operands plus 1 memory operand, with VexXDS. */ - gas_assert (i.tm.opcode_modifier.vexvvvv == VEXXDS + gas_assert (i.tm.opcode_modifier.vexvvvv && i.tm.opcode_modifier.vexw && i.tm.operand_types[dest].bitfield.class == RegSIMD); --- a/opcodes/i386-opc.h +++ b/opcodes/i386-opc.h @@ -583,23 +583,8 @@ enum Vex, /* How to encode VEX.vvvv: 0: VEX.vvvv must be 1111b. - 1: VEX.NDS. Register-only source is encoded in VEX.vvvv where - the content of source registers will be preserved. - VEX.DDS. The second register operand is encoded in VEX.vvvv - where the content of first source register will be overwritten - by the result. - VEX.NDD2. The second destination register operand is encoded in - VEX.vvvv for instructions with 2 destination register operands. - For assembler, there are no difference between VEX.NDS, VEX.DDS - and VEX.NDD2. - 2. VEX.NDD. Register destination is encoded in VEX.vvvv for - instructions with 1 destination register operand. - 3. VEX.LWP. Register destination is encoded in VEX.vvvv and one - of the operands can access a memory location. - */ -#define VEXXDS 1 -#define VEXNDD 2 -#define VEXLWP 3 + 1: VEX.vvvv encodes one of the register operands. + */ VexVVVV, /* How the VEX.W bit is used: 0: Set by the REX.W bit. @@ -735,7 +720,7 @@ typedef struct i386_opcode_modifier unsigned int immext:1; unsigned int norex64:1; unsigned int vex:2; - unsigned int vexvvvv:2; + unsigned int vexvvvv:1; unsigned int vexw:2; unsigned int opcodeprefix:2; unsigned int sib:3; --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -975,12 +975,12 @@ pause, 0xf390, i186, NoSuf, {} // MMX/SSE2 instructions. , 0x0f2f, , Modrm|, 0xf30f2a, |No64, Modrm|||IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf, { Reg32|Unspecified|BaseIndex, RegXMM } -cvtsi2ss, 0xf32a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } -cvtsi2ss, 0xf32a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2ss, 0xf32a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2ss, 0xf32a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2ss, 0xf30f2a, SSE|x64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2ss, 0xf30f2a, SSE|x64, Modrm|No_bSuf|No_wSuf|No_sSuf|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtss2si, 0xf32d, AVX, Modrm|VexLIG|Space0F|No_bSuf|No_wSuf|No_sSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } @@ -1110,7 +1110,7 @@ movntps, 0x0f2b, , Modrm|< movntq, 0xfe7, SSE|3dnowA, Modrm|NoSuf, { RegMMX, Qword|Unspecified|BaseIndex } movntdq, 0x660fe7, , Modrm||NoSuf, { RegXMM, Xmmword|Unspecified|BaseIndex } movss, 0xf310, AVX, D|Modrm|VexLIG|Space0F|VexW0|NoSuf|SSE2AVX, { Dword|Unspecified|BaseIndex, RegXMM } -movss, 0xf310, AVX, D|Modrm|Vex=3|Space0F|VexVVVV=1|VexW=1|NoSuf|SSE2AVX, { RegXMM, RegXMM } +movss, 0xf310, AVX, D|Modrm|VexLIG|Space0F|VexVVVV|VexW0|NoSuf|SSE2AVX, { RegXMM, RegXMM } movss, 0xf30f10, SSE, D|Modrm|NoSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } movups, 0x0f10, , D|Modrm||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } mulps, 0x0f59, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1174,8 +1174,8 @@ cvtpi2pd, 0x660f2a, SSE2, Modrm|NoSuf, { cvtpi2pd, 0xf3e6, AVX, Modrm|Vex|Space0F|VexW0|NoSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM } cvtpi2pd, 0x660f2a, SSE2, Modrm|NoSuf, { Qword|Unspecified|BaseIndex, RegXMM } cvtsi2sd, 0xf20f2a, |No64, Modrm|IgnoreSize|||No_bSuf|No_wSuf|No_sSuf|No_qSuf, { Reg32|Unspecified|BaseIndex, RegXMM } -cvtsi2sd, 0xf22a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } -cvtsi2sd, 0xf22a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 0xf22a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 0xf22a, AVX|x64, Modrm|Vex=3|Space0F|VexVVVV|No_bSuf|No_wSuf|No_sSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2sd, 0xf20f2a, SSE2|x64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2sd, 0xf20f2a, SSE2|x64, Modrm|No_bSuf|No_wSuf|No_sSuf|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } divpd, 0x660f5e, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1194,7 +1194,7 @@ movlpd, 0x660f12, SSE2, D|Modrm|NoSuf, { movmskpd, 0x660f50, , Modrm||IgnoreSize|No_bSuf|No_wSuf|No_sSuf|NoRex64, { RegXMM, Reg32|Reg64 } movntpd, 0x660f2b, , Modrm||NoSuf, { RegXMM, Xmmword|Unspecified|BaseIndex } movsd, 0xf210, AVX, D|Modrm|VexLIG|Space0F|VexW0|NoSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM } -movsd, 0xf210, AVX, D|Modrm|Vex=3|Space0F|VexVVVV=1|VexW=1|NoSuf|SSE2AVX, { RegXMM, RegXMM } +movsd, 0xf210, AVX, D|Modrm|VexLIG|Space0F|VexVVVV|VexW0|NoSuf|SSE2AVX, { RegXMM, RegXMM } movsd, 0xf20f10, SSE2, D|Modrm|NoSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } movupd, 0x660f10, , D|Modrm||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } mulpd, 0x660f59, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1373,7 +1373,7 @@ phminposuw, 0x660f3841, , 0x660f3a20, , Modrm|||NoSuf|IgnoreSize|NoRex64, { Imm8, Reg32|Reg64, RegXMM } pinsrb, 0x660f3a20, , Modrm|||NoSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM } pinsrd, 0x660f3a22, , Modrm|||NoSuf|IgnoreSize, { Imm8, Reg32|Unspecified|BaseIndex, RegXMM } -pinsrq, 0x6622, AVX|x64, Modrm|Vex|Space0F3A|VexVVVV=1|VexW1|NoSuf|SSE2AVX, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM } +pinsrq, 0x6622, AVX|x64, Modrm|Vex|Space0F3A|VexVVVV|VexW1|NoSuf|SSE2AVX, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM } pinsrq, 0x660f3a22, SSE4_1|x64, Modrm|Size64|NoSuf, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM } pmaxsb, 0x660f383c, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaxsd, 0x660f383d, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1443,10 +1443,10 @@ aeskeygenassist, 0x660f3adf, , 0x660f38cf, G vaddp, 0x58, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vadds, 0x58, AVX, Modrm|VexLIG|Space0F|VexVVVV|VexWIG|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vaddsubpd, 0x66d0, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vaddsubps, 0xf2d0, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vaddsubpd, 0x66d0, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vaddsubps, 0xf2d0, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vandnp, 0x55, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vandp, 0x54, AVX, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vblendp, 0x660c | , AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1519,16 +1519,16 @@ vcvttps2dq, 0xf35b, AVX, Modrm|Vex|Space vcvtts2si, 0x2c, AVX, Modrm|VexLIG|Space0F|No_bSuf|No_wSuf|No_sSuf, { |Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } vdivp, 0x5e, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vdivs, 0x5e, AVX, Modrm|VexLIG|Space0F|VexVVVV|VexWIG|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vdppd, 0x6641, AVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vdpps, 0x6640, AVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vdppd, 0x6641, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vdpps, 0x6640, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vextractf128, 0x6619, AVX, Modrm|Vex=2|Space0F3A|VexW=1|NoSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } vextractps, 0x6617, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } vextractps, 0x6617, AVX|x64, RegMem|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg64 } -vhaddpd, 0x667c, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vhaddps, 0xf27c, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vhsubpd, 0x667d, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vhsubps, 0xf27d, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vinsertf128, 0x6618, AVX, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexW=1|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } +vhaddpd, 0x667c, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vhaddps, 0xf27c, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vhsubpd, 0x667d, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vhsubps, 0xf27d, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vinsertf128, 0x6618, AVX, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } vinsertps, 0x6621, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vlddqu, 0xf2f0, AVX, Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM } vldmxcsr, 0xae/2, AVX, Modrm|Vex128|Space0F|VexWIG|NoSuf, { Dword|Unspecified|BaseIndex } @@ -1551,10 +1551,10 @@ vmovddup, 0xf212, AVX, Modrm|Vex|Space0F vmovddup, 0xf212, AVX, Modrm|Vex=2|Space0F|VexWIG|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM } vmovdqa, 0x666f, AVX, D|Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vmovdqu, 0xf36f, AVX, D|Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vmovhlps, 0x12, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|NoSuf, { RegXMM, RegXMM, RegXMM } +vmovhlps, 0x12, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|NoSuf, { RegXMM, RegXMM, RegXMM } vmovhp, 0x16, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmovhp, 0x17, AVX, Modrm|Vex|Space0F|VexWIG|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex } -vmovlhps, 0x16, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|NoSuf, { RegXMM, RegXMM, RegXMM } +vmovlhps, 0x16, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|NoSuf, { RegXMM, RegXMM, RegXMM } vmovlp, 0x12, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|NoSuf, { Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmovlp, 0x13, AVX, Modrm|Vex|Space0F|VexWIG|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex } vmovmskp, 0x50, AVX, Modrm|Vex|Space0F|VexWIG|No_bSuf|No_wSuf|No_sSuf, { RegXMM|RegYMM, Reg32|Reg64 } @@ -1602,7 +1602,7 @@ vpcmpgtd, 0x6666, AVX|AVX2, Modrm|Vex|Sp vpcmpgtq, 0x6637, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmpistri, 0x6663, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpistrm, 0x6662, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } -vperm2f128, 0x6606, AVX, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexW=1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vperm2f128, 0x6606, AVX, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermilp, 0x660c | , AVX, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpermilp, 0x6604 | , AVX, Modrm|Vex|Space0F3A|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vpextr, 0x6616, AVX|, Modrm|Vex|Space0F3A||NoSuf, { Imm8, RegXMM, |Unspecified|BaseIndex } @@ -1616,10 +1616,10 @@ vphminposuw, 0x6641, AVX, Modrm|Vex|Spac vphsubd, 0x6606, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vphsubsw, 0x6607, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vphsubw, 0x6605, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpinsrb, 0x6620, AVX, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrb, 0x6620, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } vpinsrb, 0x6620, AVX, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } vpinsr, 0x6622, AVX|, Modrm|Vex|Space0F3A|VexVVVV||NoSuf, { Imm8, |Unspecified|BaseIndex, RegXMM, RegXMM } -vpinsrw, 0x66c4, AVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_sSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrw, 0x66c4, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_sSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } vpinsrw, 0x66c4, AVX, Modrm|Vex|Space0F|VexVVVV|VexWIG|NoSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } vpmaddubsw, 0x6604, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpmaddwd, 0x66f5, AVX|AVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1663,19 +1663,19 @@ vpshufhw, 0xf370, AVX|AVX2, Modrm|Vex|Sp vpshuflw, 0xf270, AVX|AVX2, Modrm|Vex|Space0F|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vpsign, 0x6608 | , AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpsignd, 0x660a, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsll, 0x6672 | /6, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsll, 0x6672 | /6, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsll, 0x66f2 | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpslldq, 0x6673/7, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } -vpsllw, 0x6671/6, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpslldq, 0x6673/7, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsllw, 0x6671/6, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsllw, 0x66f1, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsrad, 0x6672/4, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsrad, 0x6672/4, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsrad, 0x66e2, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsraw, 0x6671/4, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsraw, 0x6671/4, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsraw, 0x66e1, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsrl, 0x6672 | /2, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsrl, 0x6672 | /2, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsrl, 0x66d2 | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsrldq, 0x6673/3, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } -vpsrlw, 0x6671/2, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV=2|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsrldq, 0x6673/3, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } +vpsrlw, 0x6671/2, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM, RegXMM|RegYMM } vpsrlw, 0x66d1, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM, RegXMM|RegYMM } vpsub, 0x66f8 | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpsub, 0x66fa | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1736,16 +1736,16 @@ vpblendd, 0x6602, AVX2, Modrm|Vex|Space0 vpbroadcast, 0x6678 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } vpbroadcast, 0x6658 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } vperm2i128, 0x6646, AVX2, Modrm|Vex=2|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpermd, 0x6636, AVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexW=1|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpermd, 0x6636, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermpd, 0x6601, AVX2, Modrm|Vex=2|Space0F3A|VexW1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM } -vpermps, 0x6616, AVX2, Modrm|Vex=2|Space0F38|VexVVVV=1|VexW=1|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpermps, 0x6616, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermq, 0x6600, AVX2, Modrm|Vex=2|Space0F3A|VexW1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM } vextracti128, 0x6639, AVX2, Modrm|Vex=2|Space0F3A|VexW=1|NoSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } -vinserti128, 0x6638, AVX2, Modrm|Vex=2|Space0F3A|VexVVVV=1|VexW=1|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } +vinserti128, 0x6638, AVX2, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } vpmaskmov, 0x668e, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { RegXMM|RegYMM, RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } vpmaskmov, 0x668c, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } vpsllv, 0x6647, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpsravd, 0x6646, AVX2, Modrm|Vex|Space0F38|VexVVVV=1|VexW=1|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpsravd, 0x6646, AVX2, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpsrlv, 0x6645, AVX2, Modrm|Vex|Space0F38|VexVVVV||CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } // AVX gather instructions @@ -1764,26 +1764,26 @@ vpgatherqq, 0x6691, AVX2, Modrm|Vex256|S // AES + AVX -vaesdec, 0x66de, AVX|AES, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vaesdeclast, 0x66df, AVX|AES, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vaesenc, 0x66dc, AVX|AES, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vaesenclast, 0x66dd, AVX|AES, Modrm|Vex|Space0F38|VexVVVV=1|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaesdec, 0x66de, AVX|AES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaesdeclast, 0x66df, AVX|AES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaesenc, 0x66dc, AVX|AES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaesenclast, 0x66dd, AVX|AES, Modrm|Vex|Space0F38|VexVVVV|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vaesimc, 0x66db, AVX|AES, Modrm|Vex|Space0F38|VexWIG|NoSuf, { Unspecified|BaseIndex|RegXMM, RegXMM } vaeskeygenassist, 0x66df, AVX|AES, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } // PCLMUL + AVX vpclmulqdq, 0x6644, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpclmullqlqdq, 0x6644/0x00, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpclmulhqlqdq, 0x6644/0x01, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpclmullqhqdq, 0x6644/0x10, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpclmulhqhqdq, 0x6644/0x11, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV=1|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vpclmullqlqdq, 0x6644/0x00, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vpclmulhqlqdq, 0x6644/0x01, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vpclmullqhqdq, 0x6644/0x10, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vpclmulhqhqdq, 0x6644/0x11, AVX|PCLMUL, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|NoSuf|ImmExt, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } // GFNI + AVX -vgf2p8affineinvqb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV=1|VexW=2|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vgf2p8affineqb, 0x66ce, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV=1|VexW=2|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vgf2p8mulb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F38|VexVVVV=1|VexW=1|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vgf2p8affineinvqb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV|VexW1|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vgf2p8affineqb, 0x66ce, AVX|GFNI, Modrm|Vex|Space0F3A|VexVVVV|VexW1|CheckOperandSize|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vgf2p8mulb, 0x66cf, AVX|GFNI, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } // FSGSBASE, RDRND and F16C @@ -1824,14 +1824,15 @@ xend, 0xf01d5, RTM, NoSuf, {} xtest, 0xf01d6, HLE|RTM, NoSuf, {} // BMI2 instructions. -bzhi, 0xf5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -mulx, 0xf2f6, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } -pdep, 0xf2f5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } -pext, 0xf3f5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } + +bzhi, 0xf5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +mulx, 0xf2f6, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } +pdep, 0xf2f5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } +pext, 0xf3f5, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } rorx, 0xf2f0, BMI2, Modrm|CheckOperandSize|Vex128|Space0F3A|No_bSuf|No_wSuf|No_sSuf, { Imm8|Imm8S, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -sarx, 0xf3f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -shlx, 0x66f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -shrx, 0xf2f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +sarx, 0xf3f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +shlx, 0x66f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +shrx, 0xf2f7, BMI2, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } // FMA4 instructions @@ -1896,29 +1897,30 @@ vpshl, 0x94 | , XOP, D|Mod llwpcb, 0x12/0, LWP, Modrm|SpaceXOP09|NoSuf|Vex, { Reg32|Reg64 } slwpcb, 0x12/1, LWP, Modrm|SpaceXOP09|NoSuf|Vex, { Reg32|Reg64 } -lwpval, 0x12/1, LWP, Modrm|SpaceXOP0A|NoSuf|VexVVVV=3|Vex, { Imm32|Imm32S, Reg32|Unspecified|BaseIndex, Reg32|Reg64 } -lwpins, 0x12/0, LWP, Modrm|SpaceXOP0A|NoSuf|VexVVVV=3|Vex, { Imm32|Imm32S, Reg32|Unspecified|BaseIndex, Reg32|Reg64 } +lwpval, 0x12/1, LWP, Modrm|SpaceXOP0A|NoSuf|VexVVVV|Vex, { Imm32|Imm32S, Reg32|Unspecified|BaseIndex, Reg32|Reg64 } +lwpins, 0x12/0, LWP, Modrm|SpaceXOP0A|NoSuf|VexVVVV|Vex, { Imm32|Imm32S, Reg32|Unspecified|BaseIndex, Reg32|Reg64 } // BMI instructions -andn, 0xf2, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } -bextr, 0xf7, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blsi, 0xf3/3, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blsmsk, 0xf3/2, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blsr, 0xf3/1, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +andn, 0xf2, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } +bextr, 0xf7, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|SwapSources|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blsi, 0xf3/3, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blsmsk, 0xf3/2, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blsr, 0xf3/1, BMI, Modrm|CheckOperandSize|Vex128|Space0F38|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } tzcnt, 0xf30fbc, BMI, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // TBM instructions -bextr, 0x10, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP0A|VexVVVV=0|No_bSuf|No_wSuf|No_sSuf, { Imm32|Imm32S, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blcfill, 0x01/1, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blci, 0x02/6, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blcic, 0x01/5, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blcmsk, 0x02/1, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blcs, 0x01/3, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blsfill, 0x01/2, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -blsic, 0x01/6, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -t1mskc, 0x01/7, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -tzmsk, 0x01/4, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } + +bextr, 0x10, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP0A|No_bSuf|No_wSuf|No_sSuf, { Imm32|Imm32S, Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blcfill, 0x01/1, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blci, 0x02/6, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blcic, 0x01/5, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blcmsk, 0x02/1, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blcs, 0x01/3, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blsfill, 0x01/2, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +blsic, 0x01/6, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +t1mskc, 0x01/7, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +tzmsk, 0x01/4, TBM, Modrm|CheckOperandSize|Vex128|SpaceXOP09|VexVVVV|No_bSuf|No_wSuf|No_sSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } // AMD 3DNow! instructions. @@ -2044,10 +2046,10 @@ sha256msg2, 0xf38cd, SHA, Modrm|NoSuf, { // VPCLMULQDQ instructions vpclmulqdq, 0x6644, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ, Modrm|Vex=2|Space0F3A|VexWIG|VexVVVV=1|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ, Modrm|Vex=2|Space0F3A|VexWIG|VexVVVV=1|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ, Modrm|Vex=2|Space0F3A|VexWIG|VexVVVV=1|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, Modrm|Vex=2|Space0F3A|VexWIG|VexVVVV=1|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } +vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf|ImmExt, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } // VPCLMULQDQ instructions end @@ -2085,7 +2087,7 @@ kortest, 0x98, , M kshiftl, 0x6632, , Modrm|Vex128|Space0F3A||NoSuf, { Imm8, RegMask, RegMask } kshiftr, 0x6630, , Modrm|Vex128|Space0F3A||NoSuf, { Imm8, RegMask, RegMask } -kunpckbw, 0x664B, AVX512F, Modrm|Vex=2|Space0F|VexVVVV=1|VexW=1|NoSuf, { RegMask, RegMask, RegMask } +kunpckbw, 0x664B, AVX512F, Modrm|Vex=2|Space0F|VexVVVV|VexW0|NoSuf, { RegMask, RegMask, RegMask } vaddp, 0x58, , Modrm|Masking=3||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vdivp, 0x5e, , Modrm|Masking=3||VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|StaticRounding|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -2099,25 +2101,25 @@ vmuls, 0x59, , M vsqrts, 0x51, , Modrm|EVexLIG|Masking=3||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } vsubs, 0x5C, , Modrm|EVexLIG|Masking=3||VexVVVV||Disp8MemShift|NoSuf|StaticRounding|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -valign, 0x6603, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +valign, 0x6603, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vblendmp, 0x6665, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpblendm, 0x6664, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpermi2, 0x6676, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpblendm, 0x6664, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpermi2, 0x6676, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpermi2p, 0x6677, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpermt2, 0x667E, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpermt2, 0x667E, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpermt2p, 0x667F, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmaxs, 0x663D, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmaxu, 0x663F, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmins, 0x6639, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpminu, 0x663B, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmuldq, 0x6628, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmulld, 0x6640, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vprolv, 0x6615, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vprorv, 0x6614, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsllv, 0x6647, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrav, 0x6646, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrlv, 0x6645, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpternlog, 0x6625, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaxs, 0x663D, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaxu, 0x663F, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmins, 0x6639, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpminu, 0x663B, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmuldq, 0x6628, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmulld, 0x6640, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vprolv, 0x6615, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vprorv, 0x6614, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsllv, 0x6647, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsrav, 0x6646, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsrlv, 0x6645, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpternlog, 0x6625, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vbroadcastf32x4, 0x661A, AVX512F, Modrm|Masking=3|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { XMMword|Unspecified|BaseIndex, RegYMM|RegZMM } vbroadcasti32x4, 0x665A, AVX512F, Modrm|Masking=3|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { XMMword|Unspecified|BaseIndex, RegYMM|RegZMM } @@ -2258,11 +2260,11 @@ vmovntdqa, 0x662A, AVX512F, Modrm|Space0 vgetexpp, 0x6642, , Modrm|Masking=3|||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|SAE, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vgetexps, 0x6643, , Modrm|EVexLIG|Masking=3||VexVVVV||Disp8MemShift|NoSuf|SAE, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vinsertf32x4, 0x6618, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|XMMword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vinserti32x4, 0x6638, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=1|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|XMMword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vinsertf32x4, 0x6618, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW0|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|XMMword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vinserti32x4, 0x6638, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW0|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|XMMword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vinsertf64x4, 0x661A, AVX512F, Modrm|EVex=1|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } -vinserti64x4, 0x663A, AVX512F, Modrm|EVex=1|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } +vinsertf64x4, 0x661A, AVX512F, Modrm|EVex=1|Masking=3|Space0F3A|VexVVVV|VexW1|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } +vinserti64x4, 0x663A, AVX512F, Modrm|EVex=1|Masking=3|Space0F3A|VexVVVV|VexW1|Disp8MemShift=5|NoSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } vinsertps, 0x6621, AVX512F, Modrm|EVex128|Space0F3A|VexVVVV|VexW0|Disp8MemShift=2|NoSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } @@ -2286,8 +2288,8 @@ vmovntdq, 0x66E7, AVX512F, Modrm|Space0F vmovdqu32, 0xF36F, AVX512F, D|Modrm|MaskingMorZ|Space0F|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vmovdqu64, 0xF36F, AVX512F, D|Modrm|MaskingMorZ|Space0F|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vmovhlps, 0x12, AVX512F, Modrm|EVex=4|Space0F|VexVVVV=1|VexW=1|NoSuf, { RegXMM, RegXMM, RegXMM } -vmovlhps, 0x16, AVX512F, Modrm|EVex=4|Space0F|VexVVVV=1|VexW=1|NoSuf, { RegXMM, RegXMM, RegXMM } +vmovhlps, 0x12, AVX512F, Modrm|EVex=4|Space0F|VexVVVV|VexW0|NoSuf, { RegXMM, RegXMM, RegXMM } +vmovlhps, 0x16, AVX512F, Modrm|EVex=4|Space0F|VexVVVV|VexW0|NoSuf, { RegXMM, RegXMM, RegXMM } vmovhp, 0x16, AVX512F, Modrm|EVexLIG|Space0F|VexVVVV||Disp8MemShift=3|NoSuf, { Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmovhp, 0x17, AVX512F, Modrm|EVexLIG|Space0F||Disp8MemShift=3|NoSuf, { RegXMM, Qword|Unspecified|BaseIndex } @@ -2305,24 +2307,24 @@ vmovshdup, 0xF316, AVX512F, Modrm|Maskin vmovsldup, 0xF312, AVX512F, Modrm|Masking=3|Space0F|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpabs, 0x661e | , AVX512F, Modrm|Masking=3|Space0F38||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpaddd, 0x66FE, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpaddd, 0x66FE, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpaddq, 0x66d4, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpand, 0x66db, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpandn, 0x66df, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpmuludq, 0x66f4, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpor, 0x66eb, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpsub, 0x66fa | , AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpckhdq, 0x666A, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpckhdq, 0x666A, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpunpckhqdq, 0x666d, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpckldq, 0x6662, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpckldq, 0x6662, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpunpcklqdq, 0x666c, AVX512F, Modrm|Masking=3|Space0F|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpxor, 0x66ef, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpcmpeqd, 0x6676, AVX512F, Modrm|Masking=2|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmpeqd, 0x6676, AVX512F, Modrm|Masking=2|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpeqq, 0x6629, AVX512F, Modrm|Masking=2|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpgtd, 0x6666, AVX512F, Modrm|Masking=2|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmpgtd, 0x6666, AVX512F, Modrm|Masking=2|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgtq, 0x6637, AVX512F, Modrm|Masking=2|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmp, 0x661f, AVX512F, Modrm|Masking=2|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpu, 0x661e, AVX512F, Modrm|Masking=2|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } @@ -2332,16 +2334,16 @@ vpcmpu, 0x661e/, AVX vptestm, 0x6627, AVX512F, Modrm|Masking=2|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vptestnm, 0xf327, AVX512F, Modrm|Masking=2|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpermd, 0x6636, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vpermps, 0x6616, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermd, 0x6636, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermps, 0x6616, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vpermilp, 0x6604 | , AVX512F, Modrm|Masking=3|Space0F3A||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpermilp, 0x660C | , AVX512F, Modrm|Masking=3|Space0F38|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpermpd, 0x6601, AVX512F, Modrm|Masking=3|Space0F3A|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } -vpermpd, 0x6616, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermpd, 0x6616, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vpermq, 0x6600, AVX512F, Modrm|Masking=3|Space0F3A|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } -vpermq, 0x6636, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vpermq, 0x6636, AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vpmovdb, 0xF331, AVX512F, Modrm|EVex=1|MaskingMorZ|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegZMM, RegXMM|Unspecified|BaseIndex } vpmovsdb, 0xF321, AVX512F, Modrm|EVex=1|MaskingMorZ|Space0F38|VexW=1|Disp8MemShift=4|NoSuf, { RegZMM, RegXMM|Unspecified|BaseIndex } @@ -2378,17 +2380,17 @@ vpmovzxwd, 0x6633, AVX512F, Modrm|EVex=1 vpmovsxwq, 0x6624, AVX512F, Modrm|EVex=1|Masking=3|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegZMM } vpmovzxwq, 0x6634, AVX512F, Modrm|EVex=1|Masking=3|Space0F38|VexWIG|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegZMM } -vprol, 0x6672/1, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=2||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpror, 0x6672/0, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=2||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vprol, 0x6672/1, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpror, 0x6672/0, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpshufd, 0x6670, AVX512F, Modrm|Masking=3|Space0F|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsll, 0x66f2 | , AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsll, 0x6672 | /6, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=2||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsll, 0x6672 | /6, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsra, 0x66e2, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsra, 0x6672/4, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=2||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsra, 0x6672/4, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsrl, 0x66d2 | , AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrl, 0x6672 | /2, AVX512F, Modrm|Masking=3|Space0F|VexVVVV=2||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsrl, 0x6672 | /2, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vrcp14p, 0x664C, AVX512F, Modrm|Masking=3|Space0F38||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vrcp14s, 0x664D, AVX512F, Modrm|EVexLIG|Masking=3|Space0F38|VexVVVV||Disp8MemShift|NoSuf, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } @@ -2396,11 +2398,11 @@ vrcp14s, 0x664D, AVX512F, Modrm|EVex vrsqrt14p, 0x664E, AVX512F, Modrm|Masking=3|Space0F38||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vrsqrt14s, 0x664F, AVX512F, Modrm|EVexLIG|Masking=3|Space0F38|VexVVVV||Disp8MemShift|NoSuf, { RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } -vshuff32x4, 0x6623, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vshufi32x4, 0x6643, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vshuff32x4, 0x6623, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vshufi32x4, 0x6643, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vshuff64x2, 0x6623, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vshufi64x2, 0x6643, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vshuff64x2, 0x6623, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vshufi64x2, 0x6643, AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vshufp, 0xC6, AVX512F, Modrm|Masking=3|Space0F|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -2606,69 +2608,69 @@ kortest, 0x98, AVX512BW, Mo ktest, 0x99, AVX512BW, Modrm|Vex128|Space0F|VexW1|NoSuf, { RegMask, RegMask } kxnor, 0x46, AVX512BW, Modrm|Vex256|Space0F|VexVVVV|VexW1|NoSuf, { RegMask, RegMask, RegMask } kxor, 0x47, AVX512BW, Modrm|Vex256|Space0F|VexVVVV|VexW1|NoSuf|Optimize, { RegMask, RegMask, RegMask } -kunpckdq, 0x4B, AVX512BW, Modrm|Vex=2|Space0F|VexVVVV=1|VexW=2|NoSuf, { RegMask, RegMask, RegMask } -kunpckwd, 0x4B, AVX512BW, Modrm|Vex=2|Space0F|VexVVVV=1|VexW=1|NoSuf, { RegMask, RegMask, RegMask } +kunpckdq, 0x4B, AVX512BW, Modrm|Vex256|Space0F|VexVVVV|VexW1|NoSuf, { RegMask, RegMask, RegMask } +kunpckwd, 0x4B, AVX512BW, Modrm|Vex256|Space0F|VexVVVV|VexW0|NoSuf, { RegMask, RegMask, RegMask } kshiftl, 0x6633, AVX512BW, Modrm|Vex128|Space0F3A||NoSuf, { Imm8, RegMask, RegMask } kshiftr, 0x6631, AVX512BW, Modrm|Vex128|Space0F3A||NoSuf, { Imm8, RegMask, RegMask } -vdbpsadbw, 0x6642, AVX512BW, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vdbpsadbw, 0x6642, AVX512BW, Modrm|Masking=3|Space0F3A|VexVVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vmovdqu8, 0xF26F, AVX512BW, D|Modrm|MaskingMorZ|Space0F|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vmovdqu16, 0xF26F, AVX512BW, D|Modrm|MaskingMorZ|Space0F|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpabs, 0x661c | , AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpmaxsb, 0x663C, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpminsb, 0x6638, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpshufb, 0x6600, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } - -vpmaddubsw, 0x6604, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmaxuw, 0x663E, AVX512BW, Modrm|Masking=3|VexWIG|Space0F38|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpminuw, 0x663A, AVX512BW, Modrm|Masking=3|VexWIG|Space0F38|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmulhrsw, 0x660B, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } - -vpackssdw, 0x666B, AVX512BW, Modrm|Masking=3|Space0F|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpacksswb, 0x6663, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpackuswb, 0x6667, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpackusdw, 0x662B, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaxsb, 0x663C, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpminsb, 0x6638, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpshufb, 0x6600, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } + +vpmaddubsw, 0x6604, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaxuw, 0x663E, AVX512BW, Modrm|Masking=3|VexWIG|Space0F38|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpminuw, 0x663A, AVX512BW, Modrm|Masking=3|VexWIG|Space0F38|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmulhrsw, 0x660B, AVX512BW, Modrm|Masking=3|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } + +vpackssdw, 0x666B, AVX512BW, Modrm|Masking=3|Space0F|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpacksswb, 0x6663, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpackuswb, 0x6667, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpackusdw, 0x662B, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpadd, 0x66fc | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpadds, 0x66ec | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpaddus, 0x66dc | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpavg, 0x66e0 | (3 * ), AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmaxub, 0x66DE, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpminub, 0x66DA, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaxub, 0x66DE, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpminub, 0x66DA, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpsub, 0x66f8 | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|Optimize, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpsubs, 0x66e8 | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpsubus, 0x66d8 | , AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpckhbw, 0x6668, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpcklbw, 0x6660, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpckhbw, 0x6668, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpcklbw, 0x6660, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmaxsw, 0x66EE, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpminsw, 0x66EA, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmulhuw, 0x66E4, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmulhw, 0x66E5, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmullw, 0x66D5, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsllw, 0x6671/6, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpmaxsw, 0x66EE, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpminsw, 0x66EA, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmulhuw, 0x66E4, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmulhw, 0x66E5, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmullw, 0x66D5, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsllw, 0x6671/6, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsllw, 0x66F1, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsraw, 0x6671/4, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsraw, 0x6671/4, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsraw, 0x66E1, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrlw, 0x6671/2, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsrlw, 0x6671/2, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsrlw, 0x66D1, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8MemShift=4|CheckOperandSize|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpckhwd, 0x6669, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpunpcklwd, 0x6661, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpckhwd, 0x6669, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpunpcklwd, 0x6661, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpalignr, 0x660F, AVX512BW, Modrm|Masking=3|Space0F3A|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpalignr, 0x660F, AVX512BW, Modrm|Masking=3|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpblendm, 0x6666, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV=1||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpblendm, 0x6666, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpbroadcast, 0x6678 | , AVX512BW, Modrm|Masking=3|Space0F38|VexW0|Disp8MemShift|NoSuf, { RegXMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcast, 0x667a | , AVX512BW, Modrm|Masking=3|Space0F38|VexW0|NoSuf, { Reg32, RegXMM|RegYMM|RegZMM } vpermi2, 0x6675, , Modrm|Masking=3|Space0F38|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpermt2, 0x667d, , Modrm|Masking=3|Space0F38|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vperm, 0x668d, , Modrm|Masking=3|Space0F38|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsllvw, 0x6612, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsravw, 0x6611, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpsrlvw, 0x6610, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsllvw, 0x6612, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsravw, 0x6611, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsrlvw, 0x6610, AVX512BW, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpcmpeq, 0x6674 | , AVX512BW, Modrm|Masking=2|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgt, 0x6664 | , AVX512BW, Modrm|Masking=2|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } @@ -2677,19 +2679,19 @@ vpcmpu, 0x663e, AVX512BW, Modrm|Mask vpcmp, 0x663f/, AVX512BW, Modrm|Masking=2|Space0F3A|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpu, 0x663e/, AVX512BW, Modrm|Masking=2|Space0F3A|VexVVVV||Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpslldq, 0x6673/7, AVX512BW, Modrm|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpsrldq, 0x6673/3, AVX512BW, Modrm|Space0F|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpslldq, 0x6673/7, AVX512BW, Modrm|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpsrldq, 0x6673/3, AVX512BW, Modrm|Space0F|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpextrw, 0x66C5, AVX512BW, Load|Modrm|EVex128|Space0F|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Reg64 } vpextr, 0x6614 | , AVX512BW, RegMem|EVex128|Space0F3A|VexWIG|NoSuf, { Imm8, RegXMM, Reg32|Reg64 } vpextr, 0x6614 | , AVX512BW, Modrm|EVex128|Space0F3A|VexWIG|Disp8MemShift|NoSuf, { Imm8, RegXMM, |Unspecified|BaseIndex } -vpinsrw, 0x66C4, AVX512BW, Modrm|EVex128|Space0F|VexWIG|VexVVVV=1|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrw, 0x66C4, AVX512BW, Modrm|EVex128|Space0F|VexWIG|VexVVVV|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } vpinsrw, 0x66C4, AVX512BW, Modrm|EVex128|Space0F|VexWIG|VexVVVV|Disp8MemShift=1|NoSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } -vpinsrb, 0x6620, AVX512BW, Modrm|EVex128|Space0F3A|VexWIG|VexVVVV=1|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrb, 0x6620, AVX512BW, Modrm|EVex128|Space0F3A|VexWIG|VexVVVV|NoSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } vpinsrb, 0x6620, AVX512BW, Modrm|EVex128|Space0F3A|VexWIG|VexVVVV|NoSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } -vpmaddwd, 0x66F5, AVX512BW, Modrm|Masking=3|Space0F|VexVVVV=1|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmaddwd, 0x66F5, AVX512BW, Modrm|Masking=3|Space0F|VexVVVV|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpmov2m, 0xf329, AVX512BW, Modrm|EVexDYN|Space0F38||NoSuf, { RegXMM|RegYMM|RegZMM, RegMask } vpmovm2, 0xf328, AVX512BW, Modrm|EVexDYN|Space0F38||NoSuf, { RegMask, RegXMM|RegYMM|RegZMM } @@ -2713,7 +2715,7 @@ vpmovzxbw, 0x6630, AVX512BW, Modrm|EVex= vpmovzxbw, 0x6630, AVX512BW|AVX512VL, Modrm|EVex=2|Masking=3|VexWIG|Space0F38|Disp8MemShift=3|NoSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovzxbw, 0x6630, AVX512BW|AVX512VL, Modrm|EVex=3|Masking=3|VexWIG|Space0F38|Disp8MemShift=4|NoSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpsadbw, 0x66F6, AVX512BW, Modrm|Space0F|VexVVVV=1|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpsadbw, 0x66F6, AVX512BW, Modrm|Space0F|VexVVVV|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpshufhw, 0xF370, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpshuflw, 0xF270, AVX512BW, Modrm|Masking=3|Space0F|VexWIG|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -2777,16 +2779,16 @@ vcvtuqq2ps, 0xf27a, AVX512DQ|, 0x6616, AVX512DQ|, Modrm|EVex128|Space0F3A||Disp8MemShift|NoSuf, { Imm8, RegXMM, |Unspecified|BaseIndex } vpinsr, 0x6622, AVX512DQ|, Modrm|EVex128|Space0F3A|VexVVVV||Disp8MemShift|NoSuf, { Imm8, |Unspecified|BaseIndex, RegXMM, RegXMM } vextractf64x2, 0x6619, AVX512DQ, Modrm|MaskingMorZ|Space0F3A|VexW=2|Disp8MemShift=4|NoSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex } vextracti64x2, 0x6639, AVX512DQ, Modrm|MaskingMorZ|Space0F3A|VexW=2|Disp8MemShift=4|NoSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex } -vinsertf64x2, 0x6618, AVX512DQ, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vinserti64x2, 0x6638, AVX512DQ, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vinsertf64x2, 0x6618, AVX512DQ, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } +vinserti64x2, 0x6638, AVX512DQ, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Disp8MemShift=4|CheckOperandSize|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vfpclassp, 0x6666, AVX512DQ, Modrm|Masking=2|Space0F3A||Broadcast|Disp8ShiftVL|NoSuf|IntelSyntax, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegMask } vfpclassp, 0x6666, AVX512DQ, Modrm|Masking=2|Space0F3A||Broadcast|Disp8ShiftVL|NoSuf|ATTSyntax, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM||BaseIndex, RegMask } @@ -2798,7 +2800,7 @@ vfpclasss, 0x67, 2m, 0xf339, AVX512DQ, Modrm|EVexDYN|Space0F38||NoSuf, { RegXMM|RegYMM|RegZMM, RegMask } vpmovm2, 0xf338, AVX512DQ, Modrm|EVexDYN|Space0F38||NoSuf, { RegMask, RegXMM|RegYMM|RegZMM } -vpmullq, 0x6640, AVX512DQ, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmullq, 0x6640, AVX512DQ, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vrangep, 0x6650, AVX512DQ, Modrm|Masking=3|Space0F3A|VexVVVV||Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf|SAE, { Imm8, RegXMM|RegYMM|RegZMM||Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vranges, 0x6651, AVX512DQ, Modrm|EVexLIG|Masking=3|Space0F3A|VexVVVV||Disp8MemShift|NoSuf|SAE, { Imm8, RegXMM||Unspecified|BaseIndex, RegXMM, RegXMM } @@ -2816,8 +2818,8 @@ clwb, 0x660fae/6, CLWB, Modrm|Anysize|Ig // AVX512IFMA instructions -vpmadd52huq, 0x66B5, AVX512IFMA, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpmadd52luq, 0x66B4, AVX512IFMA, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmadd52huq, 0x66B5, AVX512IFMA, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmadd52luq, 0x66B4, AVX512IFMA, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512IFMA instructions end @@ -2830,23 +2832,23 @@ vpmadd52luq, 0x66B4, AVX_IFMA, Modrm|Vex // AVX512VBMI instructions -vpmultishiftqb, 0x6683, AVX512VBMI, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpmultishiftqb, 0x6683, AVX512VBMI, Modrm|Masking=3|Space0F38|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512VBMI instructions end // AVX512_4FMAPS instructions -v4fmaddps, 0xf29a, AVX512_4FMAPS, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } -v4fnmaddps, 0xf2aa, AVX512_4FMAPS, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } -v4fmaddss, 0xf29b, AVX512_4FMAPS, Modrm|EVex=4|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegXMM, RegXMM } -v4fnmaddss, 0xf2ab, AVX512_4FMAPS, Modrm|EVex=4|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegXMM, RegXMM } +v4fmaddps, 0xf29a, AVX512_4FMAPS, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } +v4fnmaddps, 0xf2aa, AVX512_4FMAPS, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } +v4fmaddss, 0xf29b, AVX512_4FMAPS, Modrm|EVex=4|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegXMM, RegXMM } +v4fnmaddss, 0xf2ab, AVX512_4FMAPS, Modrm|EVex=4|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegXMM, RegXMM } // AVX512_4FMAPS instructions end // AVX512_4VNNIW instructions -vp4dpwssd, 0xf252, AVX512_4VNNIW, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } -vp4dpwssds, 0xf253, AVX512_4VNNIW, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } +vp4dpwssd, 0xf252, AVX512_4VNNIW, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } +vp4dpwssds, 0xf253, AVX512_4VNNIW, Modrm|EVex=1|Masking=3|Space0F38|VexVVVV|VexW0|Disp8MemShift=4|NoSuf|ImplicitQuadGroup, { XMMword|Unspecified|BaseIndex, RegZMM, RegZMM } // AVX512_4VNNIW instructions end @@ -2880,11 +2882,11 @@ vpshrdw, 0x6672, AVX512_VBMI2, Modrm|Mas // AVX512_VNNI instructions -vpdpbusd, 0x6650, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpdpwssd, 0x6652, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpdpbusd, 0x6650, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpdpwssd, 0x6652, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpdpbusds, 0x6651, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpdpwssds, 0x6653, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpdpbusds, 0x6651, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpdpwssds, 0x6653, AVX512_VNNI, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512_VNNI instructions end @@ -2913,34 +2915,34 @@ vpdpbsuds, 0xf351, AVX_VNNI_INT8, Modrm| vpopcnt, 0x6654, AVX512_BITALG, Modrm|Masking=3|Space0F38||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpshufbitqmb, 0x668f, AVX512_BITALG, Modrm|Masking=2|Space0F38|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpshufbitqmb, 0x668f, AVX512_BITALG, Modrm|Masking=2|Space0F38|VexVVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } // AVX512_BITALG instructions end // AVX512 + GFNI instructions -vgf2p8affineinvqb, 0x66cf, GFNI|AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vgf2p8affineqb, 0x66ce, GFNI|AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vgf2p8mulb, 0x66cf, GFNI|AVX512F, Modrm|Masking=3|Space0F38|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vgf2p8affineinvqb, 0x66cf, GFNI|AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vgf2p8affineqb, 0x66ce, GFNI|AVX512F, Modrm|Masking=3|Space0F3A|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vgf2p8mulb, 0x66cf, GFNI|AVX512F, Modrm|Masking=3|Space0F38|VexVVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512 + GFNI instructions end // AVX512 + VAES instructions -vaesdec, 0x66de, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesdeclast, 0x66df, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesenc, 0x66dc, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vaesenclast, 0x66dd, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesdec, 0x66de, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesdeclast, 0x66df, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesenc, 0x66dc, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vaesenclast, 0x66dd, VAES|AVX512F, Modrm|Space0F38|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512 + VAES instructions end // AVX512 + VPCLMULQDQ instructions vpclmulqdq, 0x6644, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf, { Imm8|Imm8S, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmullqlqdq, 0x6644/0x00, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmulhqlqdq, 0x6644/0x01, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmullqhqdq, 0x6644/0x10, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } +vpclmulhqhqdq, 0x6644/0x11, VPCLMULQDQ|AVX512F, Modrm|Space0F3A|VexWIG|VexVVVV|Disp8ShiftVL|CheckOperandSize|NoSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } // AVX512 + VPCLMULQDQ instructions end @@ -3144,12 +3146,12 @@ xresldtrk, 0xf20f01e9, TSXLDTRK, NoSuf, ldtilecfg, 0x49/0, AMX_TILE|x64, Modrm|Vex128|Space0F38|VexW0|NoSuf, { Unspecified|BaseIndex } sttilecfg, 0x6649/0, AMX_TILE|x64, Modrm|Vex128|Space0F38|VexW0|NoSuf, { Unspecified|BaseIndex } -tdpbf16ps, 0xf35c, AMX_BF16|x64, Modrm|Vex128|Space0F38|VexVVVV=1|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } +tdpbf16ps, 0xf35c, AMX_BF16|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } tdpfp16ps, 0xf25c, AMX_FP16|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } -tdpbssd, 0xf25e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV=1|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } -tdpbuud, 0x5e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV=1|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } -tdpbusd, 0x665e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV=1|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } -tdpbsud, 0xf35e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV=1|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } +tdpbssd, 0xf25e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } +tdpbuud, 0x5e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } +tdpbusd, 0x665e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } +tdpbsud, 0xf35e, AMX_INT8|x64, Modrm|Vex128|Space0F38|VexVVVV|VexW0|SwapSources|NoSuf, { RegTMM, RegTMM, RegTMM } tileloadd, 0xf24b, AMX_TILE|x64, Sibmem|Vex128|Space0F38|VexW0|NoSuf, { Unspecified|BaseIndex, RegTMM } tileloaddt1, 0x664b, AMX_TILE|x64, Sibmem|Vex128|Space0F38|VexW0|NoSuf, { Unspecified|BaseIndex, RegTMM } From patchwork Fri Mar 10 10:22:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67323 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp789179wrd; Fri, 10 Mar 2023 02:22:59 -0800 (PST) X-Google-Smtp-Source: AK7set90Af0pwAsc/aFb03BnbC4vB0jL2qTzyBdznz5LYw/qAmGjKRLBH9O2i+LJi/lLhPT3s+DU X-Received: by 2002:a17:907:72c9:b0:889:b38b:4bb2 with SMTP id du9-20020a17090772c900b00889b38b4bb2mr28842993ejc.49.1678443778992; Fri, 10 Mar 2023 02:22:58 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id o2-20020a1709064f8200b008d68d018141si1943429eju.402.2023.03.10.02.22.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:22:58 -0800 (PST) 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=dW0aBXXM; 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 23BE9385087B for ; Fri, 10 Mar 2023 10:22:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 23BE9385087B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443750; bh=F5OZ9vH1XmqLb43+Cq/3Mvdq2c9wEmOn6rDhrGgWf1Y=; 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=dW0aBXXM7M8WPZ8T6x4lrLErTmXn+sZYk/H7JdvNtC8rZ1tdrNMJvjoqSc8Ruu4xv hALx57E8JDFdI1C1u4xm8gIVfUJGFs+qITts5HCZFkMPxwuhWX6lyPdt/AfIcRa3y/ RkvUYC4vZf6XfXDgE2tGstQZQ6JApRehcoVwQlsU= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2085.outbound.protection.outlook.com [40.107.104.85]) by sourceware.org (Postfix) with ESMTPS id 2A6163851C00 for ; Fri, 10 Mar 2023 10:22:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2A6163851C00 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DytaKGq9L40LezBIamNjPxorlYe97227XY5+5FbZMYdUR+MzmBFkKAHMKFNds9Qhe6pSXB34cxADaL/7CDaXHDrt2DKloWigAn1KR9gw5Rl4zzhBex/+w4XnyMQOl5nQX3zk7XC4y/kLnG/o4GtWYJmT2Pc2+Mew6Q45s/WyDkZDMGI5aNN+uNwAaIMr4E8v6di7DYahbwVV2flyoQ++axs0XwZ7biUatyZrDA5Gj8fWXft5AtpqGq61S0weRs3M7ib5OPMmkBtnlvkAYwxn63b+lU1ZmsJiGYwmDdClTHmUgkLoTPk2u0SXT+7qcLt1FvfPNoPKLXh/S7kK4Hsh3Q== 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=F5OZ9vH1XmqLb43+Cq/3Mvdq2c9wEmOn6rDhrGgWf1Y=; b=GOHOKogv/6iKeq91+5eimZNW+3wlaEn12xvf0wvxavi4czczWq0FqIjkS0VmG63XWXp1UD33dXHIIPN8kwlYWGYAdI9v2dcH0ZxvQP55HJPP3f3F5kwc2+7Ch44j9T6eVieYFlFl+XvWV95dSUZjRq9Qs0hu+h+NCuG0U3Oi9hiGtjQ7Shp6A6X6C79yMMUoqt1Mthsqc6jJmzkKNhKSLRsBc8nNNonOTHW+25P2XH1DsV4A0xVK0D9aYJqRX1eLMoSQsUlV/FmL2pyivYMhxiXqOfWLC+WN/rPbYYBXPEygdE9DTHuMRd8ivmKa9l7x3XlwJBoVsf1MA9b6w/AdKw== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8339.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:22:19 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:22:19 +0000 Message-ID: Date: Fri, 10 Mar 2023 11:22:16 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 06/14] x86: drop "shimm" special case template expansions Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8339:EE_ X-MS-Office365-Filtering-Correlation-Id: baa983fe-86f7-4651-5724-08db215153bf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ftKDEi4ULKUhKWc2uOZCo24U2GZ/L6PWt0taOuYzh5tcxakqHTGm/wykUXZH39bNiOfgHd/nTu5/Bl9T2nAFDt9d1RypS6UNP2qHh0VQpaWi2tbzDoRdlr3/sKJeXOTcgY0XvfE56BiHguMQJTSOIKkE8o0eQL4ncOvh8OBy6lEiOK/ZMuvYHyljD5v9c1PgMu99dlClSVIj4eyN2l3Gy/vFDMs/MlaH/lgM8fs65qQXN1kzwpWL3uLZWC74tr1rEQsYIKcM2LJfGh/lHYdzOPJ7XR/tDRT066FYmF1mJKxAN/EMO5W9K6x13Tt++WLXTxm9vAUbhmeo+xmFc/MBj15qpQJPFV2Ju586whDIYAwq1xCyrUZA3/DcHICUlNNiNAL0wSyJlD4TmSPW4UesyoZARkkGjs1W05XmkjAldaOvmfUvL7XV6jm0LTfW/VssbPHzYUOXQMfFgeNfgbzjNdKzu/+kdWu803ibDIGi/x6AvpS4v76rZ+VPvijU5BMCJsTL2KPKSy9YBduCYwu+E7/4sJiAanECyDbTihcIA5QFTMtd0LoHqmq8S9frzXJ7HEDQZAY5i+3mPrx6Gxej+EcG6j3PUldwIyDhWRCod7SdZJP1QU2xGty1eylVqRuQRZiVM3v2jbym5RWx/A/nmgrWz+G8KS4HZsnSJ+eRlV443Tu7nvvFIXRdX86D8r3YAaXe7TAaXf5P/t9lxWlXaxF9Yc6rJneH/Rt0SEiTcyU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(39860400002)(396003)(136003)(346002)(366004)(376002)(451199018)(38100700002)(36756003)(54906003)(6916009)(478600001)(6486002)(316002)(5660300002)(66556008)(8936002)(2906002)(66476007)(8676002)(41300700001)(66946007)(4326008)(26005)(31696002)(86362001)(6666004)(6506007)(186003)(2616005)(6512007)(31686004)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?BBoRKhut9iR5avO4DorDcgWrouIf?= =?utf-8?q?aOcE+2wbEPoyM5l8+rB71DxzI4XnSToGLpYzXSYTA2diq1q3PP14hckWN7U4/MgfF?= =?utf-8?q?QgrqgLNqEp+uSDaoL+Jmoow8LshGHR4k2P5M/o2HrAVG4wa3dfziE6s8BG9z6INPu?= =?utf-8?q?P70qpxei3Nt/ghGJ+/r5o0IJgDE+zqGN+D39GM9lhNot+ZyMk2O+QqZXDrjyvZMHv?= =?utf-8?q?+yVUdD0EYopxHUCGAn5MdQ16JpZi1YS8UU1iG0bfHL+NTu6u5n9wxwGkN8MztAikH?= =?utf-8?q?y1G1Jj4TeoxGpEs9sjDUc/h9OkoQS/btEJQg6X2YTQMq7Ox2+PAOmRnZm1GLvFIVp?= =?utf-8?q?h8pNR2tB3j6Infgl2x7ZwejzUkLsPWDLAjWUPcLnZ7r8jJodekBFE6Ql2gHAHW/GV?= =?utf-8?q?K1qzD6ZmwmARo54zX0Ithx+SOx8p78YJG1zvN/jqyw/kwI+A8pi4i6GVVzjknCTeX?= =?utf-8?q?Sijbwz2olS90ehlNl+Rw7io8pjM09IcdDfZLgTrKJlo7oxsNT9ml6GR10IGKg40tO?= =?utf-8?q?DdXXyMTa/fl14YkMJWPZI4YCuftCvsHhfwCH1VBhLZE2b/alWEQIlXkkE/jlc0WE2?= =?utf-8?q?Bfk4rNV43AmmRYOT0B+D1hRQpqqz1iQYjPUApcnV8jRHepIpn0kFJbtoK9pk2AF/w?= =?utf-8?q?H2Wy9fNlQylNl0Q3tN9csuGCAwlVq8jdZiYJJwjp+nl17yBey0egD3LMLqQAQfxTx?= =?utf-8?q?dK1bzpYJEw868NUP13RkenotSGA07rZ5U/sYDWmM7pkvn4b8ZjXnTR0vR/OoLRD0i?= =?utf-8?q?BUykRSwvZ0M3LtLyNjh3sq6kjxhYCI5/GhpcrzrEXzz8iYuzhUGvhjT9Co+5OMpAQ?= =?utf-8?q?kQNKG6VJ/cQwFxNobPwZwu2Jt1n8sflfwtEIckrLNrhEnDOa+Ov04/881l05jc+5F?= =?utf-8?q?7FW0ATfQwCOxjyPr11NaiC9GwljtDhsnyg05SttPQ+EgV7CuYx0Nx2Ma71LB74kF2?= =?utf-8?q?2AERM271TJcQA0X7tcS8gZMLyKKyvU+4buvI/pRDaIhEoPo2a9qdsEpXfJZ5q/hRk?= =?utf-8?q?Bf1IaGM2Q/KcTW1UZFvxLDlwE3O32RGog4IZyBSn7vq7QSgj5+JffDo9uaZUY6Xnj?= =?utf-8?q?+3tjSJjuoSDyfu5d+x0zChTjKMH87ccEJMh+RUxy4tyKa+YLJW7sP+zdJAHvdkZPz?= =?utf-8?q?ChX1F+OZVieKAup3qH1TCVZgfnt4LidQDH1v//Ojjexk89nU1+xgRJhQiQovjw3va?= =?utf-8?q?wbgFBl1isWRDicd5mLLpe+5jI0HErBrQuQ+NXHqUTMECOtdPqMZhDD6gG6eBaPvFt?= =?utf-8?q?rpLFhEocHGMlVIbmP7EF+SfLzeeaEL3SeB81brWfKehYGEoKz0+KwCOF2ILrLSmPv?= =?utf-8?q?DgeBhu/62JbYIw4ghmbZ651OkM28APuNCYVh2o3Aa4M/HCjPlFCY/vg4BU857lCwB?= =?utf-8?q?ijnFGvaxZTaMQ94She1XNbJS7SVenXzAg8whwWenoK81F1d9mphbIXfs65y4ZE7R0?= =?utf-8?q?125yeI7gggzbc1C7K+EhNiAECKyBKZTTVxLAdsegKYlCUfLkG9vhw4DLmOiZlqaLp?= =?utf-8?q?f7O0d/KFuqL+?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: baa983fe-86f7-4651-5724-08db215153bf X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:22:18.9798 (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: jQOyQWCCRXollIn7dHJoEzZFDbqAPvQUu1zbD7iqaDLb6S1xALRoebKUUHChdfYWd48I+7lKLf+cosuszX/l+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8339 X-Spam-Status: No, score=-3028.2 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_NONE, 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 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?1759975863766904485?= X-GMAIL-MSGID: =?utf-8?q?1759975863766904485?= With VexVVVV only being boolean, the SSE shift-by-immediate instructions don't need special casing anymore for SSE2AVX handling. Simplify the two respective templates. (No change to generated tables.) --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -974,14 +974,14 @@ pause, 0xf390, i186, NoSuf, {} // MMX/SSE2 instructions. - - - + + + , 0x0fe5, , pmullw, 0x0fd5, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } por, 0x0feb, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } psllw, 0x0ff1, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psllw, 0x0f71/6, , Modrm||NoSuf, { Imm8, } +psllw, 0x0f71/6, , Modrm||NoSuf, { Imm8, } psll, 0x0ff2 | , , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psll, 0x0f72 | /6, , Modrm||NoSuf, { Imm8, } +psll, 0x0f72 | /6, , Modrm||NoSuf, { Imm8, } psraw, 0x0fe1, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psraw, 0x0f71/4, , Modrm||NoSuf, { Imm8, } +psraw, 0x0f71/4, , Modrm||NoSuf, { Imm8, } psrad, 0x0fe2, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psrad, 0x0f72/4, , Modrm||NoSuf, { Imm8, } +psrad, 0x0f72/4, , Modrm||NoSuf, { Imm8, } psrlw, 0x0fd1, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psrlw, 0x0f71/2, , Modrm||NoSuf, { Imm8, } +psrlw, 0x0f71/2, , Modrm||NoSuf, { Imm8, } psrl, 0x0fd2 | , , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -psrl, 0x0f72 | /2, , Modrm||NoSuf, { Imm8, } +psrl, 0x0f72 | /2, , Modrm||NoSuf, { Imm8, } psub, 0x0ff8 | , , Modrm||NoSuf, { ||Unspecified|BaseIndex, } psubd, 0x0ffa, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } psubq, 0x660ffb, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1236,8 +1236,8 @@ pmuludq, 0xff4, SSE2, Modrm|NoSuf, { Qwo pshufd, 0x660f70, , Modrm||NoSuf, { Imm8|Imm8S, RegXMM|Unspecified|BaseIndex, RegXMM } pshufhw, 0xf30f70, , Modrm||NoSuf, { Imm8|Imm8S, RegXMM|Unspecified|BaseIndex, RegXMM } pshuflw, 0xf20f70, , Modrm||NoSuf, { Imm8|Imm8S, RegXMM|Unspecified|BaseIndex, RegXMM } -pslldq, 0x660f73/7, , Modrm||NoSuf, { Imm8, RegXMM } -psrldq, 0x660f73/3, , Modrm||NoSuf, { Imm8, RegXMM } +pslldq, 0x660f73/7, , Modrm|||NoSuf, { Imm8, RegXMM } +psrldq, 0x660f73/3, , Modrm|||NoSuf, { Imm8, RegXMM } punpckhqdq, 0x660f6d, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } punpcklqdq, 0x660f6c, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } From patchwork Fri Mar 10 10:22:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67326 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp789667wrd; Fri, 10 Mar 2023 02:24:27 -0800 (PST) X-Google-Smtp-Source: AK7set8LBixKxC7wnnrp6WNVqRCMM/95Nphj8quiOfEnu+AqttgWEjOqCdMYgwnKCiYBOH5XxiGR X-Received: by 2002:a17:907:c705:b0:8de:baf0:338c with SMTP id ty5-20020a170907c70500b008debaf0338cmr2031748ejc.14.1678443867345; Fri, 10 Mar 2023 02:24:27 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id ck16-20020a170906c45000b008b17e21e082si1784195ejb.295.2023.03.10.02.24.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:24:27 -0800 (PST) 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=rImhHKDP; 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 A0B54384D194 for ; Fri, 10 Mar 2023 10:23:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A0B54384D194 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443829; bh=UurlsgKnFlZFyp/ANgn4Lw3kCdAH9F9I9a4hwiogL+o=; 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=rImhHKDPtmxYKoLLt9f3hok7zU8UWFbS1ySfO3MxQ1XvgbFN17e0E0S0/Z57abCp5 DwtPrdxfY/d9l6RUZ0pK0acfk/t/4qRdvET76kf0SelJeDqpQ9ID4dq5EMca351JZj gpOobO20pE2U3eG7pEYeas5JdltawKBT44Ic/dr8= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2085.outbound.protection.outlook.com [40.107.104.85]) by sourceware.org (Postfix) with ESMTPS id 5F8C23850221 for ; Fri, 10 Mar 2023 10:22:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5F8C23850221 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l5D3v3MNWIwR6B3ww1IpJMRGFFxzWjoscHdx+djfUodPB8Aqm5UAPi0x4+2oMZ4xTrtqg4zosVoM1/WVXKQVl2iVpML5EQZbGikKYcOnS6HjCMxfJEFnCQd9bW9fkg2VFfW4BMLv5wacy6rzTF6QwcXAUpKRU2X0lM23qehzqWPsCtj5Gy8clp6ho1L+YVqm8uKflC2tn7uDzpB3zcH03JpH0YyXAdJDQz/T/m5zztKh4spE5eLIO4JrNcfqUesQcxYQ6UH33B1IisPmk7Icn/xNCxHWOvCi+ydKYjEA/EzCtDRYLNtcQEWE5FmIulRXZeMWYBwYB079wNTyxtG4Vw== 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=UurlsgKnFlZFyp/ANgn4Lw3kCdAH9F9I9a4hwiogL+o=; b=cNsLCC2q63j3wTs75aSeVU1kukFj3XdNcC2haPxDcZmJU9CLk1Qyxpbm0YIsaZ7n16zoFCxfV5xqvmEgH4XXrtk5BghlQi+OGfpmiG+cLUSbbQbnLCWYhXnwZmC624kDh6/1aiaqilXqTo7c/w6dgtS4b579Q4vwPyPJS3+26SWLVvlyO4wrjoZfflPMFyOOh5it2osq3fn8/771wYfZ35pNkZAgW4d7z11VlYFdQ5qcCx+suTNRkV1V0klBRy+T5ObnttbpK0nuHM6iSttshqx3vXT/jWYygztif2LUk5x6adTC57wv5O92hIi0eMh9oVSIoCB1Mg9vEYEk2X70vA== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8339.eurprd04.prod.outlook.com (2603:10a6:20b:3e6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:22:41 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:22:40 +0000 Message-ID: <667d9ad0-3165-08cf-dead-efd27a5d267e@suse.com> Date: Fri, 10 Mar 2023 11:22:38 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 07/14] x86/AT&T: restrict recognition of the "absolute branch" prefix character Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0183.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a4::11) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8339:EE_ X-MS-Office365-Filtering-Correlation-Id: 574915ae-6a89-4fdc-bf63-08db2151610b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Nj0JEEYX9yilJedCw5N/eEk+njsciAqdH9mHH6qG/w7vfeTFXKB/USCr+Bc0B6LHfnhEaJf9CE0oL/40yybm/BbutuXnxpjoQziQeQHaHrnWIHez8WDx90YsqCZ3/aakq471bx93oOG9xFkqL4mAKhD6/OHpuUN6Sh3XMlQrK/KDVTlU8RmivwgR+9a6/bnKOXzTbGyEeDMdlp4DRIe/BVgJYZ5w+j7q3ugJENMeDdXkBy1ndIKtbY2hMvbUiyArR8J13VtWIJowxZizTpdPlKT9rDfJaYRM+6jTvw3QvfQGVEG4GiOTufCYL2J4C6oNemgIKIkbga1iN/aGM+Xh9c8bvB7PLw+I48a3L0G/inFqa7Jg6Wy/YhYOXpZj3Qdd7CS1XzQ5bMib7YWO8Aqc6YTvdL6wDhVaZT2yLFNUzCN4LCX+QorUw5KGKRwmRs3C+AzAolwp7me+Z+31yyxOjs+3VwKZj68jelMPIcUBIqGKSEjzOQvUapS6RQ8p2zlVKrezmlzP5JlXQEPnwjnPw9rlBWOF6sxi0qfn11+jzS2XHWrFkRTLstBN6SgIeBhwFHOifh7oblt+gGzg6rsJU4MEptPkKUK+xBlbpe1NH9vOHSxtC+dEAlEZrZvuLfYauTUcGxk5CDPsCCiNtOvNDyn5/SGnMcUKSqKsM2nBo0pFLfYVGBKKJ2ad/w7BaZvNVGAypH30TEZlMYR5i28OJ+gnrUPa53aEkc3Deh8vBAk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(39860400002)(396003)(136003)(346002)(366004)(376002)(451199018)(38100700002)(36756003)(54906003)(6916009)(478600001)(6486002)(316002)(5660300002)(66556008)(8936002)(2906002)(66476007)(8676002)(41300700001)(66946007)(4326008)(26005)(31696002)(86362001)(6506007)(186003)(2616005)(6512007)(31686004)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?PbDfBzoAC1/NB4UjRqyoyZWLaYcY?= =?utf-8?q?GMQTJxjdxQZJGmr8miLdUdld5Qpyog7B6QgOjr1lCfDWTl1kkQnA+y1AbkubIEdpX?= =?utf-8?q?WcxfdB98WlsAuFCN0x1Nr300aOSWgnY5GWyIisdOqCR57pEhWE/uBw1V+NHqC2m80?= =?utf-8?q?rglRt2pBPKegcjNfmjvmVeeBPcVW0rJbJr4FV8BxdsLqbwFmCN9xoy5f8o2hdbWI8?= =?utf-8?q?BwuE1QO8jh0UY4IYG4ZBI+kJNQDREYsXikESk09daueXjUD/7rcaPbOXSsghQrzkm?= =?utf-8?q?dcq9tzAwbH93TU0gYnuIhCYyhR7VrbE72r7v8k/oh26Z3vekk/zBr3Wb8VF9stobM?= =?utf-8?q?HRyNhzlTnebJEwJTHjq0yhzAxm1g0KydE1iHGfjzJxTw4Li1gz9u0h56qPM4I7AHb?= =?utf-8?q?gpPQJ2yyr7d5Dv+g1Bk1dOJyuHo4FnyYRwoK/Si3jARlLhmx4bipFtriUlkK5csp+?= =?utf-8?q?CjWYUvb3AX3nS9+za+avpf9ySx61dvM6RxovBW7EAUFh4iJBWb1mKy/w6Q0b3iptO?= =?utf-8?q?A3Os+6bxVQR5ag1BNbuXsf84gE3ddcQ/ofIxO/v0Kz5R059rlnBerhusF8mMEbb3S?= =?utf-8?q?eQ7HPROxZZNZT+mqBUC0BXDPYoE70obFoXkLDwfEs9wwxLYHHBFXsgdRjFTycO0oS?= =?utf-8?q?4agHohin1+8Rt6ttek2WT5DmN7GV3vTm2FKTYk/559caoMxkBsUa+fwzU6UFoHCoH?= =?utf-8?q?713UPfckgYumzYbuVB5Ir8mMiIWhVL3ofO6rSM2pItmnrUQsAr2gIHeUhdHz0Kgcd?= =?utf-8?q?W0cVhMfLDogl7skqpD187NNt6Tf1xlc6bSZt/jXXgwIaEp0ovwcAhXmBvhG9U1oCF?= =?utf-8?q?eD3Ykc9u2ymzPv4KVdlhMmvG5wGqFH3tpHywmLlN6fBhoeUj0JI6qx3+Nn8I6pUGj?= =?utf-8?q?E04YqDuNURgee7D6CHNCNg5/8HUA7i7WQM526/35pbbQdoVGmqfA8OV0pDKtNz8zP?= =?utf-8?q?a+o2+p21AcuLzrChk/jR4ecoJg6bhhDTQ+09nUizeSWcN/5iXD0Xg5ad60Ro3Fylu?= =?utf-8?q?eMcuoXtU5uyOx19jsdIy2OU8ThNFYbTj0LFYvXpQw8pNik6UWryDComsxseLQdI5X?= =?utf-8?q?MouVfkUK9b13v5NmMUBB/HT0BLXVAdVZtDWLziOBfQhw2Gs99s7NIO+07P6HWZN5v?= =?utf-8?q?mrmQZlBpAejJvMzqKIlE4B7+6S700o3vukh54uB/7gWf/7v6+tzbkGVapmKQaFH3o?= =?utf-8?q?FDfMZuoEBnAGDfeeha8zK//NtzTwO57t4GnTjaEI2++BkYghHM6EJnVs8ApxZnKLZ?= =?utf-8?q?yHJtMBdT6wOv79yNDhGHBwxTAhvjUREuLiZbMZbP+xqiFJhasTDqFSAJnDqOg1jbF?= =?utf-8?q?ZXScT2HRXvmumylpq5iu4CDPx39fLt7x2r5mNm4RIA29bWMFQRc3fmtJRpd4+M0WN?= =?utf-8?q?Be8Biz8GmaCNXiN6e2XsYDwfxFJSeFAijDrf79SAce0ISTNrnaAdC1T7X0FOBt1gA?= =?utf-8?q?JExp22ywIq8P33e/t4DBPrB0K9MODbPss4OpKJ5upF6IsYj/zPHJYM13aemiNl5SQ?= =?utf-8?q?p2qKxRv/zRHs?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 574915ae-6a89-4fdc-bf63-08db2151610b X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:22:40.8846 (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: noKUOFHHXgC3F4PbbX7TodFVqArEyx52HMxoMdnsVsdHCJwnAv++FzGu8PPlKqUjXojWMiZPAakqqNPs8p0qUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8339 X-Spam-Status: No, score=-3028.2 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_NONE, 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 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?1759975956648881176?= X-GMAIL-MSGID: =?utf-8?q?1759975956648881176?= While in principle merely rejecting this for .insn would be sufficient for the purposes there, be more generic and reject it for anything that isn't going to be a branch: All elements of same-mnemonic template groups either are branches, or are not, and the few cases possibly requiring a 2nd parsing pass aren't affected either. This then also improves diagnostics for misuses like inc *%eax incl %fs:*(%eax) add *$1, %eax --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -11837,7 +11837,8 @@ i386_att_operand (char *operand_string) /* We check for an absolute prefix (differentiating, for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */ - if (*op_string == ABSOLUTE_PREFIX) + if (*op_string == ABSOLUTE_PREFIX + && current_templates->start->opcode_modifier.jump) { ++op_string; if (is_space_char (*op_string)) @@ -11868,7 +11869,8 @@ i386_att_operand (char *operand_string) ++op_string; /* Handle case of %es:*foo. */ - if (!i.jumpabsolute && *op_string == ABSOLUTE_PREFIX) + if (!i.jumpabsolute && *op_string == ABSOLUTE_PREFIX + && current_templates->start->opcode_modifier.jump) { ++op_string; if (is_space_char (*op_string)) From patchwork Fri Mar 10 10:23:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67327 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp789730wrd; Fri, 10 Mar 2023 02:24:38 -0800 (PST) X-Google-Smtp-Source: AK7set+o6Hd2tPtJ67T27hclqecbWfmiaquW8BKFyeDTdLZwemlJr9cN0hSQAZhjJiCng9TCC74r X-Received: by 2002:a17:906:5dcb:b0:8b1:7eb7:d53d with SMTP id p11-20020a1709065dcb00b008b17eb7d53dmr27584331ejv.49.1678443878379; Fri, 10 Mar 2023 02:24:38 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id l15-20020a056402124f00b004c4ce189cb0si2098357edw.253.2023.03.10.02.24.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:24:38 -0800 (PST) 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=Nzch9xfw; 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 7B642386482C for ; Fri, 10 Mar 2023 10:23:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7B642386482C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443837; bh=imOF/IHEj1KkJqHWluFINQYkVqWkjfjKsTOr+44/9vI=; 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=Nzch9xfwfGYYPbYj1xQijW+V+5vOE8s6bA62PFmwYIji/+zoYhFlIx/BWpUQ+/R8W dgQ60gXa4unyFcm9UNhND32GlpBSJxb5m+B9v0e6P4YWuDqR4f910b2RuhO9WCLwLG pnXFYES2YAbVZHwFHCftJmukMvDt3MPothdWuOL0= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2054.outbound.protection.outlook.com [40.107.8.54]) by sourceware.org (Postfix) with ESMTPS id CF186384F021 for ; Fri, 10 Mar 2023 10:23:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CF186384F021 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y4mOFnN4Ag+Txii0PwcVpIS069MV1c2R2QdWKSGeg3QncPwn8BRY6tZpnTUhp4GuF+EyAaUl6rPE2ZBWKT6afil6emZYPPaZ737UJQO9u8n67/+yxYOj/yONnSyD+LNsV+R/REVnmWMYwok84VRURMHa5dT6ylKW5Vb/aGfk2tpviHI58TSbCZpxQ4bUI0rO1IoDFJlpOdGQ0ORvdlexd/Yw0mnWH5Z+xejeOIKna8ezBrzFhUBfNSMu3SQYvvZkMgSjbfJkd/ZyKGK7nToQH2D+EiTZH01kkr0Frykxr4KMNkT99582Qzz+VHMByM8Oa8wTtwUhUAzjhysWTv/Zsw== 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=imOF/IHEj1KkJqHWluFINQYkVqWkjfjKsTOr+44/9vI=; b=aHjXm2TMn1yw8hgrcqJxMutzuRICwwpRTLgO/u6mht4RFZN0cXFFSSuhxNRi+Moc5xp9SBr2CHStPtwSWc3gBPS5NQYB7fHnPcfm5wy/ZaHEw4uvzy2sbzqB/eJI2C4vPEU+/xNT6qefPtj/aUhcxI34h2Qrw7huEp2ns0Q4MpTjImV3WyslhaYZXdcgagJ4Fjlb+sBfqXcHGbSwggPxXm79xGIcDlrEBVek/m9EcGOu6mg/mgZs+TJ7mu8sOC22ROBCoBb5pezva7pt9ltWdXlKqcAk/BhfI7io+gVvpj7cH8wBF5p5l9EYLjLOwnlWAfG/cCNHkGewCSUakneZXw== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:23:42 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:23:42 +0000 Message-ID: <8d917f97-af55-11f3-a9f8-d5a209725336@suse.com> Date: Fri, 10 Mar 2023 11:23:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 08/14] x86: process instruction operands for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0099.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9c::9) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 2923ba69-ad92-493d-51f1-08db215185b3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Iyd7Z5KbY/o1YI8XZxcTO0cPZFkqC4jqpmS0avk41itfM97gP0So8IpQgVESLesjovWwyHrESjcotfYDH65l+225SH+Y1qYyl/DTm+pW3buRhGgAFmGKhFtFOLTvuPx7g/3Ncd7Ze6c6fV0tbum5GnwBNsfg7cCsX/4m9WDoX92+4ToedwSQM5uLED/2Hc4X99E7F0xbB5vrofpMiX+aRlIYA8qZjCywOpdZHair1pu96fJwYqFia/44M5u+FQudiTJk0xKpdn3+jV2gYAiM1hFpGY3kiMkh15uZllf1JCPRxLm6X2ShoSawral3guK6SF+IiUwcZEzAnY8DUeKLItx+xaNS/JmfO9nUWUY3lQ0p9ie47+alR/tMNCyoJvQ6QrehaxBLiHrQ9MAibsUT4PyMStnx8RIVqvEbOZjer0Z4vs4IS5jyYTowq/BYNb+XlCLbGLTFZF3HvBG9h774fS0QTBzuGVnDZbY/GtD0sL+LL7mahMBONnsGen6AzUWT3Wv5kAFlzWLq+3zEPzHGTKoEs2YV4H5amV9UEfah7Ew6eBbyMAbPkPsy2gyHhS5tS5IKfZ5MZEn3zElS7nKrtm78Dit0f9L1TAwDCe7bnBs/CoAeDOkXaWFTM49oKzrWeeM2pyaAbURwTSl9qnyicMhIsXdjqBhtBaXzOjt9pt+AeUwICOp9+XEAcRFfPMlF7m3LsWmQxVsy+ID1J4NWALoii09mA2BHkiXp/fe6NGkOMILColf6FWF90R3uja9D X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(30864003)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(66899018)(31686004)(142923001)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?F9nLIRqYOCDj7TmQMTyFUWDcWQOv?= =?utf-8?q?UqXBpGBi6gCDWllg9aFk8C+OT+6sbCxPnH7HrLgy43iBVe+wYblHrUVuypHT5oNSp?= =?utf-8?q?tpSPXcse+54J8B2EOD1ckKUe73pHyIu1tiIJO8REkzY+Vps0VmioKuuGwDH4toY8o?= =?utf-8?q?DBe6CWLYnYc/Ytm7I0R6ZRrp2ZoISphxKJnHrJeztCxqTZGaAiACDewmrXBnG4uGW?= =?utf-8?q?uA9JWoQrdHpExk2KhKv2+HdrJkjLxJz4bmGDcDZfrbK/et53O57WkgCYeHf6HoKoH?= =?utf-8?q?E2VrUm8Usoc5olgJWp8zuSYM0l01dY/sl/LRgeJ7ETHTaVosq9hyRctf6g5pyEuPU?= =?utf-8?q?vwZ0bpmZ0eCXheEu6ydw6BpUgsTRsZEkQBeou9jNfTmuO0eIbYkt4UifV6FaFbZVX?= =?utf-8?q?tJDf3CERgTjFyy/NW8GCtX0wzfU0Y0t4z5emHmUuhk8FLVlwRaW3lJ9Qb8snLN6xd?= =?utf-8?q?zJ461HhahvvQsCAJUlgCU8UCNAjxblQ8HlhvfD9UeRAo4eWspPQmJCUo1t8CObsVj?= =?utf-8?q?9QKi5Ck+3QekviTolwzVThRpcje4sJCbH+TSjr4/HaiorfUBWWSVayznxipXn/S3j?= =?utf-8?q?+ygtveenAY4BvaQ6UutsnVyjqEYaREu/0FcfuVpe3KU00pmArdUIEPEDyTL30bunk?= =?utf-8?q?5ZXBSwGChnS0ZtF964llE2rCvHmJCQCjVcpMW6OuShz/6E30hZgu5tsAm+TnbAs6i?= =?utf-8?q?XDJcuohwnppII6rpKpOw/nVBJhkxeiW8IEmyiKeu8k2wJ+Rg0nQ/y24IV0EvuuihC?= =?utf-8?q?cb+kWuaWfFbcwTiex+c73N9vznm0qaO9Ak3wBwZkRDdBekPN6aUIb5EerhtUCMaFO?= =?utf-8?q?/xIpKMpP6XjRxqQcLswb4RU7aIYDdbwcM0WjfoB3SSm5CabupOGCyOIJUPwKkIhgJ?= =?utf-8?q?w19vM7RCa9g+G16o+SiaA1PvYnnMQQCa0Hn+o9IQf1LBnKjyzUAcbfpa1ApO/pfZi?= =?utf-8?q?zK99Fk7KLbpqba423G6M4TzuK6reQ6zJM3EwgPd8LgQqolJiuM0uGjQoONURdK2yG?= =?utf-8?q?/1h9qcp/e51jSw5xJw5KNZf8ZtCvWdEa+ERLSS1zZZrdEBbSZ3jQVE+dyMjGgHVG8?= =?utf-8?q?o0n2oGXuLxTKa1Y4u3igz3ktKaMEGk0/V3ug2TDLFKm2GAZagemE5MjHG3dWwZYsK?= =?utf-8?q?lvcYWIYd0Namn/j2Ja7XtYfNBUSo6Enc83fO9GJqu43okSJv6tK0AyurJRKEZJ1PT?= =?utf-8?q?slVgsD6DbdTBTOcFWSNwhufTtyvecKfj43aKw6NAO6HRhLpuAaIy4YnUervYn8kR8?= =?utf-8?q?uMNVdNb09XRbRp+++/jfqSK3lc6hOrQmDj7jkhZ2XHuq4Ssv5OOhXyM8D2PJ2VILf?= =?utf-8?q?TTz2qDB1J+XM1vYxOeg33uMUJ+VaeU0KD+/9T56fFc1+voFXIAzBETNk17FdOv3K3?= =?utf-8?q?j/xVM/8ptR17V+ZEqF6T1toY5FPufs8+pTuHNw3C81hMsQwpXAO4ZHyzernB7Mv3W?= =?utf-8?q?F7NzAZvIy5G/ZFWrvu0UHKxEawdI4a/5QDmQ5+qYcYiTqsa9J3nbryUuOB4SPNBtN?= =?utf-8?q?DVqDlmpTVxG1?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2923ba69-ad92-493d-51f1-08db215185b3 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:23:42.4902 (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: IFQtOAwxG6P8FHZnyfREd9DvgBW4CnodRjkeVk8Fn+/rQOBYo5Z8nDbgeFSmczWVgRugR2JAWGiAE+VYq9lrdw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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 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?1759975968144105147?= X-GMAIL-MSGID: =?utf-8?q?1759975968144105147?= Deal with register and memory operands; immediate operands will follow later, as will the handling of EVEX embedded broadcast and EVEX Disp8 scaling. Note that because we can't really know how to encode their use, %cr8 and up cannot be used with .insn outside of 64-bit mode. Users would need to specify an explicit LOCK prefix in combination with %cr0 etc. --- I'm not convinced the assertions early in build_modrm_byte() are useful to retain. --- v2: Re-base over patch which was pulled ahead. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -2356,7 +2356,8 @@ fits_in_disp8 (offsetT num) static INLINE int fits_in_imm4 (offsetT num) { - return (num & 0xf) == num; + /* Despite the name, check for imm3 if we're dealing with EVEX. */ + return (num & (i.vec_encoding != vex_encoding_evex ? 0xf : 7)) == num; } static i386_operand_type @@ -8228,7 +8229,7 @@ process_operands (void) } } } - else if (i.types[0].bitfield.class == SReg) + else if (i.types[0].bitfield.class == SReg && !dot_insn ()) { if (flag_code != CODE_64BIT ? i.tm.base_opcode == POP_SEG_SHORT @@ -8261,15 +8262,32 @@ process_operands (void) } else if (i.short_form) { - /* The register operand is in operand 0 or 1. */ - const reg_entry *r = i.op[0].regs; + /* The register operand is in the 1st or 2nd non-immediate operand. */ + const reg_entry *r = i.op[i.imm_operands].regs; - if (i.imm_operands - || (r->reg_type.bitfield.instance == Accum && i.op[1].regs)) - r = i.op[1].regs; + if (!dot_insn () + && r->reg_type.bitfield.instance == Accum + && i.op[i.imm_operands + 1].regs) + r = i.op[i.imm_operands + 1].regs; /* Register goes in low 3 bits of opcode. */ i.tm.base_opcode |= r->reg_num; set_rex_vrex (r, REX_B, false); + + if (dot_insn () && i.reg_operands == 2) + { + gas_assert (is_any_vex_encoding (&i.tm) + || i.vec_encoding != vex_encoding_default); + i.vex.register_specifier = i.op[i.operands - 1].regs; + } + } + else if (i.reg_operands == 1 + && !i.flags[i.operands - 1] + && i.tm.operand_types[i.operands - 1].bitfield.instance + == InstanceNone) + { + gas_assert (is_any_vex_encoding (&i.tm) + || i.vec_encoding != vex_encoding_default); + i.vex.register_specifier = i.op[i.operands - 1].regs; } if ((i.seg[0] || i.prefix[SEG_PREFIX]) @@ -8330,10 +8348,12 @@ build_modrm_byte (void) VexW0 or VexW1. The destination must be either XMM, YMM or ZMM register. 2. 4 operands: 4 register operands or 3 register operands - plus 1 memory operand, with VexXDS. */ + plus 1 memory operand, with VexXDS. + 3. Other equivalent combinations when coming from s_insn(). */ gas_assert (i.tm.opcode_modifier.vexvvvv - && i.tm.opcode_modifier.vexw - && i.tm.operand_types[dest].bitfield.class == RegSIMD); + && i.tm.opcode_modifier.vexw); + gas_assert (dot_insn () + || i.tm.operand_types[dest].bitfield.class == RegSIMD); /* Of the first two non-immediate operands the one with the template not allowing for a memory one is encoded in the immediate operand. */ @@ -8342,6 +8362,14 @@ build_modrm_byte (void) else reg_slot = source++; + if (!dot_insn ()) + { + gas_assert (i.tm.operand_types[reg_slot].bitfield.class == RegSIMD); + gas_assert (!(i.op[reg_slot].regs->reg_flags & RegVRex)); + } + else + gas_assert (i.tm.operand_types[reg_slot].bitfield.class != ClassNone); + if (i.imm_operands == 0) { /* When there is no immediate operand, generate an 8bit @@ -8351,10 +8379,7 @@ build_modrm_byte (void) i.types[i.operands].bitfield.imm8 = 1; i.operands++; - gas_assert (i.tm.operand_types[reg_slot].bitfield.class == RegSIMD); exp->X_op = O_constant; - exp->X_add_number = register_number (i.op[reg_slot].regs) << 4; - gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0); } else { @@ -8365,11 +8390,11 @@ build_modrm_byte (void) /* Turn on Imm8 again so that output_imm will generate it. */ i.types[0].bitfield.imm8 = 1; - gas_assert (i.tm.operand_types[reg_slot].bitfield.class == RegSIMD); - i.op[0].imms->X_add_number - |= register_number (i.op[reg_slot].regs) << 4; - gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0); + exp = i.op[0].imms; } + exp->X_add_number |= register_number (i.op[reg_slot].regs) + << (3 + !(is_evex_encoding (&i.tm) + || i.vec_encoding == vex_encoding_evex)); } for (v = source + 1; v < dest; ++v) @@ -10634,6 +10659,9 @@ s_insn (int dummy ATTRIBUTE_UNUSED) goto bad; } + if (line > end && i.vec_encoding == vex_encoding_default) + i.vec_encoding = evex ? vex_encoding_evex : vex_encoding_vex; + if (line > end && *line == '.') { /* Length specifier (VEX.L, XOP.L, EVEX.L'L). */ @@ -10913,7 +10941,244 @@ s_insn (int dummy ATTRIBUTE_UNUSED) goto bad; } i.opcode_length = j; - i.tm.base_opcode = val; + + /* Handle operands, if any. */ + if (*line == ',') + { + i386_operand_type combined; + bool changed; + + ptr = parse_operands (line + 1, &i386_mnemonics[MN__insn]); + this_operand = -1; + if (!ptr) + goto bad; + line = ptr; + + if (!i.operands) + { + as_bad (_("expecting operand after ','; got nothing")); + goto done; + } + + if (i.mem_operands > 1) + { + as_bad (_("too many memory references for `%s'"), + &i386_mnemonics[MN__insn]); + goto done; + } + + /* Are we to emit ModR/M encoding? */ + if (!i.short_form + && (i.mem_operands + || i.reg_operands > (i.vec_encoding != vex_encoding_default) + || i.tm.extension_opcode != None)) + i.tm.opcode_modifier.modrm = 1; + + if (!i.tm.opcode_modifier.modrm + && (i.reg_operands + > i.short_form + 0U + (i.vec_encoding != vex_encoding_default) + || i.mem_operands)) + { + as_bad (_("too many register/memory operands")); + goto done; + } + + /* Enforce certain constraints on operands. */ + switch (i.reg_operands + i.mem_operands + + (i.tm.extension_opcode != None)) + { + case 0: + if (i.short_form) + { + as_bad (_("too few register/memory operands")); + goto done; + } + /* Fall through. */ + case 1: + if (i.tm.opcode_modifier.modrm) + { + as_bad (_("too few register/memory operands")); + goto done; + } + break; + + case 2: + break; + + case 4: + if (i.imm_operands + && (i.op[0].imms->X_op != O_constant + || !fits_in_imm4 (i.op[0].imms->X_add_number))) + { + as_bad (_("constant doesn't fit in %d bits"), evex ? 3 : 4); + goto done; + } + /* Fall through. */ + case 3: + if (i.vec_encoding != vex_encoding_default) + { + i.tm.opcode_modifier.vexvvvv = 1; + break; + } + /* Fall through. */ + default: + as_bad (_("too many register/memory operands")); + goto done; + } + + /* Bring operands into canonical order (imm, mem, reg). */ + do + { + changed = false; + + for (j = 1; j < i.operands; ++j) + { + if ((!operand_type_check (i.types[j - 1], imm) + && operand_type_check (i.types[j], imm)) + || (i.types[j - 1].bitfield.class != ClassNone + && i.types[j].bitfield.class == ClassNone)) + { + swap_2_operands (j - 1, j); + changed = true; + } + } + } + while (changed); + + /* For Intel syntax swap the order of register operands. */ + if (intel_syntax) + switch (i.reg_operands) + { + case 0: + case 1: + break; + + case 4: + swap_2_operands (i.imm_operands + i.mem_operands + 1, i.operands - 2); + /* Fall through. */ + case 3: + case 2: + swap_2_operands (i.imm_operands + i.mem_operands, i.operands - 1); + break; + + default: + abort (); + } + + /* Enforce constraints when using VSIB. */ + if (i.index_reg + && (i.index_reg->reg_type.bitfield.xmmword + || i.index_reg->reg_type.bitfield.ymmword + || i.index_reg->reg_type.bitfield.zmmword)) + { + if (i.vec_encoding == vex_encoding_default) + { + as_bad (_("VSIB unavailable with legacy encoding")); + goto done; + } + + if (i.vec_encoding == vex_encoding_evex + && i.reg_operands > 1) + { + /* We could allow two register operands, encoding the 2nd one in + an 8-bit immediate like for 4-register-operand insns, but that + would require ugly fiddling with process_operands() and/or + build_modrm_byte(). */ + as_bad (_("too many register operands with VSIB")); + goto done; + } + + i.tm.opcode_modifier.sib = 1; + } + + /* Establish operand size encoding. */ + operand_type_set (&combined, 0); + for (j = i.imm_operands; j < i.operands; ++j) + { + i.types[j].bitfield.instance = InstanceNone; + + if (operand_type_check (i.types[j], disp)) + i.types[j].bitfield.baseindex = 1; + + if ((i.broadcast.type || i.broadcast.bytes) + && j == i.broadcast.operand) + continue; + + combined = operand_type_or (combined, i.types[j]); + combined.bitfield.class = ClassNone; + } + + if (i.vec_encoding == vex_encoding_default) + { + if (flag_code == CODE_64BIT && combined.bitfield.qword) + i.rex |= REX_W; + else if ((flag_code == CODE_16BIT ? combined.bitfield.dword + : combined.bitfield.word) + && !add_prefix (DATA_PREFIX_OPCODE)) + goto done; + } + else if (!i.tm.opcode_modifier.vexw) + { + if (flag_code == CODE_64BIT) + { + if (combined.bitfield.qword) + i.tm.opcode_modifier.vexw = VEXW1; + else if (combined.bitfield.dword) + i.tm.opcode_modifier.vexw = VEXW0; + } + + if (!i.tm.opcode_modifier.vexw) + i.tm.opcode_modifier.vexw = VEXWIG; + } + + if (vex || xop) + { + if (!i.tm.opcode_modifier.vex) + { + if (combined.bitfield.ymmword) + i.tm.opcode_modifier.vex = VEX256; + else if (combined.bitfield.xmmword) + i.tm.opcode_modifier.vex = VEX128; + } + } + else if (evex) + { + if (!i.tm.opcode_modifier.evex) + { + /* Do _not_ consider AVX512VL here. */ + if (i.rounding.type != rc_none || combined.bitfield.zmmword) + i.tm.opcode_modifier.evex = EVEX512; + else if (combined.bitfield.ymmword) + i.tm.opcode_modifier.evex = EVEX256; + else if (combined.bitfield.xmmword) + i.tm.opcode_modifier.evex = EVEX128; + } + } + + if (i.disp_operands && !optimize_disp (&i.tm)) + goto done; + + for (j = 0; j < i.operands; ++j) + i.tm.operand_types[j] = i.types[j]; + + process_operands (); + } + + /* Don't set opcode until after processing operands, to avoid any + potential special casing there. */ + i.tm.base_opcode |= val; + + if (i.vec_encoding == vex_encoding_error + || (i.vec_encoding != vex_encoding_evex + ? i.broadcast.type || i.broadcast.bytes + || i.rounding.type != rc_none + || i.mask.reg + : (i.broadcast.type || i.broadcast.bytes) + && i.rounding.type != rc_none)) + { + as_bad (_("conflicting .insn operands")); + goto done; + } if (vex || xop) { @@ -10931,6 +11196,8 @@ s_insn (int dummy ATTRIBUTE_UNUSED) build_evex_prefix (); i.rex &= REX_OPCODE; } + else if (i.rex != 0) + add_prefix (REX_OPCODE | i.rex); output_insn (); @@ -11899,6 +12166,15 @@ i386_att_operand (char *operand_string) as_bad (_("junk `%s' after register"), op_string); return 0; } + + /* Reject pseudo registers for .insn. */ + if (dot_insn () && r->reg_type.bitfield.class == ClassNone) + { + as_bad (_("`%s%s' cannot be used here"), + register_prefix, r->reg_name); + return 0; + } + temp = r->reg_type; temp.bitfield.baseindex = 0; i.types[this_operand] = operand_type_or (i.types[this_operand], @@ -13274,7 +13550,9 @@ static bool check_register (const reg_en } if (((r->reg_flags & (RegRex64 | RegRex)) || r->reg_type.bitfield.qword) - && (!cpu_arch_flags.bitfield.cpulm || r->reg_type.bitfield.class != RegCR) + && (!cpu_arch_flags.bitfield.cpulm + || r->reg_type.bitfield.class != RegCR + || dot_insn ()) && flag_code != CODE_64BIT) return false; --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -320,8 +320,10 @@ i386_intel_simplify_register (expression as_bad (_("invalid use of register")); return 0; } - if (i386_regtab[reg_num].reg_type.bitfield.class == SReg - && i386_regtab[reg_num].reg_num == RegFlat) + if ((i386_regtab[reg_num].reg_type.bitfield.class == SReg + && i386_regtab[reg_num].reg_num == RegFlat) + || (dot_insn () + && i386_regtab[reg_num].reg_type.bitfield.class == ClassNone)) { as_bad (_("invalid use of pseudo-register")); return 0; @@ -342,6 +344,7 @@ i386_intel_simplify_register (expression if (intel_state.in_scale || i386_regtab[reg_num].reg_type.bitfield.baseindex + || dot_insn () || t->mnem_off == MN_bndmk || t->mnem_off == MN_bndldx || t->mnem_off == MN_bndstx) --- a/gas/testsuite/gas/i386/insn-32.d +++ b/gas/testsuite/gas/i386/insn-32.d @@ -11,6 +11,24 @@ Disassembly of section .text: [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: d9 ee[ ]+fldz [ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +[ ]*[a-f0-9]+: 8b c1[ ]+mov %ecx,%eax +[ ]*[a-f0-9]+: 66 8b c8[ ]+mov %ax,%cx +[ ]*[a-f0-9]+: 89 48 04[ ]+mov %ecx,0x4\(%eax\) +[ ]*[a-f0-9]+: 8b 0c 05 44 44 00 00[ ]+mov 0x4444\(,%eax,1\),%ecx +[ ]*[a-f0-9]+: 66 0f b6 cc[ ]+movzbw %ah,%cx +[ ]*[a-f0-9]+: 0f b7 c8[ ]+movzwl %ax,%ecx +[ ]*[a-f0-9]+: 0f ca[ ]+bswap %edx [ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall [ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall +[ ]*[a-f0-9]+: c5 f1 58 d0[ ]+vaddpd %xmm0,%xmm1,%xmm2 +[ ]*[a-f0-9]+: c5 f5 58 d0[ ]+vaddpd %ymm0,%ymm1,%ymm2 +[ ]*[a-f0-9]+: c5 f2 58 d0[ ]+vaddss %xmm0,%xmm1,%xmm2 +[ ]*[a-f0-9]+: c4 e3 69 68 19 00[ ]+vfmaddps %xmm0,\(%ecx\),%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 e9 68 18 10[ ]+vfmaddps \(%eax\),%xmm1,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c5 f8 92 c8[ ]+kmovw %eax,%k1 +[ ]*[a-f0-9]+: c5 f8 93 c1[ ]+kmovw %k1,%eax +[ ]*[a-f0-9]+: 62 f1 74 18 58 d0[ ]+vaddps \{rn-sae\},%zmm0,%zmm1,%zmm2 +[ ]*[a-f0-9]+: c4 e2 79 92 1c 48[ ]+vgatherdps %xmm0,\(%eax,%xmm1,2\),%xmm3 +[ ]*[a-f0-9]+: 62 f2 fd 0c 93 1c 48[ ]+vgatherqpd \(%eax,%xmm1,2\),%xmm3\{%k4\} #pass --- a/gas/testsuite/gas/i386/insn-32.s +++ b/gas/testsuite/gas/i386/insn-32.s @@ -13,6 +13,42 @@ insn: # setssbsy .insn 0xf30f01e8 + # mov + .insn 0x8b, %ecx, %eax + .insn 0x8b, %ax, %cx + .insn 0x89, %ecx, 4(%eax) + .insn 0x8b, 0x4444(,%eax), %ecx + + # movzx + .insn 0x0fb6, %ah, %cx + .insn 0x0fb7, %eax, %ecx + + # bswap + .insn 0x0fc8+r, %edx + # vzeroall .insn VEX.256.0F.WIG 0x77 .insn {vex3} VEX.L1 0x0f77 + + # vaddpd + .insn VEX.66.0F 0x58, %xmm0, %xmm1, %xmm2 + .insn VEX.66 0x0f58, %ymm0, %ymm1, %ymm2 + + # vaddss + .insn VEX.LIG.F3.0F 0x58, %xmm0, %xmm1, %xmm2 + + # vfmaddps + .insn VEX.66.0F3A.W0 0x68, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x68, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x68, (%eax), %xmm1, %xmm2, %xmm3 + + # kmovw + .insn VEX.L0.0F.W0 0x92, %eax, %k1 + .insn VEX.L0.0F.W0 0x93, %k1, %eax + + # vaddps + .insn EVEX.NP.0F.W0 0x58, {rn-sae}, %zmm0, %zmm1, %zmm2 + + # vgather... + .insn VEX.66.0f38.W0 0x92, %xmm0, (%eax, %xmm1, 2), %xmm3 + .insn EVEX.66.0f38.W1 0x93, (%eax, %xmm1, 2), %xmm3{%k4} --- a/gas/testsuite/gas/i386/insn-64.d +++ b/gas/testsuite/gas/i386/insn-64.d @@ -11,6 +11,35 @@ Disassembly of section .text: [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: d9 ee[ ]+fldz [ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy +[ ]*[a-f0-9]+: 44 8b c1[ ]+mov %ecx,%r8d +[ ]*[a-f0-9]+: 48 8b c8[ ]+mov %rax,%rcx +[ ]*[a-f0-9]+: 41 89 48 08[ ]+mov %ecx,0x8\(%r8\) +[ ]*[a-f0-9]+: 42 8b 0c 05 80 80 00 00[ ]+mov 0x8080\(,%r8,1\),%ecx +[ ]*[a-f0-9]+: 66 0f be cc[ ]+movsbw %ah,%cx +[ ]*[a-f0-9]+: 0f bf c8[ ]+movswl %ax,%ecx +[ ]*[a-f0-9]+: 48 63 c8[ ]+movslq %eax,%rcx +[ ]*[a-f0-9]+: 48 0f ca[ ]+bswap %rdx +[ ]*[a-f0-9]+: 41 0f c8[ ]+bswap %r8d [ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall [ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall +[ ]*[a-f0-9]+: c4 c1 71 58 d0[ ]+vaddpd %xmm8,%xmm1,%xmm2 +[ ]*[a-f0-9]+: c5 b5 58 d0[ ]+vaddpd %ymm0,%ymm9,%ymm2 +[ ]*[a-f0-9]+: c5 72 58 d0[ ]+vaddss %xmm0,%xmm1,%xmm10 +[ ]*[a-f0-9]+: c4 e3 69 68 19 80[ ]+vfmaddps %xmm8,\(%rcx\),%xmm2,%xmm3 +[ ]*[a-f0-9]+: 67 c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 c3 e9 68 18 10[ ]+vfmaddps \(%r8\),%xmm1,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 c1 78 92 c8[ ]+kmovw %r8d,%k1 +[ ]*[a-f0-9]+: c5 78 93 c1[ ]+kmovw %k1,%r8d +[ ]*[a-f0-9]+: 62 b1 74 38 58 d0[ ]+vaddps \{rd-sae\},%zmm16,%zmm1,%zmm2 +[ ]*[a-f0-9]+: 62 f1 74 10 58 d0[ ]+vaddps \{rn-sae\},%zmm0,%zmm17,%zmm2 +[ ]*[a-f0-9]+: 62 e1 74 58 58 d0[ ]+vaddps \{ru-sae\},%zmm0,%zmm1,%zmm18 +[ ]*[a-f0-9]+: c4 e2 39 92 1c 48[ ]+vgatherdps %xmm8,\(%rax,%xmm1,2\),%xmm3 +[ ]*[a-f0-9]+: c4 c2 79 92 1c 48[ ]+vgatherdps %xmm0,\(%r8,%xmm1,2\),%xmm3 +[ ]*[a-f0-9]+: c4 a2 79 92 1c 48[ ]+vgatherdps %xmm0,\(%rax,%xmm9,2\),%xmm3 +[ ]*[a-f0-9]+: c4 62 79 92 1c 48[ ]+vgatherdps %xmm0,\(%rax,%xmm1,2\),%xmm11 +[ ]*[a-f0-9]+: 62 d2 fd 0c 93 1c 48[ ]+vgatherqpd \(%r8,%xmm1,2\),%xmm3\{%k4\} +[ ]*[a-f0-9]+: 62 b2 fd 0c 93 1c 48[ ]+vgatherqpd \(%rax,%xmm9,2\),%xmm3\{%k4\} +[ ]*[a-f0-9]+: 62 f2 fd 04 93 1c 48[ ]+vgatherqpd \(%rax,%xmm17,2\),%xmm3\{%k4\} +[ ]*[a-f0-9]+: 62 72 fd 0c 93 1c 48[ ]+vgatherqpd \(%rax,%xmm1,2\),%xmm11\{%k4\} +[ ]*[a-f0-9]+: 62 e2 fd 0c 93 1c 48[ ]+vgatherqpd \(%rax,%xmm1,2\),%xmm19\{%k4\} #pass --- a/gas/testsuite/gas/i386/insn-64.s +++ b/gas/testsuite/gas/i386/insn-64.s @@ -13,6 +13,53 @@ insn: # setssbsy .insn 0xf30f01e8 + # mov + .insn 0x8b, %ecx, %r8d + .insn 0x8b, %rax, %rcx + .insn 0x89, %ecx, 8(%r8) + .insn 0x8b, 0x8080(,%r8), %ecx + + # movsx + .insn 0x0fbe, %ah, %cx + .insn 0x0fbf, %eax, %ecx + .insn 0x63, %rax, %rcx + + # bswap + .insn 0x0fc8+r, %rdx + .insn 0x0fc8+r, %r8d + # vzeroall .insn VEX.256.0F.WIG 0x77 .insn {vex3} VEX.L1 0x0f77 + + # vaddpd + .insn VEX.66.0F 0x58, %xmm8, %xmm1, %xmm2 + .insn VEX.66 0x0f58, %ymm0, %ymm9, %ymm2 + + # vaddss + .insn VEX.LIG.F3.0F 0x58, %xmm0, %xmm1, %xmm10 + + # vfmaddps + .insn VEX.66.0F3A.W0 0x68, %xmm8, (%rcx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x68, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x68, (%r8), %xmm1, %xmm2, %xmm3 + + # kmovw + .insn VEX.L0.0F.W0 0x92, %r8d, %k1 + .insn VEX.L0.0F.W0 0x93, %k1, %r8d + + # vaddps + .insn EVEX.NP.0F.W0 0x58, {rd-sae}, %zmm16, %zmm1, %zmm2 + .insn EVEX.NP.0F.W0 0x58, {rn-sae}, %zmm0, %zmm17, %zmm2 + .insn EVEX.NP.0F.W0 0x58, {ru-sae}, %zmm0, %zmm1, %zmm18 + + # vgather... + .insn VEX.66.0f38.W0 0x92, %xmm8, (%rax, %xmm1, 2), %xmm3 + .insn VEX.66.0f38.W0 0x92, %xmm0, (%r8, %xmm1, 2), %xmm3 + .insn VEX.66.0f38.W0 0x92, %xmm0, (%rax, %xmm9, 2), %xmm3 + .insn VEX.66.0f38.W0 0x92, %xmm0, (%rax, %xmm1, 2), %xmm11 + .insn EVEX.66.0f38.W1 0x93, (%r8, %xmm1, 2), %xmm3{%k4} + .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm9, 2), %xmm3{%k4} + .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm17, 2), %xmm3{%k4} + .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm1, 2), %xmm11{%k4} + .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm1, 2), %xmm19{%k4} From patchwork Fri Mar 10 10:24:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67328 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp790105wrd; Fri, 10 Mar 2023 02:25:47 -0800 (PST) X-Google-Smtp-Source: AK7set/1OvM9D/HI5ik/DnrsaE5wWSig+hsmTMoYYi//VohRniSZ7Y2YxbBxnNtZ26dv0eGXEE5I X-Received: by 2002:a17:907:3da7:b0:8b2:8857:5963 with SMTP id he39-20020a1709073da700b008b288575963mr32663019ejc.8.1678443947872; Fri, 10 Mar 2023 02:25:47 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id q11-20020a17090676cb00b008b12654c973si1265466ejn.269.2023.03.10.02.25.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:25:47 -0800 (PST) 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=Q6VgsiCQ; 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 A42583850228 for ; Fri, 10 Mar 2023 10:24:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A42583850228 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443892; bh=ev2OeYEOiixaJdiOtuh06ZJ2UNjYOdfuiFksSGNX+jA=; 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=Q6VgsiCQsghtwlr2RJmaNoVdAI2I1PGVg03c1DRC8p+Bgx2LVYe3j5vFP5ld9nKEW blvveMcxurqTthpgGSmIRVpmvD0Ff2OJMRIddy2ndGaRZXOUdl9enMKmwJZIqpFJtz Xl1KGDlN0IkWGO51gXJdJc61FFgrsl+vbHMseyyA= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2087.outbound.protection.outlook.com [40.107.7.87]) by sourceware.org (Postfix) with ESMTPS id 25BC53850848 for ; Fri, 10 Mar 2023 10:24:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 25BC53850848 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bx8mzKD0eCAjisStMmitZCwoV1/KEEkP5KUi9TAq4c8JTySMMWlW825GCGeyA9jrQ4rr2A1lHpdDdGlEB2uq/FVLAPhbyx0ik6WSMqLG9Di7+pMESU0rp0cIjN+gnE04fjzGvULujhz3x0k5UspZYCpPkayWxiHB+F+FNPfd/4HBSkJ0RMfjDxKXEXH65qNJJPG0qjqmTNbgHGfJ46e1HxoV6xywY2jaO/QBHR6H0vgDqK23zeC1aUaLclUvNGhnQjkNNTtUeKc5Z3nlX92Iz9cvEhyafcwvqPWOms+ghnxWg0LHqd7YI08rPxWq4Uex/QatjLOwplAiD5uQpcOnTQ== 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=ev2OeYEOiixaJdiOtuh06ZJ2UNjYOdfuiFksSGNX+jA=; b=l+TFYlZM3rXcZaDn54fxrUQuogVBqIGI7UTiExhF6d8QIVREI9CZIF0lrGvqUsElHcq4zPsi3KoliR7swKSktlWtB7dakcxsoP22ZZkOjsdq5gW4igIv6cOoRuoIyh6Z0b3Dxcp1d+LGPrxDIr0H8YYXfWehHQC+LYr2qbt06D5QPl3aY2b5HTEldwA4ihRY8+J39rkO9U/UNCPvTdn/oPchr+gdt2RMRZpEtZ/egEVZDwzBnn8FbPm80e2E72Rq8NxptMRyS4VRQO3mQDASwQKwxW+7lLM83UKPqs7p9lvKjxFNtU/zKXy30LwDHZgJPRhY6r8g2KvbI1soCt/r5A== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB9PR04MB9819.eurprd04.prod.outlook.com (2603:10a6:10:4c0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:24:05 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:24:05 +0000 Message-ID: <010a5ae0-91a5-813b-8896-8fd11d5383d7@suse.com> Date: Fri, 10 Mar 2023 11:24:03 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 09/14] x86: handle EVEX Disp8 for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9c::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB9PR04MB9819:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b10d621-8c91-4e06-6209-08db2151938c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ny102OdtOxdSeDwiWDUZN1qvL0yV3U2GKqGHzTMrgJqkCuLHLVsZoE2SM5i/z6yPVnwiTbLz0U4U4nwW6tA+2JI3QWPe7hoRI7l+p1498otfwR+0WV+OvIoNg6Ppo5rqi7HnE6+C9jhqVq+ziN3rwacfX/VogblDnD85HpHTKnX+PtvYgKBctOebm3JTcHsBHDDL3PYcdgStAfEshFAP6AvfUrf9D9dxZ4RSbCizYKFhm7u0o0SQOJGQVp6vkZNeSGac6taKmCE77g8qQbqQa+nYDtDG12LfXArGdY8Xar/zH2v2J9DqZdVDAzrS1Z/X86EPMGUDR5qsVW5KQ8f3qgi3St2pjnERWJv6DbH+4j5QRzf/Qn/LQQ55itSwjou9YIUytcGxgETtAWw/8q8ipvJ5C1ANG81RraG4ihzdQrt/T3YzUYF3mFLvCtxSx94If9aLggEmvQ3kTq5Jjmwo0g0UsO5rA6IiDymm6yxfgQMWVLTyh+sBYWpYXDFAWr7eerMK0MXv78nvsCS9yFBAwxqYGK5VlQJuJN9OHaqODc6W1dfaLKnPqMzioDhB8HjTI5P7EdGSPvkKO5oWnNYScWvahF9m3RD60jfzsA/bsTNuHL8/XHK3/ZUi7pWehcCW3o1BcfIcqdThWZj821I8PxDJt9QmGuJHYvQEhbuZRNdigy5zzl00zAT1jexnUaRnV9eVQIcQB2mY0mVuMzErEP9HJ6dv2QallHDjIShQlaviW0aOYGhFLjSrUSeH4pTJtFaOlKjZR9+XAiCfrt7EfA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(39860400002)(136003)(346002)(376002)(366004)(451199018)(36756003)(5660300002)(83380400001)(26005)(186003)(6486002)(6506007)(6512007)(2616005)(66946007)(478600001)(316002)(4326008)(6916009)(8676002)(66556008)(8936002)(41300700001)(31696002)(86362001)(66476007)(54906003)(38100700002)(2906002)(31686004)(142923001)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?wpz2+rPCTpSg+PN3V6jiltATx/xY?= =?utf-8?q?sThSEmazlOKeMFLsJLFKs7p+bMb9QP878ChUXdZL8/45Kbnj7E1GYvxMLu6ny03hY?= =?utf-8?q?gjc1QST42XytjKD9N2qbmhjejlS82FBJqcaAWNvlqrkQcblfOo6jWonpCFQFYi9O0?= =?utf-8?q?xiqTM7M+iVAcdicuUY2XrDkpPL7g/uLu30+XBRc7ir/y4GXHHgtC+6SlOetjHUxKd?= =?utf-8?q?aQQP9SRZcSBRSvVMbePZ7iKeXC2zvnp7BRh+531yb2lBE7fbAKzBN1OEh24HmEJSL?= =?utf-8?q?jT23HM1H2Vb7rWrb+iq7+nBbPqDCaalq2uLv+ZzS13qPcdI8SnqrZyrYOVtkCunk6?= =?utf-8?q?gF98eI5i3XVV6uMKF67uBYm+tVHA7yjc1wsjQVLGv01dSnv3mGdXaEhRhQkv0N+Gq?= =?utf-8?q?j/oqW9CSchdqeVJjKhIzSIMLOaQb1bPQz+cH7C2mRDwWNMhRy61V+rwrQrbaf0tTl?= =?utf-8?q?HGhgD1h3oV3xLAq1nBwnuo+2xnlna6PmZb7j9CLXBPWMGk3xrpDDOUr37PP6PAzwU?= =?utf-8?q?UStF9tDAtYdjUHE5175xktVY9zKNf2bjnTPfwYATFl87kitGlG/yzEpmY8494B2E2?= =?utf-8?q?BxjC1BIwZezSsxbNxHVWyUPSoeMHYWE0MtWR/7ViVRHV5vkSATsNN4cItpac0OnYf?= =?utf-8?q?4c4ZZlSTsIIcBGMSwF85QPr6v2GG4Ky8Cpc3gKKmKxOdu+K+dK9wFvArXq7WRcEiN?= =?utf-8?q?TH3g+NQWYNaRRNzlY96BlJw/4v3/lG5qO7s1JHM3J8aB3SyOwLUFm4t/khgUbPBst?= =?utf-8?q?i1IFRKlG4son8/6SBi7NoWKnmC6vurysv5hjvcFErZYwZMtVOVD4hNi5XQVafmPSL?= =?utf-8?q?Ic24VaYUMCBXaYJgEd6dNXrmyZ21/ZIou8lrJRtSanqvMwc6His8sJWhkGBT/iTDD?= =?utf-8?q?aMRUKnsdLcFAFPaA7SCdUfTV5Hu2OtcOI/DGvYFUf1LFBpL+J8B7c4bwDkcMZwYlj?= =?utf-8?q?KEhdxB61mwgIFAoMdSoWUQ4TKn8/nd3+w1jcoIpw4ZQN+/J5OhyOi9qt0rsd95E3t?= =?utf-8?q?GYWFf2MRsmB5spMCGKIF8YVe2sofwpnXrgsm6nTtEGmIBD7lSTMiSAj6c9v0BiVGz?= =?utf-8?q?lq+laMoJf1HvmQvIwPjM9454MAISYYGslg8TlYC7Sk6u5+KrKxsmBS/dGln05Rzu1?= =?utf-8?q?vbZ2dlzL4pDRvDytgA0z8NLcWPtXazqVrZ+usHrULdjl7T4/ANm/uTXTj7nv2pELs?= =?utf-8?q?sDZU68mn856G1og8WuzR7b5dqp27M4pnY9HD4VGPqv/HJJZ3n72bRcKfgKnRhyeiE?= =?utf-8?q?CzFFiWIAhInZbQa+s7FdboLk3XgsHnBr0w3a9uk7T13chFtpcoK7CM+2/c3lxN0Xq?= =?utf-8?q?SmPjxeKvKTqehJ5tBS3fkwi02dfjVu6Ya9ACYBdY7mqaslq3rtSKanlZ4Bgs4/4su?= =?utf-8?q?M8b5J6Ea2PL/cuIMvi9RSLk7s92bylE+Z1BkZc6aLNMn2gXNMxBrjGj1Oqrpnm4Tr?= =?utf-8?q?pn1w1luSG9Nkc0CuwTTzXY8bGh9o2Nox0fZ+iQNWcIQrKEigYJ3Kl1PYHSw4cU3fs?= =?utf-8?q?c0Y5vUUK0933?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b10d621-8c91-4e06-6209-08db2151938c X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:24:05.5981 (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: JPZ5baJ7CaceuEXB5zgDnRHrWgM+GQ2rRjGuyIZG9OMXH9/I2OEmo7rEVp60wm7jEFOeMZHQYEBaJt3TotSOmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9819 X-Spam-Status: No, score=-3028.2 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 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?1759976040915237739?= X-GMAIL-MSGID: =?utf-8?q?1759976040915237739?= In particular the scaling factor cannot always be determined from pre- existing operand attributes. Introduce a new {:d} vector operand syntax extension, restricted to .insn only, to allow specifying this in (at least) otherwise ambiguous cases. --- I was considering to suppress the {:d...} extension for Intel syntax, as it should not be required there (and doing so would then also prevent both possibly conflicting). Thoughts? --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10946,8 +10946,11 @@ s_insn (int dummy ATTRIBUTE_UNUSED) if (*line == ',') { i386_operand_type combined; + expressionS *disp_exp = NULL; bool changed; + i.memshift = -1; + ptr = parse_operands (line + 1, &i386_mnemonics[MN__insn]); this_operand = -1; if (!ptr) @@ -11093,12 +11096,40 @@ s_insn (int dummy ATTRIBUTE_UNUSED) /* Establish operand size encoding. */ operand_type_set (&combined, 0); + for (j = i.imm_operands; j < i.operands; ++j) { i.types[j].bitfield.instance = InstanceNone; if (operand_type_check (i.types[j], disp)) - i.types[j].bitfield.baseindex = 1; + { + i.types[j].bitfield.baseindex = 1; + disp_exp = i.op[j].disps; + } + + if (evex && i.types[j].bitfield.baseindex) + { + unsigned int n = i.memshift; + + if (i.types[j].bitfield.byte) + n = 0; + else if (i.types[j].bitfield.word) + n = 1; + else if (i.types[j].bitfield.dword) + n = 2; + else if (i.types[j].bitfield.qword) + n = 3; + else if (i.types[j].bitfield.xmmword) + n = 4; + else if (i.types[j].bitfield.ymmword) + n = 5; + else if (i.types[j].bitfield.zmmword) + n = 6; + + if (i.memshift < 32 && n != i.memshift) + as_warn ("conflicting memory operand size specifiers"); + i.memshift = n; + } if ((i.broadcast.type || i.broadcast.bytes) && j == i.broadcast.operand) @@ -11108,6 +11139,16 @@ s_insn (int dummy ATTRIBUTE_UNUSED) combined.bitfield.class = ClassNone; } + switch ((i.broadcast.type ? i.broadcast.type : 1) + << (i.memshift < 32 ? i.memshift : 0)) + { + case 64: combined.bitfield.zmmword = 1; break; + case 32: combined.bitfield.ymmword = 1; break; + case 16: combined.bitfield.xmmword = 1; break; + case 8: combined.bitfield.qword = 1; break; + case 4: combined.bitfield.dword = 1; break; + } + if (i.vec_encoding == vex_encoding_default) { if (flag_code == CODE_64BIT && combined.bitfield.qword) @@ -11153,8 +11194,40 @@ s_insn (int dummy ATTRIBUTE_UNUSED) else if (combined.bitfield.xmmword) i.tm.opcode_modifier.evex = EVEX128; } + + if (i.memshift >= 32) + { + unsigned int n = 0; + + switch (i.tm.opcode_modifier.evex) + { + case EVEX512: n = 64; break; + case EVEX256: n = 32; break; + case EVEX128: n = 16; break; + } + + if (i.broadcast.type) + n /= i.broadcast.type; + + if (n > 0) + for (i.memshift = 0; !(n & 1); n >>= 1) + ++i.memshift; + else if (disp_exp != NULL && disp_exp->X_op == O_constant + && disp_exp->X_add_number != 0 + && i.disp_encoding != disp_encoding_32bit) + { + if (!quiet_warnings) + as_warn ("cannot determine memory operand size"); + i.disp_encoding = disp_encoding_32bit; + } + } } + if (i.memshift >= 32) + i.memshift = 0; + else if (!evex) + i.vec_encoding = vex_encoding_error; + if (i.disp_operands && !optimize_disp (&i.tm)) goto done; @@ -11329,6 +11402,29 @@ check_VecOperations (char *op_string) i.broadcast.type = bcst_type; i.broadcast.operand = this_operand; + + /* For .insn a data size specifier may be appended. */ + if (dot_insn () && *op_string == ':') + goto dot_insn_modifier; + } + /* Check .insn special cases. */ + else if (dot_insn () && *op_string == ':') + { + dot_insn_modifier: + if (op_string[1] == 'd') + { + unsigned long n; + + if (i.memshift < 32) + goto duplicated_vec_op; + + n = strtoul (op_string + 2, &end_op, 0); + if (n) + for (i.memshift = 0; !(n & 1); n >>= 1) + ++i.memshift; + if (i.memshift < 32 && n == 1) + op_string = end_op; + } } /* Check masking operation. */ else if ((mask = parse_register (op_string, &end_op)) != NULL) --- a/gas/testsuite/gas/i386/insn-32.d +++ b/gas/testsuite/gas/i386/insn-32.d @@ -23,6 +23,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: c5 f1 58 d0[ ]+vaddpd %xmm0,%xmm1,%xmm2 [ ]*[a-f0-9]+: c5 f5 58 d0[ ]+vaddpd %ymm0,%ymm1,%ymm2 [ ]*[a-f0-9]+: c5 f2 58 d0[ ]+vaddss %xmm0,%xmm1,%xmm2 +[ ]*[a-f0-9]+: 62 f1 76 08 58 50 01[ ]+\{evex\} vaddss (0x)?4\(%eax\),%xmm1,%xmm2 [ ]*[a-f0-9]+: c4 e3 69 68 19 00[ ]+vfmaddps %xmm0,\(%ecx\),%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 e3 e9 68 18 10[ ]+vfmaddps \(%eax\),%xmm1,%xmm2,%xmm3 @@ -31,4 +32,13 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 62 f1 74 18 58 d0[ ]+vaddps \{rn-sae\},%zmm0,%zmm1,%zmm2 [ ]*[a-f0-9]+: c4 e2 79 92 1c 48[ ]+vgatherdps %xmm0,\(%eax,%xmm1,2\),%xmm3 [ ]*[a-f0-9]+: 62 f2 fd 0c 93 1c 48[ ]+vgatherqpd \(%eax,%xmm1,2\),%xmm3\{%k4\} +[ ]*[a-f0-9]+: 62 f2 7d 28 88 48 01[ ]+vexpandps (0x)?4\(%eax\),%ymm1 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%eax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%eax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%eax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%eax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%eax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%eax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 7c 48 5a 40 01[ ]+vcvtph2pd 0x10\(%eax\),%zmm0 +[ ]*[a-f0-9]+: 62 f5 7c 58 5a 40 01[ ]+vcvtph2pd (0x)?2\(%eax\)\{1to8\},%zmm0 #pass --- a/gas/testsuite/gas/i386/insn-32.s +++ b/gas/testsuite/gas/i386/insn-32.s @@ -36,6 +36,7 @@ insn: # vaddss .insn VEX.LIG.F3.0F 0x58, %xmm0, %xmm1, %xmm2 + .insn EVEX.LIG.F3.0F.W0 0x58, 4(%eax){:d4}, %xmm1, %xmm2 # vfmaddps .insn VEX.66.0F3A.W0 0x68, %xmm0, (%ecx), %xmm2, %xmm3 @@ -52,3 +53,18 @@ insn: # vgather... .insn VEX.66.0f38.W0 0x92, %xmm0, (%eax, %xmm1, 2), %xmm3 .insn EVEX.66.0f38.W1 0x93, (%eax, %xmm1, 2), %xmm3{%k4} + + # vexpandps + .insn EVEX.66.0F38.W0 0x88, 4(%eax){:d4}, %ymm1 + + # vcvtpd2phz + .insn EVEX.512.66.M5.W1 0x5a, 64(%eax), %xmm0 + .insn EVEX.66.M5.W1 0x5a, 64(%eax), %zmm0 + .insn EVEX.66.M5.W1 0x5a, 64(%eax){:d64}, %xmm0 + .insn EVEX.512.66.M5.W1 0x5a, 8(%eax){1to8}, %xmm0 + .insn EVEX.66.M5.W1 0x5a, 8(%eax){1to8}, %zmm0 + .insn EVEX.66.M5.W1 0x5a, 8(%eax){1to8:d8}, %xmm0 + + # vcvtph2pd + .insn EVEX.M5.W0 0x5a, 16(%eax){:d16}, %zmm0 + .insn EVEX.M5.W0 0x5a, 2(%eax){1to8:d2}, %zmm0 --- a/gas/testsuite/gas/i386/insn-64.d +++ b/gas/testsuite/gas/i386/insn-64.d @@ -25,6 +25,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: c4 c1 71 58 d0[ ]+vaddpd %xmm8,%xmm1,%xmm2 [ ]*[a-f0-9]+: c5 b5 58 d0[ ]+vaddpd %ymm0,%ymm9,%ymm2 [ ]*[a-f0-9]+: c5 72 58 d0[ ]+vaddss %xmm0,%xmm1,%xmm10 +[ ]*[a-f0-9]+: 62 f1 76 08 58 50 01[ ]+\{evex\} vaddss (0x)?4\(%rax\),%xmm1,%xmm2 [ ]*[a-f0-9]+: c4 e3 69 68 19 80[ ]+vfmaddps %xmm8,\(%rcx\),%xmm2,%xmm3 [ ]*[a-f0-9]+: 67 c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 c3 e9 68 18 10[ ]+vfmaddps \(%r8\),%xmm1,%xmm2,%xmm3 @@ -42,4 +43,13 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 62 f2 fd 04 93 1c 48[ ]+vgatherqpd \(%rax,%xmm17,2\),%xmm3\{%k4\} [ ]*[a-f0-9]+: 62 72 fd 0c 93 1c 48[ ]+vgatherqpd \(%rax,%xmm1,2\),%xmm11\{%k4\} [ ]*[a-f0-9]+: 62 e2 fd 0c 93 1c 48[ ]+vgatherqpd \(%rax,%xmm1,2\),%xmm19\{%k4\} +[ ]*[a-f0-9]+: 62 f2 7d 28 88 48 01[ ]+vexpandps (0x)?4\(%rax\),%ymm1 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%rax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%rax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 48 5a 40 01[ ]+vcvtpd2phz 0x40\(%rax\),%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%rax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%rax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%rax\)\{1to8\},%xmm0 +[ ]*[a-f0-9]+: 62 f5 7c 48 5a 40 01[ ]+vcvtph2pd 0x10\(%rax\),%zmm0 +[ ]*[a-f0-9]+: 62 f5 7c 58 5a 40 01[ ]+vcvtph2pd (0x)?2\(%rax\)\{1to8\},%zmm0 #pass --- a/gas/testsuite/gas/i386/insn-64.s +++ b/gas/testsuite/gas/i386/insn-64.s @@ -38,6 +38,7 @@ insn: # vaddss .insn VEX.LIG.F3.0F 0x58, %xmm0, %xmm1, %xmm10 + .insn EVEX.LIG.F3.0F.W0 0x58, 4(%rax){:d4}, %xmm1, %xmm2 # vfmaddps .insn VEX.66.0F3A.W0 0x68, %xmm8, (%rcx), %xmm2, %xmm3 @@ -63,3 +64,18 @@ insn: .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm17, 2), %xmm3{%k4} .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm1, 2), %xmm11{%k4} .insn EVEX.66.0f38.W1 0x93, (%rax, %xmm1, 2), %xmm19{%k4} + + # vexpandps + .insn EVEX.66.0F38.W0 0x88, 4(%rax){:d4}, %ymm1 + + # vcvtpd2phz + .insn EVEX.512.66.M5.W1 0x5a, 64(%rax), %xmm0 + .insn EVEX.66.M5.W1 0x5a, 64(%rax), %zmm0 + .insn EVEX.66.M5.W1 0x5a, 64(%rax){:d64}, %xmm0 + .insn EVEX.512.66.M5.W1 0x5a, 8(%rax){1to8}, %xmm0 + .insn EVEX.66.M5.W1 0x5a, 8(%rax){1to8}, %zmm0 + .insn EVEX.66.M5.W1 0x5a, 8(%rax){1to8:d8}, %xmm0 + + # vcvtph2pd + .insn EVEX.M5.W0 0x5a, 16(%rax){:d16}, %zmm0 + .insn EVEX.M5.W0 0x5a, 2(%rax){1to8:d2}, %zmm0 From patchwork Fri Mar 10 10:24:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67329 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp790176wrd; Fri, 10 Mar 2023 02:25:58 -0800 (PST) X-Google-Smtp-Source: AK7set/M38XPIqwm2bcJTB+ZJJwzHw0ok5pHPjTyez5H3OeWVziFLTiF7FgOxe0x9oyZP44/+kti X-Received: by 2002:a17:906:ee82:b0:8b1:7891:19e8 with SMTP id wt2-20020a170906ee8200b008b1789119e8mr31886666ejb.44.1678443958804; Fri, 10 Mar 2023 02:25:58 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id gj16-20020a170906e11000b008b17e235ac3si1503199ejb.924.2023.03.10.02.25.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:25:58 -0800 (PST) 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=fYU7Kzi6; 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 3F0FD385021B for ; Fri, 10 Mar 2023 10:25:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3F0FD385021B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443905; bh=X8fdXjgVuX9HiovB3R7V1kaNDAQdF/e+ex5AhLjDSCk=; 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=fYU7Kzi6GKqeboPMWF6CdlwB4L6Td7oFqKIlFqeLGUupeDeYCebrqW2yqq0D2+cnZ VX0FH+QhfEEECFqNBtm8tZ6hkCw3twJL19S6BHGliCZttftJx28v6LmAXXqNfCuVj6 +yMMFd8oqBfx1lPNM/f1iRzVvCNsm6/t1gtNQopE= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2046.outbound.protection.outlook.com [40.107.6.46]) by sourceware.org (Postfix) with ESMTPS id E5077384D192 for ; Fri, 10 Mar 2023 10:24:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E5077384D192 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ifYYW+hELTD+nW39LuEgFLPEv/4sFijqua+6LmtgYaUgypnniUOOiJEc/Ywg0BFzPCJlbpNfNr8DcnLxyVm5K6JJylA8IyZwicNxQkQgmI1Bp5X9+9M2rooKIVyV7QY8Mlxui1DXbJStjpMBBIvrvtCkun2wkQ3BVCFagMtnUSj84TEPc5B7zs2O6QR8Y83sygKw1kkATVKDMFTyb/WkDVl87A0ptuDZQk+iUQ2reD4E0BF6lV/HV/bNsqRaPTzXrHcEB8YK046pik3NOkDkx3p5goDWgLBLfWIHKCoQVmFGVcW5It0u7TS+C/2nKl/y8S6t3DdTVworqkfiaDf5uw== 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=X8fdXjgVuX9HiovB3R7V1kaNDAQdF/e+ex5AhLjDSCk=; b=QwHF9DrEudE3pMxsITyRwBejgh6OO3b0mBgUhIdsw+JpjCTXLz6kVo/Y1t4JeqCewlMleQRcZzZEp0mGkLFOayS2gUrW+KYKOPhvtWr1EHFdhTT1RUdXJDZZkJ4/jYfVldfRmPruSxWcMm16zM0Lrc9vc/QnC10R3wcVN4DPCvlO1oMzNdH/Kcj5AEmm8p0HwGu3TI7o1iuGr8fF6HIlOBxKE3aV2kPui2rLabCMUXjbtJwpX2meaO8/V7o7DJlJIP0Os18Eqfr4mtNw4Hdp++mhYQqePy/IJ3POSj1UGisqZumft/V0Tdx6fbTJvSJ4wEssk/7QkjumIVxnKovPow== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7138.eurprd04.prod.outlook.com (2603:10a6:208:19e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:24:55 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:24:55 +0000 Message-ID: <68848170-59cb-6546-6e7f-527f65a8c1fe@suse.com> Date: Fri, 10 Mar 2023 11:24:53 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 10/14] x86: allow for multiple immediates in output_disp() Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0141.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9e::20) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7138:EE_ X-MS-Office365-Filtering-Correlation-Id: f3597e09-c2f6-4ac3-b0c1-08db2151b13c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FyboIN7cQZIYY3czwALxgJGijl/UHN6kfwwsL7ZMbdX7p8RyRu3plJSzrQLbZQN+xUAda5W57JTUzVEB/u2ccsdc3B5ROjrqGTcnGcC66SRSTjOP0rGvGw9dln6dBNEC4M5y9RQGqnRZNxIHBk+5v2cGhtLHZXkqUiAWZ509YBn5Y+1pV8ocYRQB2LxTR7cIf53BS3VzADgRO6x1gnYTuPuI2m6VgIcpUYrI5bvhbTrC83DrYz6e1J6lcE6bHsq2acNw6yo0/luNCkVFAJM8brRgbAZlF0VVxSDkamLHAcp7NAWhljT1f1D3PsmWtqEDv+LpcqoYg1vwwyEGtm50VT1giml7dmMq4RCa73QVOMSVPyDJJ4yvDDqmSpzDLeg8rOOSlNNrD4SHoDPHlAU5e4FjA0JqtRA/VANg/CruSbcQNLUaeN+cmMlD6zpG45/9xhRQhdsKydnz9Hp3rIJGyUNM6WYaE3o63Qn2YI85MEPg58G8/L6nMAPZa2Qg9qVUnEYneN3Sun+XMc+e3lyycQ6qhO7d46m/mSWgRgGyFOZ+K1aPv5ZmK6IVfPbL+otNk+hMG4SA/jOd1O3TTTU8jLUkYHwAgvpjIc78utrZjAAVIlQy6u1vTpttM0cMTbjchXQnXSAaIRAJFsKPAtpmW5gKATvMHlRtjz3XoSDoy2YxNGwsE5dkoySwMO+deSpiGKz7nMga1Pd4bRXjtnnizvlLRoPscg5INoKgyseuWfOV0BUYPUBM2jHqJ77gw9Vn X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(346002)(39860400002)(376002)(136003)(366004)(451199018)(31686004)(83380400001)(36756003)(6512007)(54906003)(478600001)(316002)(38100700002)(8936002)(6486002)(2616005)(41300700001)(6506007)(26005)(186003)(5660300002)(4744005)(8676002)(66476007)(66946007)(66556008)(2906002)(6916009)(4326008)(31696002)(86362001)(14773001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?9BGEL7ZjzlZiGgitcnLmiTKKkClt?= =?utf-8?q?2Cbf6rsLKKEKujMPVtk5GMSdy1BkibSt0Ed0s7aiwnaHxAVtyuJF76uu72Xe5ZkN1?= =?utf-8?q?6vn0ULR8AEhdl5dzNn07RlHcNKQnqId8e5n+dzm4sRiczQh17t5bJX3ar8b3nfpGK?= =?utf-8?q?GXEmsUDYN/Lb3u5Ljo7Q1eaCJasXTuuRWow//ige3T2WePxgGNKbAvArrAailbmi6?= =?utf-8?q?vvB4aAamiuMDOvPlep4KKdb63aG3kJ2xYrAk6sFrhWG+i0Yc4MfefPm5Znkyx+7Ef?= =?utf-8?q?rNBW8+H4gkTFVCkjqQK4suhipt7geWthdc86CbDFYsjK+0zbBnI0Fdy/za4gqcUx4?= =?utf-8?q?nJhjWigCpZgc98EM4G0ptwIFYAXky8hYPtXKwug6NIK9Bmf3SEJ+/OLy7Fd5+WG3p?= =?utf-8?q?hEFL4MrwS1JWmSCfPO6lo/wGNgoN23akZEGyCCJkXTh34QwhdZVnsr+GbGCR+tu8l?= =?utf-8?q?aeQq+E/Xl0yTmW33vgpJ4Ud8ZhWL0Gp06yIZ9OXjH3O695+eWDmO7yZMXj9Ds9vnE?= =?utf-8?q?ZYs48v22BKQeF4o8nEAzEolbkZEP7Xp23zofyAStfHebZo1xe3kp5524Od3HSKc6h?= =?utf-8?q?EP26l7jeHGrFgcSVGQY+JrDDpgo1BHN1okK0AV+NNqvu63/pFy0ojvNZ5fY6yMS9S?= =?utf-8?q?0J1yk8YtyjpM2kSak7aD9bsMXZONorHvUnks1858manO6mfZhRhTD7g48dwi29s2d?= =?utf-8?q?E5Ooga2VqLk8fAKmORK2UmzCSYCsCSGAYZqUxsfYfou7aNH55BXTKpo8UCqLHnHn/?= =?utf-8?q?JvuylMEsfFQqSHIn62Bu4JOvvZadrOlix48vN3WsuOwK5cBA/16QD7ao6oct3d4ih?= =?utf-8?q?gFsyZgwH+lbECNfjS31Ae+jhfccTx4pqQeNzwTdn8rhebM0iNKiWIM88+Ee6Mw5Gd?= =?utf-8?q?a+zhjLDywFEmS1HlrLYxR4YiKXPHk06xMsH/N6vCR991Q9UTcO2oZCkNOEkueiJlP?= =?utf-8?q?D7OFXf55UcsztT5YS3TnKlEhqCei5bncZT+Dzwr2cGjLY6gL8xEV57dJmNCb75ELt?= =?utf-8?q?OWQFXTz5xzfDweF4TYsP3/98wyCtw0dCl4U/fwtu0TfSBbjNG9GCn9fxfgVH678jT?= =?utf-8?q?KiuJDf8tTNp6L4mfcqJDyRqK2COhn+qlbiSH2EseGNFHB5HJzfJ1jD1bAWgGQNy83?= =?utf-8?q?Splw/1OxS26f8shaGH8nRa/Jg2KgcrCH7B3qPyrLMimHWbud83gYFlRNJWJwWFdqU?= =?utf-8?q?+y3GyYYHWn0O29KxR17e2D4MiUJ1ufpyK3otFX8MA5KIPL4HMv31+GoMfA+5TTDGH?= =?utf-8?q?lK7B0/+k80zrDoXOmMVXzL87HrEJSxVmRGyyJsWrM52sd3KDhvAVMhjXsOfTzV/ao?= =?utf-8?q?qQCH1GPvfRH6dJt6EcMZWHXkjwdlr+KNkhMnXAMa2nFwcDyWXisQzy7ykzlsaFqXh?= =?utf-8?q?Lpkn5Q1v7KNmLgUzmzf0MCPWyo4dQaNeuzDfAmJrbwuC7VbJ3P10ribLCgF4LO/BR?= =?utf-8?q?6rrJmUYdFQIY1IT9JPlTDLOlcCv2Z50Q7mX2vVei3o9Oq3Oj6GdYK2CYx13trB5sw?= =?utf-8?q?WtGHVMyYrmB5?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3597e09-c2f6-4ac3-b0c1-08db2151b13c X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:24:55.3919 (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: o2nKXxZCOtlK7QWOWSsSYUg+b+arNTp+1OsZKgb2wgPM95S7wnVRWq4AZcs6UsM5k/XfBU9H+qrf+xL89S8riQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7138 X-Spam-Status: No, score=-3028.2 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 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?1759976052942665192?= X-GMAIL-MSGID: =?utf-8?q?1759976052942665192?= .insn isn't going to have a constraint of only a single immediate when, in particular, RIP-relative addressing is used. --- Of course this could be folded into the relevant subsequent patch, but I'm wondering in particular whether limiting the new behavior to .insn is actually necessary (if not, this wouldn't be a good fit to merge into that later patch). --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10065,13 +10065,13 @@ output_disp (fragS *insn_start_frag, off if (operand_type_check (i.types[n1], imm)) { /* Only one immediate is allowed for PC - relative address. */ - gas_assert (sz == 0); - sz = imm_size (n1); - i.op[n].disps->X_add_number -= sz; + relative address, except with .insn. */ + gas_assert (sz == 0 || dot_insn ()); + sz += imm_size (n1); } - /* We should find the immediate. */ + /* We should find at least one immediate. */ gas_assert (sz != 0); + i.op[n].disps->X_add_number -= sz; } p = frag_more (size); From patchwork Fri Mar 10 10:25:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67330 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp790497wrd; Fri, 10 Mar 2023 02:27:02 -0800 (PST) X-Google-Smtp-Source: AK7set9hZoTT1RA8uBp9w4s+n0GDHbR2meHC/xoiGBB4/QsNVoHEFoqrl1g54vkilkxEdDIDneDb X-Received: by 2002:a17:906:a40f:b0:8b2:5e3e:3103 with SMTP id l15-20020a170906a40f00b008b25e3e3103mr22202767ejz.49.1678444021981; Fri, 10 Mar 2023 02:27:01 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id r10-20020aa7d14a000000b004beeaa6bc04si2256243edo.97.2023.03.10.02.27.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:27:01 -0800 (PST) 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=r2pjVVGa; 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 C3AF638493E9 for ; Fri, 10 Mar 2023 10:25:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C3AF638493E9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443957; bh=NhxssYkIgmkZxC/gTuji+hpp86vm4E5KfykmZ5NvxlE=; 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=r2pjVVGaOJOggHRke2s2Y9Alb2TSmj+R4sPX82y/ZE+iLhvtNASJCyaAl1mlsjMU1 bPL+IF1kpA1+w8FNTQVwfITgxONlqjICodLf4tBnR/0GXb9S/o1usWxx8014T/sGym y++apO5/FiStyf6NBNwxFhCfyhWlDlMUj59m7yCM= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2041.outbound.protection.outlook.com [40.107.6.41]) by sourceware.org (Postfix) with ESMTPS id 421E1384F00F for ; Fri, 10 Mar 2023 10:25:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 421E1384F00F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CLHGzvvm+yyQg5ddbODfHQ/7k7wrQNvB60nWsbOoU6xuCAP4RVgZiFVtCW/kKwtvcbFstIJ/PHB8gWc2WJ6ovbCPi3OgfJOUcJo6TMmVegvOcQqutNRRqPq/kg+ltbOpX3UFD2LYHpfsDYbCn445vyJS+mHxykIMBfTIx3RoVvUg5KxFAkvB7KGkUP57SrALHqAJi3eItZTBnPKPMr7nrUCKJW6nIbqwFwrM9+YmsbAlTykRuBYRURbqh47kpCPTg+VkqnAPECG5mPUNzwbBfssqQ5Ftj0o2Dhmen/3h4njAdptf3LG9NNO0cywEQBZL9OvTSV0h6WKwpTaZhRv/YA== 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=NhxssYkIgmkZxC/gTuji+hpp86vm4E5KfykmZ5NvxlE=; b=jRDvFypRGwDChMZ8Jj0A+jFceri7DL2Uf6OfB4N4WeqpuG9+3DFLn675faAq3r1Nr/3jm+pR1eoCYNufI617XOt7eP8EjjZhJdqc4pZS/kk1tsAbUoeyrGs2exX7UP/ew3ErCnzC4aL8MHvTqI8gQh0LOOClmpTkfAzkzhPdWHILaCO2eQqKGY39eFngkkGMcHrivCU8pN440SSmAQWZJ2GvLCPFQ7249Q9br1W0zSLvAjRwJMnXNsI6deR4jMu2/fdETbOL3EWGqsjMVE9fu+TIMDyHt6jdISLsYvot72Hed37YsJ5GCw9IbpRRcN5V57T8a53/P4zZaFyghft5kA== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7138.eurprd04.prod.outlook.com (2603:10a6:208:19e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:25:45 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:25:45 +0000 Message-ID: Date: Fri, 10 Mar 2023 11:25:43 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 11/14] x86: handle immediate operands for .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0185.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a4::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7138:EE_ X-MS-Office365-Filtering-Correlation-Id: 4e50fe67-c8d4-42dc-3a3e-08db2151cee8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YiqtwmOMDFcxujU6XBzqwMxwwf+W8cCZIE0rmxh+3d3UbHXWqhP3jIkSBu/zf75V9Kk/AXqcM15ioIlUhJGArlvisbNXhp1I6dNgfzrQDIS9mCTme6xR+e7LQ8/Hk28ae3gwLSpolPecXGxLUa61/sZb0ygx2xKHhTeAuhq6WYS1lIm/7hlxgyVsHMKLxSsw5ZlKXead5+5I4ijGHgBOZvkbWvMMwpZqky+SuqU3GB5mPVkcM+5wU0Ds3lSEYiZryqAqn9vV5kTAZWk+vTGeW0+R3b1LlbO0HNQyuhWAmEwpCAaQSYvzyfoZo5Fzz+RKL+fzrca/Fh/FzqjPWE2aw2HuYpNeGjDmIyJGkfd54hIqoNeIk5I3X3Msf//V3n+ktvyvcMAh7xHMe72sRhMzD2GqThxc32ajoVRIHeihjKSCeYhMK2JqCwy0ls7+LiXsIoRGuqkO4vKit7N/xCMV9WabDWGTwI+kyjZQRymJ1c+kYxSR0QaNjxAFq+QZX7HnJttuxlGbESm1P27VjPA8/F4UZho7Cg7CLRSJNg2G9X/slfSEDIX5AljO4TmL3w7Z3/MS1Hgk39r2Pr80GVymjtuj1aSGLKBBIO3s2UD5n43IAwAcYMT9K06nA9IZlQuiEHS+qgP9s+iDVqX5gJ0KBbGVj/CpwVdRHO4XtdXX/n/Xt0GNWzhINVuBL4ldMdsv63wT2d8F1JseAPD+HXqISOOfmwYeqvhTmmz66ZOAuOkDQX5RORPrmN8ecUiYn995bPfE7DPQ8SpXLdoFBDILYQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(346002)(39860400002)(376002)(136003)(366004)(451199018)(31686004)(83380400001)(36756003)(6512007)(54906003)(478600001)(316002)(38100700002)(8936002)(6486002)(2616005)(41300700001)(6506007)(26005)(186003)(5660300002)(30864003)(8676002)(66476007)(66946007)(66556008)(2906002)(6916009)(4326008)(31696002)(86362001)(14773001)(142923001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?aiTfMa281Z04xlEN/jZCU5tpxjA2?= =?utf-8?q?jBgJD3Uugmcvmsv3ulotiqoUadA5dbZWpg4DqXPxgVMiTT5KFNzvnHkmoXL0/ZYZU?= =?utf-8?q?Qs7coDaym8i16U/vvH4PXo/kosRH74pT263EHHcHguuMI09WXEbJKuIbqHzesoq9i?= =?utf-8?q?SggAixPvH/2MwiG5XiYHj0EZC7wTgapmW9pe7QyvLHiiiZqSnUiqXJR/fAvplsrVf?= =?utf-8?q?WPS2MPoQ9K8MZAIAFxLSftRrNO9SF5fgSdPjE0+3qoWLZUxKyBC9UY7gJhxl0FeUT?= =?utf-8?q?t5dMIY9ux+vEJchyXbJtvMS1kWAeEYenFHZBNJTqEW7RgFSVOClXf5wOw1/AMpPw9?= =?utf-8?q?fTZo3GtXvoF/TC3wIeGFRm7F7tIEnCWuSH9cW6KJCvzlk18r7y2g3mzOCwvZr22hY?= =?utf-8?q?u0s8TMQ1RCnAoLoVGvKJFd/9kr0GE/yq2j1y78r6IwgvngQO000QVNCG11LuyXJth?= =?utf-8?q?FsnZE1kR65bB3VS+bOMcOBjSXDwId3XW9iUNLGUl7vepU6/O1Kw4cTGfbrtMA01na?= =?utf-8?q?ko6waYH23GqjC+CzGASfBvpJEJBf3bhg+pkU/8A9FP1mKXrGc13AGzeUFPJzhy5Z/?= =?utf-8?q?sh+b2MI2g3oPt3j7GoGDSPpOFagQU9ZwVA4dlUINplw1kKZlLwSA+N03jJwO+WhnP?= =?utf-8?q?aXQeBGVUa/DppQdctJ+QGPm13MntXcuLF//R79CYzXf2pX1di2ELKtdggKb0804/a?= =?utf-8?q?TpkThS7ACvPwOOsyJ935VEhYEscversU83WmGP6K/ztnvX9fre1zXPVneGk53s4+T?= =?utf-8?q?c4+DKJbMAQPFRGxh0u56fbGa4CHkZ5wOpVPM4H4iTR3MdHPPqjAxAEk0keiBoAKb3?= =?utf-8?q?TaFuHteFWwlaq5QAiFQ+O4J3H48MpiIluLzUJnxC2jS8sa03Yuq1KmVbXqgSF6g+z?= =?utf-8?q?2GlbttEIOgLfMaK+AljBhbTcjH81RoxxqzriXmoEwu34YMSKUk8QBnfCc3M/99/Na?= =?utf-8?q?+NRPup00H9teoxWf6u9pDiKn5y0Hfj8HWNzWENT58PZmayio9JaHEWJY/ZVbynr9y?= =?utf-8?q?ibiBETqxqOPw2t2Nh4XYmKDmwE6HYyk5U/8x2R/B79d6Akr/vRHfj/Fm+ixhsdTXm?= =?utf-8?q?ZbJoM1x8fD/5wHoAFl4XXpIvGZ8LogxTkBSSWUxdDz0Kf4XcVc6JSOYO6G3ZZjE3k?= =?utf-8?q?gVQESxkAwsWbF0qzJzsanw/sVpS0ISldiahgCyh2zJKWFm+as5MPfLxYjc3mZV345?= =?utf-8?q?Jp7JkJfiwpFBUTC/b2PlbyS7AtEf8ydMOBwwZKj4BQ6AvzqrPFJDQRbKlhEtz66Kf?= =?utf-8?q?/vsG+hQoVCNEnu0GwrnLeSme1nhj3Awi6ffZA46O7lz9b3QeqdJb2/QicKNh1UKAz?= =?utf-8?q?EHYNm+QM0PucXp+yO9nfTfuVC7pc9zafI7gQVE1GXvMB/7/MWzZmia+cn/OhHdQck?= =?utf-8?q?JwRC3Hx4edKsBv/WaoqwQUFrN0j1vYMKPiGyYMpY/9ehGcLbAxT9ZBaWaOBj9YZeO?= =?utf-8?q?WjiJWsCYrhy89ZWsYIRUfIpFSBfyH9IV3YY2XWNme7KOCT35YnsUUdZzq7fvwf6Au?= =?utf-8?q?wa0y4zh7Pikd?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e50fe67-c8d4-42dc-3a3e-08db2151cee8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:25:45.2481 (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: sXunk5DTuNpd9AkaDPejyprXh5lsdW82a2ZKngcdmOJ7sjfUNSHJWsnnyZ6SV+G1nEYGNG+faSMAGALw58SmTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7138 X-Spam-Status: No, score=-3028.2 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 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?1759976118869778010?= X-GMAIL-MSGID: =?utf-8?q?1759976118869778010?= Since we have no insn suffix and it's also not realistic to infer immediate size from the size of other (typically register) operands (like optimize_imm() does), and since we also don't have a template telling us permitted size(s), a new syntax construct is introduced to allow size (and signedness) specification. In the absence of such, the size is inferred from significant bits (which obviously may yield inconsistent results at least for effectively negative values, depending on whether BFD64 is enabled), and only if supplied expressions can be evaluated at parsing time. Being explicit is generally recommended to users. Size specification is permitted at bit granularity, but of course the eventually emitted immediate values will be padded up to 8-, 16-, 32-, or 64-bit fields. --- RFC: As to relocations emitted, there simply aren't enough to express the signed/unsigned distinction the new syntax allows. Similarly only significant bit counts 8, 16, 32, and 64 can be honored. Question is whether non-representable cases should be warned about or even be rejected. --- v2: Adjust 64-bit test expectations to also cover COFF. Xfail test for Darwin. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -288,6 +288,7 @@ struct _i386_insn unsigned int flags[MAX_OPERANDS]; #define Operand_PCrel 1 #define Operand_Mem 2 +#define Operand_Signed 4 /* .insn only */ /* Relocation type for operand */ enum bfd_reloc_code_real reloc[MAX_OPERANDS]; @@ -310,6 +311,9 @@ struct _i386_insn /* .insn allows for reserved opcode spaces. */ unsigned char insn_opcode_space; + /* .insn also allows (requires) specifying immediate size. */ + unsigned char imm_bits[MAX_OPERANDS]; + /* Register is in low 3 bits of opcode. */ bool short_form; @@ -5938,6 +5942,10 @@ swap_2_operands (unsigned int xchg1, uns i.reloc[xchg2] = i.reloc[xchg1]; i.reloc[xchg1] = temp_reloc; + temp_flags = i.imm_bits[xchg2]; + i.imm_bits[xchg2] = i.imm_bits[xchg1]; + i.imm_bits[xchg1] = temp_flags; + if (i.mask.reg) { if (i.mask.operand == xchg1) @@ -10203,7 +10211,8 @@ output_imm (fragS *insn_start_frag, offs if (i.types[n].bitfield.imm32s && (i.suffix == QWORD_MNEM_SUFFIX - || (!i.suffix && i.tm.opcode_modifier.no_lsuf))) + || (!i.suffix && i.tm.opcode_modifier.no_lsuf) + || dot_insn ())) sign = 1; else sign = 0; @@ -11231,6 +11240,57 @@ s_insn (int dummy ATTRIBUTE_UNUSED) if (i.disp_operands && !optimize_disp (&i.tm)) goto done; + /* Establish size for immediate operands. */ + for (j = 0; j < i.imm_operands; ++j) + { + expressionS *expP = i.op[j].imms; + + gas_assert (operand_type_check (i.types[j], imm)); + operand_type_set (&i.types[j], 0); + + if (i.imm_bits[j] > 32) + i.types[j].bitfield.imm64 = 1; + else if (i.imm_bits[j] > 16) + { + if (flag_code == CODE_64BIT && (i.flags[j] & Operand_Signed)) + i.types[j].bitfield.imm32s = 1; + else + i.types[j].bitfield.imm32 = 1; + } + else if (i.imm_bits[j] > 8) + i.types[j].bitfield.imm16 = 1; + else if (i.imm_bits[j] > 0) + { + if (i.flags[j] & Operand_Signed) + i.types[j].bitfield.imm8s = 1; + else + i.types[j].bitfield.imm8 = 1; + } + else if (expP->X_op == O_constant) + { + i.types[j] = smallest_imm_type (expP->X_add_number); + i.types[j].bitfield.imm1 = 0; + /* Oddly enough imm_size() checks imm64 first, so the bit needs + zapping since smallest_imm_type() sets it unconditionally. */ + if (flag_code != CODE_64BIT) + { + i.types[j].bitfield.imm64 = 0; + i.types[j].bitfield.imm32s = 0; + i.types[j].bitfield.imm32 = 1; + } + else if (i.types[j].bitfield.imm32 || i.types[j].bitfield.imm32s) + i.types[j].bitfield.imm64 = 0; + } + else + /* Non-constant expressions are sized heuristically. */ + switch (flag_code) + { + case CODE_64BIT: i.types[j].bitfield.imm32s = 1; break; + case CODE_32BIT: i.types[j].bitfield.imm32 = 1; break; + case CODE_16BIT: i.types[j].bitfield.imm16 = 1; break; + } + } + for (j = 0; j < i.operands; ++j) i.tm.operand_types[j] = i.types[j]; @@ -11411,10 +11471,11 @@ check_VecOperations (char *op_string) else if (dot_insn () && *op_string == ':') { dot_insn_modifier: - if (op_string[1] == 'd') + switch (op_string[1]) { unsigned long n; + case 'd': if (i.memshift < 32) goto duplicated_vec_op; @@ -11424,6 +11485,27 @@ check_VecOperations (char *op_string) ++i.memshift; if (i.memshift < 32 && n == 1) op_string = end_op; + break; + + case 's': case 'u': + /* This isn't really a "vector" operation, but a sign/size + specifier for immediate operands of .insn. Note that AT&T + syntax handles the same in i386_immediate(). */ + if (!intel_syntax) + break; + + if (i.imm_bits[this_operand]) + goto duplicated_vec_op; + + n = strtoul (op_string + 2, &end_op, 0); + if (n && n <= (flag_code == CODE_64BIT ? 64 : 32)) + { + i.imm_bits[this_operand] = n; + if (op_string[1] == 's') + i.flags[this_operand] |= Operand_Signed; + op_string = end_op; + } + break; } } /* Check masking operation. */ @@ -11562,6 +11644,22 @@ i386_immediate (char *imm_start) exp_seg = expression (exp); + /* For .insn immediates there may be a size specifier. */ + if (dot_insn () && *input_line_pointer == '{' && input_line_pointer[1] == ':' + && (input_line_pointer[2] == 's' || input_line_pointer[2] == 'u')) + { + char *e; + unsigned long n = strtoul (input_line_pointer + 3, &e, 0); + + if (*e == '}' && n && n <= (flag_code == CODE_64BIT ? 64 : 32)) + { + i.imm_bits[this_operand] = n; + if (input_line_pointer[2] == 's') + i.flags[this_operand] |= Operand_Signed; + input_line_pointer = e + 1; + } + } + SKIP_WHITESPACE (); if (*input_line_pointer) as_bad (_("junk `%s' after expression"), input_line_pointer); --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -965,7 +965,8 @@ i386_intel_operand (char *operand_string i386_operand_type temp; /* Register operand. */ - if (intel_state.base || intel_state.index || intel_state.seg) + if (intel_state.base || intel_state.index || intel_state.seg + || i.imm_bits[this_operand]) { as_bad (_("invalid operand")); return 0; @@ -998,6 +999,12 @@ i386_intel_operand (char *operand_string || intel_state.is_mem) { /* Memory operand. */ + if (i.imm_bits[this_operand]) + { + as_bad (_("invalid operand")); + return 0; + } + if (i.mem_operands) { /* Handle --- a/gas/testsuite/gas/i386/insn-32.d +++ b/gas/testsuite/gas/i386/insn-32.d @@ -1,5 +1,7 @@ +#as: --divide #objdump: -dw #name: .insn (32-bit code) +#xfail: *-*-darwin* .*: +file format .* @@ -10,6 +12,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: f3 90[ ]+pause [ ]*[a-f0-9]+: d9 ee[ ]+fldz +[ ]*[a-f0-9]+: d9 ee[ ]+fldz [ ]*[a-f0-9]+: f3 0f 01 e8[ ]+setssbsy [ ]*[a-f0-9]+: 8b c1[ ]+mov %ecx,%eax [ ]*[a-f0-9]+: 66 8b c8[ ]+mov %ax,%cx @@ -17,7 +20,10 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8b 0c 05 44 44 00 00[ ]+mov 0x4444\(,%eax,1\),%ecx [ ]*[a-f0-9]+: 66 0f b6 cc[ ]+movzbw %ah,%cx [ ]*[a-f0-9]+: 0f b7 c8[ ]+movzwl %ax,%ecx +[ ]*[a-f0-9]+: 64 f0 80 30 01[ ]+lock xorb \$(0x)?1,%fs:\(%eax\) [ ]*[a-f0-9]+: 0f ca[ ]+bswap %edx +[ ]*[a-f0-9]+: c7 f8 02 00 00 00[ ]+xbegin [0-9a-f]+ +[ ]*[a-f0-9]+: e2 f8[ ]+loop [0-9a-f]+ [ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall [ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall [ ]*[a-f0-9]+: c5 f1 58 d0[ ]+vaddpd %xmm0,%xmm1,%xmm2 @@ -27,6 +33,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: c4 e3 69 68 19 00[ ]+vfmaddps %xmm0,\(%ecx\),%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 e3 e9 68 18 10[ ]+vfmaddps \(%eax\),%xmm1,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 69 48 19 00[ ]+vpermil2ps \$(0x)?0,%xmm0,\(%ecx\),%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 e9 48 19 02[ ]+vpermil2ps \$(0x)?2,\(%ecx\),%xmm0,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 e9 48 18 13[ ]+vpermil2ps \$(0x)?3,\(%eax\),%xmm1,%xmm2,%xmm3 [ ]*[a-f0-9]+: c5 f8 92 c8[ ]+kmovw %eax,%k1 [ ]*[a-f0-9]+: c5 f8 93 c1[ ]+kmovw %k1,%eax [ ]*[a-f0-9]+: 62 f1 74 18 58 d0[ ]+vaddps \{rn-sae\},%zmm0,%zmm1,%zmm2 @@ -41,4 +50,8 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 62 f5 fd 58 5a 40 01[ ]+vcvtpd2ph (0x)?8\(%eax\)\{1to8\},%xmm0 [ ]*[a-f0-9]+: 62 f5 7c 48 5a 40 01[ ]+vcvtph2pd 0x10\(%eax\),%zmm0 [ ]*[a-f0-9]+: 62 f5 7c 58 5a 40 01[ ]+vcvtph2pd (0x)?2\(%eax\)\{1to8\},%zmm0 +[ ]*[a-f0-9]+: 62 f3 7d 28 66 40 01 ff[ ]+vfpclasspsy \$0xff,0x20\(%eax\),%k0 +[ ]*[a-f0-9]+: 62 f3 7d 28 66 40 01 ff[ ]+vfpclasspsy \$0xff,0x20\(%eax\),%k0 +[ ]*[a-f0-9]+: 62 f3 7d 38 66 40 01 ff[ ]+vfpclassps \$0xff,(0x)?4\(%eax\)\{1to8\},%k0 +[ ]*[a-f0-9]+: 62 f3 7d 38 66 40 01 ff[ ]+vfpclassps \$0xff,(0x)?4\(%eax\)\{1to8\},%k0 #pass --- a/gas/testsuite/gas/i386/insn-32.s +++ b/gas/testsuite/gas/i386/insn-32.s @@ -9,6 +9,7 @@ insn: # fldz .insn 0xd9ee + .insn 0xd9, $0xee # setssbsy .insn 0xf30f01e8 @@ -23,9 +24,20 @@ insn: .insn 0x0fb6, %ah, %cx .insn 0x0fb7, %eax, %ecx + # xorb + .insn lock 0x80/6, $1, %fs:(%eax) + # bswap .insn 0x0fc8+r, %edx +1: + # xbegin 3f + .insn 0xc7f8, $3f-2f{:s32} +2: + # loop 1b + .insn 0xe2, $1b-3f{:s8} +3: + # vzeroall .insn VEX.256.0F.WIG 0x77 .insn {vex3} VEX.L1 0x0f77 @@ -43,6 +55,11 @@ insn: .insn VEX.66.0F3A.W1 0x68, %xmm0, (%ecx), %xmm2, %xmm3 .insn VEX.66.0F3A.W1 0x68, (%eax), %xmm1, %xmm2, %xmm3 + # vpermil2ps + .insn VEX.66.0F3A.W0 0x48, $0, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x48, $2, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x48, $3, (%eax), %xmm1, %xmm2, %xmm3 + # kmovw .insn VEX.L0.0F.W0 0x92, %eax, %k1 .insn VEX.L0.0F.W0 0x93, %k1, %eax @@ -68,3 +85,10 @@ insn: # vcvtph2pd .insn EVEX.M5.W0 0x5a, 16(%eax){:d16}, %zmm0 .insn EVEX.M5.W0 0x5a, 2(%eax){1to8:d2}, %zmm0 + + .intel_syntax noprefix + # vfpclassps + .insn EVEX.256.66.0f3a.W0 0x66, k0, [eax+32], 0xff + .insn EVEX.66.0f3a.W0 0x66, k0, ymmword ptr [eax+32], 0xff + .insn EVEX.256.66.0f3a.W0 0x66, k0, [eax+4]{1to8}, 0xff + .insn EVEX.66.0f3a.W0 0x66, k0, dword ptr [eax+4]{1to8}, 0xff --- a/gas/testsuite/gas/i386/insn-64.d +++ b/gas/testsuite/gas/i386/insn-64.d @@ -1,5 +1,7 @@ -#objdump: -dw +#as: --divide +#objdump: -dwr #name: .insn (64-bit code) +#xfail: *-*-darwin* .*: +file format .* @@ -18,8 +20,14 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f be cc[ ]+movsbw %ah,%cx [ ]*[a-f0-9]+: 0f bf c8[ ]+movswl %ax,%ecx [ ]*[a-f0-9]+: 48 63 c8[ ]+movslq %eax,%rcx +[ ]*[a-f0-9]+: f0 80 35 ((00|ff) ){4}01[ ]+lock xorb \$(0x)?1,[-x01]+\(%rip\) *# .*: (R_X86_64_PC32 lock-(0x)?5|IMAGE_REL_AMD64_REL32 lock) [ ]*[a-f0-9]+: 48 0f ca[ ]+bswap %rdx [ ]*[a-f0-9]+: 41 0f c8[ ]+bswap %r8d +[ ]*[a-f0-9]+: c7 f8 02 00 00 00[ ]+xbegin [0-9a-f]+ +[ ]*[a-f0-9]+: e2 f8[ ]+loop [0-9a-f]+ +[ ]*[a-f0-9]+: 05 00 00 00 00[ ]+add \$(0x)?0,%eax .*: (R_X86_64_32|IMAGE_REL_AMD64_ADDR32) var +[ ]*[a-f0-9]+: 48 05 00 00 00 00[ ]+add \$(0x)?0,%rax .*: R_X86_64_32S var +[ ]*[a-f0-9]+: 81 3d (00|fc) ((00|ff) ){3}13 12 23 21[ ]+cmpl \$0x21231213,[-x04]+\(%rip\) *# .*: (R_X86_64_PC32 var-(0x)?8|IMAGE_REL_AMD64_REL32 var) [ ]*[a-f0-9]+: c5 fc 77[ ]+vzeroall [ ]*[a-f0-9]+: c4 e1 7c 77[ ]+vzeroall [ ]*[a-f0-9]+: c4 c1 71 58 d0[ ]+vaddpd %xmm8,%xmm1,%xmm2 @@ -29,6 +37,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: c4 e3 69 68 19 80[ ]+vfmaddps %xmm8,\(%rcx\),%xmm2,%xmm3 [ ]*[a-f0-9]+: 67 c4 e3 e9 68 19 00[ ]+vfmaddps \(%ecx\),%xmm0,%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 c3 e9 68 18 10[ ]+vfmaddps \(%r8\),%xmm1,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 e3 69 48 19 80[ ]+vpermil2ps \$(0x)0,%xmm8,\(%rcx\),%xmm2,%xmm3 +[ ]*[a-f0-9]+: 67 c4 e3 e9 48 19 02[ ]+vpermil2ps \$(0x)2,\(%ecx\),%xmm0,%xmm2,%xmm3 +[ ]*[a-f0-9]+: c4 c3 e9 48 18 13[ ]+vpermil2ps \$(0x)3,\(%r8\),%xmm1,%xmm2,%xmm3 [ ]*[a-f0-9]+: c4 c1 78 92 c8[ ]+kmovw %r8d,%k1 [ ]*[a-f0-9]+: c5 78 93 c1[ ]+kmovw %k1,%r8d [ ]*[a-f0-9]+: 62 b1 74 38 58 d0[ ]+vaddps \{rd-sae\},%zmm16,%zmm1,%zmm2 --- a/gas/testsuite/gas/i386/insn-64.s +++ b/gas/testsuite/gas/i386/insn-64.s @@ -24,10 +24,30 @@ insn: .insn 0x0fbf, %eax, %ecx .insn 0x63, %rax, %rcx + # xorb + .insn lock 0x80/6, $1, lock(%rip) + # bswap .insn 0x0fc8+r, %rdx .insn 0x0fc8+r, %r8d +1: + # xbegin 3f + .insn 0xc7f8, $3f-2f{:s32} +2: + # loop 1b + .insn 0xe2, $1b-3f{:s8} +3: + + # add $var, %eax + .insn 0x05, $var{:u32} + + # add $var, %rax + .insn rex.w 0x05, $var{:s32} + + # cmpl (32-bit immediate split into two 16-bit halves) + .insn 0x81/7, $0x1213, $0x2123, var(%rip) + # vzeroall .insn VEX.256.0F.WIG 0x77 .insn {vex3} VEX.L1 0x0f77 @@ -45,6 +65,11 @@ insn: .insn VEX.66.0F3A.W1 0x68, %xmm0, (%ecx), %xmm2, %xmm3 .insn VEX.66.0F3A.W1 0x68, (%r8), %xmm1, %xmm2, %xmm3 + # vpermil2ps + .insn VEX.66.0F3A.W0 0x48, $0, %xmm8, (%rcx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x48, $2, %xmm0, (%ecx), %xmm2, %xmm3 + .insn VEX.66.0F3A.W1 0x48, $3, (%r8), %xmm1, %xmm2, %xmm3 + # kmovw .insn VEX.L0.0F.W0 0x92, %r8d, %k1 .insn VEX.L0.0F.W0 0x93, %k1, %r8d From patchwork Fri Mar 10 10:26:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67331 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp790566wrd; Fri, 10 Mar 2023 02:27:19 -0800 (PST) X-Google-Smtp-Source: AK7set+U9bf340Gp78rY5TUnVb6ZxN5bq5YHmRoKBBJGbdgOhkkE2LMT0/J0C/Cs231BIqbmgDBY X-Received: by 2002:a05:6402:899:b0:4af:5ff1:88ef with SMTP id e25-20020a056402089900b004af5ff188efmr23352011edy.28.1678444039454; Fri, 10 Mar 2023 02:27:19 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id u11-20020a056402110b00b004c435746ddfsi2177481edv.157.2023.03.10.02.27.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:27:19 -0800 (PST) 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=e7cTdSaA; 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 85C87384F034 for ; Fri, 10 Mar 2023 10:26:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 85C87384F034 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678443977; bh=ecRg+UpfJLPz4vQ2LE2hEAzMiKLz2PPb5oT+mkmLkY8=; 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=e7cTdSaAZvdy5aSNIYnLHhx9CqTkU8T506khhtmub8lcWOUM9uv+oy/V15hm9x+SG tP/U6Ff4EyibIw7gHm0sou3MxkVjANzBr6X9ZSfJYkxEFH5lKFZ2PLmrRPcuzQ0TrO SOhaKSLvdtw4WVRavWPAeNDfiYrlc+EjZayD4rJ4= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2072.outbound.protection.outlook.com [40.107.6.72]) by sourceware.org (Postfix) with ESMTPS id 7BC9B385B501 for ; Fri, 10 Mar 2023 10:26:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7BC9B385B501 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kFa0OwTeSiAPIFF9ENMftoWDWxcjIL00anvYs942DQh4HsiX7J3J4K1Vb0FWCCg2jkQOGQP4aHjqrNJnmZLvu0SR3szNgBhKmteM069+lYVTuuCh9fsZiUzDr8lZMh7ZwBokNXBk0+MG3iaZCvWs+PGP7NyGk7cMhaLr7xS8XEzPE2dev+BNY60cjz+S6poHcYWMSp36PJ4DmWVDK9uB7lNksjs9wxRHmoM2yQPcIlvgH/737EKDK2N/P1jur7ZHKRgrHPP8qiHmLMN0qPneoq4FMKaNWJ/wlG0BBBrGa5yOqkwzf8hGWL73x/kLtWw4XwGwd1zTP2zxJBluu6OwZw== 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=ecRg+UpfJLPz4vQ2LE2hEAzMiKLz2PPb5oT+mkmLkY8=; b=HOSMMizDdy1x2zzaShEAqBO7UPFz3AQLUcFgdiy69CxzlvKKgJi3oXKJlHtWIH2MTejEcsEiia1IAYlneHFiXRTxo9ytXd22eiyG4a2T7hNCF//XNtLJSZpLjnztuLFDsYLbeS2UiW3bUJJ49URUfCdrJueiCEojasWVT1rTXC9duX91U/EM7TUkKmkGsfBXRwDfN3G3A1wpgwWF+5RzbNyXoIZsc+Ld+vhCTnffTJDQMYKeVrPi6khjmrwxRd1Jij3bptiqSbUcsFmHhM6p4gdkSg1AIFuMm/scRtdbcjCNHTn+mxtYIyyCUw8E3F8C3euXFTK6v/yas+Xl7mpk1w== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7138.eurprd04.prod.outlook.com (2603:10a6:208:19e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:26:05 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:26:05 +0000 Message-ID: Date: Fri, 10 Mar 2023 11:26:03 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 12/14] x86: document .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR2P281CA0122.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9d::11) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7138:EE_ X-MS-Office365-Filtering-Correlation-Id: 98d439e8-a5b7-427e-8f7a-08db2151dad8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1DTfJETnJWudGvKw5C/pXWRg9aKdlPPAZBYlSDoXvnHjUlNmI8C+XnMV9HW+gZYK4fEecnLmb/53hn7YM59BueWQ0dMrx7wbJLoxVcWvpJiO+XHu/tE15wg9gTel82p618zsgDFmHjOoZxbPGfefIshBv6wdhfB9zjbSDbZWOd3/AZyiBhk1Hsyv1j1vN1S1d60lLUv8+DtI+gpE9iKM/83TujFTM+PQhldNKvCAczccyhlZTJXH2MCHvklBdlLKat1un6tlVJ/vn3TW+0gEWAQgFzfH0olTP4WQ3hDsPh2yBE4i0ELjKw/XjM/OVS45+e8tpIBGN1LLRsaoOUJ/PVP22btCdzIatxoHOigo0YaXOQ5FxfErtM7qGCoXoJJMtltzSuNhlqVK/LjoA7Hx7IL7q8sueLGoPVzTmW17xTZW18BXWUpWixYSAKRyDnB8MVcmoWmnllLDSCt8aW6L7MQXcJbPr0qB+m+7dhj3ukvqtAa46vqGhXSMGNy70EDEIBJOwJC4hOGfF7btEhGZGNrauqRjt2s+2E+Fvg4sPHtK4EaBPCdqrdAnJ1+zgjhvtL239VVhK0dyh1+KRCJ3bBNUE3eSrR1kU/l+6I85zVL+ZmKm03B14muhFOpsR62jpOw8h1seP0xAw6lHsfRkWnWBoskGoe+K1Eah5LWnBedfoEHCyQMIync5RMK9fiVzAFUhxOI4zFx/nmPKguI0vsiuSRURCmz5ayQSgZtbysS3JB+Dxkk7lrYrkwXb+Vy34VVrsGNSzO6ETqcQXk7Oew== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(346002)(39860400002)(376002)(136003)(366004)(451199018)(31686004)(83380400001)(36756003)(6512007)(54906003)(478600001)(316002)(38100700002)(8936002)(6486002)(2616005)(41300700001)(6506007)(26005)(186003)(5660300002)(8676002)(66476007)(66946007)(66556008)(2906002)(6916009)(4326008)(31696002)(86362001)(142923001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Vf5hfnoy/gkBvnBtKChHFWaD0fGO?= =?utf-8?q?k0zDG2MiwEORHUUy33z3lrYG84fM8WW1RG+30QESWY/xZu0YM7ycjmnS+cazC3yOD?= =?utf-8?q?2d2LbLTJM5dcwiU2xRjq0gCtFrnWC+/G8IB0O4wt3KbJGs9hAMjqETUg5NM2T5t+f?= =?utf-8?q?W1TNn47MMzF+bT2+/EmQyH6HcQ0ph6pFHepCbNUpGGjR9MAQU1m4Lk3ozROGh/+D3?= =?utf-8?q?TTKgKf6af5CqLkar9kNbt+d/VnKsYX9nGLAkgPN7SzKf398kItPrindeO2a+Ad0c8?= =?utf-8?q?IU5xM54wC3lNDZnxaGOxxiTUgJFec3SylFT+PeGuBq+/ENVgPqY9QSZRPao7DG2yz?= =?utf-8?q?Xr1CnSAKpLnInnoyboww1/yODy6R9WvLEeO8uXtWv/76lwtp4WI/CzCmLAJH+LrpM?= =?utf-8?q?KIUketsF7cLUbCyt+BIyMB9H+1W6dHcKfk6QD2PLPtgV2eSrdkQbfyucF6wQtmz5/?= =?utf-8?q?12V0rRxCZbOCbKuj0nj28mJQpjYM2OPm62xxXzip9UWZovsr2rySrFDMM2v7A0Mb6?= =?utf-8?q?eFUhQbMeuV5BD3JlQCs9HuOL3WS+7XjV2urJ3+SB8+iZ/jrlRzbA7ZEMXH4SK4fXg?= =?utf-8?q?VBm9jCJnILlYMBfEhIIuXtAqkwjqm6MMEj4oFDbjxV3QzRuoXm91ttC0/iYdsmKfb?= =?utf-8?q?L5qVxq0KfybLAPzyckVB73Vf344kdGr5MOuloYWhILyGIP1+o42Sr0e75F7Ewn4E+?= =?utf-8?q?/C86M+IKyJMUpARS/smzHdUqsoUC1thmPoDlA+9bqcND2RZ7Zhx63X51jiI1CPAIp?= =?utf-8?q?x7jhfLveQ2uuIRHsysah0RC0xJSOE06yUeo1XfzVDkxQQNPoaFpyH83iL+CMvjFgG?= =?utf-8?q?3YWXOgD8kN0hKC6paMWnQwiE+9FRYSKflmgXJ3GonF42RZv1NIFSuRq0a2emFG29p?= =?utf-8?q?qIj7xKnmFuCnIH8dAjFqniB2zGuHfa6MZZW6eX36aXEHSoIKkdVJGdriglR7lY+c9?= =?utf-8?q?9pDD+GmOh8b9H+qhLnO/rXo/aeK1GIc0I/E27jeRZZe7juS1pywPzYObRtJdkSDQ8?= =?utf-8?q?JxdP6rvj/ARFLJyrIo8bRIZYOwH8k21kiBVfDDcDbYncG7BdkYVQ2EMurjJCStg/H?= =?utf-8?q?Xpy6U7GpBKiZCxqaP/FnfPPM+pNSlp/llOQneMk95+OPlg3DLjkjmjS21rhQIlbET?= =?utf-8?q?La6mzcE4cDX5XZVA7xTN32DkZz1Iu97OpHk9qIG/z2h/Iym1+4XX4XAaA3Byk7zxZ?= =?utf-8?q?GUVDtIzzgYCpaz68o+ELkIhHLNzuHW2WZx3v3a2sM8BIY7M5NjpyRu7Cb+DLus+5F?= =?utf-8?q?w1DcGTKjxsOHZ9k5fdosPJMBvELzRS8qq55XKi/EZ46LhtGcDxXKt5/Yms+OnK5eD?= =?utf-8?q?prcGKXbCioSvPtWsxgaSwAtmpa/2jU94TdhzgZKnUz9NUNdels/lo6Rypma5hpHNy?= =?utf-8?q?SrybgTrz859BaPi7ncReHpNsS3xUR6bZRYjpNCch7LuAb0LZv/bL879hPThQiXrD2?= =?utf-8?q?TR5wh3zwaK1eR+YvvO2/AegTODGa48hHyr6Xt/IswI6pJLyiMpPDfvkPisLo/uaal?= =?utf-8?q?PnAFwMglR0eX?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 98d439e8-a5b7-427e-8f7a-08db2151dad8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:26:05.2000 (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: I+5bloe8CwwmXJ1yBgE022w4VGDkMs7cpOzeoB89HTkxNCCkxkxECOxrMVJ+g9acY777EQFGkZ/HiAJj4Jxu2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7138 X-Spam-Status: No, score=-3028.2 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 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?1759976137166310120?= X-GMAIL-MSGID: =?utf-8?q?1759976137166310120?= ... and mention its introduction in NEWS. --- a/gas/NEWS +++ b/gas/NEWS @@ -1,5 +1,7 @@ -*- text -*- +* A new .insn directive is recognized by x86 gas. + Changes in 2.40: * Add support for Intel RAO-INT instructions. --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -613,6 +613,137 @@ This directive behaves in the same way a taking a series of comma separated expressions and storing them as two-byte wide values into the current section. +@cindex @code{insn} directive +@item .insn [@var{prefix}[,...]] [@var{encoding}] @var{major-opcode}[@code{+r}|@code{/@var{extension}}] [,@var{operand}[,...]] +This directive allows composing instructions which @code{@value{AS}} +may not know about yet, or which it has no way of expressing (which +can be the case for certain alternative encodings). It assumes certain +basic structure in how operands are encoded, and it also only +recognizes - with a few extensions as per below - operands otherwise +valid for instructions. Therefore there is no guarantee that +everything can be expressed (e.g. the original Intel Xeon Phi's MVEX +encodings cannot be expressed). + +@itemize @bullet +@item +@var{prefix} expresses one or more opcode prefixes in the usual way. +Legacy encoding prefixes altering meaning (0x66, 0xF2, 0xF3) may be +specified as high byte of (perhaps already including an +encoding space prefix). Note that there can only be one such prefix. +Segment overrides are better specified in the respective memory +operand, as long as there is one. + +@item +@var{encoding} is used to specify VEX, XOP, or EVEX encodings. The +syntax tries to resemble that used in documentation: +@itemize @bullet +@item @code{VEX}[@code{.@var{len}}][@code{.@var{prefix}}][@code{.@var{space}}][@code{.@var{w}}] +@item @code{EVEX}[@code{.@var{len}}][@code{.@var{prefix}}][@code{.@var{space}}][@code{.@var{w}}] +@item @code{XOP}@var{space}[@code{.@var{len}}][@code{.@var{prefix}}][@code{.@var{w}}] +@end itemize + +Here +@itemize @bullet +@item @var{len} can be @code{LIG}, @code{128}, @code{256}, or (EVEX +only) @code{512} as well as @code{L0} / @code{L1} for VEX / XOP and +@code{L0}...@code{L3} for EVEX +@item @var{prefix} can be @code{NP}, @code{66}, @code{F3}, or @code{F2} +@item @var{space} can be +@itemize @bullet +@item @code{0f}, @code{0f38}, @code{0f3a}, or @code{M0}...@code{M31} +for VEX +@item @code{08}...@code{1f} for XOP +@item @code{0f}, @code{0f38}, @code{0f3a}, or @code{M0}...@code{M15} +for EVEX +@end itemize +@item @var{w} can be @code{WIG}, @code{W0}, or @code{W1} +@end itemize + +Defaults: +@itemize @bullet +@item Omitted @var{len} means "infer from operand size" if there is at +least one sized vector operand, or @code{LIG} otherwise. (Obviously +@var{len} has to be omitted when there's EVEX rounding control +specified later in the operands.) +@item Omitted @var{prefix} means @code{NP}. +@item Omitted @var{space} (VEX/EVEX only) implies encoding space is +taken from @var{major-opcode}. +@item Omitted @var{w} means "infer from GPR operand size" in 64-bit +code if there is at least one GPR(-like) operand, or @code{WIG} +otherwise. +@end itemize + +@item +@var{major-opcode} is an absolute expression specifying the instruction +opcode. Legacy encoding prefixes altering encoding space (0x0f, +0x0f38, 0x0f3a) have to be specified as high byte(s) here. +"Degenerate" ModR/M bytes, as present in e.g. certain FPU opcodes or +sub-spaces like that of major opcode 0x0f01, generally want encoding as +immediate operand (such opcodes wouldn't normally have non-immediate +operands); in some cases it may be possible to also encode these as low +byte of the major opcode, but there are potential ambiguities. Also +note that after stripping encoding prefixes, the residual has to fit in +two bytes (16 bits). @code{+r} can be suffixed to the major opcode +expression to specify register-only encoding forms not using a ModR/M +byte. @code{/@var{extension}} can alternatively be suffixed to the +major opcode expression to specify an extension opcode, encoded in bits +3-5 of the ModR/M byte. + +@item +@var{operand} is an instruction operand expressed the usual way. +Register operands are primarily used to express register numbers as +encoded in ModR/M byte and REX/VEX/XOP/EVEX prefixes. In certain +cases the register type (really: size) is also used to derive other +encoding attributes, if these aren't specified explicitly. Note that +there is no consistency checking among operands, so entirely bogus +mixes of operands are possible. Note further that only operands +actually encoded in the instruction should be specified. Operands like +@samp{%cl} in shift/rotate instructions have to be omitted, or else +they'll be encoded as an ordinary (register) operand. Operand order +may also not match that of the actual instruction (see below). +@end itemize + +Encoding of operands: While for a memory operand (of which there can be +only one) it is clear how to encode it in the resulting ModR/M byte, +register operands are encoded strictly in this order (operand counts do +not include immediate ones in the enumeration below, and if there was an +extension opcode specified it counts as a register operand; VEX.vvvv +is meant to cover XOP and EVEX as well): + +@itemize @bullet +@item VEX.vvvv for 1-register-operand VEX/XOP/EVEX insns, +@item ModR/M.rm, ModR/M.reg for 2-operand insns, +@item ModR/M.rm, VEX.vvvv, ModR/M.reg for 3-operand insns, and +@item Imm@{4,5@}, ModR/M.rm, VEX.vvvv, ModR/M.reg for 4-operand insns, +@end itemize + +obviously with the ModR/M.rm slot skipped when there is a memory +operand, and obviously with the ModR/M.reg slot skipped when there is +an extension opcode. For Intel syntax of course the opposite order +applies. With @code{+r} (and hence no ModR/M) there can only be a +single register operand for legacy encodings. VEX and alike can have +two register operands, where the second (first in Intel syntax) would +go into VEX.vvvv. + +Immediate operands (including immediate-like displacements, i.e. when +not part of ModR/M addressing) are emitted in the order specified, +regardless of AT&T or Intel syntax. Since it may not be possible to +infer the size of such immediates, they can be suffixed by +@code{@{:s@var{n}@}} or @code{@{:u@var{n}@}}, representing signed / +unsigned immediates of the given number of bits respectively. When +emitting such operands, the number of bits will be rounded up to the +smallest suitable of 8, 16, 32, or 64. Immediates wider than 32 bits +are permitted in 64-bit code only. + +For EVEX encoding memory operands with a displacement need to know +Disp8 scaling size in order to use an 8-bit displacement. For many +instructions this can be inferred from the types of other operands +specified. In Intel syntax @samp{DWORD PTR} and alike can be used to +specify the respective size. In AT&T syntax the memory operands can +be suffixed by @code{@{:d@var{n}@}} to specify the size (in bytes). +This can be combined with an embedded broadcast specifier: +@samp{8(%eax)@{1to8:d8@}}. + @c FIXME: Document other x86 specific directives ? Eg: .code16gcc, @end table From patchwork Fri Mar 10 10:26:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67332 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp790891wrd; Fri, 10 Mar 2023 02:28:21 -0800 (PST) X-Google-Smtp-Source: AK7set+2Qo3qF44+wwLSELiDQfgm4xbb0Z2FbcGUzMX2TlzuLDYSbvx4AKlMelwC751Zqh4WRT2H X-Received: by 2002:a17:907:9b03:b0:8aa:be5c:b7c5 with SMTP id kn3-20020a1709079b0300b008aabe5cb7c5mr27260348ejc.41.1678444101181; Fri, 10 Mar 2023 02:28:21 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id xa17-20020a170907b9d100b008e3da0ff1b2si1468089ejc.879.2023.03.10.02.28.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:28:21 -0800 (PST) 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=TiSiTNJ5; 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 91185384F00F for ; Fri, 10 Mar 2023 10:27:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 91185384F00F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678444022; bh=RvOgnLLe/oY60A9ow7q3pwVoJJnp42v8U9d198D9q0U=; 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=TiSiTNJ5G1N5cy8ZxE3EVpbNN46c0HYbZeFHeSdB4ZzywowIhhNZCW48AZ06fFjpO IrUMBDBLnn0afO0CNOJ7MN5d6cZdsyC+igqrvByJCXP9r/MwIvbzzPFBJOJ1DUwf/l hDr6uSdQoRDxbbIY7w49pU1+P5pLHsLa+s9ewx2Y= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2059.outbound.protection.outlook.com [40.107.249.59]) by sourceware.org (Postfix) with ESMTPS id 996613847800 for ; Fri, 10 Mar 2023 10:26:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 996613847800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z65CRytHAnrrzXklf2dz2aT9RL859o0tdw9UUJa2Lq/+yWKqo4D30VlCrs0YXy5YAWJ41TEUFqdFVSRLHG98JLk12tBAu2O49GjglCMDo7Qgg5bCDsICKDhurV4gMdJQeHVsyTpEPL4vLx74Krh/tOA26Mdb0qdNFKXjnz68uSQQQ7UM4+zgyqmUYmje2mFBiw/lNm+0wRXn+BwUcJv/HMUN6u80gnzl4K01IygMraWSxp0yv9K0lLvT6Vz/qJpw7+Arcfyd92ndQF27IuVP8voQSxRYTIIBCFaJdmRiGdmHtUIhichvoJuunG/O6IXO4eaxgromZX2TM1wnlHXR4Q== 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=RvOgnLLe/oY60A9ow7q3pwVoJJnp42v8U9d198D9q0U=; b=VHBClJnvDBkAmfDLrmRgt5wZKDrZ0S+/6YWHRjLf4/S6QLXagrvOAV5UxvGNM0sG33ASSWIyTPnSQnXA02afjqWSMuFIqQyT8Dz3g8B9gXYvM3VE6JqGpgQ9GREF78C9KUVBCPGbjVxJ0seNqYrHD9pl7JDpNBbxvhiBTUO2rSPhjVfGIBUFHo6THSDFNZPv/nfX+vawLE97tLzaK+oG8R5dxvvzHdPX+01QZ82MDfhiA4M9gnwAIhDouS2OSqiqCK7TWg/pm8h4Y7vCE+y9/om2vsZWDBKNJ1B66mZPwFY+DiPodZAURIgOEZ/Dq7ugIam40rrLS1+OQPfW1hZq6w== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7138.eurprd04.prod.outlook.com (2603:10a6:208:19e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:26:46 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:26:46 +0000 Message-ID: <2b0ca132-9d85-86a8-8b91-828fa66881b8@suse.com> Date: Fri, 10 Mar 2023 11:26:44 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH v2 13/14] x86: convert testcases to use .insn Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0186.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a4::13) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7138:EE_ X-MS-Office365-Filtering-Correlation-Id: 87fa5b6f-7781-45fb-9261-08db2151f356 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bCo7/A4FhaKzOm0JxnJHdCprnG+pfHUIj62JjIAfV3FjDcLuv6td+WVBtwfgraEaL0MDBGPX4zi2ZcUz7/sx4WD7/vBKFhorKxh4wggHEXyjd2qMNR4LxO2XDC70xjZnc82wVm2s4NDlxQ5bLakPfOODJJZy0yzdM09nixLiMJnYhE/3Ulnp5qnlozYcbyG2DYsL+B6SS7tPvkpjnICMMG8fxKMSmXlqALDwswV/98ZPZ3HW5kwYzZXoxlmOmbQSXTC02BfKVA11QCB7Deau1l7R4Dnsxw4Z876nu7xxbIH3rBrp0uWjmB5c+BEFL6ndtIKFC6oEVqPt/9i6FLjPgcitBK7fQLqqQaM+XSnCCqLjawoouoYELX0kWYsVTmo60Yx2k/ub7uptYrdUUkwFxxKULtp+tQEYF0wJ9ypPflphfD+WVaR3JRkBA4MEsYUH3L4v89yVUoziy70+oQw3VDfHc2bA/EV3qyjCm0B13bg/Rnxv2kDb9sM1XY809jFbaaW+VqHJOujw5kNHH2njt15y6wLssfEksvSapp3em2XhrnEk8ZAn0lGKVxArTlnuo25tkLofii6rqe/xRIPcfxj3+VfR224gi1Rj2/uUbPPLPX9SHV1IUO8Wka2Zh3pViHfm7iOSxm1Z4dUcm1w3vh6DHS90K+GBvJgJYOwI2FchRHF540OzpnYwiBlPyuvhX9Ia25rKtV0VtIPBP1/ldWsBX9hC5udqf3uel7TzdFmmJyc+uFxIcrCnOIOFwCYc X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(346002)(39860400002)(376002)(136003)(366004)(451199018)(31686004)(66899018)(83380400001)(36756003)(6512007)(54906003)(478600001)(316002)(38100700002)(8936002)(6486002)(2616005)(41300700001)(6506007)(26005)(186003)(5660300002)(30864003)(8676002)(66476007)(66946007)(66556008)(2906002)(6916009)(4326008)(31696002)(86362001)(142923001)(43740500002)(45980500001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+DgdC/QxppVq97gsI4hWinVy0oA/?= =?utf-8?q?q7GVKOZOaZQ8DoG3Dc/O7A5cR8tZUwHRq/q3ESn2e2TiwmleIgzFvKIAeAIZIjTEb?= =?utf-8?q?g6GRxIBL9irpC7fWlxV1zXdYNhP3Nw7cIeKbfA/i9EkuzTeGsz3SRQRR3RR1MVb9L?= =?utf-8?q?LWnAEdhCzXAiDKWMAZO2AxWSlPsK5UVCIihbD4d5UpfqlPyAZp9XrU8+xbb8PVIPP?= =?utf-8?q?tstmeJzKrNH0G6qTl12aQkB4v8UnIP+iugO6QERr0KCN638iE1m1JdrVwiurJ2xgT?= =?utf-8?q?hUtbB4VwjgbQ6ZlJgupLjo1geZIJGWCgK5ONTLxPqMdVUf60AEJH4Gm+ZMoDTnDTq?= =?utf-8?q?YMSRsXN/Ewcqzd7S5BI2C+GiKlI63yVqwJm/GBGmit2S72JoPSgkWgTlmWM8EDdbw?= =?utf-8?q?MSe3i86zrw/KnYsFfvgdujm5WQfifTr637zKUygxbav6PioAxLztOfW5D9bFVj6Vb?= =?utf-8?q?e1aAiVjo4AoVZ2bGyLiJUxz+O160UXXssEpGn1ZW/OoSVgbG3RBUWQFiGEHfmlyPW?= =?utf-8?q?LYMlsBwatyTdPyWhe8P+uukoOHIVOLjcjZxSovxSemOTBoNm40Wa5FUDOMNHJFNbt?= =?utf-8?q?gOAel4pRb7cQsVwZn1FEF3u3D1AP1Y+BuALIXS4R5TMWoVR4l8fErnKY0mU6o+sNH?= =?utf-8?q?gWlOg67z9nHrVMWMToC1pKvoSRn8wdxLLx3eVfQBvF71U3L96lMgHg5UO5v0IzUwV?= =?utf-8?q?OPuolSsNLp+FIgB+HWpg6rU8RpCC24CrPoAc0nnjrgM94adpxnEg7TNcT4SQ1bq0W?= =?utf-8?q?I95XFd1MU7H+WFtxmNxr0Wr55Vtup5PZmc4UV8RTLi173/BfyiT5eHHK6MI8HBrIE?= =?utf-8?q?6KwIIWlYvAzVW76uN3J/0KvT/43aS43UirxhQoU58Y5uABw7HaKjN8Hvi/epj5aD2?= =?utf-8?q?LZf/kcV/S98qiBhT1ZdgilW2rfaBtmRqb/fVdbwt9hXT7PlWOUH7Eb6tuER1ha6hC?= =?utf-8?q?e+k4vzT/tnlzq92hHMWua1T1oScRC3kBf5gtBs175Q+ptPpFJWHa9kzMSGeaIt+6R?= =?utf-8?q?yjVwfF+zdNfHavUqrtleXQ31iqOV5TljW/SuCzxzpPXKhbJr/x85efYz7cEJ9j+rn?= =?utf-8?q?1xZP0PWc1DJJNnaNUtj2ZAmE0hkHAtWPsrIfgiYqtV9RE0Wu2eBwYeBQVHo4/pfQb?= =?utf-8?q?+vviw1IbVeUBljmWfsC+vpwiUdzUFxKu6W6fsqddPsR+iTMVrNuLYG6NzjV53blXO?= =?utf-8?q?z8ESUWwQPH94nwjrKyOLG6mKMAoOr5WXsm4cdgEqGZnithcObLuyDcLmN9L2c/q3h?= =?utf-8?q?ZG67iXJ6yQqzfsdvk2bo7voqEhheAxiPrhJuv7bQKAg3Q0rR6Gou7ZoMXME16Pb4C?= =?utf-8?q?dm4b4WJRoxVygppQ7v1lUB/ZQXO+lAUoRP7Of1KP2ii9Z+V7NbbjqqCUVhXeD+7tv?= =?utf-8?q?LI6KhOFdDwA6wvjBUXi6v8C8GHVXP/+wwRQ82HAGuf+dpOabrZoCi0yq0FWxMGR7O?= =?utf-8?q?Ed9nohr/F+2ONI6E4Ra/pOW4jbJDTw23kgAvmesE89bpo/BQvb/e5UKj749eVjqIX?= =?utf-8?q?xYMYpCvfuyyK?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87fa5b6f-7781-45fb-9261-08db2151f356 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:26:46.3067 (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: x8Ix3xWNHbFektdZrLI3N+AZBRjaKW9uwc1g4Pkf2Q4GGK2s0J0dOdkUQ+KCEnMgWAhfVtj3v4IECYeAzDfZUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7138 X-Spam-Status: No, score=-3028.1 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 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?1759976202283548740?= X-GMAIL-MSGID: =?utf-8?q?1759976202283548740?= This can't be done for all insns currently encoded with .byte. For one outside of 64-bit mode unused (typically ignored) register encoding bits in VEX/XOP/EVEX prefixes can't be set to their non-default values, since the necessary registers cannot be specified (and some of these bits can't even be used outside of 64-bit mode). And then there are odd tests like the first one in bad-bcast.s: Its purpose is to illegaly set EVEX.b together with EVEX.W (which could be expressed; note though EVEX.W set is invalid on its own), but then it also clears EVEX.B and EVEX.R' plus it sets EVEX.vvvv to other than 0xf (rendering the test ambiguous, because that's another #UD reason). In {,x86-64-}disassem.s many bogus encodings exist - some with ModR/M byte but insufficient displacement bytes, some using SIB encoding with the SIB byte actually being the supposed immediate. Some of these could be expressed by .insn, but I don't want to introduce bogus examples. These will all need adjustment anyway once the disassembler is improved in the way it deals with unrecognized encodings. Generally generated code is meant to remain the same. {,x86-64-}nops.d are exceptions because insn prefixes are emitted in a different order. opcode{,-intel,-suffix}.d are also adjusted (along with an according correction to opcode.s) to cover an apparent typo in the original tests (xor when or was meant). Where necessary --divide is added as gas option, to allow for the use of the extension opcode functionality. Comments are being adjusted where obviously wrong/misleading. --- v2: Add --divide as necessary. --- a/gas/testsuite/gas/i386/amd.s +++ b/gas/testsuite/gas/i386/amd.s @@ -32,4 +32,4 @@ foo: # This is a 3DNow! instruction, with a prefix, that isn't quite right # Everything's good bar the opcode suffix -.byte 0x2e, 0x0f, 0x0f, 0x54, 0xc3, 0x07, 0xc3 + .insn 0x0f0f, $0xc3, %cs:7(%ebx,%eax,8), %mm2 --- a/gas/testsuite/gas/i386/avx512f-nondef.s +++ b/gas/testsuite/gas/i386/avx512f-nondef.s @@ -1,27 +1,28 @@ # Check if objdump works correctly when some bits in instruction # has non-default value -# vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with null RC -.byte 0x62, 0xf3, 0xd5, 0x1f, 0x0b, 0xf4, 0x7b + vrndscalesd $123, {sae}, %xmm4, %xmm5, %xmm6{%k7} # with null RC # vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with not-null RC -.byte 0x62, 0xf3, 0xd5, 0x5f, 0x0b, 0xf4, 0x7b -# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'} -.byte 0x62, 0xf2, 0x55, 0x4f, 0x3b, 0xf4 + .insn EVEX.66.0f3a.W1 0x0b, $123, {ru-sae}, %xmm4, %xmm5, %xmm6{%k7} + + vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'} # vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-11 EVEX.{B,R'} .byte 0x62, 0xc2, 0x55, 0x4f, 0x3b, 0xf4 # vpminud %zmm4, %zmm5, %zmm6{%k7} # with set EVEX.b bit -.byte 0x62, 0xf2, 0x55, 0x1f, 0x3b, 0xf4 -# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.b bit -.byte 0x62, 0xf2, 0x7e, 0x48, 0x31, 0x72, 0x7f -# vpmovdb %zmm6, 2032(%rdx) # with set EVEX.b bit - we should get (bad) operand -.byte 0x62, 0xf2, 0x7e, 0x58, 0x31, 0x72, 0x7f + .insn EVEX.66.0F38.W0 0x3b, {rn-sae}, %zmm4, %zmm5, %zmm6{%k7} + + vpmovdb %zmm6, 2032(%edx) # with unset EVEX.b bit +# vpmovdb %zmm6, 2032(%edx) # with set EVEX.b bit - we should get (bad) operand + .insn EVEX.f3.0f38.W0 0x31, %zmm6, 2032(%edx){1to4} + # vaddps xmm0, xmm0, xmm3 # with EVEX.z set .byte 0x62, 0xf1, 0x7c, 0x88, 0x58, 0xc3 + # vgatherdps (%ecx), %zmm0{%k7} # without SIB / index register -.byte 0x62, 0xf2, 0x7d, 0x4f, 0x92, 0x01 + .insn EVEX.66.0F38.W0 0x92, (%ecx), %zmm0{%k7} # vgatherdps (%bx,%xmm?), %zmm0{%k7} # with 16-bit addressing -.byte 0x67, 0x62, 0xf2, 0x7d, 0x4f, 0x92, 0x01 + .insn EVEX.66.0F38.W0 0x92, (%bx,%di), %zmm0{%k7} # vgatherdps (%eax,%zmm1), %zmm0{%k7}{z} # with set EVEX.z -.byte 0x62, 0xf2, 0x7d, 0xcf, 0x92, 0x04, 0x08 + .insn EVEX.66.0F38.W0 0x92, (%eax,%zmm1), %zmm0{%k7}{z} # vgatherdps (%eax,%zmm1), %zmm0 # without actual mask register -.byte 0x62, 0xf2, 0x7d, 0x48, 0x92, 0x04, 0x08 + .insn EVEX.66.0F38.W0 0x92, (%eax,%zmm1), %zmm0 --- a/gas/testsuite/gas/i386/cdr.s +++ b/gas/testsuite/gas/i386/cdr.s @@ -1,14 +1,7 @@ .text start: - .byte 0x0f - .byte 0x22 - .byte 0x1f - .byte 0x0f - .byte 0x20 - .byte 0x1f - .byte 0x0f - .byte 0x21 - .byte 0x1f - .byte 0x0f - .byte 0x23 - .byte 0x1f + .code32 + .insn 0x0f22, (%edi), %cr3 + .insn 0x0f20, %cr3, (%edi) + .insn 0x0f21, %db3, (%edi) + .insn 0x0f23, (%edi), %db3 --- a/gas/testsuite/gas/i386/disassem.d +++ b/gas/testsuite/gas/i386/disassem.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -drw #name: opcodes with invalid modrm byte --- a/gas/testsuite/gas/i386/disassem.s +++ b/gas/testsuite/gas/i386/disassem.s @@ -1,124 +1,124 @@ .text -.byte 0xFF, 0xEF -.byte 0xFF, 0xD8 + .insn 0xFF/5, %edi + .insn 0xFF/3, %eax .fill 0x5, 0x1, 0x90 .byte 0xC5, 0xEC, 0x4A, 0x9B .byte 0xC5, 0xEC, 0x4A, 0x6F -.byte 0xC5, 0xEC, 0x4A, 0x3F + .insn VEX.L1.NP.0f.W0 0x4a, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x4A, 0x9B .byte 0xC5, 0xED, 0x4A, 0x6F -.byte 0xC5, 0xED, 0x4A, 0x3F + .insn VEX.L1.66.0f.W0 0x4a, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x4A, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x4A, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x4A, 0x3F + .insn VEX.L1.NP.0f.W1 0x4a, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x4A, 0x9B .byte 0xC4, 0xE1, 0xED, 0x4A, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x4A, 0x3F + .insn VEX.L1.66.0f.W1 0x4a, (%edi), %k2, %k7 .byte 0xC5, 0xEC, 0x41, 0x9B .byte 0xC5, 0xEC, 0x41, 0x6F -.byte 0xC5, 0xEC, 0x41, 0x3F + .insn VEX.L1.NP.0f.W0 0x41, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x41, 0x9B .byte 0xC5, 0xED, 0x41, 0x6F -.byte 0xC5, 0xED, 0x41, 0x3F + .insn VEX.L1.66.0f.W0 0x41, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x41, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x41, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x41, 0x3F + .insn VEX.L1.NP.0f.W1 0x41, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x41, 0x9B .byte 0xC4, 0xE1, 0xED, 0x41, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x41, 0x3F + .insn VEX.L1.66.0f.W1 0x41, (%edi), %k2, %k7 .byte 0xC5, 0xEC, 0x42, 0x9B .byte 0xC5, 0xEC, 0x42, 0x6F -.byte 0xC5, 0xEC, 0x42, 0x3F + .insn VEX.L1.NP.0f.W0 0x42, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x42, 0x9B .byte 0xC5, 0xED, 0x42, 0x6F -.byte 0xC5, 0xED, 0x42, 0x3F + .insn VEX.L1.66.0f.W0 0x42, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x42, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x42, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x42, 0x3F + .insn VEX.L1.NP.0f.W1 0x42, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x42, 0x9B .byte 0xC4, 0xE1, 0xED, 0x42, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x42, 0x3F + .insn VEX.L1.66.0f.W1 0x42, (%edi), %k2, %k7 .byte 0xC5, 0xEC, 0x4B, 0x9B .byte 0xC5, 0xEC, 0x4B, 0x6F -.byte 0xC5, 0xEC, 0x4B, 0x3F + .insn VEX.L1.NP.0f.W0 0x4b, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x4B, 0x9B .byte 0xC5, 0xED, 0x4B, 0x6F -.byte 0xC5, 0xED, 0x4B, 0x3F + .insn VEX.L1.66.0f.W0 0x4b, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x4B, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x4B, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x4B, 0x3F + .insn VEX.L1.NP.0f.W1 0x4b, (%edi), %k2, %k7 .byte 0xC5, 0xF8, 0x44, 0x9B .byte 0xC5, 0xF8, 0x44, 0x6F -.byte 0xC5, 0xF8, 0x44, 0x3F + .insn VEX.L0.NP.0f.W0 0x44, (%edi), %k7 .byte 0xC5, 0xF9, 0x44, 0x9B .byte 0xC5, 0xF9, 0x44, 0x6F -.byte 0xC5, 0xF9, 0x44, 0x3F + .insn VEX.L0.66.0f.W0 0x44, (%edi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x44, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x44, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x44, 0x3F + .insn VEX.L0.NP.0f.W1 0x44, (%edi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x44, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x44, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x44, 0x3F + .insn VEX.L0.66.0f.W1 0x44, (%edi), %k7 .byte 0xC5, 0xEC, 0x45, 0x9B .byte 0xC5, 0xEC, 0x45, 0x6F -.byte 0xC5, 0xEC, 0x45, 0x3F + .insn VEX.L1.NP.0f.W0 0x45, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x45, 0x9B .byte 0xC5, 0xED, 0x45, 0x6F -.byte 0xC5, 0xED, 0x45, 0x3F + .insn VEX.L1.66.0f.W0 0x45, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x45, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x45, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x45, 0x3F + .insn VEX.L1.NP.0f.W1 0x45, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x45, 0x9B .byte 0xC4, 0xE1, 0xED, 0x45, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x45, 0x3F + .insn VEX.L1.66.0f.W1 0x45, (%edi), %k2, %k7 .byte 0xC5, 0xF8, 0x98, 0x9B .byte 0xC5, 0xF8, 0x98, 0x6F -.byte 0xC5, 0xF8, 0x98, 0x3F + .insn VEX.L0.NP.0f.W0 0x98, (%edi), %k7 .byte 0xC5, 0xF9, 0x98, 0x9B .byte 0xC5, 0xF9, 0x98, 0x6F -.byte 0xC5, 0xF9, 0x98, 0x3F + .insn VEX.L0.66.0f.W0 0x98, (%edi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x98, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x98, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x98, 0x3F + .insn VEX.L0.NP.0f.W1 0x98, (%edi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x98, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x98, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x98, 0x3F + .insn VEX.L0.66.0f.W1 0x98, (%edi), %k7 .byte 0xC5, 0xEC, 0x46, 0x9B .byte 0xC5, 0xEC, 0x46, 0x6F -.byte 0xC5, 0xEC, 0x46, 0x3F + .insn VEX.L1.NP.0f.W0 0x46, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x46, 0x9B .byte 0xC5, 0xED, 0x46, 0x6F -.byte 0xC5, 0xED, 0x46, 0x3F + .insn VEX.L1.66.0f.W0 0x46, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x46, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x46, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x46, 0x3F + .insn VEX.L1.NP.0f.W1 0x46, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x46, 0x9B .byte 0xC4, 0xE1, 0xED, 0x46, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x46, 0x3F + .insn VEX.L1.66.0f.W1 0x46, (%edi), %k2, %k7 .byte 0xC5, 0xEC, 0x47, 0x9B .byte 0xC5, 0xEC, 0x47, 0x6F -.byte 0xC5, 0xEC, 0x47, 0x3F + .insn VEX.L1.NP.0f.W0 0x47, (%edi), %k2, %k7 .byte 0xC5, 0xED, 0x47, 0x9B .byte 0xC5, 0xED, 0x47, 0x6F -.byte 0xC5, 0xED, 0x47, 0x3F + .insn VEX.L1.66.0f.W0 0x47, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x47, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x47, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x47, 0x3F + .insn VEX.L1.NP.0f.W1 0x47, (%edi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x47, 0x9B .byte 0xC4, 0xE1, 0xED, 0x47, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x47, 0x3F + .insn VEX.L1.66.0f.W1 0x47, (%edi), %k2, %k7 .byte 0xC5, 0xF8, 0x99, 0x9B .byte 0xC5, 0xF8, 0x99, 0x6F -.byte 0xC5, 0xF8, 0x99, 0x3F + .insn VEX.L0.NP.0f.W0 0x99, (%edi), %k7 .byte 0xC5, 0xF9, 0x99, 0x9B .byte 0xC5, 0xF9, 0x99, 0x6F -.byte 0xC5, 0xF9, 0x99, 0x3F + .insn VEX.L0.66.0f.W0 0x99, (%edi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x99, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x99, 0x3F + .insn VEX.L0.NP.0f.W1 0x99, (%edi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x99, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x99, 0x3F + .insn VEX.L0.66.0f.W1 0x99, (%edi), %k7 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x01 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x01 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x01 @@ -145,33 +145,34 @@ .byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x01 .byte 0xC5, 0xF8, 0x92, 0x9B .byte 0xC5, 0xF8, 0x92, 0x6F -.byte 0xC5, 0xF8, 0x92, 0x3F + .insn VEX.L0.NP.0f.W0 0x92, (%edi), %k7 .byte 0xC5, 0xF9, 0x92, 0x9B .byte 0xC5, 0xF9, 0x92, 0x6F -.byte 0xC5, 0xF9, 0x92, 0x3F + .insn VEX.L0.66.0f.W0 0x92, (%edi), %k7 .byte 0xC5, 0xFB, 0x92, 0x9B .byte 0xC5, 0xFB, 0x92, 0x6F -.byte 0xC5, 0xFB, 0x92, 0x3F + .insn VEX.L0.f2.0f.W0 0x92, (%edi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x92, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x92, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x92, 0x3F + .insn VEX.L0.66.0f.W1 0x92, (%edi), %k7 .byte 0xC5, 0xF8, 0x93, 0x9B .byte 0xC5, 0xF8, 0x93, 0x6F -.byte 0xC5, 0xF8, 0x93, 0x3F + .insn VEX.L0.NP.0f.W0 0x93, (%edi), %k7 .byte 0xC5, 0xF9, 0x93, 0x9B .byte 0xC5, 0xF9, 0x93, 0x6F -.byte 0xC5, 0xF9, 0x93, 0x3F + .insn VEX.L0.66.0f.W0 0x93, (%edi), %k7 .byte 0xC5, 0xFB, 0x93, 0x9B .byte 0xC5, 0xFB, 0x93, 0x6F -.byte 0xC5, 0xFB, 0x93, 0x3F + .insn VEX.L0.f2.0f.W0 0x93, (%edi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x93, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x93, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x93, 0x3F + .insn VEX.L0.66.0f.W1 0x93, (%edi), %k7 .byte 0xc4, 0xe2, 0x1, 0x1c, 0x41, 0x37 .byte 0x62, 0xf2, 0xad, 0x08, 0x1c, 0x01 .byte 0x1 -.byte 0x62, 0xf3, 0x7d, 0x28, 0x1b, 0xc8, 0x25 + .insn EVEX.66.0f3a.W0 0x1b, $0x25, %ymm0, %xmm1 .byte 0x62, 0xf3 -.byte 0x62, 0xf3, 0x75, 0x08, 0x23, 0xc2, 0x25 +//.byte 0x62, 0xf3, 0x75, 0x08, 0x23, 0xc2, 0x25 + .insn EVEX.66.0f3a.W0 0x23, $0x25, %xmm2, %xmm1, %xmm0 .byte 0x62 -.byte 0x62, 0xf2, 0x7d, 0x28, 0x5b, 0x41, 0x37 + .insn EVEX.66.0f38.W0 0x5b, 0x37(%ecx){:d1}, %ymm0 --- a/gas/testsuite/gas/i386/evex.s +++ b/gas/testsuite/gas/i386/evex.s @@ -3,14 +3,14 @@ .allow_index_reg .text _start: - .byte 0x62, 0xf1, 0xd6, 0x38, 0x2a, 0xf0 - .byte 0x62, 0xf1, 0x57, 0x38, 0x2a, 0xf0 - .byte 0x62, 0xf1, 0xd7, 0x38, 0x2a, 0xf0 - .byte 0x62, 0xf1, 0xd6, 0x08, 0x7b, 0xf0 - .byte 0x62, 0xf1, 0x57, 0x08, 0x7b, 0xf0 - .byte 0x62, 0xf1, 0xd7, 0x08, 0x7b, 0xf0 - .byte 0x62, 0xf1, 0xd6, 0x38, 0x7b, 0xf0 - .byte 0x62, 0xf1, 0x57, 0x38, 0x7b, 0xf0 - .byte 0x62, 0xf1, 0xd7, 0x38, 0x7b, 0xf0 + .insn EVEX.LIG.F3.0F.W1 0x2a, %eax,{rd-sae},%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W0 0x2a, %eax,{rd-sae},%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W1 0x2a, %eax,{rd-sae},%xmm5,%xmm6 + .insn EVEX.LIG.F3.0F.W1 0x7b, %eax,%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W0 0x7b, %eax,%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W1 0x7b, %eax,%xmm5,%xmm6 + .insn EVEX.LIG.F3.0F.W1 0x7b, %eax,{rd-sae},%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W0 0x7b, %eax,{rd-sae},%xmm5,%xmm6 + .insn EVEX.LIG.F2.0F.W1 0x7b, %eax,{rd-sae},%xmm5,%xmm6 .byte 0x62, 0xe1, 0x7e, 0x08, 0x2d, 0xc0 .byte 0x62, 0xe1, 0x7c, 0x08, 0xc2, 0xc0, 0x00 --- a/gas/testsuite/gas/i386/fpu-bad.d +++ b/gas/testsuite/gas/i386/fpu-bad.d @@ -1,4 +1,4 @@ -#as: --32 +#as: --32 --divide #objdump: -dw #name: i386 fpu bad opcodes --- a/gas/testsuite/gas/i386/fpu-bad.s +++ b/gas/testsuite/gas/i386/fpu-bad.s @@ -1,4 +1,3 @@ .text start: - .byte 0xdd - .byte 0xf0 + .insn 0xdd/6, %st(0) --- a/gas/testsuite/gas/i386/ilp32/x86-64-nops.d +++ b/gas/testsuite/gas/i386/ilp32/x86-64-nops.d @@ -1,63 +1,5 @@ #source: ../x86-64-nops.s +#as: --divide #objdump: -drw #name: x86-64 (ILP32) nops - -.*: +file format .* - -Disassembly of section .text: - -0+ <.text>: -[ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) -[ ]*[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) -[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 0f 1f 80 00 00 00 00 nopl 0x0\(%rax\) -[ ]*[a-f0-9]+: 0f 1f 84 00 00 00 00 00 nopl 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 66 0f 1f 84 00 00 00 00 00 nopw 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 0f 19 ff nop %edi -[ ]*[a-f0-9]+: 0f 1a ff nop %edi -[ ]*[a-f0-9]+: 0f 1b ff nop %edi -[ ]*[a-f0-9]+: 0f 1c ff nop %edi -[ ]*[a-f0-9]+: 0f 1d ff nop %edi -[ ]*[a-f0-9]+: 0f 1e ff nop %edi -[ ]*[a-f0-9]+: 0f 1f ff nop %edi -[ ]*[a-f0-9]+: 0f 19 5a 22 nopl 0x22\(%rdx\) -[ ]*[a-f0-9]+: 0f 1c 5a 22 nopl 0x22\(%rdx\) -[ ]*[a-f0-9]+: 0f 1d 5a 22 nopl 0x22\(%rdx\) -[ ]*[a-f0-9]+: 0f 1e 5a 22 nopl 0x22\(%rdx\) -[ ]*[a-f0-9]+: 0f 1f 5a 22 nopl 0x22\(%rdx\) -[ ]*[a-f0-9]+: 0f 19 9c 1d 11 22 33 44 nopl 0x44332211\(%rbp,%rbx,1\) -[ ]*[a-f0-9]+: 0f 1c 9c 1d 11 22 33 44 nopl 0x44332211\(%rbp,%rbx,1\) -[ ]*[a-f0-9]+: 0f 1d 9c 1d 11 22 33 44 nopl 0x44332211\(%rbp,%rbx,1\) -[ ]*[a-f0-9]+: 0f 1e 9c 1d 11 22 33 44 nopl 0x44332211\(%rbp,%rbx,1\) -[ ]*[a-f0-9]+: 0f 1f 9c 1d 11 22 33 44 nopl 0x44332211\(%rbp,%rbx,1\) -[ ]*[a-f0-9]+: 0f 19 04 60 nopl \(%rax,%riz,2\) -[ ]*[a-f0-9]+: 0f 1c 0c 60 nopl \(%rax,%riz,2\) -[ ]*[a-f0-9]+: 0f 1d 04 60 nopl \(%rax,%riz,2\) -[ ]*[a-f0-9]+: 0f 1e 04 60 nopl \(%rax,%riz,2\) -[ ]*[a-f0-9]+: 0f 1f 04 60 nopl \(%rax,%riz,2\) -[ ]*[a-f0-9]+: 0f 19 04 59 nopl \(%rcx,%rbx,2\) -[ ]*[a-f0-9]+: 0f 1c 0c 59 nopl \(%rcx,%rbx,2\) -[ ]*[a-f0-9]+: 0f 1d 04 59 nopl \(%rcx,%rbx,2\) -[ ]*[a-f0-9]+: 0f 1e 04 59 nopl \(%rcx,%rbx,2\) -[ ]*[a-f0-9]+: 0f 1f 04 59 nopl \(%rcx,%rbx,2\) -[ ]*[a-f0-9]+: 48 0f 1f c0 nop %rax -[ ]*[a-f0-9]+: 0f 1f c0 nop %eax -[ ]*[a-f0-9]+: 66 0f 1f c0 nop %ax -[ ]*[a-f0-9]+: 48 0f 1f 00 nopq \(%rax\) -[ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) -[ ]*[a-f0-9]+: 66 0f 1f 00 nopw \(%rax\) -[ ]*[a-f0-9]+: 48 0f 1f c0 nop %rax -[ ]*[a-f0-9]+: 0f 1f c0 nop %eax -[ ]*[a-f0-9]+: 66 0f 1f c0 nop %ax -[ ]*[a-f0-9]+: 49 0f 1f c2 nop %r10 -[ ]*[a-f0-9]+: 41 0f 1f c2 nop %r10d -[ ]*[a-f0-9]+: 66 41 0f 1f c2 nop %r10w -[ ]*[a-f0-9]+: 49 0f 1f 02 nopq \(%r10\) -[ ]*[a-f0-9]+: 41 0f 1f 02 nopl \(%r10\) -[ ]*[a-f0-9]+: 66 41 0f 1f 02 nopw \(%r10\) -[ ]*[a-f0-9]+: 49 0f 1f c2 nop %r10 -[ ]*[a-f0-9]+: 41 0f 1f c2 nop %r10d -[ ]*[a-f0-9]+: 66 41 0f 1f c2 nop %r10w -#pass +#dump: ../x86-64-nops.d --- a/gas/testsuite/gas/i386/katmai.d +++ b/gas/testsuite/gas/i386/katmai.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -dw #name: i386 katmai --- a/gas/testsuite/gas/i386/katmai.s +++ b/gas/testsuite/gas/i386/katmai.s @@ -158,6 +158,6 @@ foo: prefetcht2 (%ecx) # A bad sfence modrm byte -.byte 0x65,0x0F,0xAE,0xff + .insn gs 0x0FAE/7, %edi # Pad out to good alignment .p2align 4,0 --- a/gas/testsuite/gas/i386/mpx.s +++ b/gas/testsuite/gas/i386/mpx.s @@ -158,14 +158,10 @@ start: foo: bnd ret + .att_syntax prefix bad: # bndldx (%eax),(bad) - .byte 0x0f - .byte 0x1a - .byte 0x30 + .insn 0x0f1a, (%eax), %esi # bndmov (bad),%bnd0 - .byte 0x66 - .byte 0x0f - .byte 0x1a - .byte 0xc4 + .insn 0x660f1a, %k4, %bnd0 --- a/gas/testsuite/gas/i386/nops.d +++ b/gas/testsuite/gas/i386/nops.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -drw #name: i386 nops @@ -13,7 +14,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f 1f 80 00 00 00 00 nopl 0x0\(%eax\) [ ]*[a-f0-9]+: 0f 1f 84 00 00 00 00 00 nopl 0x0\(%eax,%eax,1\) [ ]*[a-f0-9]+: 66 0f 1f 84 00 00 00 00 00 nopw 0x0\(%eax,%eax,1\) -[ ]*[a-f0-9]+: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0\(%eax,%eax,1\) +[ ]*[a-f0-9]+: 2e 66 0f 1f 84 00 00 00 00 00 nopw %cs:0x0\(%eax,%eax,1\) [ ]*[a-f0-9]+: 0f 19 ff nop %edi [ ]*[a-f0-9]+: 0f 1a ff nop %edi [ ]*[a-f0-9]+: 0f 1b ff nop %edi --- a/gas/testsuite/gas/i386/nops.s +++ b/gas/testsuite/gas/i386/nops.s @@ -1,48 +1,49 @@ .text - .byte 0x0f, 0x1f, 0x0 - .byte 0x0f, 0x1f, 0x40, 0x0 - .byte 0x0f, 0x1f, 0x44, 0x0, 0x0 - .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0 - .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0 - .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 - .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 - .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .insn 0x0f1f/0, (%eax) + .insn {disp8} 0x0f1f/0, 0(%eax) + .insn {disp8} 0x0f1f/0, 0(%eax,%eax) + .insn {disp8} data16 0x0f1f/0, 0(%eax,%eax) + .insn {disp32} 0x0f1f/0, 0(%eax) + .insn {disp32} 0x0f1f/0, 0(%eax,%eax) + .insn {disp32} data16 0x0f1f/0, 0(%eax,%eax) + .insn {disp32} data16 0x0f1f/0, %cs:0(%eax,%eax) # reg,reg - .byte 0x0f, 0x19, 0xff - .byte 0x0f, 0x1a, 0xff - .byte 0x0f, 0x1b, 0xff - .byte 0x0f, 0x1c, 0xff - .byte 0x0f, 0x1d, 0xff - .byte 0x0f, 0x1e, 0xff - .byte 0x0f, 0x1f, 0xff + .insn 0x0f19, %edi, %edi + .insn 0x0f1a, %edi, %edi + .insn 0x0f1b, %edi, %edi + .insn 0x0f1c, %edi, %edi + .insn 0x0f1d, %edi, %edi + .insn 0x0f1e, %edi, %edi + .insn 0x0f1f, %edi, %edi # with base and imm8 - .byte 0x0f, 0x19, 0x5A, 0x22 - .byte 0x0f, 0x1c, 0x5A, 0x22 - .byte 0x0f, 0x1d, 0x5A, 0x22 - .byte 0x0f, 0x1e, 0x5A, 0x22 - .byte 0x0f, 0x1f, 0x5A, 0x22 + .insn 0x0f19/3, 0x22(%edx) + .insn 0x0f1c/3, 0x22(%edx) + .insn 0x0f1d/3, 0x22(%edx) + .insn 0x0f1e/3, 0x22(%edx) + .insn 0x0f1f/3, 0x22(%edx) # with sib and imm32 - .byte 0x0f, 0x19, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1c, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1d, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1e, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1f, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - - .byte 0x0f, 0x19, 0x04, 0x60 - .byte 0x0f, 0x1c, 0x0c, 0x60 - .byte 0x0f, 0x1d, 0x04, 0x60 - .byte 0x0f, 0x1e, 0x04, 0x60 - .byte 0x0f, 0x1f, 0x04, 0x60 - - .byte 0x0f, 0x19, 0x04, 0x59 - .byte 0x0f, 0x1c, 0x0c, 0x59 - .byte 0x0f, 0x1d, 0x04, 0x59 - .byte 0x0f, 0x1e, 0x04, 0x59 - .byte 0x0f, 0x1f, 0x04, 0x59 + .insn 0x0f19/3, 0x44332211(%ebp,%ebx) + .insn 0x0f1c/3, 0x44332211(%ebp,%ebx) + .insn 0x0f1d/3, 0x44332211(%ebp,%ebx) + .insn 0x0f1e/3, 0x44332211(%ebp,%ebx) + .insn 0x0f1f/3, 0x44332211(%ebp,%ebx) + + .allow_index_reg + .insn 0x0f19/0, (%eax,%eiz,2) + .insn 0x0f1c/1, (%eax,%eiz,2) + .insn 0x0f1d/0, (%eax,%eiz,2) + .insn 0x0f1e/0, (%eax,%eiz,2) + .insn 0x0f1f/0, (%eax,%eiz,2) + + .insn 0x0f19/0, (%ecx,%ebx,2) + .insn 0x0f1c/1, (%ecx,%ebx,2) + .insn 0x0f1d/0, (%ecx,%ebx,2) + .insn 0x0f1e/0, (%ecx,%ebx,2) + .insn 0x0f1f/0, (%ecx,%ebx,2) nop %eax nop %ax --- a/gas/testsuite/gas/i386/opcode.d +++ b/gas/testsuite/gas/i386/opcode.d @@ -1,4 +1,4 @@ -#as: -J +#as: -J --divide #objdump: -dw #name: i386 opcodes @@ -597,7 +597,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: df 38 fistpll \(%eax\) [ ]*[a-f0-9]+: df 38 fistpll \(%eax\) +[a-f0-9]+: 82 c3 01 add \$0x1,%bl - +[a-f0-9]+: 82 f3 01 xor \$0x1,%bl + +[a-f0-9]+: 82 cb 01 or \$0x1,%bl +[a-f0-9]+: 82 d3 01 adc \$0x1,%bl +[a-f0-9]+: 82 db 01 sbb \$0x1,%bl +[a-f0-9]+: 82 e3 01 and \$0x1,%bl --- a/gas/testsuite/gas/i386/opcode.s +++ b/gas/testsuite/gas/i386/opcode.s @@ -597,23 +597,23 @@ foo: fistpq (%eax) fistpll (%eax) - .byte 0x82, 0xc3, 0x01 - .byte 0x82, 0xf3, 0x01 - .byte 0x82, 0xd3, 0x01 - .byte 0x82, 0xdb, 0x01 - .byte 0x82, 0xe3, 0x01 - .byte 0x82, 0xeb, 0x01 - .byte 0x82, 0xf3, 0x01 - .byte 0x82, 0xfb, 0x01 + .insn 0x82/0, $1, %bl + .insn 0x82/1, $1, %bl + .insn 0x82/2, $1, %bl + .insn 0x82/3, $1, %bl + .insn 0x82/4, $1, %bl + .insn 0x82/5, $1, %bl + .insn 0x82/6, $1, %bl + .insn 0x82/7, $1, %bl {evex} {store} vpextrw $0xab, %xmm5, %eax - .byte 0xf6, 0xc9, 0x01 - .byte 0x66, 0xf7, 0xc9, 0x02, 0x00 - .byte 0xf7, 0xc9, 0x04, 0x00, 0x00, 0x00 - .byte 0xc0, 0xf0, 0x02 - .byte 0xc1, 0xf0, 0x01 - .byte 0xd0, 0xf0 - .byte 0xd1, 0xf0 - .byte 0xd2, 0xf0 - .byte 0xd3, 0xf0 + .insn 0xf6/1, $1, %cl + .insn 0xf7/1, $2{:u16}, %cx + .insn 0xf7/1, $4{:u32}, %ecx + .insn 0xc0/6, $2, %al + .insn 0xc1/6, $1, %eax + .insn 0xd0/6, %al + .insn 0xd1/6, %eax + .insn 0xd2/6, %al + .insn 0xd3/6, %eax --- a/gas/testsuite/gas/i386/opcode-intel.d +++ b/gas/testsuite/gas/i386/opcode-intel.d @@ -1,5 +1,5 @@ #source: opcode.s -#as: -J +#as: -J --divide #objdump: -dwMintel #name: i386 opcodes (Intel disassembly) @@ -598,7 +598,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: df 38 fistp QWORD PTR \[eax\] [ ]*[a-f0-9]+: df 38 fistp QWORD PTR \[eax\] +[a-f0-9]+: 82 c3 01 add bl,0x1 - +[a-f0-9]+: 82 f3 01 xor bl,0x1 + +[a-f0-9]+: 82 cb 01 or bl,0x1 +[a-f0-9]+: 82 d3 01 adc bl,0x1 +[a-f0-9]+: 82 db 01 sbb bl,0x1 +[a-f0-9]+: 82 e3 01 and bl,0x1 --- a/gas/testsuite/gas/i386/opcode-suffix.d +++ b/gas/testsuite/gas/i386/opcode-suffix.d @@ -1,5 +1,5 @@ #source: opcode.s -#as: -J +#as: -J --divide #objdump: -dwMsuffix #name: i386 opcodes (w/ suffix) @@ -598,7 +598,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: df 38 fistpll \(%eax\) [ ]*[a-f0-9]+: df 38 fistpll \(%eax\) +[a-f0-9]+: 82 c3 01 addb \$0x1,%bl - +[a-f0-9]+: 82 f3 01 xorb \$0x1,%bl + +[a-f0-9]+: 82 cb 01 orb \$0x1,%bl +[a-f0-9]+: 82 d3 01 adcb \$0x1,%bl +[a-f0-9]+: 82 db 01 sbbb \$0x1,%bl +[a-f0-9]+: 82 e3 01 andb \$0x1,%bl --- a/gas/testsuite/gas/i386/pr29483.s +++ b/gas/testsuite/gas/i386/pr29483.s @@ -1,3 +1,3 @@ .text pr29483: - .byte 0x65,0x62,0x62,0x7d,0x97,0xa0,0x94,0xff,0x20,0x20,0x20,0xae + .insn EVEX.128.66.0f38.W0 0xa0, %gs:-0x51dfdfe0(%rdi,%xmm23,8){1to4}, %xmm26{%k7}{z} --- a/gas/testsuite/gas/i386/prefetch.d +++ b/gas/testsuite/gas/i386/prefetch.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -dw #name: i386 prefetch --- a/gas/testsuite/gas/i386/prefetch.s +++ b/gas/testsuite/gas/i386/prefetch.s @@ -1,18 +1,20 @@ + .code32 + .macro try opcode:vararg - .byte \opcode, 0x00 - .byte \opcode, 0x08 - .byte \opcode, 0x10 - .byte \opcode, 0x18 - .byte \opcode, 0x20 - .byte \opcode, 0x28 - .byte \opcode, 0x30 - .byte \opcode, 0x38 + .insn 0x0f\opcode/0, (%eax) + .insn 0x0f\opcode/1, (%eax) + .insn 0x0f\opcode/2, (%eax) + .insn 0x0f\opcode/3, (%eax) + .insn 0x0f\opcode/4, (%eax) + .insn 0x0f\opcode/5, (%eax) + .insn 0x0f\opcode/6, (%eax) + .insn 0x0f\opcode/7, (%eax) .endm .text amd_prefetch: - try 0x0f, 0x0d + try 0d intel_prefetch: - try 0x0f, 0x18 + try 18 --- a/gas/testsuite/gas/i386/prefetch-intel.d +++ b/gas/testsuite/gas/i386/prefetch-intel.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -dw -Mintel #name: i386 prefetch (Intel disassembly) #source: prefetch.s --- a/gas/testsuite/gas/i386/prefix.s +++ b/gas/testsuite/gas/i386/prefix.s @@ -336,59 +336,32 @@ int $3 # "repz" vmovaps %xmm7, %xmm7 - .byte 0xc5 - .byte 0xfa - .byte 0x28 - .byte 0xff + .insn VEX.128.f3.0f.W0 0x28, %xmm7, %xmm7 int $3 # "repnz" {vex3} vmovaps %xmm7, %xmm7 - .byte 0xc4 - .byte 0xe1 - .byte 0x7b - .byte 0x28 - .byte 0xff + .insn {vex3} VEX.128.f2.0f.W0 0x28, %xmm7, %xmm7 int $3 # "EVEX.W1" vmovaps %xmm7, %xmm7 - .byte 0x62 - .byte 0xf1 - .byte 0xfc - .byte 0x08 - .byte 0x28 - .byte 0xff + .insn EVEX.128.0f.W1 0x28, %xmm7, %xmm7 int $3 # "repz" vmovaps %xmm7, %xmm7 - .byte 0x62 - .byte 0xf1 - .byte 0x7e - .byte 0x08 - .byte 0x28 - .byte 0xff + .insn EVEX.128.f3.0f.W0 0x28, %xmm7, %xmm7 int $3 # "EVEX.W0" vmovapd %xmm7, %xmm7 - .byte 0x62 - .byte 0xf1 - .byte 0x7d - .byte 0x08 - .byte 0x28 - .byte 0xff + .insn EVEX.128.66.0f.W0 0x28, %xmm7, %xmm7 int $3 # "repnz" vmovapd %xmm7, %xmm7 - .byte 0x62 - .byte 0xf1 - .byte 0xff - .byte 0x08 - .byte 0x28 - .byte 0xff + .insn EVEX.128.f2.0f.W1 0x28, %xmm7, %xmm7 int $3 --- a/gas/testsuite/gas/i386/x86-64-amx-bad.s +++ b/gas/testsuite/gas/i386/x86-64-amx-bad.s @@ -1,63 +1,32 @@ .text #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.W = 1 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0xd2 - .byte 0x5c - .byte 0xdc + .insn VEX.128.F3.0F38.W1 0x5c, %tmm4, %tmm5, %tmm3 .fill 0x05, 0x01, 0x90 + #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.L = 1 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0x56 - .byte 0x5c - .byte 0xdc + .insn VEX.256.F3.0F38.W0 0x5c, %tmm4, %tmm5, %tmm3 .fill 0x05, 0x01, 0x90 + #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.R = 0 (illegal value). - .byte 0xc4 - .byte 0x62 - .byte 0x52 - .byte 0x5c - .byte 0xdc + .insn VEX.128.F3.0F38.W0 0x5c, %xmm4, %xmm5, %xmm11 + #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.B = 0 (illegal value). - .byte 0xc4 - .byte 0xc2 - .byte 0x52 - .byte 0x5c - .byte 0xdc + .insn VEX.128.F3.0F38.W0 0x5c, %xmm12, %xmm5, %xmm3 + #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.VVVV = 0110 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0x32 - .byte 0x5c - .byte 0xdc - #tileloadd (%rax),%tmm1 set R/M= 001 (illegal value) without SIB. - .byte 0xc4 - .byte 0xe2 - .byte 0x7b - .byte 0x4b - .byte 0x09 + .insn VEX.128.F3.0F38.W0 0x5c, %xmm4, %xmm9, %xmm3 + + #tileloadd (%rcx),%tmm1 set R/M= 001 (illegal value) without SIB. + .insn VEX.128.F2.0F38.W0 0x4b, (%rcx), %xmm1 + #tdpbuud %tmm1,%tmm1,%tmm1 All 3 TMM registers can't be identical. - .byte 0xc4 - .byte 0xe2 - .byte 0x70 - .byte 0x5e - .byte 0xc9 + .insn VEX.128.NP.0F38.W0 0x5e, %tmm1, %tmm1, %tmm1 + #tdpbuud %tmm0,%tmm1,%tmm1 All 3 TMM registers can't be identical. - .byte 0xc4 - .byte 0xe2 - .byte 0x78 - .byte 0x5e - .byte 0xc9 + .insn VEX.128.NP.0F38.W0 0x5e, %tmm1, %tmm0, %tmm1 + #tdpbuud %tmm1,%tmm0,%tmm1 All 3 TMM registers can't be identical. - .byte 0xc4 - .byte 0xe2 - .byte 0x70 - .byte 0x5e - .byte 0xc8 + .insn VEX.128.NP.0F38.W0 0x5e, %tmm0, %tmm1, %tmm1 + #tdpbuud %tmm1,%tmm1,%tmm0 All 3 TMM registers can't be identical. - .byte 0xc4 - .byte 0xe2 - .byte 0x70 - .byte 0x5e - .byte 0xc1 + .insn VEX.128.NP.0F38.W0 0x5e, %tmm1, %tmm1, %tmm0 --- a/gas/testsuite/gas/i386/x86-64-amx-fp16-bad.s +++ b/gas/testsuite/gas/i386/x86-64-amx-fp16-bad.s @@ -2,34 +2,18 @@ .text #tdpfp16ps %tmm5,%tmm4,%tmm3 set VEX.W = 1 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0xd3 - .byte 0x5c - .byte 0xdc + .insn VEX.128.F2.0F38.W1 0x5c, %tmm4, %tmm5, %tmm3 .fill 0x05, 0x01, 0x90 + #tdpfp16ps %tmm5,%tmm4,%tmm3 set VEX.L = 1 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0x57 - .byte 0x5c - .byte 0xdc + .insn VEX.256.F2.0F38.W0 0x5c, %tmm4, %tmm5, %tmm3 .fill 0x05, 0x01, 0x90 + #tdpfp16ps %tmm5,%tmm4,%tmm3 set VEX.R = 0 (illegal value). - .byte 0xc4 - .byte 0x62 - .byte 0x53 - .byte 0x5c - .byte 0xdc - #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.B = 0 (illegal value). - .byte 0xc4 - .byte 0xc2 - .byte 0x53 - .byte 0x5c - .byte 0xdc - #tdpbf16ps %tmm5,%tmm4,%tmm3 set VEX.VVVV = 0110 (illegal value). - .byte 0xc4 - .byte 0xe2 - .byte 0x33 - .byte 0x5c - .byte 0xdc + .insn VEX.128.F2.0F38.W0 0x5c, %xmm4, %xmm5, %xmm11 + + #tdpfp16ps %tmm5,%tmm4,%tmm3 set VEX.B = 0 (illegal value). + .insn VEX.128.F2.0F38.W0 0x5c, %xmm12, %xmm5, %xmm3 + + #tdpfp16ps %tmm5,%tmm4,%tmm3 set VEX.VVVV = 0110 (illegal value). + .insn VEX.128.F2.0F38.W0 0x5c, %xmm4, %xmm9, %xmm3 --- a/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s +++ b/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s @@ -1,17 +1,15 @@ # Check if objdump works correctly when some bits in instruction # has non-default value -# vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with null RC -.byte 0x62, 0xf3, 0xd5, 0x1f, 0x0b, 0xf4, 0x7b + vrndscalesd $123, {sae}, %xmm4, %xmm5, %xmm6{%k7} # with null RC # vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with not-null RC -.byte 0x62, 0xf3, 0xd5, 0x5f, 0x0b, 0xf4, 0x7b -# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'} -.byte 0x62, 0xf2, 0x55, 0x4f, 0x3b, 0xf4 -# vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-11 EVEX.{B,R'} -.byte 0x62, 0xc2, 0x55, 0x4f, 0x3b, 0xf4 + .insn EVEX.66.0f3a.W1 0x0b, $123, {ru-sae}, %xmm4, %xmm5, %xmm6{%k7} + + vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'} + vpminud %zmm12, %zmm5, %zmm22{%k7} # with not-11 EVEX.{B,R'} # vpminud %zmm4, %zmm5, %zmm6{%k7} # with set EVEX.b bit -.byte 0x62, 0xf2, 0x55, 0x1f, 0x3b, 0xf4 -# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.b bit -.byte 0x62, 0xf2, 0x7e, 0x48, 0x31, 0x72, 0x7f + .insn EVEX.66.0F38.W0 0x3b, {rn-sae}, %zmm4, %zmm5, %zmm6{%k7} + + vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.b bit # vpmovdb %zmm6, 2032(%rdx) # with set EVEX.b bit - we should get (bad) operand -.byte 0x62, 0xf2, 0x7e, 0x58, 0x31, 0x72, 0x7f + .insn EVEX.f3.0f38.W0 0x31, %zmm6, 2032(%rdx){1to4} --- a/gas/testsuite/gas/i386/x86-64-avx512_fp16-bad.s +++ b/gas/testsuite/gas/i386/x86-64-avx512_fp16-bad.s @@ -1,36 +1,15 @@ .text #vfcmaddcph %zmm30, %zmm29, %zmm30 dest and src registers must be distinct. - .byte 0x62 - .byte 0x06 - .byte 0x17 - .byte 0x40 - .byte 0x56 - .byte 0xf6 + .insn EVEX.f2.M6.W0 0x56, %zmm30, %zmm29, %zmm30 + #vfcmaddcph (%rcx), %zmm3, %zmm3 dest and src registers must be distinct. - .byte 0x62 - .byte 0xf6 - .byte 0x67 - .byte 0x48 - .byte 0x56 - .byte 0x19 + .insn EVEX.f2.M6.W0 0x56, (%rcx), %zmm3, %zmm3 + #vfcmaddcph %xmm3, %xmm2, %xmm2 dest and src registers must be distinct. - .byte 0x62 - .byte 0xf6 - .byte 0x6f - .byte 0x08 - .byte 0x56 - .byte 0xd3 + .insn EVEX.f2.M6.W0 0x56, %xmm3, %xmm2, %xmm2 + #vfcmaddcsh %xmm3, %xmm2, %xmm3 dest and src registers must be distinct. - .byte 0x62 - .byte 0xf6 - .byte 0x6f - .byte 0x08 - .byte 0x57 - .byte 0xdb + .insn EVEX.LIG.f2.M6.W0 0x57, %xmm3, %xmm2, %xmm3 + #vfcmaddcsh %xmm3, %xmm2, %xmm2 dest and src registers must be distinct. - .byte 0x62 - .byte 0xf6 - .byte 0x6f - .byte 0x08 - .byte 0x57 - .byte 0xd3 + .insn EVEX.LIG.f2.M6.W0 0x57, %xmm3, %xmm2, %xmm2 --- a/gas/testsuite/gas/i386/x86-64-disassem.d +++ b/gas/testsuite/gas/i386/x86-64-disassem.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -drw #name: x86-64 opcodes with invalid modrm byte --- a/gas/testsuite/gas/i386/x86-64-disassem.s +++ b/gas/testsuite/gas/i386/x86-64-disassem.s @@ -1,124 +1,124 @@ .text -.byte 0xFF, 0xEF -.byte 0xFF, 0xD8 + .insn 0xFF/5, %edi + .insn 0xFF/3, %eax .fill 0x5, 0x1, 0x90 .byte 0xC5, 0xEC, 0x4A, 0x9B .byte 0xC5, 0xEC, 0x4A, 0x6F -.byte 0xC5, 0xEC, 0x4A, 0x3F + .insn VEX.L1.NP.0f.W0 0x4a, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x4A, 0x9B .byte 0xC5, 0xED, 0x4A, 0x6F -.byte 0xC5, 0xED, 0x4A, 0x3F + .insn VEX.L1.66.0f.W0 0x4a, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x4A, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x4A, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x4A, 0x3F + .insn VEX.L1.NP.0f.W1 0x4a, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x4A, 0x9B .byte 0xC4, 0xE1, 0xED, 0x4A, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x4A, 0x3F + .insn VEX.L1.66.0f.W1 0x4a, (%rdi), %k2, %k7 .byte 0xC5, 0xEC, 0x41, 0x9B .byte 0xC5, 0xEC, 0x41, 0x6F -.byte 0xC5, 0xEC, 0x41, 0x3F + .insn VEX.L1.NP.0f.W0 0x41, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x41, 0x9B .byte 0xC5, 0xED, 0x41, 0x6F -.byte 0xC5, 0xED, 0x41, 0x3F + .insn VEX.L1.66.0f.W0 0x41, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x41, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x41, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x41, 0x3F + .insn VEX.L1.NP.0f.W1 0x41, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x41, 0x9B .byte 0xC4, 0xE1, 0xED, 0x41, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x41, 0x3F + .insn VEX.L1.66.0f.W1 0x41, (%rdi), %k2, %k7 .byte 0xC5, 0xEC, 0x42, 0x9B .byte 0xC5, 0xEC, 0x42, 0x6F -.byte 0xC5, 0xEC, 0x42, 0x3F + .insn VEX.L1.NP.0f.W0 0x42, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x42, 0x9B .byte 0xC5, 0xED, 0x42, 0x6F -.byte 0xC5, 0xED, 0x42, 0x3F + .insn VEX.L1.66.0f.W0 0x42, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x42, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x42, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x42, 0x3F + .insn VEX.L1.NP.0f.W1 0x42, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x42, 0x9B .byte 0xC4, 0xE1, 0xED, 0x42, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x42, 0x3F + .insn VEX.L1.66.0f.W1 0x42, (%rdi), %k2, %k7 .byte 0xC5, 0xEC, 0x4B, 0x9B .byte 0xC5, 0xEC, 0x4B, 0x6F -.byte 0xC5, 0xEC, 0x4B, 0x3F + .insn VEX.L1.NP.0f.W0 0x4b, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x4B, 0x9B .byte 0xC5, 0xED, 0x4B, 0x6F -.byte 0xC5, 0xED, 0x4B, 0x3F + .insn VEX.L1.66.0f.W0 0x4b, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x4B, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x4B, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x4B, 0x3F + .insn VEX.L1.NP.0f.W1 0x4b, (%rdi), %k2, %k7 .byte 0xC5, 0xF8, 0x44, 0x9B .byte 0xC5, 0xF8, 0x44, 0x6F -.byte 0xC5, 0xF8, 0x44, 0x3F + .insn VEX.L0.NP.0f.W0 0x44, (%rdi), %k7 .byte 0xC5, 0xF9, 0x44, 0x9B .byte 0xC5, 0xF9, 0x44, 0x6F -.byte 0xC5, 0xF9, 0x44, 0x3F + .insn VEX.L0.66.0f.W0 0x44, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x44, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x44, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x44, 0x3F + .insn VEX.L0.NP.0f.W1 0x44, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x44, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x44, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x44, 0x3F + .insn VEX.L0.66.0f.W1 0x44, (%rdi), %k7 .byte 0xC5, 0xEC, 0x45, 0x9B .byte 0xC5, 0xEC, 0x45, 0x6F -.byte 0xC5, 0xEC, 0x45, 0x3F + .insn VEX.L1.NP.0f.W0 0x45, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x45, 0x9B .byte 0xC5, 0xED, 0x45, 0x6F -.byte 0xC5, 0xED, 0x45, 0x3F + .insn VEX.L1.66.0f.W0 0x45, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x45, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x45, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x45, 0x3F + .insn VEX.L1.NP.0f.W1 0x45, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x45, 0x9B .byte 0xC4, 0xE1, 0xED, 0x45, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x45, 0x3F + .insn VEX.L1.66.0f.W1 0x45, (%rdi), %k2, %k7 .byte 0xC5, 0xF8, 0x98, 0x9B .byte 0xC5, 0xF8, 0x98, 0x6F -.byte 0xC5, 0xF8, 0x98, 0x3F + .insn VEX.L0.NP.0f.W0 0x98, (%rdi), %k7 .byte 0xC5, 0xF9, 0x98, 0x9B .byte 0xC5, 0xF9, 0x98, 0x6F -.byte 0xC5, 0xF9, 0x98, 0x3F + .insn VEX.L0.66.0f.W0 0x98, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x98, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x98, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x98, 0x3F + .insn VEX.L0.NP.0f.W1 0x98, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x98, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x98, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x98, 0x3F + .insn VEX.L0.66.0f.W1 0x98, (%rdi), %k7 .byte 0xC5, 0xEC, 0x46, 0x9B .byte 0xC5, 0xEC, 0x46, 0x6F -.byte 0xC5, 0xEC, 0x46, 0x3F + .insn VEX.L1.NP.0f.W0 0x46, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x46, 0x9B .byte 0xC5, 0xED, 0x46, 0x6F -.byte 0xC5, 0xED, 0x46, 0x3F + .insn VEX.L1.66.0f.W0 0x46, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x46, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x46, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x46, 0x3F + .insn VEX.L1.NP.0f.W1 0x46, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x46, 0x9B .byte 0xC4, 0xE1, 0xED, 0x46, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x46, 0x3F + .insn VEX.L1.66.0f.W1 0x46, (%rdi), %k2, %k7 .byte 0xC5, 0xEC, 0x47, 0x9B .byte 0xC5, 0xEC, 0x47, 0x6F -.byte 0xC5, 0xEC, 0x47, 0x3F + .insn VEX.L1.NP.0f.W0 0x47, (%rdi), %k2, %k7 .byte 0xC5, 0xED, 0x47, 0x9B .byte 0xC5, 0xED, 0x47, 0x6F -.byte 0xC5, 0xED, 0x47, 0x3F + .insn VEX.L1.66.0f.W0 0x47, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xEC, 0x47, 0x9B .byte 0xC4, 0xE1, 0xEC, 0x47, 0x6F -.byte 0xC4, 0xE1, 0xEC, 0x47, 0x3F + .insn VEX.L1.NP.0f.W1 0x47, (%rdi), %k2, %k7 .byte 0xC4, 0xE1, 0xED, 0x47, 0x9B .byte 0xC4, 0xE1, 0xED, 0x47, 0x6F -.byte 0xC4, 0xE1, 0xED, 0x47, 0x3F + .insn VEX.L1.66.0f.W1 0x47, (%rdi), %k2, %k7 .byte 0xC5, 0xF8, 0x99, 0x9B .byte 0xC5, 0xF8, 0x99, 0x6F -.byte 0xC5, 0xF8, 0x99, 0x3F + .insn VEX.L0.NP.0f.W0 0x99, (%rdi), %k7 .byte 0xC5, 0xF9, 0x99, 0x9B .byte 0xC5, 0xF9, 0x99, 0x6F -.byte 0xC5, 0xF9, 0x99, 0x3F + .insn VEX.L0.66.0f.W0 0x99, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF8, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF8, 0x99, 0x6F -.byte 0xC4, 0xE1, 0xF8, 0x99, 0x3F + .insn VEX.L0.NP.0f.W1 0x99, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x99, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x99, 0x3F + .insn VEX.L0.66.0f.W1 0x99, (%rdi), %k7 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x01 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x01 .byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x01 @@ -145,33 +145,33 @@ .byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x01 .byte 0xC5, 0xF8, 0x92, 0x9B .byte 0xC5, 0xF8, 0x92, 0x6F -.byte 0xC5, 0xF8, 0x92, 0x3F + .insn VEX.L0.NP.0f.W0 0x92, (%rdi), %k7 .byte 0xC5, 0xF9, 0x92, 0x9B .byte 0xC5, 0xF9, 0x92, 0x6F -.byte 0xC5, 0xF9, 0x92, 0x3F + .insn VEX.L0.66.0f.W0 0x92, (%rdi), %k7 .byte 0xC5, 0xFB, 0x92, 0x9B .byte 0xC5, 0xFB, 0x92, 0x6F -.byte 0xC5, 0xFB, 0x92, 0x3F + .insn VEX.L0.f2.0f.W0 0x92, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x92, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x92, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x92, 0x3F + .insn VEX.L0.66.0f.W1 0x92, (%rdi), %k7 .byte 0xC5, 0xF8, 0x93, 0x9B .byte 0xC5, 0xF8, 0x93, 0x6F -.byte 0xC5, 0xF8, 0x93, 0x3F + .insn VEX.L0.NP.0f.W0 0x93, (%rdi), %k7 .byte 0xC5, 0xF9, 0x93, 0x9B .byte 0xC5, 0xF9, 0x93, 0x6F -.byte 0xC5, 0xF9, 0x93, 0x3F + .insn VEX.L0.66.0f.W0 0x93, (%rdi), %k7 .byte 0xC5, 0xFB, 0x93, 0x9B .byte 0xC5, 0xFB, 0x93, 0x6F -.byte 0xC5, 0xFB, 0x93, 0x3F + .insn VEX.L0.f2.0f.W0 0x93, (%rdi), %k7 .byte 0xC4, 0xE1, 0xF9, 0x93, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x93, 0x6F -.byte 0xC4, 0xE1, 0xF9, 0x93, 0x3F -.byte 0xc4, 0x62, 0x1, 0x1c, 0x41, 0x37 -.byte 0x62, 0x72, 0xad, 0x08, 0x1c, 0x01 + .insn VEX.L0.66.0f.W1 0x93, (%rdi), %k7 + .insn VEX.66.0f38.W0 0x1c, 0x37(%rcx), %xmm15, %xmm8 + .insn EVEX.66.0f38.W1 0x1c, (%rcx), %xmm10, %xmm8 .byte 0x1 -.byte 0x62, 0xf3, 0x7d, 0x28, 0x1b, 0xc8, 0x25 + .insn EVEX.66.0f3a.W0 0x1b, $0x25, %ymm0, %xmm1 .byte 0x62, 0xf3 -.byte 0x62, 0xf3, 0x75, 0x08, 0x23, 0xc2, 0x25 + .insn EVEX.66.0f3a.W0 0x23, $0x25, %xmm2, %xmm1, %xmm0 .byte 0x62 -.byte 0x62, 0xf2, 0x7d, 0x28, 0x5b, 0x41, 0x37 + .insn EVEX.66.0f38.W0 0x5b, 0x37(%rcx){:d1}, %ymm0 --- a/gas/testsuite/gas/i386/x86-64-mpx.s +++ b/gas/testsuite/gas/i386/x86-64-mpx.s @@ -215,35 +215,19 @@ start: foo: bnd ret + .att_syntax prefix bad: - # bndldx (%eax),(bad) - .byte 0x0f - .byte 0x1a - .byte 0x30 + # bndldx (%rax),(bad) + .insn 0x0f1a, (%rax), %esi # bndmov (bad),%bnd0 - .byte 0x66 - .byte 0x0f - .byte 0x1a - .byte 0xc4 + .insn 0x660f1a, %esp, %bnd0 # bndmov with REX.B set - .byte 0x66 - .byte 0x41 - .byte 0x0f - .byte 0x1a - .byte 0xc0 + .insn 0x660f1a, %r8d, %bnd0 # bndmov with REX.R set - .byte 0x66 - .byte 0x44 - .byte 0x0f - .byte 0x1a - .byte 0xc0 + .insn 0x660f1a, %bnd0, %r8d # bndmk (bad),%bnd0 - .byte 0xf3 - .byte 0x0f - .byte 0x1b - .byte 0x05 - .long 0x90909090 + .insn 0xf30f1b, -0x6f6f6f70(%rip), %bnd0 --- a/gas/testsuite/gas/i386/x86-64-nops.d +++ b/gas/testsuite/gas/i386/x86-64-nops.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -drw #name: x86-64 nops @@ -13,7 +14,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f 1f 80 00 00 00 00 nopl 0x0\(%rax\) [ ]*[a-f0-9]+: 0f 1f 84 00 00 00 00 00 nopl 0x0\(%rax,%rax,1\) [ ]*[a-f0-9]+: 66 0f 1f 84 00 00 00 00 00 nopw 0x0\(%rax,%rax,1\) -[ ]*[a-f0-9]+: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\) +[ ]*[a-f0-9]+: 2e 66 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\) [ ]*[a-f0-9]+: 0f 19 ff nop %edi [ ]*[a-f0-9]+: 0f 1a ff nop %edi [ ]*[a-f0-9]+: 0f 1b ff nop %edi --- a/gas/testsuite/gas/i386/x86-64-nops.s +++ b/gas/testsuite/gas/i386/x86-64-nops.s @@ -1,48 +1,49 @@ .text - .byte 0x0f, 0x1f, 0x0 - .byte 0x0f, 0x1f, 0x40, 0x0 - .byte 0x0f, 0x1f, 0x44, 0x0, 0x0 - .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0 - .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0 - .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 - .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 - .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .insn 0x0f1f/0, (%rax) + .insn {disp8} 0x0f1f/0, 0(%rax) + .insn {disp8} 0x0f1f/0, 0(%rax,%rax) + .insn {disp8} data16 0x0f1f/0, 0(%rax,%rax) + .insn {disp32} 0x0f1f/0, 0(%rax) + .insn {disp32} 0x0f1f/0, 0(%rax,%rax) + .insn {disp32} data16 0x0f1f/0, 0(%rax,%rax) + .insn {disp32} data16 0x0f1f/0, %cs:0(%rax,%rax) # reg,reg - .byte 0x0f, 0x19, 0xff - .byte 0x0f, 0x1a, 0xff - .byte 0x0f, 0x1b, 0xff - .byte 0x0f, 0x1c, 0xff - .byte 0x0f, 0x1d, 0xff - .byte 0x0f, 0x1e, 0xff - .byte 0x0f, 0x1f, 0xff + .insn 0x0f19, %edi, %edi + .insn 0x0f1a, %edi, %edi + .insn 0x0f1b, %edi, %edi + .insn 0x0f1c, %edi, %edi + .insn 0x0f1d, %edi, %edi + .insn 0x0f1e, %edi, %edi + .insn 0x0f1f, %edi, %edi # with base and imm8 - .byte 0x0f, 0x19, 0x5A, 0x22 - .byte 0x0f, 0x1c, 0x5A, 0x22 - .byte 0x0f, 0x1d, 0x5A, 0x22 - .byte 0x0f, 0x1e, 0x5A, 0x22 - .byte 0x0f, 0x1f, 0x5A, 0x22 + .insn 0x0f19/3, 0x22(%rdx) + .insn 0x0f1c/3, 0x22(%rdx) + .insn 0x0f1d/3, 0x22(%rdx) + .insn 0x0f1e/3, 0x22(%rdx) + .insn 0x0f1f/3, 0x22(%rdx) # with sib and imm32 - .byte 0x0f, 0x19, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1c, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1d, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1e, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - .byte 0x0f, 0x1f, 0x9C, 0x1D, 0x11, 0x22, 0x33, 0x44 - - .byte 0x0f, 0x19, 0x04, 0x60 - .byte 0x0f, 0x1c, 0x0c, 0x60 - .byte 0x0f, 0x1d, 0x04, 0x60 - .byte 0x0f, 0x1e, 0x04, 0x60 - .byte 0x0f, 0x1f, 0x04, 0x60 - - .byte 0x0f, 0x19, 0x04, 0x59 - .byte 0x0f, 0x1c, 0x0c, 0x59 - .byte 0x0f, 0x1d, 0x04, 0x59 - .byte 0x0f, 0x1e, 0x04, 0x59 - .byte 0x0f, 0x1f, 0x04, 0x59 + .insn 0x0f19/3, 0x44332211(%rbp,%rbx) + .insn 0x0f1c/3, 0x44332211(%rbp,%rbx) + .insn 0x0f1d/3, 0x44332211(%rbp,%rbx) + .insn 0x0f1e/3, 0x44332211(%rbp,%rbx) + .insn 0x0f1f/3, 0x44332211(%rbp,%rbx) + + .allow_index_reg + .insn 0x0f19/0, (%rax,%riz,2) + .insn 0x0f1c/1, (%rax,%riz,2) + .insn 0x0f1d/0, (%rax,%riz,2) + .insn 0x0f1e/0, (%rax,%riz,2) + .insn 0x0f1f/0, (%rax,%riz,2) + + .insn 0x0f19/0, (%rcx,%rbx,2) + .insn 0x0f1c/1, (%rcx,%rbx,2) + .insn 0x0f1d/0, (%rcx,%rbx,2) + .insn 0x0f1e/0, (%rcx,%rbx,2) + .insn 0x0f1f/0, (%rcx,%rbx,2) nop %rax nop %eax --- a/gas/testsuite/gas/i386/x86-64-opcode.d +++ b/gas/testsuite/gas/i386/x86-64-opcode.d @@ -1,4 +1,4 @@ -#as: -J +#as: -J --divide #objdump: -drw #name: x86-64 opcode --- a/gas/testsuite/gas/i386/x86-64-opcode.s +++ b/gas/testsuite/gas/i386/x86-64-opcode.s @@ -458,16 +458,16 @@ int3 int $0x90 - .byte 0xf6, 0xc9, 0x01 - .byte 0x66, 0xf7, 0xc9, 0x02, 0x00 - .byte 0xf7, 0xc9, 0x04, 0x00, 0x00, 0x00 - .byte 0x48, 0xf7, 0xc9, 0x08, 0x00, 0x00, 0x00 - .byte 0xc0, 0xf0, 0x02 - .byte 0xc1, 0xf0, 0x01 - .byte 0x48, 0xc1, 0xf0, 0x01 - .byte 0xd0, 0xf0 - .byte 0xd1, 0xf0 - .byte 0x48, 0xd1, 0xf0 - .byte 0xd2, 0xf0 - .byte 0xd3, 0xf0 - .byte 0x48, 0xd3, 0xf0 + .insn 0xf6/1, $1, %cl + .insn 0xf7/1, $2{:u16}, %cx + .insn 0xf7/1, $4{:u32}, %ecx + .insn 0xf7/1, $8{:s32}, %rcx + .insn 0xc0/6, $2, %al + .insn 0xc1/6, $1, %eax + .insn 0xc1/6, $1, %rax + .insn 0xd0/6, %al + .insn 0xd1/6, %eax + .insn 0xd1/6, %rax + .insn 0xd2/6, %al + .insn 0xd3/6, %eax + .insn 0xd3/6, %rax --- a/gas/testsuite/gas/i386/x86-64-opcode-bad.s +++ b/gas/testsuite/gas/i386/x86-64-opcode-bad.s @@ -1,10 +1,4 @@ .text # All the followings are bad opcodes for x86-64. - .byte 0xc5 - .byte 0xac - .byte 0x46 - .byte 0xf5 - .byte 0xc5 - .byte 0x2c - .byte 0x46 - .byte 0xf5 + .insn VEX.L1.0f 0x46, %k5, %r10d, %k6 + .insn VEX.L1.0f 0x46, %k5, %r10d, %r14d --- a/gas/testsuite/gas/i386/x86-64-prefetch.d +++ b/gas/testsuite/gas/i386/x86-64-prefetch.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -dw #name: x86-64 prefetch #source: prefetch.s --- a/gas/testsuite/gas/i386/x86-64-prefetch-intel.d +++ b/gas/testsuite/gas/i386/x86-64-prefetch-intel.d @@ -1,3 +1,4 @@ +#as: --divide #objdump: -dw -Mintel #name: x86-64 prefetch (Intel disassembly) #source: prefetch.s --- a/gas/testsuite/gas/i386/x86-64-prefetchi-inval-register.d +++ b/gas/testsuite/gas/i386/x86-64-prefetchi-inval-register.d @@ -1,4 +1,4 @@ -#as: +#as: --divide #objdump: -dw #name: x86-64 PREFETCHI INVAL REGISTER insns --- a/gas/testsuite/gas/i386/x86-64-prefetchi-inval-register.s +++ b/gas/testsuite/gas/i386/x86-64-prefetchi-inval-register.s @@ -1,9 +1,6 @@ .text #prefetchit0 (%rcx) PREFETCHIT0/1 apply without RIP-relative addressing, should stay NOPs. - .byte 0x0f - .byte 0x18 - .byte 0x39 + .insn 0x0f18/7, (%rcx) + #prefetchit1 (%rcx) PREFETCHIT1/1 apply without RIP-relative addressing, should stay NOPs. - .byte 0x0f - .byte 0x18 - .byte 0x31 + .insn 0x0f18/6, (%rcx) From patchwork Fri Mar 10 10:27:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 67333 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp791293wrd; Fri, 10 Mar 2023 02:29:43 -0800 (PST) X-Google-Smtp-Source: AK7set9ZQxcv1fI6/PYLXnElGFSRv6fmoBIe5ZVTSw+aJEI1GZyiNLlzJWto3rGgiDGTSNbRNY2W X-Received: by 2002:aa7:d04e:0:b0:4ab:178d:3d9f with SMTP id n14-20020aa7d04e000000b004ab178d3d9fmr21773521edo.28.1678444183390; Fri, 10 Mar 2023 02:29:43 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id x17-20020aa7dad1000000b004bbce7cda40si2032908eds.178.2023.03.10.02.29.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 02:29:43 -0800 (PST) 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=lypXl88Q; 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 39569384B0C2 for ; Fri, 10 Mar 2023 10:28:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 39569384B0C2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678444098; bh=mf+i9jlLRxSs+OzHC19gg0tHvJYvCODvFt5dfvOeNtY=; 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=lypXl88QQh1Wxm0yY0hOVFx/yOhFNouWJUsMbn5B0MI4EC6VglwJnf+1SzRlq4POs idGq+TxjUcBmvCapfVT1jkex8W4AaeEsyJEpEy4oTJM53i7kMKf0IG+flEdUxlIkXa BXq/sD5K9yespy4FAOs4kTlow1YwDmy+ScQc8X9g= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2072.outbound.protection.outlook.com [40.107.6.72]) by sourceware.org (Postfix) with ESMTPS id 21369383EC4F for ; Fri, 10 Mar 2023 10:27:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 21369383EC4F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B9jDkVTeY4/w+iwuB9k3dtpCm5CZXnyS9J1DB00ovudqB1IpEqtJcgMSXo07jYnnPr8S7rOSvk4uiY5H/a8o+BtAAvPLGARsiFrYuLgiG8yr6VXtHQwpwnghsJ9fdD10JlP8YPJ/fZnAZH6vG9bxILtYGMOVcdItvngc0tjLI8h8uABCLf3ypsvlL142GGNmwFeNp+XwMiyczt1ylx7cL9TBglMC/PKhKtfPQT2NTUUAKoJ2xJ1uLHQNfXzyfZmdgp+mXYvvjF4NFfJu3iEE8IMHQR0H7YUQO5S+siVSH7SnYZbw+crxs1TWtUm7EhJSuwKsS8o0DX25pE+Fyn9k1A== 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=mf+i9jlLRxSs+OzHC19gg0tHvJYvCODvFt5dfvOeNtY=; b=YUEmRxVQ3oevywVSelscgdyr0prmsOXwaAEN+lHSAZFn9S3v8pvw8bd+4Uq8qAtlW5iexFZJv7Dj+PRnCyL0qvWrn7aIjFPrmKFswcbWZR6Pd6gUMgupDOdKRMAuiL1O8Ej92B25JpAKHmhvL0ZkGAhOISFeICvuKJprvBonYLXHoEfNydqGGDunrUbZd/0DgS7/2AL1WIpKBy8sd0ShdSZV1ih2AakIH60Ve6A5vSOH9zMQkPZRV9GN3PP+rjRWtbs4j0GbE4qvGXjJUQeGJpnVsgD33TRZ6Ffv3uZ0Ijtta0mVIwB5mevCntfXOTsRWzzWMlYZZ/3MPWB7mvRQTg== 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 VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7138.eurprd04.prod.outlook.com (2603:10a6:208:19e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 10:27:49 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 10:27:49 +0000 Message-ID: Date: Fri, 10 Mar 2023 11:27:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH RFC v2 14/14] x86: .insn example - VEX-encoded instructions of original Xeon Phi Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: In-Reply-To: X-ClientProxiedBy: FR3P281CA0148.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:95::7) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7138:EE_ X-MS-Office365-Filtering-Correlation-Id: 90a66f24-5a38-4793-4d56-08db215218f1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nlugT7pcLHpzJjXaKZLB3DJoB8ZgbOga9t5v1puh5wGsLEc4FYrJO0Izhyranc/l24JfUlk2m+tHOMX3OSIOHFkQJFhtKnWhZyaWChE912BDQw0oOtYcfx1utSuKEFXET0DWWReSDmiwA8SwrGPHQjy/IwClhsaEHTYtbD99TRd0zHpCLlYfLrfsL6Dvk395C8ow3fHyd3NuQa4vWR1ab8O5coJ9YNPYg0bimKbxa/wA4ZcrSfpQxYiQxwBBj1j3aSe/Nhm2HfIi3I+FYCzNwx9FUyFnTyho33kKhkWsP6NJQLaKg5VQRIVChR8ZtmnXP6Jn8jAhy83TDOrTlTsl2uwqSSLwoQO7QaItMue6NlaikZXkGCIS1LNRojKOxqNQf7AUuNRXezhoPXVXdkTpnyWVYDR7HreXRaeJzg8abeHdjmhZ859P0wIIN9hSsnRfb1kjlLjK7HKmRGDcsEWAa5hEP3QZqp81yKxPiQfwBr4ql5GWCvYGcSy3xh+PDY3PV1OGbxB4j5G8OystSy1HYvkXDlHekaOSSuzKTtaSE6n6gDOtmBtul2PVngJOTz9HsGv/OmGjDh3babhD5WErsq/PTUbRg3T2GJyEaYFJVIy8305AQMX90oBrNv3jTHsSpYZc4zH9CK/LBC3JbiWNkEsEyLlHQPnANNDgWHtXip2gmfwtLhgQF4dg5wnlF8rsVe4LI7VcvSSTTQ9m4LqoxvIkAJ3gp5OxR/sHBPGi5oY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(396003)(346002)(39860400002)(376002)(136003)(366004)(451199018)(31686004)(83380400001)(36756003)(6512007)(54906003)(478600001)(316002)(38100700002)(8936002)(6486002)(2616005)(41300700001)(6506007)(26005)(186003)(5660300002)(8676002)(66476007)(66946007)(66556008)(2906002)(6916009)(4326008)(31696002)(86362001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?0pd/ErwmGBR+kCvjyVUHWOAEusDq?= =?utf-8?q?KyWYQ6TbfMidTwPuCugYDtb4PX8dB+zE4G4dXxKA+Q0U+JMcHbE4FBeUbDcRHbuyO?= =?utf-8?q?UOf9Qx8+oW8xMS7fuzIcpPxRFpDUNBpZmtVGzOED6Sjgnc4X/hfT6uznkl3u0IMjs?= =?utf-8?q?aAe1q1oTJsb0pKKOVxogiWO0ztzVdaj1fR2Buod1HGddXru5Fn3zQC0FycwzCiWDC?= =?utf-8?q?ZwxRyST6ddgo+vq/ANEhslbHXuXNP400S/DV2LlyQpMgA1WfVDWulN8G07VnVKWUB?= =?utf-8?q?K13w11t1XrDDv0AIq2YGpf5NLGrjP21+UMCBx+VjBOYjZjBurMcIl7Xo6cCmF4h5k?= =?utf-8?q?wEVObJXSOhbUBpc0INiUckMJhoY74W3GVxOZxP9W7XSW15NO9wNpiGJw6cFsuSCDv?= =?utf-8?q?ygWrzFUqRnYOpTsn7EZ1TAGzIOEw6OKEB1TEvv2twi+N8ijnHLKV7QbXFD9xNFY9+?= =?utf-8?q?/Gjtq0P/Oi4z1E53KiiG41caGu48ozdLY4zqX+7Exz5c/SwcswAHCxkF8Bq0GN35g?= =?utf-8?q?5UG/TGQ4U/+EneNLBJ1bpQ2CnCxLtukEJw4QzsancaKDTe5Hvb2XlN29XyweurUZm?= =?utf-8?q?xv2PO79u2ri3Qm5zp/3ViQu7qEgTcmUMNoLe9VcC1yboUIuzfCwvPyXvnIvWL47Wj?= =?utf-8?q?hpkU+St/IZ4K+TKi6TOSvBK7A+OUeBBjod9qSrF6ontpZXwzknVlJzfsurB+cqNz5?= =?utf-8?q?x/qugCi3rIvTwleCooqF/raoJSoW2cG/uvw0BPie2mXLfKCbNNZ7L2oaUtVoftr6m?= =?utf-8?q?GW9zpWH30wg6/kWsh9icx76DB2Yi40xjdBSeaW6Hl2hygm+H1eQZ++7EzioFmrWbs?= =?utf-8?q?WhDEGJEvgm+wnnZm2w0z2Pmb8dsSOps6QeBe3sod6WB4c5o25WWmfq/0NH9OCqi6A?= =?utf-8?q?16ch/oZ+5/j3pcT7E6qIzw1aLzGJeier7mES0KLT6H74cixdDA+/fHDkR+NOUsybC?= =?utf-8?q?JIwx2nYyxxeFUOif6hTxs95q+vyFNgZWlA0OYiZP5Wydq0Jt1W9qRAusQRPrJOpNw?= =?utf-8?q?I9V+J5q68awzY56AFfqWdZQ7EZ+3XsFfiRU5K/qXC+Ha2uVk2yrleedemYAGAfAmY?= =?utf-8?q?xKtSPvynpvqPo/0ehxM3K+jlEPdijz1SkrtoZnjs+z3MB4uokNNG1Fw+gQHPoDC2R?= =?utf-8?q?i6Hu7UtRs/qouxWPeKsM+6k2NvuHcv0ZN017PDcsIYyqfNoJCe13+rCfyVZKfhFXk?= =?utf-8?q?nERp/DFabALGcRf0wwUt2+nCmjCsHzVx+Us9yb4fSN4JWzty4UFbT8r3AGGNb/Etu?= =?utf-8?q?GCUkM7dl7FKWKTMY0+Vrgti5rJ9AlzHYrj3Fw2qcgS8TahfLyWHv+jTv85vmWIgW1?= =?utf-8?q?bjAq8mtsix/HVlIYNZ69C4nREBx5I7XaB3Eqrxwj1WW3bvZj5CaA6+vjuC5Qmd/SG?= =?utf-8?q?hXJesJEB+TXvaHOlaH3dLVYSn0R0kJtDMBO+mh5yXArmImN0cB+fD/kRVx+oZwtnP?= =?utf-8?q?zh/y+cJFgneprur8iWCxj5QqmfU12/fwVkpBhRMsrVHGMlXbpNbNXIrk5bP8dUTpu?= =?utf-8?q?UQqR94UVjP8U?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 90a66f24-5a38-4793-4d56-08db215218f1 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2023 10:27:49.3809 (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: pmgr9ctdbp8YQ0EXPsY2eTtkHW9PnMyC1GlMilydUi/WLbOYk6Gt7b69SC45xjfTPgR1Bo/kpYwAxIXkWtoUXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7138 X-Spam-Status: No, score=-3028.1 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 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?1759976287840370265?= X-GMAIL-MSGID: =?utf-8?q?1759976287840370265?= While obviously the otherwise unknown to gas MVEX encoded insns cannot be expressed (for now gas simply doesn't know to keep clear the bit distinguishing it from EVEX, and of course Phi-specific operand forms also aren't known to it), the VEX ones can be. Since the disassembler produces utter rubbish, have expectations - at least for the time being - in raw hex dump form. (I've verified with my own disassembler that generated code is correct.) --- RFC: Do we want this as a new testcase? --- v2: Pass --divide. Xfail test for Darwin. --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -875,6 +875,7 @@ if [gas_64_check] then { run_dump_test "x86-64-sysenter-amd" run_list_test "x86-64-sysenter-amd" "-mamd64" run_dump_test "insn-64" + run_dump_test "insn-Phi" run_dump_test "noreg64" run_list_test "noreg64" run_dump_test "noreg64-data16" --- /dev/null +++ b/gas/testsuite/gas/i386/insn-Phi.d @@ -0,0 +1,21 @@ +#as: --divide +#objdump: -sj.text +#name: .insn (Xeon Phi) +#xfail: *-*-darwin* + +.*: +file format .* + +Contents of section .text: + 0000 c5fbae78 40c5faae 7840c4c1 7aaef0c4 .* + 0010 e1faaef1 c4e06074 e7c5d885 e0ffffff .* + 0020 c5f841d1 c5f842d1 c5f843d1 c56895c1 .* + 0030 c5e897f9 c4c3783e d103c5f8 48d1c5f8 .* + 0040 49d1c5f8 90d1c578 93d1c4c1 7892d1c5 .* + 0050 f844d1c5 f845d1c5 f898d1c5 f846d1c5 .* + 0060 f847d1c4 c17abdc8 c461fabd c1c57ab8 .* + 0070 c1c4c1fa b8c8c5fb aef1c4c1 fbaef0c4 .* + 0080 c17abcc8 c461fabc c1c57bbc c1c4c1fb .* + 0090 bcc8c5f8 184f40c4 c1781850 40c4c178 .* + 00a0 185f40c5 f8182d55 ffffffc4 a1781834 .* + 00b0 41c4c178 183c88c5 f81824c5 00000000 .* + 00c0 c5f81840 40.* --- /dev/null +++ b/gas/testsuite/gas/i386/insn-Phi.s @@ -0,0 +1,44 @@ + .text +Phi: + .insn VEX.L0.f2.0f 0xae/7, 0x40(%rax) # clevict0 0x40(%rax) + .insn VEX.L0.f3.0f 0xae/7, 0x40(%rax) # clevict1 0x40(%rax) + .insn VEX.L0.f3.0f 0xae/6, %r8d # delay %r8d + .insn VEX.L0.f3.0f 0xae/6, %rcx # delay %rcx + .insn VEX.L0.W0 0x74, $Phi-1f{:s8}, %k3 # jkzd Phi, %k3 +1: + .insn VEX.L0.0f.W0 0x85, $Phi-2f{:s32}, %k4 # jknzd Phi, %k4 +2: + .insn VEX.L0.0f.W0 0x41, %k1, %k2 # kand %k1, %k2 + .insn VEX.L0.0f.W0 0x42, %k1, %k2 # kandn %k1, %k2 + .insn VEX.L0.0f.W0 0x43, %k1, %k2 # kandnr %k1, %k2 + .insn VEX.L0.0f.W0 0x95, %k1, %k2, %r8 # kconcath %k1, %k2, %r8 + .insn VEX.L0.0f.W0 0x97, %k1, %k2, %rdi # kconcatl %k1, %k2, %rdi + .insn VEX.L0.0f3a.W0 0x3e, $3, %r9, %k2 # kextract $3, %r9, %k2 + .insn VEX.L0.0f.W0 0x48, %k1, %k2 # kmergel1h %k1, %k2 + .insn VEX.L0.0f.W0 0x49, %k1, %k2 # kmergel1l %k1, %k2 + .insn VEX.L0.0f.W0 0x90, %k1, %k2 # kmov %k1, %k2 + .insn VEX.L0.0f.W0 0x93, %k1, %r10d # kmov %k1, %r10d + .insn VEX.L0.0f.W0 0x92, %r9d, %k2 # kmov %r9d, %k2 + .insn VEX.L0.0f.W0 0x44, %k1, %k2 # knot %k1, %k2 + .insn VEX.L0.0f.W0 0x45, %k1, %k2 # kor %k1, %k2 + .insn VEX.L0.0f.W0 0x98, %k1, %k2 # kortest %k1, %k2 + .insn VEX.L0.0f.W0 0x46, %k1, %k2 # kxnor %k1, %k2 + .insn VEX.L0.0f.W0 0x47, %k1, %k2 # kxor %k1, %k2 + .insn VEX.L0.f3.0f 0xbd, %r8d, %ecx # lzcnt %r8d, %ecx + .insn VEX.L0.f3.0f 0xbd, %rcx, %r8 # lzcnt %rcx, %r8 + .insn VEX.L0.f3.0f 0xb8, %ecx, %r8d # popcnt %ecx, %r8d + .insn VEX.L0.f3.0f 0xb8, %r8, %rcx # popcnt %r8, %rcx + .insn VEX.L0.f2.0f 0xae/6, %ecx # spflt %ecx + .insn VEX.L0.f2.0f 0xae/6, %r8 # spflt %r8 + .insn VEX.L0.f3.0f 0xbc, %r8d, %ecx # tzcnt %r8d, %ecx + .insn VEX.L0.f3.0f 0xbc, %rcx, %r8 # tzcnt %rcx, %r8 + .insn VEX.L0.f2.0f 0xbc, %ecx, %r8d # tzcnti %ecx, %r8d + .insn VEX.L0.f2.0f 0xbc, %r8, %rcx # tzcnti %r8, %rcx + .insn VEX.L0.0f 0x18/1, 0x40(%rdi) # vprefetch0 0x40(%rdi) + .insn VEX.L0.0f 0x18/2, 0x40(%r8) # vprefetch1 0x40(%r8) + .insn VEX.L0.0f 0x18/3, 0x40(%r15) # vprefetch2 0x40(%r15) + .insn VEX.L0.0f 0x18/5, Phi(%rip) # vprefetche0 Phi(%rip) + .insn VEX.L0.0f 0x18/6, (%rcx,%r8,2) # vprefetche1 (%rcx,%r8,2) + .insn VEX.L0.0f 0x18/7, (%r8,%rcx,4) # vprefetche2 (%r8,%rcx,4) + .insn VEX.L0.0f 0x18/4, (,%rax,8) # vprefetchenta (,%rax,8) + .insn VEX.L0.0f 0x18/0, 0x40(%rax) # vprefetchnta 0x40(%rax)