qemu

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

test_break.S (6361B)


      1 #include "macros.inc"
      2 
      3 test_suite break
      4 
      5 #if XCHAL_HAVE_DEBUG
      6 
      7 #define debug_level XCHAL_DEBUGLEVEL
      8 #define debug_vector glue(level, XCHAL_DEBUGLEVEL)
      9 #define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL)
     10 
     11 test break
     12     set_vector debug_vector, 0
     13     rsil    a2, debug_level
     14     _break  0, 0
     15 
     16     set_vector debug_vector, 2f
     17     rsil    a2, debug_level - 1
     18 1:
     19     _break  0, 0
     20     test_fail
     21 2:
     22     rsr     a2, ps
     23     movi    a3, 0x1f
     24     and     a2, a2, a3
     25     movi    a3, 0x10 | debug_level
     26     assert  eq, a2, a3
     27     rsr     a2, EPC_DEBUG
     28     movi    a3, 1b
     29     assert  eq, a2, a3
     30     rsr     a2, debugcause
     31     movi    a3, 0x8
     32     assert  eq, a2, a3
     33 test_end
     34 
     35 test breakn
     36     set_vector debug_vector, 0
     37     rsil    a2, debug_level
     38     _break.n  0
     39 
     40     set_vector debug_vector, 2f
     41     rsil    a2, debug_level - 1
     42 1:
     43     _break.n  0
     44     test_fail
     45 2:
     46     rsr     a2, ps
     47     movi    a3, 0x1f
     48     and     a2, a2, a3
     49     movi    a3, 0x10 | debug_level
     50     assert  eq, a2, a3
     51     rsr     a2, EPC_DEBUG
     52     movi    a3, 1b
     53     assert  eq, a2, a3
     54     rsr     a2, debugcause
     55     movi    a3, 0x10
     56     assert  eq, a2, a3
     57 test_end
     58 
     59 #if XCHAL_NUM_IBREAK
     60 test ibreak
     61     set_vector debug_vector, 0
     62     rsil    a2, debug_level
     63     movi    a2, 1f
     64     wsr     a2, ibreaka0
     65     movi    a2, 1
     66     wsr     a2, ibreakenable
     67     isync
     68 1:
     69     rsil    a2, debug_level - 1
     70     movi    a2, 1f
     71     wsr     a2, ibreaka0
     72     movi    a2, 0
     73     wsr     a2, ibreakenable
     74     isync
     75 1:
     76     set_vector debug_vector, 2f
     77     movi    a2, 1f
     78     wsr     a2, ibreaka0
     79     movi    a2, 1
     80     wsr     a2, ibreakenable
     81     isync
     82 1:
     83     test_fail
     84 2:
     85     rsr     a2, ps
     86     movi    a3, 0x1f
     87     and     a2, a2, a3
     88     movi    a3, 0x10 | debug_level
     89     assert  eq, a2, a3
     90     rsr     a2, EPC_DEBUG
     91     movi    a3, 1b
     92     assert  eq, a2, a3
     93     rsr     a2, debugcause
     94     movi    a3, 0x2
     95     assert  eq, a2, a3
     96 test_end
     97 
     98 test ibreak_remove
     99     set_vector debug_vector, 3f
    100     rsil    a2, debug_level - 1
    101     movi    a2, 2f
    102     wsr     a2, ibreaka0
    103     movi    a3, 1
    104 1:
    105     wsr     a3, ibreakenable
    106     isync
    107 2:
    108     beqz    a3, 4f
    109     test_fail
    110 3:
    111     assert  eqi, a3, 1
    112     rsr     a2, ps
    113     movi    a3, 0x1f
    114     and     a2, a2, a3
    115     movi    a3, 0x10 | debug_level
    116     assert  eq, a2, a3
    117     rsr     a2, EPC_DEBUG
    118     movi    a3, 2b
    119     assert  eq, a2, a3
    120     rsr     a2, debugcause
    121     movi    a3, 0x2
    122     assert  eq, a2, a3
    123 
    124     movi    a2, 0x40000
    125     wsr     a2, ps
    126     isync
    127     movi    a3, 0
    128     j       1b
    129 4:
    130 test_end
    131 
    132 test ibreak_priority
    133     set_vector debug_vector, 2f
    134     rsil    a2, debug_level - 1
    135     movi    a2, 1f
    136     wsr     a2, ibreaka0
    137     movi    a2, 1
    138     wsr     a2, ibreakenable
    139     isync
    140 1:
    141     break   0, 0
    142     test_fail
    143 2:
    144     rsr     a2, debugcause
    145     movi    a3, 0x2
    146     assert  eq, a2, a3
    147 test_end
    148 #endif
    149 
    150 test icount
    151     set_vector debug_vector, 2f
    152     rsil    a2, debug_level - 1
    153     movi    a2, -2
    154     wsr     a2, icount
    155     movi    a2, 1
    156     wsr     a2, icountlevel
    157     isync
    158     rsil    a2, 0
    159     nop
    160 1:
    161     break   0, 0
    162     test_fail
    163 2:
    164     movi    a2, 0
    165     wsr     a2, icountlevel
    166     rsr     a2, EPC_DEBUG
    167     movi    a3, 1b
    168     assert  eq, a2, a3
    169     rsr     a2, debugcause
    170     movi    a3, 0x1
    171     assert  eq, a2, a3
    172 test_end
    173 
    174 .macro check_dbreak dr
    175     rsr     a2, EPC_DEBUG
    176     movi    a3, 1b
    177     assert  eq, a2, a3
    178     rsr     a2, debugcause
    179     movi    a3, 0x4 | (\dr << 8)
    180     assert  eq, a2, a3
    181     movi    a2, 0
    182     wsr     a2, dbreakc\dr
    183 .endm
    184 
    185 .macro dbreak_test dr, ctl, break, access, op
    186     set_vector debug_vector, 2f
    187     rsil    a2, debug_level - 1
    188     movi    a2, \ctl
    189     wsr     a2, dbreakc\dr
    190     movi    a2, \break
    191     wsr     a2, dbreaka\dr
    192     movi    a2, \access
    193     isync
    194 1:
    195     \op     a3, a2, 0
    196     test_fail
    197 2:
    198     check_dbreak \dr
    199     reset_ps
    200 .endm
    201 
    202 #if XCHAL_NUM_DBREAK
    203 #define DB0 0
    204 #if XCHAL_NUM_DBREAK > 1
    205 #define DB1 1
    206 #else
    207 #define DB1 0
    208 #endif
    209 test dbreak_exact
    210     dbreak_test DB0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
    211     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
    212     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
    213 
    214     dbreak_test DB1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
    215     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
    216     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
    217 test_end
    218 
    219 test DBdbreak_overlap
    220     dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
    221     dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
    222 
    223     dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
    224     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
    225 
    226     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
    227     dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
    228 
    229     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
    230     dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
    231     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i
    232 
    233     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
    234     dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
    235     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i
    236 
    237     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
    238     dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
    239     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i
    240 
    241 
    242     dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
    243     dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
    244 
    245     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
    246     dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
    247 
    248     dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
    249     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
    250 
    251     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i
    252     dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i
    253     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i
    254 
    255     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i
    256     dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i
    257     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i
    258 
    259     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd000006f, s8i
    260     dbreak_test DB1, 0x80000020, 0xd0000060, 0xd0000070, s16i
    261     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd0000074, s32i
    262 test_end
    263 
    264 test DBdbreak_invalid
    265     dbreak_test DB0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
    266     dbreak_test DB1, 0x40000035, 0xd0000072, 0xd0000070, l32i
    267 test_end
    268 #endif
    269 
    270 #endif
    271 
    272 test_suite_end