qemu/tests/tcg/xtensa/macros.inc
Max Filippov 66c58ba71b tests/tcg/xtensa: conditionalize debug option tests
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>
2019-02-28 04:43:23 -08:00

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