From nobody Sun Jul 26 11:09:13 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=g.hmc.edu); dmarc=pass(p=none dis=none) header.from=g.hmc.edu ARC-Seal: i=2; a=rsa-sha256; t=1783058746; cv=pass; d=zohomail.com; s=zohoarc; b=cvoO1XK18pU2BUmCViuhdSw6PLQpWpGXvYffKZCOj8cPtdz9qZRcl53b9bAvXR0TfuNa+0t8Hmr4BlNxEOls0bYkpUeZWi2/gsjhG/kdOu6diHyWGC8kXqveGQhS6nQd7Ss4frOLDDojqpErDpjr7b0uYXn1JP0q9o1QHeJnfRY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783058746; h=Content-Type:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=C08T+uadq+qbzoYfgmxzhcjS37RlU5vx+ESq897iTPU=; b=gTz1Z+aYM/bNel5+Qn1+x0IPndk94D8/hNOlctdGISgFJSjbQ1NqqtWgMsLYpf1ZkgjhkIi5VRyHG7Ksi7smrf5ogBMo5gm+24wr1gLvVoAGmWey17SCGuiL6/NuF1WsQlSxgDFyk1VYQzww434guF+LQrbZ+qVx11hwPtorqDQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=g.hmc.edu); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783058746095876.9687907026869; Thu, 2 Jul 2026 23:05:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfX18-00020w-Kn; Fri, 03 Jul 2026 02:04:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfX17-00020g-1z for qemu-devel@nongnu.org; Fri, 03 Jul 2026 02:04:49 -0400 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wfX14-0007tJ-NF for qemu-devel@nongnu.org; Fri, 03 Jul 2026 02:04:48 -0400 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-698562f10e7so285206a12.0 for ; Thu, 02 Jul 2026 23:04:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783058685; cv=none; d=google.com; s=arc-20260327; b=XRDoU7imw8f+sxrn/WuEmy30fQqDC0Thq7Iy0GoZzmgPvzmSOweZ5LwM0SAhkjrHQc GT21Ixl29sKZUMVNk5MdUvrQHqpONzeqNNH2Ybq7B8E7wfYFnyQqN5DqKvFebx5fR27B u2RhsuHCydTBm95HRyN2L010EUWpupS2vt441goUOb29MvmNHE//HwkY6t16w6u8svLa e0k/grSaqiXKv1AmF7iWzoPrSt1vd6e7FBGHvcfmCyRHkws3OS48TF2OqRgc9cwfE9mk DfL9VI6fP5riMbVg0Nr98Nzs4Zd1nelfntKAZ/MJld/baXx1f1StLw4vj4Y9sMPokJB0 SxAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=C08T+uadq+qbzoYfgmxzhcjS37RlU5vx+ESq897iTPU=; fh=uNWL65ATogYzbDseIKH9YqPXO90giPkSXO0Rl5cHpOs=; b=IWBoj2RDbIwqbPk5DrzzHBukJJvUjk8kuolJblYi8g15TnaKeRmv6qC/cKUxIyMiXM JAGkf7PG1r0kUAQc6wDBUDJkGkCF/qhjpzyP3x5613/+oJDRuHI8DLPaWG4K7cY7EJyD uq7dbLIwZYMY+ltzuEpuCrdA4X4KgguJjWwpd5uhz1AmlMX7KBN5avvHG71kJTSKwPbp Rku0XUYAzgBsoM6VxZ76A3j0rE7akV+TZabnQQZDfPeigEkqA7kyf0FZhtrE4bh8ZAwB BRXudwHN1fcLF4MyT9WBfhs5v7zT7MO5b9wKWv+EK7RiSbw6Od+NTSzofLshnINcpmne hVPw==; darn=nongnu.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=g.hmc.edu; s=google; t=1783058685; x=1783663485; darn=nongnu.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=C08T+uadq+qbzoYfgmxzhcjS37RlU5vx+ESq897iTPU=; b=1eJBJCYcSyJeA5Nd3CBF2hT8e3Zvyb49rLn+131bJYCjzVqjmzl1e4JqXQzHUFOQa0 lT7EcTRDw1MpqqXfxUqbLNIXzOgj4OaJq2Jp4xoCnKLj/eAT7NPZp2TfFOYRDYXl3G/N axLICq+2GzT2wD/RXOUX6lSXcxk/88GdTr/XE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783058685; x=1783663485; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C08T+uadq+qbzoYfgmxzhcjS37RlU5vx+ESq897iTPU=; b=pFPjOb4yhxDQRW+0EPwwkzjBRJ7OlMUzqU4FRUMvsPBREdabkxhz85LfuQiAQtIX4g nxYMN7nRkUiBCjemdlev8nnJmIPR/xDlSj90mUOlkm6/n+CI8FMDBtqzVKgvlk1Oq8z7 mrK7c6/DetIfD0EbV2tJSurIpGNIt8EdKo6Rs9jhfCfKkIzZLSEbF2dWiwOx5gTkzKQt QnnUYtEheBSYQ9jwIB1+4vUqC8XXYZDvmJw9cyPfOqNkHhCnLfIwJq0jaSq9YHjuNURu z8LTiZgsLuY1pIVPCpT+Ka4+pfxVZI/U3ckSsEkhUoQBilZ3oYeUBKw+0HsPgiqyEEop mx/g== X-Gm-Message-State: AOJu0YzOs8L0kRb6YrTgDtAaKjziaKngQv0eOADer3jqtDY9v8Ui+C65 ZUhjn87+YP30YUuJB5J6eI6H23NH7kygSO56tIEBCSx4gMuhozHlW+C+bqYNtRy53QsUkPTTCFW /Seaz9Jg3OutLLySNqaY0YWKsd4TBa2jpR28RLAbY8CFPtwVxJloNgNE= X-Gm-Gg: AfdE7cnhcCxCUbgFpz5bEoNYjwxhplaxdm20Z64LhSgGHs6zQKy7k50zi0hWAik4T8K sFZsukYDTqa1g8wBYPbFKNdqrM7P2/1mOaWgWkNHwmAOOX2EjBZr4hJFdgHmsuf4i0UeAFATba8 nWu9j2AM6dF4ZGtmSxG29ZTX+gnZgtdb3xcABqDNwE326ADH5vKzGNhNvcBtIIaGmEmvj+s6yPb 0k9kHISFxUkoUOidk2//5ZdC571ljAI0PSxOAxOWzBCyOYAgbeEFNybUUlYohRilThviP3ZicSY H4/S9rxlKvro00A= X-Received: by 2002:a05:6402:a294:20b0:698:bf45:cd45 with SMTP id 4fb4d7f45d1cf-698bf45ce42mr950533a12.17.1783058684385; Thu, 02 Jul 2026 23:04:44 -0700 (PDT) MIME-Version: 1.0 From: Danielle Lam Date: Fri, 3 Jul 2026 13:04:32 +0700 X-Gm-Features: AVVi8CdkziVE1w7O84ivvCdfRQLNBT_7ovo05dKc9LMwnoOhfxMLcnSat6rPLAM Message-ID: Subject: [PATCH] target/riscv: fix amocas with rd = x0 followed by beq involving x0 is not taken when it should be To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, palmer@dabbelt.com, alistair.francis@wdc.com, liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com Content-Type: multipart/alternative; boundary="0000000000007f2b180655aeb3fb" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::536; envelope-from=danlam@g.hmc.edu; helo=mail-ed1-x536.google.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @g.hmc.edu) X-ZM-MESSAGEID: 1783058749185158500 Content-Transfer-Encoding: quoted-printable --0000000000007f2b180655aeb3fb MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbSAwNDhjYTRmY2FhODI2ZjBiYTAyNWI1ZGE1MDg3NTM0OTM5ZGM3NGJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWxsZSBMYW0gPGRhbmxhbUBnLmhtYy5lZHU+CkRhdGU6 IEZyaSwgMyBKdWwgMjAyNiAwMzozNDoyOSArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIHRhcmdldC9y aXNjdjogZml4IGFtb2NhcyB3aXRoIHJkID0zRCB4MCBmb2xsb3dlZCBieSBiZXEKIGludm9sdmlu ZyB4MCBpcyBub3QgdGFrZW4gd2hlbiBpdCBzaG91bGQgYmUKCmFtb2Nhcy57dyxkLHEsYixofSBp bXBsZW1lbnQgY29tcGFyZSBhbmQgc3dhcCBieSByZXVzaW5nIHJkIGN1cnJlbnQgdmFsdWUKYXMg Ym90aCBjb21wYXJhdG9yIGlucHV0IGFuZCBhcyB0aGUgb3V0cHV0IHRoYXQgdGNnX2dlbl9hdG9t aWNfY21weGNoZ18qCndyaXRlcyB0aGUgb2xkIG1lbW9yeSBpbnRvLiBCZWZvcmUgdGhlIGZpeCwg cmV0ID0zRD0zRCBjbXB2IGFuZCB3ZSBuYW1lIHRoYXQKdmFyaWFibGUgZGVzdC4gV2hlbiByZCA9 M0QgeDAsIGRlc3Qgd2FzIGN0eC0+emVyby4gVGhlbiBzaW5jZSByZXQgPTNEPTNEIGNtPQpwdiBp bgp0aGUgZmlyc3QgcGxhY2UsIHRoZSBhdG9taWMgb3Agb3ZlcndyaXRlcyByZXQgd2l0aCBjdHgt Pnplcm8gd2hpY2ggaXMgbm90CnRoZSBzYW1lIHplcm8gdmFsdWUuIEFueSBsYXRlciBpbnN0cnVj dGlvbnMgdGhhdCByZWZlciBiYWNrIHRvIHJldCBmb3IgdGhlCmluaXRpYWwgemVybyB2YWx1ZSB3 aGljaCBpcyBub3cgY2hhbmdlZCwgcmVzdWx0aW5nIGluIDB4YmFhYWFhYWQwMDAwMDAwMC4KClRo ZSBmaXggaXMgdG8gdXNlIGRpZmZlcmVudCB2YXJpYWJsZXMgZm9yIHJldCBhbmQgY21wdiBhbmQg YXNzaWduIHRoYXQgdG8KYXRvbWljIG9wIHRvIHJ1bi4KCioqVEVTVElORyoqCmdlbl9jbXB4Y2hn Ci5kIHdhcyB0ZXN0ZWQgYW5kIGl0IHBhc3NlZC4gLncvLmIvLmggdXNlIHRoZSBzYW1lIGxvZ2lj IHNvIHRoZSBmaXggd2FzCnNpbWlsYXIuCgpnZW5fY21weGNoZzY0Ci5kIHdhcyBub3QgdGVzdGVk Cgp0cmFuc19hbW9jYXNfcQoucSBoYWQgaXRzIG93biBjdXN0b20gdGVzdDogdGVzdF9hbW9jYXNx LlMKCi5zZWN0aW9uIC50ZXh0Ci5nbG9ibCBfc3RhcnQKX3N0YXJ0OgogICAgbGEgICAgICB0MCwg c2NyYXRjaAogICAgbGkgICAgICB0MSwgMHgxMTExCiAgICBsaSAgICAgIHQyLCAweDIyMjIKICAg IHNkICAgICAgdDEsIDAodDApCiAgICBzZCAgICAgIHQyLCA4KHQwKQoKICAgIGxpICAgICAgYTAs IDB4MzMzMwogICAgbGkgICAgICBhMSwgMHg0NDQ0CiAgICBhbW9jYXMucSB4MCwgYTAsICh0MCkK CiAgICBhZGRpICAgIGEyLCB4MCwgMAoKc3BpbjoKICAgIGogICAgICAgc3BpbgoKLnNlY3Rpb24g LmJzcwouYWxpZ24gNApzY3JhdGNoOgogICAgLnNwYWNlIDE2CgpUaGVuIHNlYXJjaGluZyB0aGUg dHJhY2UgbG9nOgpncmVwIC1uICJ4MTIvYTIiIGFtb2Nhc3EtdGVzdC50cmFjZS5sb2cKCkkgZm91 bmQgdGhhdCBhbGwgbWF0Y2hlcyByZWFkIHplcm8uCjEwNjEyNjk2OiB4MTIvYTIgICAwIHgxMy9h MyAgIDAgeDE0L2E0ICAgMCB4MTUvYTUgICAwCi4uLgoxMDYxMzg5MjogeDEyL2EyICAgMCB4MTMv YTMgICAwIHgxNC9hNCAgIDAgeDE1L2E1ICAgMAoKUnVuIGFnYWluc3QgdGhlIHVucGF0Y2hlZCBj b2RlLCBhMiByZWFkIGJhY2sgYXMgMHgyMjIyLiBUaGlzIGNvbmZpcm1zIHRoZQp0ZXN0IHJ1biBh cyBpbnRlbmRlZCBhbmQgdGhlIGZpeCB3b3Jrcy4KClNpZ25lZC1vZmYtYnk6IERhbmllbGxlIExh bSA8ZGFubGFtQGcuaG1jLmVkdT4KLS0tCiB0YXJnZXQvcmlzY3YvaW5zbl90cmFucy90cmFuc19y dnphY2FzLmMuaW5jIHwgMTMgKysrKysrKystLS0tLQogdGFyZ2V0L3Jpc2N2L3RyYW5zbGF0ZS5j ICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDExIGluc2Vy dGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Jpc2N2L2luc25f dHJhbnMvdHJhbnNfcnZ6YWNhcy5jLmluYwpiL3RhcmdldC9yaXNjdi9pbnNuX3RyYW5zL3RyYW5z X3J2emFjYXMuYy5pbmMKaW5kZXggNzliY2ExZTk1Ny4uODY3ZjVlNWFkZSAxMDA2NDQKLS0tIGEv dGFyZ2V0L3Jpc2N2L2luc25fdHJhbnMvdHJhbnNfcnZ6YWNhcy5jLmluYworKysgYi90YXJnZXQv cmlzY3YvaW5zbl90cmFucy90cmFuc19ydnphY2FzLmMuaW5jCkBAIC03MiwxMyArNzIsMTQgQEAg c3RhdGljIGJvb2wgZ2VuX2NtcHhjaGc2NChEaXNhc0NvbnRleHQgKmN0eCwgYXJnX2F0b21pYwoq YSwgTWVtT3AgbW9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQoKLSAgICBUQ0d2X2k2 NCBkZXN0ID0zRCBnZXRfZ3ByX3BhaXIoY3R4LCBhLT5yZCk7CiAgICAgVENHdiBzcmMxID0zRCBn ZXRfYWRkcmVzcyhjdHgsIGEtPnJzMSwgMCk7CiAgICAgVENHdl9pNjQgc3JjMiA9M0QgZ2V0X2dw cl9wYWlyKGN0eCwgYS0+cnMyKTsKKyAgICBUQ0d2X2k2NCBjbXB2ID0zRCBnZXRfZ3ByX3BhaXIo Y3R4LCBhLT5yZCk7CisgICAgVENHdl9pNjQgZGVzdCA9M0QgdGNnX3RlbXBfbmV3X2k2NCgpOwoK ICAgICBtb3AgfD0zRCBjdHgtPm1vX2VuZGlhbm5lc3M7CiAgICAgZGVjb2RlX3NhdmVfb3BjKGN0 eCwgUklTQ1ZfVVcyX0FMV0FZU19TVE9SRV9BTU8pOwotICAgIHRjZ19nZW5fYXRvbWljX2NtcHhj aGdfaTY0KGRlc3QsIHNyYzEsIGRlc3QsIHNyYzIsIGN0eC0+bWVtX2lkeCwgbW9wKTsKKyAgICB0 Y2dfZ2VuX2F0b21pY19jbXB4Y2hnX2k2NChkZXN0LCBzcmMxLCBjbXB2LCBzcmMyLCBjdHgtPm1l bV9pZHgsIG1vcCk7CgogICAgIGdlbl9zZXRfZ3ByX3BhaXIoY3R4LCBhLT5yZCwgZGVzdCk7CiAg ICAgcmV0dXJuIHRydWU7CkBAIC0xMTcsMTMgKzExOCwxNSBAQCBzdGF0aWMgYm9vbCB0cmFuc19h bW9jYXNfcShEaXNhc0NvbnRleHQgKmN0eCwKYXJnX2Ftb2Nhc19xICphKQogICAgIFRDR3ZfaTEy OCBzcmMyID0zRCB0Y2dfdGVtcF9uZXdfaTEyOCgpOwogICAgIFRDR3ZfaTY0IHNyYzJsID0zRCBn ZXRfZ3ByKGN0eCwgYS0+cnMyLCBFWFRfTk9ORSk7CiAgICAgVENHdl9pNjQgc3JjMmggPTNEIGdl dF9ncHIoY3R4LCBhLT5yczIgPTNEPTNEIDAgPyAwIDogYS0+cnMyICsgMSwgRVhUXz0KTk9ORSk7 Ci0gICAgVENHdl9pNjQgZGVzdGwgPTNEIGdldF9ncHIoY3R4LCBhLT5yZCwgRVhUX05PTkUpOwot ICAgIFRDR3ZfaTY0IGRlc3RoID0zRCBnZXRfZ3ByKGN0eCwgYS0+cmQgPTNEPTNEIDAgPyAwIDog YS0+cmQgKyAxLCBFWFRfTk89Ck5FKTsKKyAgICBUQ0d2X2k2NCBjbXBsID0zRCBnZXRfZ3ByKGN0 eCwgYS0+cmQsIEVYVF9OT05FKTsKKyAgICBUQ0d2X2k2NCBjbXBoID0zRCBnZXRfZ3ByKGN0eCwg YS0+cmQgPTNEPTNEIDAgPyAwIDogYS0+cmQgKyAxLCBFWFRfTk9OPQpFKTsKKyAgICBUQ0d2X2k2 NCBkZXN0bCA9M0QgdGNnX3RlbXBfbmV3X2k2NCgpOworICAgIFRDR3ZfaTY0IGRlc3RoID0zRCB0 Y2dfdGVtcF9uZXdfaTY0KCk7CiAgICAgTWVtT3AgbWVtb3AgPTNEIE1PX0FMSUdOIHwgTU9fVU87 CgogICAgIG1lbW9wIHw9M0QgY3R4LT5tb19lbmRpYW5uZXNzOwogICAgIHRjZ19nZW5fY29uY2F0 X2k2NF9pMTI4KHNyYzIsIHNyYzJsLCBzcmMyaCk7Ci0gICAgdGNnX2dlbl9jb25jYXRfaTY0X2kx MjgoZGVzdCwgZGVzdGwsIGRlc3RoKTsKKyAgICB0Y2dfZ2VuX2NvbmNhdF9pNjRfaTEyOChkZXN0 LCBjbXBsLCBjbXBoKTsKICAgICBkZWNvZGVfc2F2ZV9vcGMoY3R4LCBSSVNDVl9VVzJfQUxXQVlT X1NUT1JFX0FNTyk7CiAgICAgdGNnX2dlbl9hdG9taWNfY21weGNoZ19pMTI4KGRlc3QsIHNyYzEs IGRlc3QsIHNyYzIsIGN0eC0+bWVtX2lkeCwKbWVtb3ApOwoKZGlmZiAtLWdpdCBhL3RhcmdldC9y aXNjdi90cmFuc2xhdGUuYyBiL3RhcmdldC9yaXNjdi90cmFuc2xhdGUuYwppbmRleCA5Njg0ZGJl NzUyLi42MmE5YWY5YjU2IDEwMDY0NAotLS0gYS90YXJnZXQvcmlzY3YvdHJhbnNsYXRlLmMKKysr IGIvdGFyZ2V0L3Jpc2N2L3RyYW5zbGF0ZS5jCkBAIC0xMTY2LDEzICsxMTY2LDE0IEBAIHN0YXRp YyBib29sIGdlbl9hbW8oRGlzYXNDb250ZXh0ICpjdHgsIGFyZ19hdG9taWMKKmEsCgogc3RhdGlj IGJvb2wgZ2VuX2NtcHhjaGcoRGlzYXNDb250ZXh0ICpjdHgsIGFyZ19hdG9taWMgKmEsIE1lbU9w IG1vcCkKIHsKLSAgICBUQ0d2IGRlc3QgPTNEIGdldF9ncHIoY3R4LCBhLT5yZCwgRVhUX05PTkUp OwogICAgIFRDR3Ygc3JjMSA9M0QgZ2V0X2FkZHJlc3MoY3R4LCBhLT5yczEsIDApOwogICAgIFRD R3Ygc3JjMiA9M0QgZ2V0X2dwcihjdHgsIGEtPnJzMiwgRVhUX05PTkUpOworICAgIFRDR3YgY21w diA9M0QgZ2V0X2dwcihjdHgsIGEtPnJkLCBFWFRfTk9ORSk7CisgICAgVENHdiBkZXN0ID0zRCBk ZXN0X2dwcihjdHgsIGEtPnJkKTsKCiAgICAgbW9wIHw9M0QgY3R4LT5tb19lbmRpYW5uZXNzOwog ICAgIGRlY29kZV9zYXZlX29wYyhjdHgsIFJJU0NWX1VXMl9BTFdBWVNfU1RPUkVfQU1PKTsKLSAg ICB0Y2dfZ2VuX2F0b21pY19jbXB4Y2hnX3RsKGRlc3QsIHNyYzEsIGRlc3QsIHNyYzIsIGN0eC0+ bWVtX2lkeCwgbW9wKTsKKyAgICB0Y2dfZ2VuX2F0b21pY19jbXB4Y2hnX3RsKGRlc3QsIHNyYzEs IGNtcHYsIHNyYzIsIGN0eC0+bWVtX2lkeCwgbW9wKTsKCiAgICAgZ2VuX3NldF9ncHIoY3R4LCBh LT5yZCwgZGVzdCk7CiAgICAgcmV0dXJuIHRydWU7Ci0tPTIwCjIuNDcuMw== --0000000000007f2b180655aeb3fb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From 048ca4fcaa826f0ba025b5da5087534939dc= 74bd Mon Sep 17 00:00:00 2001
From: Danielle Lam <danlam@g.hmc.edu>
Date: Fri, 3= Jul 2026 03:34:29 +0100
Subject: [PATCH] target/riscv: fix amocas with = rd =3D x0 followed by beq
=C2=A0involving x0 is not taken when it should= be

