From patchwork Fri Dec 5 06:47:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: mengqinggang X-Patchwork-Id: 125947 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2A03148F3CDC for ; Fri, 5 Dec 2025 06:53:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2A03148F3CDC X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 1B3614CD2023 for ; Fri, 5 Dec 2025 06:52:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1B3614CD2023 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1B3614CD2023 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1764917541; cv=none; b=WnVToGTj/ycLlrHzSypFQuiu0cYWc+noZnMXWGILxP5b3R9Pe3gm2+q6RGzCXOF+HSeWCXYiQGIeIV49Q/0edH/klLRUi6P2zcV6QCSi3x3x0axJfGZXA0LKscMyalDO5Ofs8mXWT4Xh+LGBUoq7f6rEFdV06H+2jdknT1MD+uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1764917541; c=relaxed/simple; bh=3dyj/UE1HxVLofw6/CpcmJRrxoHgn6AEBPZbA0qck+4=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=HoIvyG84Mpk+4y+GN+O34Iug5Xz5eV+JZgFvXDo6cUV6RSO1/KkiCGOd6YCqFiZFF/BXMqjUb9iG2S1puIUVkvbrssKWsd6/8pvtAbepqye2zCTis6QT38MYL8H0veVLWe20TcbdQXP10VBq4BGm72pnt0o6UyU5KEruu8N2pBA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1B3614CD2023 Received: from loongson.cn (unknown [10.2.6.7]) by gateway (Coremail) with SMTP id _____8Cxbb8agTJpF04rAA--.26539S3; Fri, 05 Dec 2025 14:52:10 +0800 (CST) Received: from amd9754.. (unknown [10.2.6.7]) by front1 (Coremail) with SMTP id qMiowJBxTMERgTJprcRFAQ--.62732S2; Fri, 05 Dec 2025 14:52:01 +0800 (CST) From: mengqinggang To: binutils@sourceware.org Cc: xuchenghua@loongson.cn, chenglulu@loongson.cn, cailulu@loongson.cn, xry111@xry111.site, i.swmail@xen0n.name, maskray@google.com, luweining@loongson.cn, hejinyang@loongson.cn, c@jia.je, mengqinggang@loongson.cn Subject: [PATCH v3 08/12] LoongArch: LA32R macros expand Date: Fri, 5 Dec 2025 14:47:55 +0800 Message-Id: <20251205064759.2102819-9-mengqinggang@loongson.cn> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251205064759.2102819-1-mengqinggang@loongson.cn> References: <20251205064759.2102819-1-mengqinggang@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: qMiowJBxTMERgTJprcRFAQ--.62732S2 X-CM-SenderInfo: 5phqw15lqjwttqj6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, 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 sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Define a symbol .Lpcadd_hi* at R_LARCH_*_PCADD_HI20 if the instruction expand from macro. Change the symbol of R_LARCH_PCADD_LO12 to .Lpcadd_hi* if the instruction expand from macro. --- gas/config/tc-loongarch.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c index 3b4b7715ce5..fe6fccec05f 100644 --- a/gas/config/tc-loongarch.c +++ b/gas/config/tc-loongarch.c @@ -1380,6 +1380,18 @@ assember_macro_helper (const char *const args[], void *context_ptr) return ret; } +static unsigned int pcadd_hi = 0; +#define PCADD_HI_LABEL_NAME ".Lpcadd_hi" + +static char * +loongarch_pcadd_hi_label_name (unsigned int n) +{ + static char symbol_name_build[24]; + char *p = symbol_name_build; + sprintf (p, "%s%u", PCADD_HI_LABEL_NAME, n); + return symbol_name_build; +} + /* Accept instructions separated by ';' * assuming 'not starting with space and not ending with space' or pass in * empty c_str. */ @@ -1418,6 +1430,33 @@ loongarch_assemble_INSNs (char *str, unsigned int expand_from_macro) loongarch_split_args_by_comma (str, the_one.arg_strs); get_loongarch_opcode (&the_one); + /* Make a new label .Lpcadd_hi* for pcadd_lo12. */ + if (expand_from_macro + && the_one.reloc_num > 0 + && (the_one.reloc_info[0].type == BFD_RELOC_LARCH_PCADD_HI20 + || the_one.reloc_info[0].type == BFD_RELOC_LARCH_GOT_PCADD_HI20 + || the_one.reloc_info[0].type == BFD_RELOC_LARCH_TLS_IE_PCADD_HI20 + || the_one.reloc_info[0].type == BFD_RELOC_LARCH_TLS_LD_PCADD_HI20 + || the_one.reloc_info[0].type == BFD_RELOC_LARCH_TLS_GD_PCADD_HI20 + || the_one.reloc_info[0].type == BFD_RELOC_LARCH_TLS_DESC_PCADD_HI20)) + { + char *name = loongarch_pcadd_hi_label_name (pcadd_hi); + local_symbol_make (name, now_seg, frag_now, frag_now_fix ()); + } + + /* Change symbol to .Lpcadd_hi*. */ + if (expand_from_macro + && the_one.reloc_num > 0 + && the_one.reloc_info[0].type == BFD_RELOC_LARCH_PCADD_LO12) + { + char *name = loongarch_pcadd_hi_label_name (pcadd_hi); + symbolS *s = symbol_find (name); + if (s == NULL) + as_bad (_("no matched pcadd_hi label: %s"), name); + the_one.reloc_info[0].value.X_add_symbol = s; + pcadd_hi++; + } + if (!the_one.all_match) { char *ss = loongarch_cat_splited_strs (the_one.arg_strs);