qemu

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

test_loop.S (2385B)


      1 #include "macros.inc"
      2 
      3 test_suite loop
      4 
      5 #if XCHAL_HAVE_LOOPS
      6 
      7 test loop
      8     movi    a2, 0
      9     movi    a3, 5
     10     loop    a3, 1f
     11     addi    a2, a2, 1
     12 1:
     13     assert  eqi, a2, 5
     14 test_end
     15 
     16 test loop0
     17     movi    a2, 0
     18     loop    a2, 1f
     19     rsr     a2, lcount
     20     assert  eqi, a2, -1
     21     j       1f
     22 1:
     23 test_end
     24 
     25 test loop_jump
     26     movi    a2, 0
     27     movi    a3, 5
     28     loop    a3, 1f
     29     addi    a2, a2, 1
     30     j       1f
     31 1:
     32     assert  eqi, a2, 1
     33 test_end
     34 
     35 test loop_branch
     36     movi    a2, 0
     37     movi    a3, 5
     38     loop    a3, 1f
     39     addi    a2, a2, 1
     40     beqi    a2, 3, 1f
     41 1:
     42     assert  eqi, a2, 3
     43 test_end
     44 
     45 test loop_manual
     46     movi    a2, 0
     47     movi    a3, 5
     48     movi    a4, 1f
     49     movi    a5, 2f
     50     wsr     a3, lcount
     51     wsr     a4, lbeg
     52     wsr     a5, lend
     53     isync
     54     j       1f
     55 .align 4
     56 1:
     57     addi    a2, a2, 1
     58 2:
     59     assert  eqi, a2, 6
     60 test_end
     61 
     62 test loop_excm
     63     movi    a2, 0
     64     movi    a3, 5
     65     rsr     a4, ps
     66     movi    a5, 0x10
     67     or      a4, a4, a5
     68     wsr     a4, ps
     69     isync
     70     loop    a3, 1f
     71     addi    a2, a2, 1
     72 1:
     73     xor     a4, a4, a5
     74     isync
     75     wsr     a4, ps
     76     assert  eqi, a2, 1
     77 test_end
     78 
     79 test lbeg_invalidation
     80     movi    a2, 0
     81     movi    a3, 1
     82     movi    a4, 1f
     83     movi    a5, 3f
     84     wsr     a3, lcount
     85     wsr     a4, lbeg
     86     wsr     a5, lend
     87     isync
     88     j       1f
     89 .align 4
     90 1:
     91     addi    a2, a2, 1
     92     j       2f
     93 .align 4
     94 2:
     95     addi    a2, a2, 2
     96     movi    a3, 2b
     97     wsr     a3, lbeg
     98     isync
     99     nop
    100 3:
    101     assert  eqi, a2, 5
    102 test_end
    103 
    104 test lend_invalidation
    105     movi    a2, 0
    106     movi    a3, 5
    107     movi    a4, 1f
    108     movi    a5, 2f
    109     wsr     a3, lcount
    110     wsr     a4, lbeg
    111     wsr     a5, lend
    112     isync
    113     j       1f
    114 .align 4
    115 1:
    116     addi    a2, a2, 1
    117 2:
    118     beqi    a3, 3, 1f
    119     assert  eqi, a2, 6
    120     movi    a3, 3
    121     wsr     a3, lcount
    122     wsr     a4, lend
    123     isync
    124     j       1b
    125 1:
    126     assert  eqi, a2, 7
    127 test_end
    128 
    129 test loopnez
    130     movi    a2, 0
    131     movi    a3, 5
    132     loopnez a3, 1f
    133     addi    a2, a2, 1
    134 1:
    135     assert  eqi, a2, 5
    136 
    137     movi    a2, 0
    138     movi    a3, 0
    139     loopnez a3, 1f
    140     test_fail
    141 1:
    142 test_end
    143 
    144 test loopgtz
    145     movi    a2, 0
    146     movi    a3, 5
    147     loopgtz a3, 1f
    148     addi    a2, a2, 1
    149 1:
    150     assert  eqi, a2, 5
    151 
    152     movi    a2, 0
    153     movi    a3, 0
    154     loopgtz a3, 1f
    155     test_fail
    156 1:
    157 
    158     movi    a2, 0
    159     movi    a3, 0x80000000
    160     loopgtz a3, 1f
    161     test_fail
    162 1:
    163 test_end
    164 
    165 #endif
    166 
    167 test_suite_end