From patchwork Fri Dec 20 13:23:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshinori Sato X-Patchwork-Id: 103506 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4F0AB3858D38 for ; Fri, 20 Dec 2024 13:24:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4F0AB3858D38 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from sakura.ysato.name (ik1-413-38519.vs.sakura.ne.jp [153.127.30.23]) by sourceware.org (Postfix) with ESMTP id 6C07D3858C3A for ; Fri, 20 Dec 2024 13:23:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6C07D3858C3A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=users.sourceforge.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=users.sourceforge.jp ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6C07D3858C3A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=153.127.30.23 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1734701032; cv=none; b=ppLoQTJnx4x6fhXqe2pK7aAPu8zX8ZX4yBzMIWxbH554j3hyY6ra+aaKwxnbNi+DDxMQPdIgBFbsGy96PrF+gbmR3cFKSlhMl85Z+Tm+vwd5FV6koGjydpGmGpL1g6mKBSxEcwQRdAA7KkxDbiPmXBMxGFnwtFV9C7NodIJuUaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1734701032; c=relaxed/simple; bh=FOfRBms9C8hlGLAGD1PBoNh2TuitWY+vdPoBYT2Hs3o=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=VGwhCJmvVX7tF7P2kwmiGgOKVlFovJMrD+80AYoYOgHJdTo8I1y0r4BSWZKSO8LiDVP14Qor9F24zw2l98Q/dFhHspkR6SyK3LHYmJYEqs4/XuHJDSL9R1kZ6iAIlPhG9f1hN0l3EGZQ1MRrr+ObnDJx07wxrrxZgjD1Oi3HaC8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6C07D3858C3A Received: from SIOS1075.tail965b62.ts.net (175.67.239.49.rev.vmobile.jp [49.239.67.175]) by sakura.ysato.name (Postfix) with ESMTPSA id 7937E1C0019; Fri, 20 Dec 2024 22:23:50 +0900 (JST) From: Yoshinori Sato To: binutils@sourceware.org Cc: Yoshinori Sato Subject: [PATCH] RX: Incorrect output for displacement of subtruct expression Date: Fri, 20 Dec 2024 22:23:41 +0900 Message-Id: <20241220132341.929112-1-ysato@users.sourceforge.jp> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KHOP_HELO_FCRDNS, LOCAL_AUTHENTICATION_FAIL_SPF, SPF_HELO_NONE, SPF_SOFTFAIL, 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.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 Assembling the following code results in incorrect displacement values: 1: mov.L 2f-1b[r0],r0 If you write a subtraction formula in the displacement field, the value will simply be the result of the subtraction, which will not be the expected value for word and longword sizes. gas/ * config/rx-parse.y (displacement): use BFD_RELOC_RX_GPREL in subtract expression. * testsuite/gas/rx/mov.sm: Add subtruct expression displacement. * testsuite/gas/rx/mov.d: Likewise. Signed-off-by: Yoshinori Sato --- gas/config/rx-parse.y | 35 ++++++++++++----------------------- gas/testsuite/gas/rx/mov.d | 3 +++ gas/testsuite/gas/rx/mov.sm | 7 +++++++ 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/gas/config/rx-parse.y b/gas/config/rx-parse.y index a8bead28d21..fa632f90d00 100644 --- a/gas/config/rx-parse.y +++ b/gas/config/rx-parse.y @@ -1934,32 +1934,21 @@ displacement (expressionS exp, int msize) valueT val; int vshift = 0; - if (exp.X_op == O_symbol - && exp.X_md) + if ((exp.X_op == O_symbol && exp.X_md == BFD_RELOC_GPREL16) || + (exp.X_op == O_subtract)) { - switch (exp.X_md) + switch (msize) { - case BFD_RELOC_GPREL16: - switch (msize) - { - case BSIZE: - exp.X_md = BFD_RELOC_RX_GPRELB; - break; - case WSIZE: - exp.X_md = BFD_RELOC_RX_GPRELW; - break; - case LSIZE: - exp.X_md = BFD_RELOC_RX_GPRELL; - break; - } - O2 (exp); - return 2; + case BSIZE: + exp.X_md = BFD_RELOC_RX_GPRELB; + break; + case WSIZE: + exp.X_md = BFD_RELOC_RX_GPRELW; + break; + case LSIZE: + exp.X_md = BFD_RELOC_RX_GPRELL; + break; } - } - - if (exp.X_op == O_subtract) - { - exp.X_md = BFD_RELOC_RX_DIFF; O2 (exp); return 2; } diff --git a/gas/testsuite/gas/rx/mov.d b/gas/testsuite/gas/rx/mov.d index 276b6d9d898..4c5d2389746 100644 --- a/gas/testsuite/gas/rx/mov.d +++ b/gas/testsuite/gas/rx/mov.d @@ -528,3 +528,6 @@ Disassembly of section .*: [0-9a-f]+: fd 2e 0f mov.l \[-r0\], r15 [0-9a-f]+: fd 2e f0 mov.l \[-r15\], r0 [0-9a-f]+: fd 2e ff mov.l \[-r15\], r15 + [0-9a-f]+: ce 00 04 00 mov.b 4\[r0\], r0 + [0-9a-f]+: de 00 02 00 mov.w 4\[r0\], r0 + [0-9a-f]+: ee 00 01 00 mov.l 4\[r0\], r0 diff --git a/gas/testsuite/gas/rx/mov.sm b/gas/testsuite/gas/rx/mov.sm index 8bebbf5908a..03bec4a7bc1 100644 --- a/gas/testsuite/gas/rx/mov.sm +++ b/gas/testsuite/gas/rx/mov.sm @@ -31,3 +31,10 @@ mov{bwl} [{reg}+],{reg} mov{bwl} {reg},[-{reg}] mov{bwl} [-{reg}],{reg} + +1: mov.B 2f - 1b[r0], r0 +2: +1: mov.W 2f - 1b[r0], r0 +2: +1: mov.L 2f - 1b[r0], r0 +2: