qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

macros.inc (1729B)


      1 #include "core-isa.h"
      2 
      3 .macro test_suite name
      4 .data
      5 status: .word result
      6 result: .space 1024
      7 .text
      8 .global main
      9 .align 4
     10 main:
     11 .endm
     12 
     13 .macro reset_ps
     14     movi    a2, 0x4000f
     15     wsr     a2, ps
     16     isync
     17 .endm
     18 
     19 .macro test_suite_end
     20     reset_ps
     21     movi    a0, status
     22     l32i    a2, a0, 0
     23     movi    a0, result
     24     sub     a2, a2, a0
     25     movi    a3, 0
     26     beqz    a2, 2f
     27 1:
     28     l32i    a1, a0, 0
     29     or      a3, a3, a1
     30     addi    a0, a0, 4
     31     addi    a2, a2, -1
     32     bnez    a2, 1b
     33 2:
     34     exit
     35 .endm
     36 
     37 .macro print text
     38 .data
     39 97: .ascii "\text\n"
     40 98:
     41     .align 4
     42 .text
     43     movi    a2, 4
     44     movi    a3, 2
     45     movi    a4, 97b
     46     movi    a5, 98b
     47     sub     a5, a5, a4
     48     simcall
     49 .endm
     50 
     51 .macro test_init
     52 .endm
     53 
     54 .macro test name
     55 #ifdef DEBUG
     56     print test_\name
     57 #endif
     58     test_init
     59 test_\name:
     60 .global test_\name
     61 .endm
     62 
     63 .macro test_end
     64 99:
     65     reset_ps
     66     movi    a2, status
     67     l32i    a3, a2, 0
     68     addi    a3, a3, 4
     69     s32i    a3, a2, 0
     70 .endm
     71 
     72 .macro exit
     73     movi    a2, 1
     74     simcall
     75 .endm
     76 
     77 .macro test_fail
     78     movi    a2, status
     79     l32i    a2, a2, 0
     80     movi    a3, 1
     81     s32i    a3, a2, 0
     82 #ifdef DEBUG
     83     print   failed
     84 #endif
     85     j       99f
     86 .endm
     87 
     88 .macro assert cond, arg1, arg2
     89     b\cond  \arg1, \arg2, 90f
     90     test_fail
     91 90:
     92     nop
     93 .endm
     94 
     95 .macro set_vector vector, addr
     96     movi    a2, handler_\vector
     97     movi    a3, \addr
     98     s32i    a3, a2, 0
     99 .endm
    100 
    101 .macro dump r
    102 #ifdef DEBUG
    103 .data
    104 .align 4
    105 1: .word 0
    106 .text
    107     movi    a4, 1b
    108     s32i    a2, a4, 0
    109     movi    a2, 4
    110     movi    a3, 1
    111     movi    a5, 4
    112     simcall
    113     movi    a4, 1b
    114     l32i    a2, a4, 0
    115 #endif
    116 .endm
    117 
    118 #define glue(a, b) _glue(a, b)
    119 #define _glue(a, b) a ## b
    120 
    121 #define glue3(a, b, c) _glue3(a, b, c)
    122 #define _glue3(a, b, c) a ## b ## c