amocas.{w,d,q,b,h} implement compare and swap by reusing rd curr= ent value as both comparator input and as the output that tcg_gen_atomic_cm= pxchg_* writes the old memory into. Before the fix, ret =3D=3D cmpv and we = name that variable dest. When rd =3D x0, dest was ctx->zero. Then since = ret =3D=3D cmpv in the first place, the atomic op overwrites ret with ctx-&= gt;zero which is not the same zero value. Any later instructions that refer= back to ret for the initial zero value which is now changed, resulting in = 0xbaaaaaad00000000.

The fix is to use different variables for ret an= d cmpv and assign that to atomic op to run.

**TESTING**
gen_cmpxc= hg
.d was tested and it passed. .w/.b/.h use the same logic so the fix w= as similar.

gen_cmpxchg64
.d was not tested

trans_amocas_q=
.q had its own custom test: test_amocasq.S

.section .text
.gl= obl _start
_start:
=C2=A0 =C2=A0 la =C2=A0 =C2=A0 =C2=A0t0, scratch=C2=A0 =C2=A0 li =C2=A0 =C2=A0 =C2=A0t1, 0x1111
=C2=A0 =C2=A0 li =C2= =A0 =C2=A0 =C2=A0t2, 0x2222
=C2=A0 =C2=A0 sd =C2=A0 =C2=A0 =C2=A0t1, 0(t= 0)
=C2=A0 =C2=A0 sd =C2=A0 =C2=A0 =C2=A0t2, 8(t0)

