xref: /qemu/tests/tcg/xtensa/test_loop.S (revision 536a98d4d66444437e01ff2920df1a554df15efb)
17d890b40SMax Filippov.include "macros.inc"
27d890b40SMax Filippov
37d890b40SMax Filippovtest_suite loop
47d890b40SMax Filippov
57d890b40SMax Filippovtest loop
67d890b40SMax Filippov    movi    a2, 0
77d890b40SMax Filippov    movi    a3, 5
87d890b40SMax Filippov    loop    a3, 1f
97d890b40SMax Filippov    addi    a2, a2, 1
107d890b40SMax Filippov1:
117d890b40SMax Filippov    assert  eqi, a2, 5
127d890b40SMax Filippovtest_end
137d890b40SMax Filippov
147d890b40SMax Filippovtest loop0
157d890b40SMax Filippov    movi    a2, 0
167d890b40SMax Filippov    loop    a2, 1f
177d890b40SMax Filippov    rsr     a2, lcount
187d890b40SMax Filippov    assert  eqi, a2, -1
197d890b40SMax Filippov    j       1f
207d890b40SMax Filippov1:
217d890b40SMax Filippovtest_end
227d890b40SMax Filippov
237d890b40SMax Filippovtest loop_jump
247d890b40SMax Filippov    movi    a2, 0
257d890b40SMax Filippov    movi    a3, 5
267d890b40SMax Filippov    loop    a3, 1f
277d890b40SMax Filippov    addi    a2, a2, 1
287d890b40SMax Filippov    j       1f
297d890b40SMax Filippov1:
307d890b40SMax Filippov    assert  eqi, a2, 1
317d890b40SMax Filippovtest_end
327d890b40SMax Filippov
337d890b40SMax Filippovtest loop_branch
347d890b40SMax Filippov    movi    a2, 0
357d890b40SMax Filippov    movi    a3, 5
367d890b40SMax Filippov    loop    a3, 1f
377d890b40SMax Filippov    addi    a2, a2, 1
387d890b40SMax Filippov    beqi    a2, 3, 1f
397d890b40SMax Filippov1:
407d890b40SMax Filippov    assert  eqi, a2, 3
417d890b40SMax Filippovtest_end
427d890b40SMax Filippov
437d890b40SMax Filippovtest loop_manual
447d890b40SMax Filippov    movi    a2, 0
457d890b40SMax Filippov    movi    a3, 5
467d890b40SMax Filippov    movi    a4, 1f
477d890b40SMax Filippov    movi    a5, 2f
487d890b40SMax Filippov    wsr     a3, lcount
497d890b40SMax Filippov    wsr     a4, lbeg
507d890b40SMax Filippov    wsr     a5, lend
517d890b40SMax Filippov    isync
527d890b40SMax Filippov    j       1f
537d890b40SMax Filippov.align 4
547d890b40SMax Filippov1:
557d890b40SMax Filippov    addi    a2, a2, 1
567d890b40SMax Filippov2:
577d890b40SMax Filippov    assert  eqi, a2, 6
587d890b40SMax Filippovtest_end
597d890b40SMax Filippov
607d890b40SMax Filippovtest loop_excm
617d890b40SMax Filippov    movi    a2, 0
627d890b40SMax Filippov    movi    a3, 5
637d890b40SMax Filippov    rsr     a4, ps
647d890b40SMax Filippov    movi    a5, 0x10
657d890b40SMax Filippov    or      a4, a4, a5
667d890b40SMax Filippov    wsr     a4, ps
677d890b40SMax Filippov    isync
687d890b40SMax Filippov    loop    a3, 1f
697d890b40SMax Filippov    addi    a2, a2, 1
707d890b40SMax Filippov1:
717d890b40SMax Filippov    xor     a4, a4, a5
727d890b40SMax Filippov    isync
737d890b40SMax Filippov    wsr     a4, ps
747d890b40SMax Filippov    assert  eqi, a2, 1
757d890b40SMax Filippovtest_end
767d890b40SMax Filippov
77ec9fe93eSMax Filippovtest lbeg_invalidation
78ec9fe93eSMax Filippov    movi    a2, 0
79ec9fe93eSMax Filippov    movi    a3, 1
80ec9fe93eSMax Filippov    movi    a4, 1f
81ec9fe93eSMax Filippov    movi    a5, 3f
82ec9fe93eSMax Filippov    wsr     a3, lcount
83ec9fe93eSMax Filippov    wsr     a4, lbeg
84ec9fe93eSMax Filippov    wsr     a5, lend
85ec9fe93eSMax Filippov    isync
86ec9fe93eSMax Filippov    j       1f
87ec9fe93eSMax Filippov.align 4
88ec9fe93eSMax Filippov1:
89ec9fe93eSMax Filippov    addi    a2, a2, 1
90ec9fe93eSMax Filippov    j       2f
91ec9fe93eSMax Filippov.align 4
92ec9fe93eSMax Filippov2:
93ec9fe93eSMax Filippov    addi    a2, a2, 2
94ec9fe93eSMax Filippov    movi    a3, 2b
95ec9fe93eSMax Filippov    wsr     a3, lbeg
96ec9fe93eSMax Filippov    isync
97ec9fe93eSMax Filippov    nop
98ec9fe93eSMax Filippov3:
99ec9fe93eSMax Filippov    assert  eqi, a2, 5
100ec9fe93eSMax Filippovtest_end
101ec9fe93eSMax Filippov
102ec9fe93eSMax Filippovtest lend_invalidation
103ec9fe93eSMax Filippov    movi    a2, 0
104ec9fe93eSMax Filippov    movi    a3, 5
105ec9fe93eSMax Filippov    movi    a4, 1f
106ec9fe93eSMax Filippov    movi    a5, 2f
107ec9fe93eSMax Filippov    wsr     a3, lcount
108ec9fe93eSMax Filippov    wsr     a4, lbeg
109ec9fe93eSMax Filippov    wsr     a5, lend
110ec9fe93eSMax Filippov    isync
111ec9fe93eSMax Filippov    j       1f
112ec9fe93eSMax Filippov.align 4
113ec9fe93eSMax Filippov1:
114ec9fe93eSMax Filippov    addi    a2, a2, 1
115ec9fe93eSMax Filippov2:
116ec9fe93eSMax Filippov    beqi    a3, 3, 1f
117ec9fe93eSMax Filippov    assert  eqi, a2, 6
118ec9fe93eSMax Filippov    movi    a3, 3
119ec9fe93eSMax Filippov    wsr     a3, lcount
120ec9fe93eSMax Filippov    wsr     a4, lend
121ec9fe93eSMax Filippov    isync
122ec9fe93eSMax Filippov    j       1b
123ec9fe93eSMax Filippov1:
124ec9fe93eSMax Filippov    assert  eqi, a2, 7
125ec9fe93eSMax Filippovtest_end
126ec9fe93eSMax Filippov
127*536a98d4SMax Filippovtest loopnez
128*536a98d4SMax Filippov    movi    a2, 0
129*536a98d4SMax Filippov    movi    a3, 5
130*536a98d4SMax Filippov    loopnez a3, 1f
131*536a98d4SMax Filippov    addi    a2, a2, 1
132*536a98d4SMax Filippov1:
133*536a98d4SMax Filippov    assert  eqi, a2, 5
134*536a98d4SMax Filippov
135*536a98d4SMax Filippov    movi    a2, 0
136*536a98d4SMax Filippov    movi    a3, 0
137*536a98d4SMax Filippov    loopnez a3, 1f
138*536a98d4SMax Filippov    test_fail
139*536a98d4SMax Filippov1:
140*536a98d4SMax Filippovtest_end
141*536a98d4SMax Filippov
142*536a98d4SMax Filippovtest loopgtz
143*536a98d4SMax Filippov    movi    a2, 0
144*536a98d4SMax Filippov    movi    a3, 5
145*536a98d4SMax Filippov    loopgtz a3, 1f
146*536a98d4SMax Filippov    addi    a2, a2, 1
147*536a98d4SMax Filippov1:
148*536a98d4SMax Filippov    assert  eqi, a2, 5
149*536a98d4SMax Filippov
150*536a98d4SMax Filippov    movi    a2, 0
151*536a98d4SMax Filippov    movi    a3, 0
152*536a98d4SMax Filippov    loopgtz a3, 1f
153*536a98d4SMax Filippov    test_fail
154*536a98d4SMax Filippov1:
155*536a98d4SMax Filippov
156*536a98d4SMax Filippov    movi    a2, 0
157*536a98d4SMax Filippov    movi    a3, 0x80000000
158*536a98d4SMax Filippov    loopgtz a3, 1f
159*536a98d4SMax Filippov    test_fail
160*536a98d4SMax Filippov1:
161*536a98d4SMax Filippovtest_end
162*536a98d4SMax Filippov
1637d890b40SMax Filippovtest_suite_end
164