summary refs log tree commit diff stats
path: root/gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml
diff options
context:
space:
mode:
authorChristian Krinitsin <mail@krinitsin.com>2025-05-21 21:21:26 +0200
committerChristian Krinitsin <mail@krinitsin.com>2025-05-21 21:21:26 +0200
commit4b927bc37359dec23f67d3427fc982945f24f404 (patch)
tree245449ef9146942dc7fffd0235b48b7e70a00bf2 /gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml
parentaa8bd79cec7bf6790ddb01d156c2ef2201abbaab (diff)
downloadqemu-analysis-4b927bc37359dec23f67d3427fc982945f24f404.tar.gz
qemu-analysis-4b927bc37359dec23f67d3427fc982945f24f404.zip
add gitlab issues in toml format
Diffstat (limited to 'gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml')
-rw-r--r--gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml57
1 files changed, 57 insertions, 0 deletions
diff --git a/gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml b/gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml
new file mode 100644
index 000000000..ac14bbf65
--- /dev/null
+++ b/gitlab/issues/target_arm/host_missing/accel_TCG/1737.toml
@@ -0,0 +1,57 @@
+id = 1737
+title = "qemu-aarch64: Incorrect result for ssra instruction when using vector lengths of 1024-bit or higher."
+state = "closed"
+created_at = "2023-06-27T16:37:30.575Z"
+closed_at = "2023-08-24T15:27:44.731Z"
+labels = ["Closed::Fixed", "accel: TCG", "target: arm"]
+url = "https://gitlab.com/qemu-project/qemu/-/issues/1737"
+host-os = "Fedora 38"
+host-arch = "ARM"
+qemu-version = "qemu-aarch64 version 7.2.1 (qemu-7.2.1-2.fc38) & qemu-aarch64 version 8.0.2"
+guest-os = "- OS/kernel version:"
+guest-arch = "## Description of problem"
+description = """```
+#include <arm_sve.h>
+#include <stdio.h>
+
+#define SZ 32
+
+int main(int argc, char* argv[]) {
+  svbool_t pg = svptrue_b64();
+  uint64_t VL = svcntd();
+
+  fprintf(stderr, "One SVE vector can hold %li uint64_ts\\n", VL);
+
+  int64_t sr[SZ], sx[SZ], sy[SZ];
+  uint64_t ur[SZ], ux[SZ], uy[SZ];
+
+  for (uint64_t i = 0; i < SZ; ++i) {
+    sx[i] = ux[i] = 0;
+    sy[i] = uy[i] = 1024;
+  }
+
+  for (uint64_t i = 0; i < SZ; i+=VL) {
+    fprintf(stderr, "Processing elements %li - %li\\n", i, i + VL - 1);
+
+    svint64_t SX = svld1(pg, sx + i);
+    svint64_t SY = svld1(pg, sy + i);
+    svint64_t SR = svsra(SX, SY, 4);
+    svst1(pg, sr + i, SR);
+
+    svuint64_t UX = svld1(pg, ux + i);
+    svuint64_t UY = svld1(pg, uy + i);
+    svuint64_t UR = svsra(UX, UY, 4);
+    svst1(pg, ur + i, UR);
+  }
+
+  for (uint64_t i = 0; i < SZ; ++i) {
+    fprintf(stderr, "sr[%li]=%li, ur[%li]\\n", i, sr[i], ur[i]);
+  }
+
+  return 0;
+}
+```"""
+reproduce = """1. Build the above C source using "gcc -march=armv9-a -O1 ssra.c", can also use clang.
+2. Run with "qemu-aarch64 -cpu max,sve-default-vector-length=64 ./a.out" and you'll see the expected result of 64 (signed and unsigned)
+3. Run with "qemu-aarch64 -cpu max,sve-default-vector-length=128 ./a.out" and you'll see the expected result of 64 for unsigned but the signed result is 0. This suggests the emulation of SVE2 ssra instruction is incorrect for this and bigger vector lengths."""
+additional = """"""