=C2=A0 =C2=A0 l= i =C2=A0 =C2=A0 =C2=A0a0, 0x3333
=C2=A0 =C2=A0 li =C2=A0 =C2=A0 =C2=A0a1= , 0x4444
=C2=A0 =C2=A0 amocas.q x0, a0, (t0)

=C2=A0 =C2=A0 addi = =C2=A0 =C2=A0a2, x0, 0

spin:
=C2=A0 =C2=A0 j =C2=A0 =C2=A0 =C2=A0= spin

.section .bss
.align 4
scratch:
=C2=A0 =C2=A0 .space = 16

Then searching the trace log:
grep -n "x12/a2" amoca= sq-test.trace.log

I found that all matches read zero.
10612696: x= 12/a2 =C2=A0 0 x13/a3 =C2=A0 0 x14/a4 =C2=A0 0 x15/a5 =C2=A0 0
...
10= 613892: x12/a2 =C2=A0 0 x13/a3 =C2=A0 0 x14/a4 =C2=A0 0 x15/a5 =C2=A0 0
=
Run against the unpatched code, a2 read back as 0x2222. This confirms t= he test run as intended and the fix works.

Signed-off-by: Danielle L= am <danlam@g.hmc.e= du>
---
=C2=A0target/riscv/insn_trans/trans_rvzacas.c.inc | 13= ++++++++-----
=C2=A0target/riscv/translate.c =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A05 +++--
=C2=A02 fil= es changed, 11 insertions(+), 7 deletions(-)

