mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00

Make debug tests conditional on the presence of the debug option in the config and tests that depend on the presence/number of instruction or data breakpoint registers on the corresponding definitions. Use configured debug interrupt level instead of the hardcoded value to set up IRQ handler and access debug EPC register. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
102 lines
1.4 KiB
PHP
102 lines
1.4 KiB
PHP
#include "core-isa.h"
|
|
|
|
.macro test_suite name
|
|
.data
|
|
status: .word result
|
|
result: .space 256
|
|
.text
|
|
.global main
|
|
.align 4
|
|
main:
|
|
.endm
|
|
|
|
.macro reset_ps
|
|
movi a2, 0x4000f
|
|
wsr a2, ps
|
|
isync
|
|
.endm
|
|
|
|
.macro test_suite_end
|
|
reset_ps
|
|
movi a0, status
|
|
l32i a2, a0, 0
|
|
movi a0, result
|
|
sub a2, a2, a0
|
|
movi a3, 0
|
|
beqz a2, 2f
|
|
1:
|
|
l8ui a1, a0, 0
|
|
or a3, a3, a1
|
|
addi a0, a0, 1
|
|
addi a2, a2, -1
|
|
bnez a2, 1b
|
|
2:
|
|
exit
|
|
.endm
|
|
|
|
.macro print text
|
|
.data
|
|
97: .ascii "\text\n"
|
|
98:
|
|
.align 4
|
|
.text
|
|
movi a2, 4
|
|
movi a3, 2
|
|
movi a4, 97b
|
|
movi a5, 98b
|
|
sub a5, a5, a4
|
|
simcall
|
|
.endm
|
|
|
|
.macro test_init
|
|
.endm
|
|
|
|
.macro test name
|
|
#ifdef DEBUG
|
|
print test_\name
|
|
#endif
|
|
test_init
|
|
test_\name:
|
|
.global test_\name
|
|
.endm
|
|
|
|
.macro test_end
|
|
99:
|
|
reset_ps
|
|
movi a2, status
|
|
l32i a3, a2, 0
|
|
addi a3, a3, 1
|
|
s32i a3, a2, 0
|
|
.endm
|
|
|
|
.macro exit
|
|
movi a2, 1
|
|
simcall
|
|
.endm
|
|
|
|
.macro test_fail
|
|
movi a2, status
|
|
l32i a2, a2, 0
|
|
movi a3, 1
|
|
s8i a3, a2, 0
|
|
#ifdef DEBUG
|
|
print failed
|
|
#endif
|
|
j 99f
|
|
.endm
|
|
|
|
.macro assert cond, arg1, arg2
|
|
b\cond \arg1, \arg2, 90f
|
|
test_fail
|
|
90:
|
|
nop
|
|
.endm
|
|
|
|
.macro set_vector vector, addr
|
|
movi a2, handler_\vector
|
|
movi a3, \addr
|
|
s32i a3, a2, 0
|
|
.endm
|
|
|
|
#define glue(a, b) _glue(a, b)
|
|
#define _glue(a, b) a ## b
|