From patchwork Tue May 7 08:42:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Michael Tokarev X-Patchwork-Id: 795202 Delivered-To: patch@linaro.org Received: by 2002:a5d:525c:0:b0:34e:ceec:bfcd with SMTP id k28csp186365wrc; Tue, 7 May 2024 01:44:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUOVxJUbEwis1vnGjTmStpwGdkUHhuzzwEUf2+zTfIvSVOS+48w7WNIshkfC0rPThfp0NXBaC/TdFNlawm2EnEI X-Google-Smtp-Source: AGHT+IFDu0n5X11sKia5KgWrxsAG8kBHseRjaCDIS0ma/BW8GRg0ctHGkY+tGMxuQIPbkc9ZuiRN X-Received: by 2002:a05:620a:5e50:b0:792:9da2:a61a with SMTP id ya16-20020a05620a5e5000b007929da2a61amr3842134qkn.59.1715071463373; Tue, 07 May 2024 01:44:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1715071463; cv=none; d=google.com; s=arc-20160816; b=thgu6nQUyZWQxjEU0hnZ+zE1ZosLcnQHa/xqt8OV1E15fTj4CnKOTOCK+fCcH1TKfa DYNu6rDv9zoVa9vTazJk/bDS1TRq6OXqN3E2PIRRBcuZK0J8chHSHCiML1nOli0wAncw AdXJ3bgNxADhg4TyhnueZLB7d8sPw2yvHu+KaE2BJDryxPwU9SbBa+IccDaRFIBWrNMF W3ljchup6CbC4gg9YhARdIMv++dOEQCoKa3jsxdYJHdvrERFp6rq9Rxcq6OL8F7FiKnp Tqh9kJKcFhSsBAEx6lYzSITVp3yWxJYaqNbW01yjemdYaRFGdcwr4J9b74+MkbUJpP0d UfZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=x1CyJDJa2/EvUd6YSQbMQhHhshPSFVrz7YxCNkMbO9U=; fh=q09TJcPvxotL9gCkIe59Ge7cfqcjMrdjel2txRsy8jw=; b=cxP916uKq92TQ+SQeTGfXL3Cp+sj7LQTxu8QDXGmvnWf5yQ5JXtIYCCGxWL4FPaLBG FYXh047qLqtD91M79yTGX8/58l88SGwp+wA5Vys1PM1EF2mJa1Mpqb7+KLVUYwfqc5b1 vsUUVXswyKtktbfo/9uyVPVMWADU2rWXoJdG0Z0p+Xgz2LmcCadk5cMTk9At2mOK2udv QgnI9I3IhFC8zxVlt5Ekk6RB4nM8FqTVO3HdO7sNevzUo1WbdLkPIWuvjBM81dBMHRl+ KlFKaN/gtuoJQTGb9h4AFiaqhsZz2GA7EIghnJXg5zM9c5Cjab0eugfKz9wWEvtPEcBw yYVw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id oq18-20020a05620a611200b0078ec5d50191si10959191qkn.341.2024.05.07.01.44.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2024 01:44:23 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s4GQO-0004fI-Cw; Tue, 07 May 2024 04:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s4GQ9-0004SM-At; Tue, 07 May 2024 04:43:38 -0400 Received: from isrv.corpit.ru ([86.62.121.231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s4GQ7-0003LI-Cv; Tue, 07 May 2024 04:43:33 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id 7B71264BD3; Tue, 7 May 2024 11:42:49 +0300 (MSK) Received: from tls.msk.ru (mjt.wg.tls.msk.ru [192.168.177.130]) by tsrv.corpit.ru (Postfix) with SMTP id 68D82C85BC; Tue, 7 May 2024 11:42:30 +0300 (MSK) Received: (nullmailer pid 1026558 invoked by uid 1000); Tue, 07 May 2024 08:42:29 -0000 From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Paul Cercueil , Richard Henderson , Yoshinori Sato , Michael Tokarev Subject: [Stable-8.2.4 15/16] target/sh4: Fix ADDV opcode Date: Tue, 7 May 2024 11:42:14 +0300 Message-Id: <20240507084226.1026455-15-mjt@tls.msk.ru> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Received-SPF: pass client-ip=86.62.121.231; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -68 X-Spam_score: -6.9 X-Spam_bar: ------ X-Spam_report: (-6.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org From: Philippe Mathieu-Daudé The documentation says: ADDV Rm, Rn Rn + Rm -> Rn, overflow -> T But QEMU implementation was: ADDV Rm, Rn Rn + Rm -> Rm, overflow -> T Fix by filling the correct Rm register. Add tests provided by Paul Cercueil. Cc: qemu-stable@nongnu.org Fixes: ad8d25a11f ("target-sh4: implement addv and subv using TCG") Reported-by: Paul Cercueil Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2317 Reviewed-by: Richard Henderson Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Yoshinori Sato Message-Id: <20240430163125.77430-2-philmd@linaro.org> (cherry picked from commit c365e6b0705788866a65e7b8206bd4c5332595cd) Signed-off-by: Michael Tokarev diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 5aa10d3946..d8dcfc3a20 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -715,7 +715,7 @@ static void _decode_opc(DisasContext * ctx) tcg_gen_xor_i32(t2, REG(B7_4), REG(B11_8)); tcg_gen_andc_i32(cpu_sr_t, t1, t2); tcg_gen_shri_i32(cpu_sr_t, cpu_sr_t, 31); - tcg_gen_mov_i32(REG(B7_4), t0); + tcg_gen_mov_i32(REG(B11_8), t0); } return; case 0x2009: /* and Rm,Rn */ diff --git a/tests/tcg/sh4/Makefile.target b/tests/tcg/sh4/Makefile.target index c3d7fa86e3..39751c41b2 100644 --- a/tests/tcg/sh4/Makefile.target +++ b/tests/tcg/sh4/Makefile.target @@ -20,3 +20,6 @@ TESTS += test-macl test-macw: CFLAGS += -O -g TESTS += test-macw + +test-addv: CFLAGS += -O -g +TESTS += test-addv diff --git a/tests/tcg/sh4/test-addv.c b/tests/tcg/sh4/test-addv.c new file mode 100644 index 0000000000..ca87fe746a --- /dev/null +++ b/tests/tcg/sh4/test-addv.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include +#include +#include + +static void addv(const int a, const int b, const int res, const int carry) +{ + int o = a, c; + + asm volatile("addv %2,%0\n" + "movt %1\n" + : "+r"(o), "=r"(c) : "r"(b) : ); + + if (c != carry || o != res) { + printf("ADDV %d, %d = %d/%d [T = %d/%d]\n", a, b, o, res, c, carry); + abort(); + } +} + +int main(void) +{ + addv(INT_MAX, 1, INT_MIN, 1); + addv(INT_MAX - 1, 1, INT_MAX, 0); + + return 0; +}