diff --git a/target/ris= cv/insn_trans/trans_rvzacas.c.inc b/target/riscv/insn_trans/trans_rvzacas.c= .inc
index 79bca1e957..867f5e5ade 100644
--- a/target/riscv/insn_tran= s/trans_rvzacas.c.inc
+++ b/target/riscv/insn_trans/trans_rvzacas.c.inc<= br>@@ -72,13 +72,14 @@ static bool gen_cmpxchg64(DisasContext *ctx, arg_ato= mic *a, MemOp mop)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return false;
= =C2=A0 =C2=A0 =C2=A0}
=C2=A0
- =C2=A0 =C2=A0TCGv_i64 dest =3D get_gpr= _pair(ctx, a->rd);
=C2=A0 =C2=A0 =C2=A0TCGv src1 =3D get_address(ctx,= a->rs1, 0);
=C2=A0 =C2=A0 =C2=A0TCGv_i64 src2 =3D get_gpr_pair(ctx, = a->rs2);
+ =C2=A0 =C2=A0TCGv_i64 cmpv =3D get_gpr_pair(ctx, a->rd)= ;
+ =C2=A0 =C2=A0TCGv_i64 dest =3D tcg_temp_new_i64();
=C2=A0
=C2= =A0 =C2=A0 =C2=A0mop |=3D ctx->mo_endianness;
=C2=A0 =C2=A0 =C2=A0dec= ode_save_opc(ctx, RISCV_UW2_ALWAYS_STORE_AMO);
- =C2=A0 =C2=A0tcg_gen_at= omic_cmpxchg_i64(dest, src1, dest, src2, ctx->mem_idx, mop);
+ =C2=A0= =C2=A0tcg_gen_atomic_cmpxchg_i64(dest, src1, cmpv, src2, ctx->mem_idx, = mop);
=C2=A0
=C2=A0 =C2=A0 =C2=A0gen_set_gpr_pair(ctx, a->rd, dest= );
=C2=A0 =C2=A0 =C2=A0return true;
@@ -117,13 +118,15 @@ static bool= trans_amocas_q(DisasContext *ctx, arg_amocas_q *a)
=C2=A0 =C2=A0 =C2=A0= TCGv_i128 src2 =3D tcg_temp_new_i128();
=C2=A0 =C2=A0 =C2=A0TCGv_i64 src= 2l =3D get_gpr(ctx, a->rs2, EXT_NONE);
=C2=A0 =C2=A0 =C2=A0TCGv_i64 s= rc2h =3D get_gpr(ctx, a->rs2 =3D=3D 0 ? 0 : a->rs2 + 1, EXT_NONE);- =C2=A0 =C2=A0TCGv_i64 destl =3D get_gpr(ctx, a->rd, EXT_NONE);
- = =C2=A0 =C2=A0TCGv_i64 desth =3D get_gpr(ctx, a->rd =3D=3D 0 ? 0 : a->= rd + 1, EXT_NONE);
+ =C2=A0 =C2=A0TCGv_i64 cmpl =3D get_gpr(ctx, a->r= d, EXT_NONE);
+ =C2=A0 =C2=A0TCGv_i64 cmph =3D get_gpr(ctx, a->rd =3D= =3D 0 ? 0 : a->rd + 1, EXT_NONE);
+ =C2=A0 =C2=A0TCGv_i64 destl =3D t= cg_temp_new_i64();
+ =C2=A0 =C2=A0TCGv_i64 desth =3D tcg_temp_new_i64();=
=C2=A0 =C2=A0 =C2=A0MemOp memop =3D MO_ALIGN | MO_UO;
=C2=A0
=C2= =A0 =C2=A0 =C2=A0memop |=3D ctx->mo_endianness;
=C2=A0 =C2=A0 =C2=A0t= cg_gen_concat_i64_i128(src2, src2l, src2h);
- =C2=A0 =C2=A0tcg_gen_conca= t_i64_i128(dest, destl, desth);
+ =C2=A0 =C2=A0tcg_gen_concat_i64_i128(d= est, cmpl, cmph);
=C2=A0 =C2=A0 =C2=A0decode_save_opc(ctx, RISCV_UW2_ALW= AYS_STORE_AMO);
=C2=A0 =C2=A0 =C2=A0tcg_gen_atomic_cmpxchg_i128(dest, sr= c1, dest, src2, ctx->mem_idx, memop);
=C2=A0
diff --git a/target/r= iscv/translate.c b/target/riscv/translate.c
index 9684dbe752..62a9af9b56= 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c=
@@ -1166,13 +1166,14 @@ static bool gen_amo(DisasContext *ctx, arg_atom= ic *a,
=C2=A0
=C2=A0static bool gen_cmpxchg(DisasContext *ctx, arg_at= omic *a, MemOp mop)
=C2=A0{
- =C2=A0 =C2=A0TCGv dest =3D get_gpr(ctx,= a->rd, EXT_NONE);
=C2=A0 =C2=A0 =C2=A0TCGv src1 =3D get_address(ctx,= a->rs1, 0);
=C2=A0 =C2=A0 =C2=A0TCGv src2 =3D get_gpr(ctx, a->rs2= , EXT_NONE);
+ =C2=A0 =C2=A0TCGv cmpv =3D get_gpr(ctx, a->rd, EXT_NON= E);
+ =C2=A0 =C2=A0TCGv dest =3D dest_gpr(ctx, a->rd);
=C2=A0
= =C2=A0 =C2=A0 =C2=A0mop |=3D ctx->mo_endianness;
=C2=A0 =C2=A0 =C2=A0= decode_save_opc(ctx, RISCV_UW2_ALWAYS_STORE_AMO);
- =C2=A0 =C2=A0tcg_gen= _atomic_cmpxchg_tl(dest, src1, dest, src2, ctx->mem_idx, mop);
+ =C2= =A0 =C2=A0tcg_gen_atomic_cmpxchg_tl(dest, src1, cmpv, src2, ctx->mem_idx= , mop);
=C2=A0
=C2=A0 =C2=A0 =C2=A0gen_set_gpr(ctx, a->rd, dest);<= br>=C2=A0 =C2=A0 =C2=A0return true;
--
2.47.3

--0000000000007f2b180655aeb3fb--