]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/or1k/basic.S
cc1ba0ec3e684e3220eb156e175458ab85668641
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / or1k / basic.S
1 /* Tests some basic CPU instructions.
2
3 Copyright (C) 2017-2020 Free Software Foundation, Inc.
4
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.
9
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.
14
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/>. */
17
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
31
32 #include "or1k-asm-test-env.h"
33
34 #define FIRST_RAM_ADDR 0x00000000
35
36 STANDARD_TEST_HEADER
37
38 /* Early test begin. */
39
40 /* Do this test upfront, as it modifies STACK_POINTER_R1. */
41
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
58
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
75
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 */
80
81 /* Early test end. */
82
83 STANDARD_TEST_BODY
84
85 .section .text
86 start_tests:
87 PUSH LINK_REGISTER_R9
88
89 /* Read and write from RAM. */
90
91 LOAD_IMMEDIATE r31, FIRST_RAM_ADDR
92 l.sw 0(r31), r16
93
94 l.movhi r3,0x1234
95 l.ori r3,r3,0x5678
96
97 l.sw 4(r31),r3
98
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
111
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
124
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
131
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
138
139 l.lwz r4,4(r31)
140 l.add r8,r8,r4
141
142 REPORT_REG_TO_CONSOLE r8 /* Should be 0x12352af7 */
143
144 l.lwz r9,0(r31)
145 l.add r8,r9,r8
146 l.sw 0(r31),r8
147
148 /* Test arithmetic operations. */
149
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
155
156 l.sub r7,r5,r3
157 l.sub r8,r3,r5
158 l.add r8,r8,r7
159
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
165
166 REPORT_REG_TO_CONSOLE r8 /* Should be 0x7ffffffe */
167
168 l.lwz r9,0(r31)
169 l.add r8,r9,r8
170 l.sw 0(r31),r8
171
172 /* Test logical operations. */
173
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
179
180 l.andi r8,r8,1
181 l.and r8,r8,r3
182
183 l.xori r8,r5,0xa5a5
184 l.xor r8,r8,r5
185
186 l.ori r8,r8,2
187 l.or r8,r8,r4
188
189 REPORT_REG_TO_CONSOLE r8 /* Should be 0xffffa5a7 */
190
191 l.lwz r9,0(r31)
192 l.add r8,r9,r8
193 l.sw 0(r31),r8
194
195 /* Test shifting operations. */
196
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
202
203 l.slli r8,r5,6
204 l.sll r8,r8,r4
205
206 l.srli r8,r8,6
207 l.srl r8,r8,r4
208
209 l.srai r8,r8,2
210 l.sra r8,r8,r4
211
212 REPORT_REG_TO_CONSOLE r8 /* Should be 0x000fffff */
213
214 l.lwz r9,0(r31)
215 l.add r8,r9,r8
216 l.sw 0(r31),r8
217
218 /* Test the CPU flag. */
219
220 l.addi r3,r0,1
221 l.addi r4,r0,-2
222 l.addi r8,r0,0
223
224 l.sfeq r3,r3
225 l.mfspr r5,r0,17
226 l.andi r4,r5,0x200
227 l.add r8,r8,r4
228
229 l.sfeq r3,r4
230 l.mfspr r5,r0,17
231 l.andi r4,r5,0x200
232 l.add r8,r8,r4
233
234 l.sfeqi r3,1
235 l.mfspr r5,r0,17
236 l.andi r4,r5,0x200
237 l.add r8,r8,r4
238
239 l.sfeqi r3,-2
240 l.mfspr r5,r0,17
241 l.andi r4,r5,0x200
242 l.add r8,r8,r4
243
244 l.sfne r3,r3
245 l.mfspr r5,r0,17
246 l.andi r4,r5,0x200
247 l.add r8,r8,r4
248
249 l.sfne r3,r4
250 l.mfspr r5,r0,17
251 l.andi r4,r5,0x200
252 l.add r8,r8,r4
253
254 l.sfnei r3,1
255 l.mfspr r5,r0,17
256 l.andi r4,r5,0x200
257 l.add r8,r8,r4
258
259 l.sfnei r3,-2
260 l.mfspr r5,r0,17
261 l.andi r4,r5,0x200
262 l.add r8,r8,r4
263
264 l.sfgtu r3,r3
265 l.mfspr r5,r0,17
266 l.andi r4,r5,0x200
267 l.add r8,r8,r4
268
269 l.sfgtu r3,r4
270 l.mfspr r5,r0,17
271 l.andi r4,r5,0x200
272 l.add r8,r8,r4
273
274 l.sfgtui r3,1
275 l.mfspr r5,r0,17
276 l.andi r4,r5,0x200
277 l.add r8,r8,r4
278
279 l.sfgtui r3,-2
280 l.mfspr r5,r0,17
281 l.andi r4,r5,0x200
282 l.add r8,r8,r4
283
284 l.sfgeu r3,r3
285 l.mfspr r5,r0,17
286 l.andi r4,r5,0x200
287 l.add r8,r8,r4
288
289 l.sfgeu r3,r4
290 l.mfspr r5,r0,17
291 l.andi r4,r5,0x200
292 l.add r8,r8,r4
293
294 l.sfgeui r3,1
295 l.mfspr r5,r0,17
296 l.andi r4,r5,0x200
297 l.add r8,r8,r4
298
299 l.sfgeui r3,-2
300 l.mfspr r5,r0,17
301 l.andi r4,r5,0x200
302 l.add r8,r8,r4
303
304 l.sfltu r3,r3
305 l.mfspr r5,r0,17
306 l.andi r4,r5,0x200
307 l.add r8,r8,r4
308
309 l.sfltu r3,r4
310 l.mfspr r5,r0,17
311 l.andi r4,r5,0x200
312 l.add r8,r8,r4
313
314 l.sfltui r3,1
315 l.mfspr r5,r0,17
316 l.andi r4,r5,0x200
317 l.add r8,r8,r4
318
319 l.sfltui r3,-2
320 l.mfspr r5,r0,17
321 l.andi r4,r5,0x200
322 l.add r8,r8,r4
323
324 l.sfleu r3,r3
325 l.mfspr r5,r0,17
326 l.andi r4,r5,0x200
327 l.add r8,r8,r4
328
329 l.sfleu r3,r4
330 l.mfspr r5,r0,17
331 l.andi r4,r5,0x200
332 l.add r8,r8,r4
333
334 l.sfleui r3,1
335 l.mfspr r5,r0,17
336 l.andi r4,r5,0x200
337 l.add r8,r8,r4
338
339 l.sfleui r3,-2
340 l.mfspr r5,r0,17
341 l.andi r4,r5,0x200
342 l.add r8,r8,r4
343
344 l.sfgts r3,r3
345 l.mfspr r5,r0,17
346 l.andi r4,r5,0x200
347 l.add r8,r8,r4
348
349 l.sfgts r3,r4
350 l.mfspr r5,r0,17
351 l.andi r4,r5,0x200
352 l.add r8,r8,r4
353
354 l.sfgtsi r3,1
355 l.mfspr r5,r0,17
356 l.andi r4,r5,0x200
357 l.add r8,r8,r4
358
359 l.sfgtsi r3,-2
360 l.mfspr r5,r0,17
361 l.andi r4,r5,0x200
362 l.add r8,r8,r4
363
364 l.sfges r3,r3
365 l.mfspr r5,r0,17
366 l.andi r4,r5,0x200
367 l.add r8,r8,r4
368
369 l.sfges r3,r4
370 l.mfspr r5,r0,17
371 l.andi r4,r5,0x200
372 l.add r8,r8,r4
373
374 l.sfgesi r3,1
375 l.mfspr r5,r0,17
376 l.andi r4,r5,0x200
377 l.add r8,r8,r4
378
379 l.sfgesi r3,-2
380 l.mfspr r5,r0,17
381 l.andi r4,r5,0x200
382 l.add r8,r8,r4
383
384 l.sflts r3,r3
385 l.mfspr r5,r0,17
386 l.andi r4,r5,0x200
387 l.add r8,r8,r4
388
389 l.sflts r3,r4
390 l.mfspr r5,r0,17
391 l.andi r4,r5,0x200
392 l.add r8,r8,r4
393
394 l.sfltsi r3,1
395 l.mfspr r5,r0,17
396 l.andi r4,r5,0x200
397 l.add r8,r8,r4
398
399 l.sfltsi r3,-2
400 l.mfspr r5,r0,17
401 l.andi r4,r5,0x200
402 l.add r8,r8,r4
403
404 l.sfles r3,r3
405 l.mfspr r5,r0,17
406 l.andi r4,r5,0x200
407 l.add r8,r8,r4
408
409 l.sfles r3,r4
410 l.mfspr r5,r0,17
411 l.andi r4,r5,0x200
412 l.add r8,r8,r4
413
414 l.sflesi r3,1
415 l.mfspr r5,r0,17
416 l.andi r4,r5,0x200
417 l.add r8,r8,r4
418
419 l.sflesi r3,-2
420 l.mfspr r5,r0,17
421 l.andi r4,r5,0x200
422 l.add r8,r8,r4
423
424 REPORT_REG_TO_CONSOLE r8 /* Should be 0x00002800 */
425
426 l.lwz r9,0(r31)
427 l.add r8,r9,r8
428 l.sw 0(r31),r8
429
430 /* Test the jump instructions. */
431
432 l.addi r8,r0,0
433
434 OR1K_DELAYED (
435 OR1K_INST (l.addi r8,r8,1),
436 OR1K_INST (l.j _T1)
437 )
438
439 _T2: OR1K_DELAYED (
440 OR1K_INST (l.addi r8,r8,1),
441 OR1K_INST (l.jr r9)
442 )
443
444 _T1: OR1K_DELAYED (
445 OR1K_INST (l.addi r8,r8,1),
446 OR1K_INST (l.jal _T2)
447 )
448
449 l.sfeqi r0,0
450 OR1K_DELAYED (
451 OR1K_INST (l.addi r8,r8,1),
452 OR1K_INST (l.bf _T3)
453 )
454
455 _T3: l.sfeqi r0,1
456 OR1K_DELAYED (
457 OR1K_INST (l.addi r8,r8,1),
458 OR1K_INST (l.bf _T4)
459 )
460
461 l.addi r8,r8,1
462
463 _T4: l.sfeqi r0,0
464 OR1K_DELAYED (
465 OR1K_INST (l.addi r8,r8,1),
466 OR1K_INST (l.bnf _T5)
467 )
468
469 l.addi r8,r8,1
470
471 _T5: l.sfeqi r0,1
472 OR1K_DELAYED (
473 OR1K_INST (l.addi r8,r8,1),
474 OR1K_INST (l.bnf _T6)
475 )
476
477 l.addi r8,r8,1
478
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 */
486
487 l.addi r8,r8,1
488
489 _T7: REPORT_REG_TO_CONSOLE r8 /* Should be 0x000000009 */
490
491 l.lwz r9,0(r31)
492 l.add r8,r9,r8
493 l.sw 0(r31),r8
494
495 l.lwz r9,0(r31)
496 l.movhi r3,0x4c69
497 l.ori r3,r3,0xe5f7
498 l.add r8,r8,r3
499
500 REPORT_REG_TO_CONSOLE r8 /* Should be 0xdeaddead */
501
502 /* Test l.movhi, on 32-bit implementations it should not
503 sign-extend anything. */
504
505 l.movhi r3, -1
506 REPORT_REG_TO_CONSOLE r3
507
508 /* Test l.cmov */
509
510 LOAD_IMMEDIATE r14, 0x12345678
511 LOAD_IMMEDIATE r15, 0xABCDF0BD
512
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
517
518 REPORT_REG_TO_CONSOLE r10
519 REPORT_REG_TO_CONSOLE r11
520
521 POP LINK_REGISTER_R9
522 RETURN_TO_LINK_REGISTER_R9