mirror of
https://gitlab.com/qemu-project/qemu.git
synced 2026-08-26 22:23:12 -04:00
tests/tcg/riscv64: add misa write test
Link: https://lore.kernel.org/r/20260321144554.606417-2-npiggin@gmail.com Suggested-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Vladimir Isaev <vvisaev@gmail.com> Message-ID: <20260817150653.40357-3-vvisaev@gmail.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
af37cd2821
commit
ce781055ff
2 changed files with 92 additions and 0 deletions
|
|
@ -67,5 +67,9 @@ EXTRA_RUNS += run-test-zicclsm-off
|
|||
run-test-zicclsm-off: test-zicclsm-off
|
||||
$(call run-test, $<, $(QEMU) -cpu rv64$(comma)v=true$(comma)zfh=true$(comma)zicclsm=false $(QEMU_OPTS)$<)
|
||||
|
||||
EXTRA_RUNS += run-test-misa-w
|
||||
run-test-misa-w: test-misa-w
|
||||
$(call run-test, $<, $(QEMU) -cpu rv64$(comma)x-misa-w=true$(comma)c=true$(comma)v=true $(QEMU_OPTS)$<)
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
|
|
|||
88
tests/tcg/riscv64/test-misa-w.S
Normal file
88
tests/tcg/riscv64/test-misa-w.S
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Test for MISA changing C and related IALIGN alignment cases
|
||||
*
|
||||
* This test verifies that the "C" extension can be cleared and set in MISA,
|
||||
* that a branch to 2-byte aligned instructions can be executed when "C" is
|
||||
* enabled, and that a write to MISA which would increase IALIGN and cause
|
||||
* the next instruction to be unaligned is ignored.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#define RVC (1 << ('C'-'A'))
|
||||
#define RVV (1 << ('V'-'A'))
|
||||
|
||||
.option norvc
|
||||
.text
|
||||
.global _start
|
||||
_start:
|
||||
lla t0, trap
|
||||
csrw mtvec, t0
|
||||
|
||||
csrr t0, misa
|
||||
li t1, RVC
|
||||
not t1, t1
|
||||
and t0, t0, t1
|
||||
csrw misa, t0
|
||||
csrr t1, misa
|
||||
li a0, 2 # fail code
|
||||
bne t0, t1, _exit # Could not clear RVC in MISA
|
||||
|
||||
li t1, RVC
|
||||
or t0, t0, t1
|
||||
csrw misa, t0
|
||||
csrr t1, misa
|
||||
li a0, 3 # fail code
|
||||
bne t0, t1, _exit # Could not set RVC in MISA
|
||||
|
||||
j unalign
|
||||
. = . + 2
|
||||
unalign:
|
||||
|
||||
li t1, RVC
|
||||
not t1, t1
|
||||
and t0, t0, t1
|
||||
csrw misa, t0
|
||||
csrr t1, misa
|
||||
li a0, 4 # fail code
|
||||
beq t0, t1, _exit # Was able to clear RVC in MISA
|
||||
|
||||
li t0, (RVC|RVV)
|
||||
not t0, t0
|
||||
and t0, t0, t1
|
||||
csrw misa, t0
|
||||
csrr t0, misa
|
||||
li a0, 5 # fail code
|
||||
bne t0, t1, _exit # MISA write was not ignored (RVV was cleared)
|
||||
|
||||
j realign
|
||||
. = . + 2
|
||||
realign:
|
||||
|
||||
# Success!
|
||||
li a0, 0
|
||||
j _exit
|
||||
|
||||
trap:
|
||||
# Any trap is a fail code 1
|
||||
li a0, 1
|
||||
|
||||
# Exit code in a0
|
||||
_exit:
|
||||
lla a1, semiargs
|
||||
li t0, 0x20026 # ADP_Stopped_ApplicationExit
|
||||
sd t0, 0(a1)
|
||||
sd a0, 8(a1)
|
||||
li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED
|
||||
|
||||
# Semihosting call sequence
|
||||
.balign 16
|
||||
slli zero, zero, 0x1f
|
||||
ebreak
|
||||
srai zero, zero, 0x7
|
||||
j .
|
||||
|
||||
.data
|
||||
.balign 16
|
||||
semiargs:
|
||||
.space 16
|
||||
Loading…
Add table
Add a link
Reference in a new issue