xref: /qemu/tests/tcg/xtensa/macros.inc (revision 6ac269c3)
1a2e67072SMax Filippov#include "core-isa.h"
2a2e67072SMax Filippov
3c09015ddSAnthony Liguori.macro test_suite name
4c09015ddSAnthony Liguori.data
5c09015ddSAnthony Liguoristatus: .word result
6*6ac269c3SMax Filippovresult: .space 1024
7c09015ddSAnthony Liguori.text
8c09015ddSAnthony Liguori.global main
9c09015ddSAnthony Liguori.align 4
10c09015ddSAnthony Liguorimain:
11c09015ddSAnthony Liguori.endm
12c09015ddSAnthony Liguori
13c09015ddSAnthony Liguori.macro reset_ps
14c09015ddSAnthony Liguori    movi    a2, 0x4000f
15c09015ddSAnthony Liguori    wsr     a2, ps
16c09015ddSAnthony Liguori    isync
17c09015ddSAnthony Liguori.endm
18c09015ddSAnthony Liguori
19c09015ddSAnthony Liguori.macro test_suite_end
20c09015ddSAnthony Liguori    reset_ps
21c09015ddSAnthony Liguori    movi    a0, status
22c09015ddSAnthony Liguori    l32i    a2, a0, 0
23c09015ddSAnthony Liguori    movi    a0, result
24c09015ddSAnthony Liguori    sub     a2, a2, a0
25c09015ddSAnthony Liguori    movi    a3, 0
26fafd5533SMax Filippov    beqz    a2, 2f
27c09015ddSAnthony Liguori1:
28*6ac269c3SMax Filippov    l32i    a1, a0, 0
29fafd5533SMax Filippov    or      a3, a3, a1
30*6ac269c3SMax Filippov    addi    a0, a0, 4
31fafd5533SMax Filippov    addi    a2, a2, -1
32fafd5533SMax Filippov    bnez    a2, 1b
33fafd5533SMax Filippov2:
34c09015ddSAnthony Liguori    exit
35c09015ddSAnthony Liguori.endm
36c09015ddSAnthony Liguori
377d6b9f0aSMax Filippov.macro print text
387d6b9f0aSMax Filippov.data
397d6b9f0aSMax Filippov97: .ascii "\text\n"
407d6b9f0aSMax Filippov98:
417d6b9f0aSMax Filippov    .align 4
427d6b9f0aSMax Filippov.text
437d6b9f0aSMax Filippov    movi    a2, 4
447d6b9f0aSMax Filippov    movi    a3, 2
457d6b9f0aSMax Filippov    movi    a4, 97b
467d6b9f0aSMax Filippov    movi    a5, 98b
477d6b9f0aSMax Filippov    sub     a5, a5, a4
487d6b9f0aSMax Filippov    simcall
497d6b9f0aSMax Filippov.endm
507d6b9f0aSMax Filippov
51d0fa1f0dSMax Filippov.macro test_init
52d0fa1f0dSMax Filippov.endm
53d0fa1f0dSMax Filippov
54c09015ddSAnthony Liguori.macro test name
550ed040dbSMax Filippov#ifdef DEBUG
560ed040dbSMax Filippov    print test_\name
570ed040dbSMax Filippov#endif
58d0fa1f0dSMax Filippov    test_init
597d6b9f0aSMax Filippovtest_\name:
607d6b9f0aSMax Filippov.global test_\name
61c09015ddSAnthony Liguori.endm
62c09015ddSAnthony Liguori
63c09015ddSAnthony Liguori.macro test_end
64c09015ddSAnthony Liguori99:
65c09015ddSAnthony Liguori    reset_ps
66c09015ddSAnthony Liguori    movi    a2, status
67c09015ddSAnthony Liguori    l32i    a3, a2, 0
68*6ac269c3SMax Filippov    addi    a3, a3, 4
69c09015ddSAnthony Liguori    s32i    a3, a2, 0
70c09015ddSAnthony Liguori.endm
71c09015ddSAnthony Liguori
72c09015ddSAnthony Liguori.macro exit
73c09015ddSAnthony Liguori    movi    a2, 1
74c09015ddSAnthony Liguori    simcall
75c09015ddSAnthony Liguori.endm
76c09015ddSAnthony Liguori
77c09015ddSAnthony Liguori.macro test_fail
78c09015ddSAnthony Liguori    movi    a2, status
79c09015ddSAnthony Liguori    l32i    a2, a2, 0
80c09015ddSAnthony Liguori    movi    a3, 1
81*6ac269c3SMax Filippov    s32i    a3, a2, 0
820ed040dbSMax Filippov#ifdef DEBUG
830ed040dbSMax Filippov    print   failed
840ed040dbSMax Filippov#endif
85c09015ddSAnthony Liguori    j       99f
86c09015ddSAnthony Liguori.endm
87c09015ddSAnthony Liguori
88c09015ddSAnthony Liguori.macro assert cond, arg1, arg2
89c09015ddSAnthony Liguori    b\cond  \arg1, \arg2, 90f
90c09015ddSAnthony Liguori    test_fail
91c09015ddSAnthony Liguori90:
92c09015ddSAnthony Liguori    nop
93c09015ddSAnthony Liguori.endm
94c09015ddSAnthony Liguori
95c09015ddSAnthony Liguori.macro set_vector vector, addr
96c09015ddSAnthony Liguori    movi    a2, handler_\vector
97c09015ddSAnthony Liguori    movi    a3, \addr
98c09015ddSAnthony Liguori    s32i    a3, a2, 0
99c09015ddSAnthony Liguori.endm
10066c58ba7SMax Filippov
1019d012e8eSMax Filippov.macro dump r
1029d012e8eSMax Filippov#ifdef DEBUG
1039d012e8eSMax Filippov.data
1049d012e8eSMax Filippov.align 4
1059d012e8eSMax Filippov1: .word 0
1069d012e8eSMax Filippov.text
1079d012e8eSMax Filippov    movi    a4, 1b
1089d012e8eSMax Filippov    s32i    a2, a4, 0
1099d012e8eSMax Filippov    movi    a2, 4
1109d012e8eSMax Filippov    movi    a3, 1
1119d012e8eSMax Filippov    movi    a5, 4
1129d012e8eSMax Filippov    simcall
1139d012e8eSMax Filippov    movi    a4, 1b
1149d012e8eSMax Filippov    l32i    a2, a4, 0
1159d012e8eSMax Filippov#endif
1169d012e8eSMax Filippov.endm
1179d012e8eSMax Filippov
11866c58ba7SMax Filippov#define glue(a, b) _glue(a, b)
11966c58ba7SMax Filippov#define _glue(a, b) a ## b
1209c988226SMax Filippov
1219c988226SMax Filippov#define glue3(a, b, c) _glue3(a, b, c)
1229c988226SMax Filippov#define _glue3(a, b, c) a ## b ## c
123