summaryrefslogtreecommitdiffstats
path: root/tests/tcg/nios2/test-shadow-1.S
diff options
context:
space:
mode:
authorRichard Henderson2022-04-21 17:17:35 +0200
committerRichard Henderson2022-04-26 17:17:10 +0200
commit7f176c5a0bcb70492f3b158a36311e75f1eb87d7 (patch)
tree6123811392098ef003f89c6f37995986b3f9be41 /tests/tcg/nios2/test-shadow-1.S
parenttests/tcg/nios2: Add semihosting multiarch tests (diff)
downloadqemu-7f176c5a0bcb70492f3b158a36311e75f1eb87d7.tar.gz
qemu-7f176c5a0bcb70492f3b158a36311e75f1eb87d7.tar.xz
qemu-7f176c5a0bcb70492f3b158a36311e75f1eb87d7.zip
tests/tcg/nios2: Add test-shadow-1
Add a regression test for tcg indirect global lowering. This appeared with nios2, with cps != 0, so that we use indirection into the shadow register set. An indirect call verifies alignment of rA. The use of rA was live across the brcond leading to a tcg_debug_assert failure. Cc: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20220421151735.31996-65-richard.henderson@linaro.org>
Diffstat (limited to 'tests/tcg/nios2/test-shadow-1.S')
-rw-r--r--tests/tcg/nios2/test-shadow-1.S40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/tcg/nios2/test-shadow-1.S b/tests/tcg/nios2/test-shadow-1.S
new file mode 100644
index 0000000000..79ef69db12
--- /dev/null
+++ b/tests/tcg/nios2/test-shadow-1.S
@@ -0,0 +1,40 @@
+/*
+ * Regression test for TCG indirect global lowering.
+ *
+ * Copyright Linaro Ltd 2022
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "semicall.h"
+
+ .text
+ .set noat
+ .align 2
+ .globl main
+ .type main, @function
+
+main:
+ /* Initialize r0 in shadow register set 1. */
+ movhi at, 1 /* PRS=1, CRS=0, RSIE=0, PIE=0 */
+ wrctl status, at
+ wrprs zero, zero
+
+ /* Change current register set to 1. */
+ movi at, 1 << 10 /* PRS=0, CRS=1, RSIE=0, PIE=0 */
+ wrctl estatus, at
+ movia ea, 1f
+ eret
+
+ /* Load address for callr, then end TB. */
+1: movia at, 3f
+ br 2f
+
+ /* Test case! TCG abort on indirect lowering across brcond. */
+2: callr at
+
+ /* exit(0) */
+3: movi r4, HOSTED_EXIT
+ movi r5, 0
+ semihosting_call
+
+ .size main, . - main