Commit c66fe5b04d for qemu.org
commit c66fe5b04d643d013e97cbbede5b736b56a667d4
Author: Richard Henderson <richard.henderson@linaro.org>
Date: Wed Sep 16 02:16:54 2026 -1000
tests/tcg/s390x: Add regression test for #4449
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
diff --git a/tests/tcg/s390x/issue4449.c b/tests/tcg/s390x/issue4449.c
new file mode 100644
index 0000000000..0c9c80e8ca
--- /dev/null
+++ b/tests/tcg/s390x/issue4449.c
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <assert.h>
+
+#define CASE(name, old, cst, sh) \
+ static void __attribute__((noinline)) case_##name(void) { \
+ unsigned long t1, got; \
+ __asm__("lhi %0," #cst "\n\t" /* low 32 known, high not */ \
+ "lghi %1," #old "\n\t" /* whole register constant */ \
+ "sllk %1,%0," #sh "\n\t" /* 32-bit write = deposit */ \
+ "brc 15,1f\n\t" /* ends the translation block */ \
+ "nop\n" \
+ "1:" \
+ : "=r"(t1), "=r"(got) : : ); \
+ unsigned long want = (unsigned)(cst) << (sh); \
+ assert(got == want); \
+ }
+
+CASE(a, 256, 128, 1);
+CASE(b, 128, 128, 0);
+CASE(c, 512, 128, 2);
+CASE(d, 2, 1, 1);
+
+int main()
+{
+ case_a();
+ case_b();
+ case_c();
+ case_d();
+ return 0;
+}
diff --git a/tests/tcg/s390x/meson.build b/tests/tcg/s390x/meson.build
index 57ea6c5ca5..39a480033d 100644
--- a/tests/tcg/s390x/meson.build
+++ b/tests/tcg/s390x/meson.build
@@ -84,6 +84,7 @@ tests += {
'cpacf-pcc.c': {},
'cpacf-pckmo.c': {},
'cpacf-prno.c': {},
+ 'issue4449.c': {},
}
foreach src: tests_s390x_pgm