From patchwork Fri Mar 3 12:58:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 63893 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp392900wrd; Fri, 3 Mar 2023 04:59:26 -0800 (PST) X-Google-Smtp-Source: AK7set9TDL0VBeH1lVwG1VB0IvcANxW0DHrzUZuRoTM7/5KH04jrOnO21mzvRKZMQb5ptwX6dXCw X-Received: by 2002:a17:906:bc97:b0:8b2:7534:265e with SMTP id lv23-20020a170906bc9700b008b27534265emr1351989ejb.58.1677848365916; Fri, 03 Mar 2023 04:59:25 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id p12-20020a056402074c00b004ac8358be51si2434458edy.464.2023.03.03.04.59.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Mar 2023 04:59:25 -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=akI0i8jX; 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 B357F38515F9 for ; Fri, 3 Mar 2023 12:58:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B357F38515F9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1677848332; bh=t39cbuA5i3/fTrFnJO45dej4fF/4f71CDB7kcN6BZ2w=; 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=akI0i8jXSco8B2RHys6Kxr2vsBlydcM4dOx8uxMvOA4CX9RDqjUuMGmXdw69PEUoo mB4sHfXvqDe95Obqs/AKPrmWOjfzLJ5uU0u/6fTeICWRISxOCHacOL+Oio/NxGLLq4 gI71LIwukOl9CJEtmUsxtPaQnfGCp6piI6BP3Mks= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2071.outbound.protection.outlook.com [40.107.14.71]) by sourceware.org (Postfix) with ESMTPS id ECD333856975 for ; Fri, 3 Mar 2023 12:58:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ECD333856975 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eOo0TpyGEPlbQexzWQ71xQtwBv9+mlPO5A/74l53xS6AYYYRBvS2s0Pzh2NQn3pc4QONlCqxHKu/LGqbbQK7TPn4nJeXQN8VWg8EbvgLQNZVXaj64G+3MiU4HjgJhGlozbHCCZhx2CzwKSANtHu8KOdGKFeCNV++vpzJXzj0gUaGSrOYepjRz/Oefdwgz3rmZ/NRK05CZskYxRpIt1QTrfqr8b/WsuIKgEtpIKEfolEBlciYMHzhs4Yg2aDvjSssSpYyOSzqqovqIVzroxt0Gz7a2Gd7v0kbMw0gntCp31aRxy8QLnD4AjVM3xudyLN1SIX9j3SbyA78saXr5OgswQ== 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=t39cbuA5i3/fTrFnJO45dej4fF/4f71CDB7kcN6BZ2w=; b=B5mbhnRSarjLN1ilUmAhCN2Nz3aH34mKlVegOuCcvIAyijgEf6yJYFroXpWDhCiwWnFo/0lQVurVex4Dyet5getl55K/FqHGlYwOO18Z99f6BtPY9HSp9Fqu0yYKXq8cW9pQVH9qTfTUoz4FN5de5wz/2CXhdNCJ+jmgLLheUwXVfi8vx8m2UWOsbMsS+s86rE8iFdNaay/usvuklR1w8bNoxbWfXY59iYCELURtP/ep3uWFzBDJuZ9bwZyhARC0BEXutzeBtwMweo3eclpHitCEhQbwr0dTKiALRhx4w8d8F1YhuqrPWI+nsGr4NluAQnzzr3ruO2IyHYOKDcdUZQ== 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 PA4PR04MB7725.eurprd04.prod.outlook.com (2603:10a6:102:f1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.18; Fri, 3 Mar 2023 12:58:35 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%7]) with mapi id 15.20.6156.019; Fri, 3 Mar 2023 12:58:35 +0000 Message-ID: <34990244-84ae-bd27-04c3-1632ad5d7841@suse.com> Date: Fri, 3 Mar 2023 13:58:33 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 05/18] x86: move more disp processing out of md_assemble() Content-Language: en-US To: Binutils Cc: "H.J. Lu" , "Jiang, Haochen" References: <764b9e03-18bd-6945-692f-a250522196ca@suse.com> In-Reply-To: <764b9e03-18bd-6945-692f-a250522196ca@suse.com> X-ClientProxiedBy: FR2P281CA0112.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9d::14) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PA4PR04MB7725:EE_ X-MS-Office365-Filtering-Correlation-Id: e66552ee-7004-499a-b089-08db1be6ff85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f5JZydsF6xTpIID511LT90C80E9oItFt9ap4tNdlYk5aHYcrOgz2PhlX2DLuO6NS3+ACw6xDq6PJH0F3NGAP+gVYHbWpJAQPCf46gn2293NVpxPrCSEnNkUX/Y/ks+0/DOKo5bBOgESQ62rwV4zNYPv+CP8T+lzTO6WewtXFI8hFOtf3C0goiECBF5pyqXjlwz9SrCnwFrJBWLZSoCEOYGYGZmhDbXv2gYupujFAGmFNcR3OCUWRvxCZh6LtNpxbf7sFNsMRtOz9F9sbCUhlreX3cPu34hNQ7aQjCq1DsC2NhZ4K4hreG2EYVqua4FsgjNsb+/VEtjsYpHXmWEWY75jbzwyB96rEOw2dzL3sUgn+kziRRg8lfLH8/gS4YL+Le46pGvCjcUUyN5e64V2KuHNc0l9AwFPh+ZrW7QBis8xpPMAitVCA8qvcYml8yeN6ZyTd3gqHsNSGLrxxyYRqz/nxq4s+IpK7JXWaY6tlHFXMkZn2F4XUnvT/lJxbtXT45eFI7MX3n8I4ilRJQqUsf4v8hXUYy9ZHODWkmSJfuQ/sy3qR32HpSLuYrVyHDWHFq8OXzsvtlMg+nhQbHyyO359qQxjBllXzbuKs3jGODtx3zv2Tznazm5gXllKNrbiUJ+8S+GkxWCXNG2f6t/aHkGwnSbrWQAo0BQCxxJHW1qomkYLx5wMWKnyFf+g9D+zM27Q6UlDrCkNo/c/opCY8GaN2L7ib/F2F9wsNLx18a/w= 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)(366004)(136003)(346002)(39860400002)(376002)(451199018)(38100700002)(4326008)(36756003)(31696002)(66946007)(86362001)(2906002)(41300700001)(66556008)(66476007)(5660300002)(8676002)(6916009)(8936002)(6506007)(26005)(2616005)(186003)(6512007)(478600001)(316002)(54906003)(6486002)(31686004)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?eQR85QiLyhixraAbuG9K1gAHXhUv?= =?utf-8?q?e7N/A056ZX7uAzHoXIQsP+v9yXMZRjiaTMarYRFFtMMzDJPkcHQo+tz4upqrjKemi?= =?utf-8?q?wwYCIULnP/PJdCnCKg0DjZXyoT9aqoxVseR/dpAe/WCPa597vuMrQk/kzbc+lnmF1?= =?utf-8?q?t0BcwDZP1oPXLttPb7pEyeu97v0lJIk0FWo38lW/zpwMaQ9FiZYNTBoHU+TR8K0fC?= =?utf-8?q?eAFdRkCZqmmHY66dJuZ4TW7/CQ5ucPLdC+DalEBdagKPNNFtZHLpGPWCih4PZnD2t?= =?utf-8?q?IECfM74OFG9KY5FbgK80esfNXyOjHmBrHjVmigBTv4p+PSlo8IQES5BW962RDWzn3?= =?utf-8?q?vL4h6fE6YBafthXObQqjuiSnmiHzKjEBNLPAnq4EqwOIso+TMqmhGOu1yPJo9wTaZ?= =?utf-8?q?AVG1SGmheR8QM5LuPHaILkazj9Uyfa7qI1Fr7Gy92mF0MbTTbFZObYMvjPsdy9jNv?= =?utf-8?q?oWQnD0yRHbaKTzBpejFH2T6eUgr0pV+rx0/2f8S3rOcwYG5TPx2BtCbz6OEca03BQ?= =?utf-8?q?FQXIj69g01wCrxr1iBfrWrCo8eiNwlKzct4I/NvXATu5MrnozdjxEOu5O1NUHDNJI?= =?utf-8?q?chJ4RVQhQ17+atT/q8rvkBbggiEP8IN+6WoDOw9VzrSh2YMRJRIBSxAkjxQKQVLQG?= =?utf-8?q?4fVhWRw2Uhafgq8StJ9g2jFGeQS87TMJoXKD61dlFPZAygvj6QQympPJdiD492KCh?= =?utf-8?q?G/MmZfWnQckd549ZSG0fLfzRvMzKsKVjPnJBsf2xIkOc08ozfJxNR1p/wQuPCu08W?= =?utf-8?q?GL3RwdrZcROHf05FGqIpAkHykLhnV94sRyM/DcxayRBqYAADzNpiB/JYRyoItGvcr?= =?utf-8?q?h5LwdZAJgVJ2t2f6qhtCmOQyDEHuoFGa588yJh3KHAV5Y4RX34pdMfaFy+JqH9O21?= =?utf-8?q?8OCKczbv5syR5q486Is0EBRzBG/qYhaNP4708nRau/g97Ltaf77kuaW17eQTxjsgy?= =?utf-8?q?oiBxHwZ0NyaNTBGjwck9QUQKvk1G5Nvt7TE3o01Wlg56AzmHheEweRFpxY1YhAK6f?= =?utf-8?q?xDXfY+6gRTvKw2trd8T3pIT55wv6kc/OuB15o1EQ1Q9zy9wQWPHqrCI6RkrOL5fe0?= =?utf-8?q?h56duveqG0rXbxP+LYemgjj0pcfKb0EeedHyToxLfnySM1k83v2EwoK1vsNidRsoQ?= =?utf-8?q?6uCg33rcjPy6dDWWMPNDY4qN3LuHCxwLpoS4nOGxppwWV+B7ZPSvwF61ykPrPOU0j?= =?utf-8?q?jz2NUe6PCOMlhdUdT1YnHe4f2+YzYbuJsccWcYEMP2bdcIlCPqAAT0ha8i2u/xrUf?= =?utf-8?q?E4NoTkeqCocDoWX7Mq2V/w9EE5ubqSCf1xHTl0mcOcH3oWc620j0qEVA3VdWLD2zn?= =?utf-8?q?W375k9OLf6Emy64caMd78r0LNQgVQJNok7Ug8wRd8s2vaVesLm2wei3V9uVYTtBQ0?= =?utf-8?q?O+tLEUAbecLD7QjnMUMhA3yUpTRmzjVSPaNV9fskZ9/5ETr1rPwWkBFQB7GjSL7pI?= =?utf-8?q?BWGcCWTP+esrm7aDdkOTZaz2oXbX2jpvgNZyvoNhunOyI3GQsPGUhCeAJAMCqy5ZY?= =?utf-8?q?AkuZjFKpv2CD?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e66552ee-7004-499a-b089-08db1be6ff85 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2023 12:58:34.9874 (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: aJRhohzApSCBAkVfsHDKy4yD0csGyQNBhCWeWxaMn1WnZNwU6Y7ja8unyomOeiT+KqhdPjLE+tlFfenfM2kuSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7725 X-Spam-Status: No, score=-3028.3 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?1759351528119657796?= X-GMAIL-MSGID: =?utf-8?q?1759351528119657796?= Put it in optimize_disp() such that it can then be re-used by s_insn(). The movement makes it necessary (or at least very desirable, to avoid introducing a fragile cast) to convert to local variable to "unsigned", which in turn requires an adjustment to the pre-existing loop header. Having the caller pass in the specific template under consideration has another benefit then: We can replace the two uses of current_templates in the function as well, thus no longer looking at just some "related" template. (This may allow further tightening, but if so that's to be the subject of another change.) --- Split from subsequent patch just to keep the other one's size under control. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -166,7 +166,7 @@ static void swap_operands (void); static void swap_2_operands (unsigned int, unsigned int); static enum flag_code i386_addressing_mode (void); static void optimize_imm (void); -static void optimize_disp (void); +static bool optimize_disp (const insn_template *t); static const insn_template *match_template (char); static int check_string (void); static int process_suffix (void); @@ -4995,42 +4995,8 @@ md_assemble (char *line) if (i.imm_operands) optimize_imm (); - if (i.disp_operands && !want_disp32 (t) - && (!t->opcode_modifier.jump - || i.jumpabsolute || i.types[0].bitfield.baseindex)) - { - for (j = 0; j < i.operands; ++j) - { - const expressionS *exp = i.op[j].disps; - - if (!operand_type_check (i.types[j], disp)) - continue; - - if (exp->X_op != O_constant) - continue; - - /* Since displacement is signed extended to 64bit, don't allow - disp32 if it is out of range. */ - if (fits_in_signed_long (exp->X_add_number)) - continue; - - i.types[j].bitfield.disp32 = 0; - if (i.types[j].bitfield.baseindex) - { - as_bad (_("0x%" PRIx64 " out of range of signed 32bit displacement"), - (uint64_t) exp->X_add_number); - return; - } - } - } - - /* Don't optimize displacement for movabs since it only takes 64bit - displacement. */ - if (i.disp_operands - && i.disp_encoding <= disp_encoding_8bit - && (flag_code != CODE_64BIT - || strcmp (mnemonic, "movabs") != 0)) - optimize_disp (); + if (i.disp_operands && !optimize_disp (t)) + return; /* Next, we find a template that matches the given insn, making sure the overlap of the given operands types is consistent @@ -6164,12 +6130,47 @@ optimize_imm (void) } /* Try to use the smallest displacement type too. */ -static void -optimize_disp (void) +static bool +optimize_disp (const insn_template *t) { - int op; + unsigned int op; - for (op = i.operands; --op >= 0;) + if (!want_disp32 (t) + && (!t->opcode_modifier.jump + || i.jumpabsolute || i.types[0].bitfield.baseindex)) + { + for (op = 0; op < i.operands; ++op) + { + const expressionS *exp = i.op[op].disps; + + if (!operand_type_check (i.types[op], disp)) + continue; + + if (exp->X_op != O_constant) + continue; + + /* Since displacement is signed extended to 64bit, don't allow + disp32 if it is out of range. */ + if (fits_in_signed_long (exp->X_add_number)) + continue; + + i.types[op].bitfield.disp32 = 0; + if (i.types[op].bitfield.baseindex) + { + as_bad (_("0x%" PRIx64 " out of range of signed 32bit displacement"), + (uint64_t) exp->X_add_number); + return false; + } + } + } + + /* Don't optimize displacement for movabs since it only takes 64bit + displacement. */ + if (i.disp_encoding > disp_encoding_8bit + || (flag_code == CODE_64BIT && t->mnem_off == MN_movabs)) + return true; + + for (op = i.operands; op-- > 0;) if (operand_type_check (i.types[op], disp)) { if (i.op[op].disps->X_op == O_constant) @@ -6198,8 +6199,8 @@ optimize_disp (void) /* Optimize 64-bit displacement to 32-bit for 64-bit BFD. */ if ((flag_code != CODE_64BIT ? i.types[op].bitfield.disp32 - : want_disp32 (current_templates->start) - && (!current_templates->start->opcode_modifier.jump + : want_disp32 (t) + && (!t->opcode_modifier.jump || i.jumpabsolute || i.types[op].bitfield.baseindex)) && fits_in_unsigned_long (op_disp)) { @@ -6235,6 +6236,8 @@ optimize_disp (void) /* We only support 64bit displacement on constants. */ i.types[op].bitfield.disp64 = 0; } + + return true; } /* Return 1 if there is a match in broadcast bytes between operand