Remove unused declaration and macros
[binutils-gdb.git] / sim / testsuite / or1k / basic.S
blob0ee6907028cd1ab9b757cc0fa88fc88087de443e
1 /* Tests some basic CPU instructions.
3    Copyright (C) 2017-2024 Free Software Foundation, Inc.
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18 # mach: or1k
19 # output: report(0xffff0012);\n
20 # output: report(0x12352af7);\n
21 # output: report(0x7ffffffe);\n
22 # output: report(0xffffa5a7);\n
23 # output: report(0x000fffff);\n
24 # output: report(0x00002800);\n
25 # output: report(0x00000009);\n
26 # output: report(0xdeaddead);\n
27 # output: report(0xffff0000);\n
28 # output: report(0x12345678);\n
29 # output: report(0xabcdf0bd);\n
30 # output: exit(0)\n
32 #include "or1k-asm-test-env.h"
34 #define FIRST_RAM_ADDR 0x00000000
36         STANDARD_TEST_HEADER
38         /* Early test begin.  */
40         /* Do this test upfront, as it modifies STACK_POINTER_R1.  */
42         l.addi  r1 , r0 , 0x1
43         l.addi  r2 , r1 , 0x2
44         l.addi  r3 , r2 , 0x4
45         l.addi  r4 , r3 , 0x8
46         l.addi  r5 , r4 , 0x10
47         l.addi  r6 , r5 , 0x20
48         l.addi  r7 , r6 , 0x40
49         l.addi  r8 , r7 , 0x80
50         l.addi  r9 , r8 , 0x100
51         l.addi  r10, r9 , 0x200
52         l.addi  r11, r10, 0x400
53         l.addi  r12, r11, 0x800
54         l.addi  r13, r12, 0x1000
55         l.addi  r14, r13, 0x2000
56         l.addi  r15, r14, 0x4000
57         l.addi  r16, r15, 0x8000
59         l.sub   r31, r0 , r1
60         l.sub   r30, r31, r2
61         l.sub   r29, r30, r3
62         l.sub   r28, r29, r4
63         l.sub   r27, r28, r5
64         l.sub   r26, r27, r6
65         l.sub   r25, r26, r7
66         l.sub   r24, r25, r8
67         l.sub   r23, r24, r9
68         l.sub   r22, r23, r10
69         l.sub   r21, r22, r11
70         l.sub   r20, r21, r12
71         l.sub   r19, r20, r13
72         l.sub   r18, r19, r14
73         l.sub   r17, r18, r15
74         l.sub   r16, r17, r16
76         /* We cannot use REPORT_REG_TO_CONSOLE here, as the stack is not
77            set up yet.  */
78         MOVE_REG NOP_REPORT_R3, r16
79         REPORT_TO_CONSOLE /* Should be 0xffff0012  */
81         /* Early test end.  */
83         STANDARD_TEST_BODY
85         .section .text
86 start_tests:
87         PUSH LINK_REGISTER_R9
89         /* Read and write from RAM.  */
91         LOAD_IMMEDIATE r31, FIRST_RAM_ADDR
92         l.sw    0(r31), r16
94         l.movhi r3,0x1234
95         l.ori   r3,r3,0x5678
97         l.sw    4(r31),r3
99         l.lbz   r4,4(r31)
100         l.add   r8,r8,r4
101         l.sb    11(r31),r4
102         l.lbz   r4,5(r31)
103         l.add   r8,r8,r4
104         l.sb    10(r31),r4
105         l.lbz   r4,6(r31)
106         l.add   r8,r8,r4
107         l.sb    9(r31),r4
108         l.lbz   r4,7(r31)
109         l.add   r8,r8,r4
110         l.sb    8(r31),r4
112         l.lbs   r4,8(r31)
113         l.add   r8,r8,r4
114         l.sb    7(r31),r4
115         l.lbs   r4,9(r31)
116         l.add   r8,r8,r4
117         l.sb    6(r31),r4
118         l.lbs   r4,10(r31)
119         l.add   r8,r8,r4
120         l.sb    5(r31),r4
121         l.lbs   r4,11(r31)
122         l.add   r8,r8,r4
123         l.sb    4(r31),r4
125         l.lhz   r4,4(r31)
126         l.add   r8,r8,r4
127         l.sh    10(r31),r4
128         l.lhz   r4,6(r31)
129         l.add   r8,r8,r4
130         l.sh    8(r31),r4
132         l.lhs   r4,8(r31)
133         l.add   r8,r8,r4
134         l.sh    6(r31),r4
135         l.lhs   r4,10(r31)
136         l.add   r8,r8,r4
137         l.sh    4(r31),r4
139         l.lwz   r4,4(r31)
140         l.add   r8,r8,r4
142         REPORT_REG_TO_CONSOLE r8 /* Should be 0x12352af7  */
144         l.lwz   r9,0(r31)
145         l.add   r8,r9,r8
146         l.sw    0(r31),r8
148         /* Test arithmetic operations.  */
150         l.addi  r3,r0,1
151         l.addi  r4,r0,2
152         l.addi  r5,r0,-1
153         l.addi  r6,r0,-1
154         l.addi  r8,r0,0
156         l.sub   r7,r5,r3
157         l.sub   r8,r3,r5
158         l.add   r8,r8,r7
160         l.div   r7,r7,r4
161         l.add   r9,r3,r4
162         l.mul   r7,r9,r7
163         l.divu  r7,r7,r4
164         l.add   r8,r8,r7
166         REPORT_REG_TO_CONSOLE r8 /* Should be 0x7ffffffe  */
168         l.lwz   r9,0(r31)
169         l.add   r8,r9,r8
170         l.sw    0(r31),r8
172         /* Test logical operations.  */
174         l.addi  r3,r0,1
175         l.addi  r4,r0,2
176         l.addi  r5,r0,-1
177         l.addi  r6,r0,-1
178         l.addi  r8,r0,0
180         l.andi  r8,r8,1
181         l.and   r8,r8,r3
183         l.xori  r8,r5,0xa5a5
184         l.xor   r8,r8,r5
186         l.ori   r8,r8,2
187         l.or    r8,r8,r4
189         REPORT_REG_TO_CONSOLE r8 /* Should be 0xffffa5a7  */
191         l.lwz   r9,0(r31)
192         l.add   r8,r9,r8
193         l.sw    0(r31),r8
195         /* Test shifting operations.  */
197         l.addi  r3,r0,1
198         l.addi  r4,r0,2
199         l.addi  r5,r0,-1
200         l.addi  r6,r0,-1
201         l.addi  r8,r0,0
203         l.slli  r8,r5,6
204         l.sll   r8,r8,r4
206         l.srli  r8,r8,6
207         l.srl   r8,r8,r4
209         l.srai  r8,r8,2
210         l.sra   r8,r8,r4
212         REPORT_REG_TO_CONSOLE r8 /* Should be 0x000fffff  */
214         l.lwz   r9,0(r31)
215         l.add   r8,r9,r8
216         l.sw    0(r31),r8
218         /* Test the CPU flag. */
220         l.addi  r3,r0,1
221         l.addi  r4,r0,-2
222         l.addi  r8,r0,0
224         l.sfeq  r3,r3
225         l.mfspr r5,r0,17
226         l.andi  r4,r5,0x200
227         l.add   r8,r8,r4
229         l.sfeq  r3,r4
230         l.mfspr r5,r0,17
231         l.andi  r4,r5,0x200
232         l.add   r8,r8,r4
234         l.sfeqi r3,1
235         l.mfspr r5,r0,17
236         l.andi  r4,r5,0x200
237         l.add   r8,r8,r4
239         l.sfeqi r3,-2
240         l.mfspr r5,r0,17
241         l.andi  r4,r5,0x200
242         l.add   r8,r8,r4
244         l.sfne  r3,r3
245         l.mfspr r5,r0,17
246         l.andi  r4,r5,0x200
247         l.add   r8,r8,r4
249         l.sfne  r3,r4
250         l.mfspr r5,r0,17
251         l.andi  r4,r5,0x200
252         l.add   r8,r8,r4
254         l.sfnei r3,1
255         l.mfspr r5,r0,17
256         l.andi  r4,r5,0x200
257         l.add   r8,r8,r4
259         l.sfnei r3,-2
260         l.mfspr r5,r0,17
261         l.andi  r4,r5,0x200
262         l.add   r8,r8,r4
264         l.sfgtu r3,r3
265         l.mfspr r5,r0,17
266         l.andi  r4,r5,0x200
267         l.add   r8,r8,r4
269         l.sfgtu r3,r4
270         l.mfspr r5,r0,17
271         l.andi  r4,r5,0x200
272         l.add   r8,r8,r4
274         l.sfgtui    r3,1
275         l.mfspr r5,r0,17
276         l.andi  r4,r5,0x200
277         l.add   r8,r8,r4
279         l.sfgtui    r3,-2
280         l.mfspr r5,r0,17
281         l.andi  r4,r5,0x200
282         l.add   r8,r8,r4
284         l.sfgeu r3,r3
285         l.mfspr r5,r0,17
286         l.andi  r4,r5,0x200
287         l.add   r8,r8,r4
289         l.sfgeu r3,r4
290         l.mfspr r5,r0,17
291         l.andi  r4,r5,0x200
292         l.add   r8,r8,r4
294         l.sfgeui    r3,1
295         l.mfspr r5,r0,17
296         l.andi  r4,r5,0x200
297         l.add   r8,r8,r4
299         l.sfgeui    r3,-2
300         l.mfspr r5,r0,17
301         l.andi  r4,r5,0x200
302         l.add   r8,r8,r4
304         l.sfltu r3,r3
305         l.mfspr r5,r0,17
306         l.andi  r4,r5,0x200
307         l.add   r8,r8,r4
309         l.sfltu r3,r4
310         l.mfspr r5,r0,17
311         l.andi  r4,r5,0x200
312         l.add   r8,r8,r4
314         l.sfltui    r3,1
315         l.mfspr r5,r0,17
316         l.andi  r4,r5,0x200
317         l.add   r8,r8,r4
319         l.sfltui    r3,-2
320         l.mfspr r5,r0,17
321         l.andi  r4,r5,0x200
322         l.add   r8,r8,r4
324         l.sfleu r3,r3
325         l.mfspr r5,r0,17
326         l.andi  r4,r5,0x200
327         l.add   r8,r8,r4
329         l.sfleu r3,r4
330         l.mfspr r5,r0,17
331         l.andi  r4,r5,0x200
332         l.add   r8,r8,r4
334         l.sfleui    r3,1
335         l.mfspr r5,r0,17
336         l.andi  r4,r5,0x200
337         l.add   r8,r8,r4
339         l.sfleui    r3,-2
340         l.mfspr r5,r0,17
341         l.andi  r4,r5,0x200
342         l.add   r8,r8,r4
344         l.sfgts r3,r3
345         l.mfspr r5,r0,17
346         l.andi  r4,r5,0x200
347         l.add   r8,r8,r4
349         l.sfgts r3,r4
350         l.mfspr r5,r0,17
351         l.andi  r4,r5,0x200
352         l.add   r8,r8,r4
354         l.sfgtsi    r3,1
355         l.mfspr r5,r0,17
356         l.andi  r4,r5,0x200
357         l.add   r8,r8,r4
359         l.sfgtsi    r3,-2
360         l.mfspr r5,r0,17
361         l.andi  r4,r5,0x200
362         l.add   r8,r8,r4
364         l.sfges r3,r3
365         l.mfspr r5,r0,17
366         l.andi  r4,r5,0x200
367         l.add   r8,r8,r4
369         l.sfges r3,r4
370         l.mfspr r5,r0,17
371         l.andi  r4,r5,0x200
372         l.add   r8,r8,r4
374         l.sfgesi    r3,1
375         l.mfspr r5,r0,17
376         l.andi  r4,r5,0x200
377         l.add   r8,r8,r4
379         l.sfgesi    r3,-2
380         l.mfspr r5,r0,17
381         l.andi  r4,r5,0x200
382         l.add   r8,r8,r4
384         l.sflts r3,r3
385         l.mfspr r5,r0,17
386         l.andi  r4,r5,0x200
387         l.add   r8,r8,r4
389         l.sflts r3,r4
390         l.mfspr r5,r0,17
391         l.andi  r4,r5,0x200
392         l.add   r8,r8,r4
394         l.sfltsi    r3,1
395         l.mfspr r5,r0,17
396         l.andi  r4,r5,0x200
397         l.add   r8,r8,r4
399         l.sfltsi    r3,-2
400         l.mfspr r5,r0,17
401         l.andi  r4,r5,0x200
402         l.add   r8,r8,r4
404         l.sfles r3,r3
405         l.mfspr r5,r0,17
406         l.andi  r4,r5,0x200
407         l.add   r8,r8,r4
409         l.sfles r3,r4
410         l.mfspr r5,r0,17
411         l.andi  r4,r5,0x200
412         l.add   r8,r8,r4
414         l.sflesi    r3,1
415         l.mfspr r5,r0,17
416         l.andi  r4,r5,0x200
417         l.add   r8,r8,r4
419         l.sflesi    r3,-2
420         l.mfspr r5,r0,17
421         l.andi  r4,r5,0x200
422         l.add   r8,r8,r4
424         REPORT_REG_TO_CONSOLE r8 /* Should be 0x00002800  */
426         l.lwz   r9,0(r31)
427         l.add   r8,r9,r8
428         l.sw    0(r31),r8
430         /* Test the jump instructions.  */
432         l.addi  r8,r0,0
434         OR1K_DELAYED (
435         OR1K_INST (l.addi  r8,r8,1),
436         OR1K_INST (l.j _T1)
437         )
439 _T2:    OR1K_DELAYED (
440         OR1K_INST (l.addi  r8,r8,1),
441         OR1K_INST (l.jr    r9)
442         )
444 _T1:    OR1K_DELAYED (
445         OR1K_INST (l.addi  r8,r8,1),
446         OR1K_INST (l.jal   _T2)
447         )
449         l.sfeqi r0,0
450         OR1K_DELAYED (
451         OR1K_INST (l.addi  r8,r8,1),
452         OR1K_INST (l.bf    _T3)
453         )
455 _T3:    l.sfeqi r0,1
456         OR1K_DELAYED (
457         OR1K_INST (l.addi  r8,r8,1),
458         OR1K_INST (l.bf    _T4)
459         )
461         l.addi  r8,r8,1
463 _T4:    l.sfeqi r0,0
464         OR1K_DELAYED (
465         OR1K_INST (l.addi  r8,r8,1),
466         OR1K_INST (l.bnf    _T5)
467         )
469         l.addi  r8,r8,1
471 _T5:    l.sfeqi r0,1
472         OR1K_DELAYED (
473         OR1K_INST (l.addi  r8,r8,1),
474         OR1K_INST (l.bnf    _T6)
475         )
477         l.addi  r8,r8,1
479 _T6:    l.movhi r3,hi (_T7)
480         l.ori  r3,r3,lo (_T7)
481         l.mtspr r0,r3,32
482         l.mfspr r5,r0,17
483         l.mtspr r0,r5,64
484         l.rfe
485         l.addi  r8,r8,1 /* l.rfe should not have a delay slot  */
487         l.addi  r8,r8,1
489 _T7:    REPORT_REG_TO_CONSOLE r8 /* Should be 0x000000009  */
491         l.lwz   r9,0(r31)
492         l.add   r8,r9,r8
493         l.sw    0(r31),r8
495         l.lwz   r9,0(r31)
496         l.movhi r3,0x4c69
497         l.ori   r3,r3,0xe5f7
498         l.add   r8,r8,r3
500         REPORT_REG_TO_CONSOLE r8 /* Should be 0xdeaddead  */
502         /* Test l.movhi, on 32-bit implementations it should not
503            sign-extend anything.  */
505         l.movhi r3, -1
506         REPORT_REG_TO_CONSOLE r3
508         /* Test l.cmov  */
510         LOAD_IMMEDIATE r14, 0x12345678
511         LOAD_IMMEDIATE r15, 0xABCDF0BD
513         SET_SPR_SR_FLAGS  SPR_SR_F, r6, r7
514         l.cmov r10, r14, r15
515         CLEAR_SPR_SR_FLAGS SPR_SR_F, r6, r7
516         l.cmov r11, r14, r15
518         REPORT_REG_TO_CONSOLE r10
519         REPORT_REG_TO_CONSOLE r11
521         POP LINK_REGISTER_R9
522         RETURN_TO_LINK_REGISTER_R9