xref: /qemu/tests/tcg/xtensa/test_loop.S (revision 4179575898fcc17c5e67306a357b8dfe64122e8e)
1a2e67072SMax Filippov#include "macros.inc"
27d890b40SMax Filippov
37d890b40SMax Filippovtest_suite loop
47d890b40SMax Filippov
5*50f0171aSMax Filippov#if XCHAL_HAVE_LOOPS
6*50f0171aSMax Filippov
77d890b40SMax Filippovtest loop
87d890b40SMax Filippov    movi    a2, 0
97d890b40SMax Filippov    movi    a3, 5
107d890b40SMax Filippov    loop    a3, 1f
117d890b40SMax Filippov    addi    a2, a2, 1
127d890b40SMax Filippov1:
137d890b40SMax Filippov    assert  eqi, a2, 5
147d890b40SMax Filippovtest_end
157d890b40SMax Filippov
167d890b40SMax Filippovtest loop0
177d890b40SMax Filippov    movi    a2, 0
187d890b40SMax Filippov    loop    a2, 1f
197d890b40SMax Filippov    rsr     a2, lcount
207d890b40SMax Filippov    assert  eqi, a2, -1
217d890b40SMax Filippov    j       1f
227d890b40SMax Filippov1:
237d890b40SMax Filippovtest_end
247d890b40SMax Filippov
257d890b40SMax Filippovtest loop_jump
267d890b40SMax Filippov    movi    a2, 0
277d890b40SMax Filippov    movi    a3, 5
287d890b40SMax Filippov    loop    a3, 1f
297d890b40SMax Filippov    addi    a2, a2, 1
307d890b40SMax Filippov    j       1f
317d890b40SMax Filippov1:
327d890b40SMax Filippov    assert  eqi, a2, 1
337d890b40SMax Filippovtest_end
347d890b40SMax Filippov
357d890b40SMax Filippovtest loop_branch
367d890b40SMax Filippov    movi    a2, 0
377d890b40SMax Filippov    movi    a3, 5
387d890b40SMax Filippov    loop    a3, 1f
397d890b40SMax Filippov    addi    a2, a2, 1
407d890b40SMax Filippov    beqi    a2, 3, 1f
417d890b40SMax Filippov1:
427d890b40SMax Filippov    assert  eqi, a2, 3
437d890b40SMax Filippovtest_end
447d890b40SMax Filippov
457d890b40SMax Filippovtest loop_manual
467d890b40SMax Filippov    movi    a2, 0
477d890b40SMax Filippov    movi    a3, 5
487d890b40SMax Filippov    movi    a4, 1f
497d890b40SMax Filippov    movi    a5, 2f
507d890b40SMax Filippov    wsr     a3, lcount
517d890b40SMax Filippov    wsr     a4, lbeg
527d890b40SMax Filippov    wsr     a5, lend
537d890b40SMax Filippov    isync
547d890b40SMax Filippov    j       1f
557d890b40SMax Filippov.align 4
567d890b40SMax Filippov1:
577d890b40SMax Filippov    addi    a2, a2, 1
587d890b40SMax Filippov2:
597d890b40SMax Filippov    assert  eqi, a2, 6
607d890b40SMax Filippovtest_end
617d890b40SMax Filippov
627d890b40SMax Filippovtest loop_excm
637d890b40SMax Filippov    movi    a2, 0
647d890b40SMax Filippov    movi    a3, 5
657d890b40SMax Filippov    rsr     a4, ps
667d890b40SMax Filippov    movi    a5, 0x10
677d890b40SMax Filippov    or      a4, a4, a5
687d890b40SMax Filippov    wsr     a4, ps
697d890b40SMax Filippov    isync
707d890b40SMax Filippov    loop    a3, 1f
717d890b40SMax Filippov    addi    a2, a2, 1
727d890b40SMax Filippov1:
737d890b40SMax Filippov    xor     a4, a4, a5
747d890b40SMax Filippov    isync
757d890b40SMax Filippov    wsr     a4, ps
767d890b40SMax Filippov    assert  eqi, a2, 1
777d890b40SMax Filippovtest_end
787d890b40SMax Filippov
79ec9fe93eSMax Filippovtest lbeg_invalidation
80ec9fe93eSMax Filippov    movi    a2, 0
81ec9fe93eSMax Filippov    movi    a3, 1
82ec9fe93eSMax Filippov    movi    a4, 1f
83ec9fe93eSMax Filippov    movi    a5, 3f
84ec9fe93eSMax Filippov    wsr     a3, lcount
85ec9fe93eSMax Filippov    wsr     a4, lbeg
86ec9fe93eSMax Filippov    wsr     a5, lend
87ec9fe93eSMax Filippov    isync
88ec9fe93eSMax Filippov    j       1f
89ec9fe93eSMax Filippov.align 4
90ec9fe93eSMax Filippov1:
91ec9fe93eSMax Filippov    addi    a2, a2, 1
92ec9fe93eSMax Filippov    j       2f
93ec9fe93eSMax Filippov.align 4
94ec9fe93eSMax Filippov2:
95ec9fe93eSMax Filippov    addi    a2, a2, 2
96ec9fe93eSMax Filippov    movi    a3, 2b
97ec9fe93eSMax Filippov    wsr     a3, lbeg
98ec9fe93eSMax Filippov    isync
99ec9fe93eSMax Filippov    nop
100ec9fe93eSMax Filippov3:
101ec9fe93eSMax Filippov    assert  eqi, a2, 5
102ec9fe93eSMax Filippovtest_end
103ec9fe93eSMax Filippov
104ec9fe93eSMax Filippovtest lend_invalidation
105ec9fe93eSMax Filippov    movi    a2, 0
106ec9fe93eSMax Filippov    movi    a3, 5
107ec9fe93eSMax Filippov    movi    a4, 1f
108ec9fe93eSMax Filippov    movi    a5, 2f
109ec9fe93eSMax Filippov    wsr     a3, lcount
110ec9fe93eSMax Filippov    wsr     a4, lbeg
111ec9fe93eSMax Filippov    wsr     a5, lend
112ec9fe93eSMax Filippov    isync
113ec9fe93eSMax Filippov    j       1f
114ec9fe93eSMax Filippov.align 4
115ec9fe93eSMax Filippov1:
116ec9fe93eSMax Filippov    addi    a2, a2, 1
117ec9fe93eSMax Filippov2:
118ec9fe93eSMax Filippov    beqi    a3, 3, 1f
119ec9fe93eSMax Filippov    assert  eqi, a2, 6
120ec9fe93eSMax Filippov    movi    a3, 3
121ec9fe93eSMax Filippov    wsr     a3, lcount
122ec9fe93eSMax Filippov    wsr     a4, lend
123ec9fe93eSMax Filippov    isync
124ec9fe93eSMax Filippov    j       1b
125ec9fe93eSMax Filippov1:
126ec9fe93eSMax Filippov    assert  eqi, a2, 7
127ec9fe93eSMax Filippovtest_end
128ec9fe93eSMax Filippov
129536a98d4SMax Filippovtest loopnez
130536a98d4SMax Filippov    movi    a2, 0
131536a98d4SMax Filippov    movi    a3, 5
132536a98d4SMax Filippov    loopnez a3, 1f
133536a98d4SMax Filippov    addi    a2, a2, 1
134536a98d4SMax Filippov1:
135536a98d4SMax Filippov    assert  eqi, a2, 5
136536a98d4SMax Filippov
137536a98d4SMax Filippov    movi    a2, 0
138536a98d4SMax Filippov    movi    a3, 0
139536a98d4SMax Filippov    loopnez a3, 1f
140536a98d4SMax Filippov    test_fail
141536a98d4SMax Filippov1:
142536a98d4SMax Filippovtest_end
143536a98d4SMax Filippov
144536a98d4SMax Filippovtest loopgtz
145536a98d4SMax Filippov    movi    a2, 0
146536a98d4SMax Filippov    movi    a3, 5
147536a98d4SMax Filippov    loopgtz a3, 1f
148536a98d4SMax Filippov    addi    a2, a2, 1
149536a98d4SMax Filippov1:
150536a98d4SMax Filippov    assert  eqi, a2, 5
151536a98d4SMax Filippov
152536a98d4SMax Filippov    movi    a2, 0
153536a98d4SMax Filippov    movi    a3, 0
154536a98d4SMax Filippov    loopgtz a3, 1f
155536a98d4SMax Filippov    test_fail
156536a98d4SMax Filippov1:
157536a98d4SMax Filippov
158536a98d4SMax Filippov    movi    a2, 0
159536a98d4SMax Filippov    movi    a3, 0x80000000
160536a98d4SMax Filippov    loopgtz a3, 1f
161536a98d4SMax Filippov    test_fail
162536a98d4SMax Filippov1:
163536a98d4SMax Filippovtest_end
164536a98d4SMax Filippov
165*50f0171aSMax Filippov#endif
166*50f0171aSMax Filippov
1677d890b40SMax Filippovtest_suite_end
168