qemu-stable
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH for-9.0] tcg/optimize: Fix sign_mask for logical right-shift


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH for-9.0] tcg/optimize: Fix sign_mask for logical right-shift
Date: Wed, 27 Mar 2024 08:30:37 +0100
User-agent: Mozilla Thunderbird

On 26/3/24 23:22, Richard Henderson wrote:
The 'sign' computation is attempting to locate the sign bit that has
been repeated, so that we can test if that bit is known zero.  That
computation can be zero if there are no known sign repetitions.

Cc: qemu-stable@nongnu.org
Fixes: 93a967fbb57 ("tcg/optimize: Propagate sign info for shifting")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2248
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
  tcg/optimize.c                    |  2 +-
  tests/tcg/aarch64/test-2248.c     | 25 +++++++++++++++++++++++++
  tests/tcg/aarch64/Makefile.target |  1 +
  3 files changed, 27 insertions(+), 1 deletion(-)
  create mode 100644 tests/tcg/aarch64/test-2248.c


diff --git a/tests/tcg/aarch64/test-2248.c b/tests/tcg/aarch64/test-2248.c
new file mode 100644
index 0000000000..6cc20e3c6c
--- /dev/null
+++ b/tests/tcg/aarch64/test-2248.c
@@ -0,0 +1,25 @@

  /* SPDX-License-Identifier: GPL-2.0-or-later */

  /* See https://gitlab.com/qemu-project/qemu/-/issues/2248 */

+#include <assert.h>
+
+__attribute__((noinline))
+long test(long x, long y, long sh)
+{
+    long r;
+    asm("cmp   %1, %2\n\t"
+        "cset  x12, lt\n\t"
+        "and   w11, w12, #0xff\n\t"
+        "cmp   w11, #0\n\t"
+        "csetm x14, ne\n\t"
+        "lsr   x13, x14, %3\n\t"
+        "sxtb  %0, w13"
+        : "=r"(r)
+        : "r"(x), "r"(y), "r"(sh)
+        : "x11", "x12", "x13", "x14");
+    return r;
+}
+
+int main()
+{
+    long r = test(0, 1, 2);
+    assert(r == -1);
+    return 0;
+}

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]