sim: ft32: new port
[deliverable/binutils-gdb.git] / sim / testsuite / sim / ft32 / basic.s
1 # check that basic insns work.
2 # mach: ft32
3
4 .include "testutils.inc"
5
6 start
7
8 ldk $r4,10
9 add $r4,$r4,23
10 EXPECT $r4,33
11
12 # lda, sta
13 .data
14 tmp: .long 0
15 .text
16
17 xor.l $r0,$r0,$r0
18 EXPECT $r0,0x00000000
19 xor.l $r0,$r0,$r0
20 add.l $r0,$r0,1
21 EXPECT $r0,0x00000001
22
23 ldk.l $r0,0x4567
24 EXPECT $r0,0x00004567
25
26 lpm.l $r0,k_12345678
27 EXPECT $r0,0x12345678
28
29 sta.l tmp,$r0
30 lda.l $r1,tmp
31 EXPECT $r1,0x12345678
32
33 lda.b $r1,tmp
34 EXPECT $r1,0x00000078
35
36 lda.b $r1,tmp+1
37 EXPECT $r1,0x00000056
38
39 lda.b $r1,tmp+2
40 EXPECT $r1,0x00000034
41
42 lda.b $r1,tmp+3
43 EXPECT $r1,0x00000012
44
45 sta.b tmp+1,$r0
46 lda.l $r1,tmp+0
47 EXPECT $r1,0x12347878
48
49 # immediate
50 ldk.l $r1,12
51 add.l $r1,$r1,4
52 EXPECT $r1,0x00000010
53 add.l $r1,$r1,0x1ff
54 EXPECT $r1,0x0000020f
55 add.l $r1,$r1,-0x200
56 EXPECT $r1,0x0000000f
57
58 # addk
59 xor.l $r1,$r0,$r0
60 add.l $r2,$r1,127
61 EXPECT $r2,0x0000007f
62
63 add.l $r2,$r2,127
64 EXPECT $r2,0x000000fe
65
66 add.l $r2,$r2,-127
67 EXPECT $r2,0x0000007f
68
69 add.l $r2,$r2,-128
70 EXPECT $r2,0xffffffff
71
72 add.l $r2,$r2,1
73 EXPECT $r2,0x00000000
74
75 # mul
76 ldk.l $r1,100
77 ldk.l $r2,77
78 mul.l $r3,$r1,$r2
79 EXPECT $r3,0x00001e14
80
81 # 0x12345678 ** 2 = 0x14b66dc1df4d840L
82 mul.l $r3,$r0,$r0
83 EXPECT $r3,0x1df4d840
84 muluh.l $r3,$r0,$r0
85 EXPECT $r3,0x014b66dc
86
87 # push and pop
88 push.l $r0
89 EXPECT $sp,0x0000fffc
90 ldi.l $r3,$sp,0
91 EXPECT $r3,0x12345678
92
93 pop.l $r4
94 EXPECT $sp,0x00000000
95 EXPECT $r4,0x12345678
96
97 ldk.l $r1,0x1111
98 push.l $r1
99 ldk.l $r1,0x2222
100 push.l $r1
101 ldk.l $r1,0x3333
102 push.l $r1
103 ldk.l $r1,0x4444
104 push.l $r1
105 EXPECT $sp,0x0000fff0
106 pop.l $r1
107 EXPECT $r1,0x00004444
108 pop.l $r1
109 EXPECT $r1,0x00003333
110 pop.l $r1
111 EXPECT $r1,0x00002222
112 pop.l $r1
113 EXPECT $r1,0x00001111
114
115 # push and pop with $sp changes
116 ldk.l $r1,0xa111
117 push.l $r1
118 sub.l $sp,$sp,4
119 ldk.l $r1,0xa222
120 push.l $r1
121 add.l $sp,$sp,-36
122 add.l $sp,$sp,36
123 pop.l $r1
124 EXPECT $r1,0x0000a222
125 add.l $sp,$sp,4
126 pop.l $r1
127 EXPECT $r1,0x0000a111
128
129 # sti
130 ldk.l $r2,80
131 EXPECT $r2,0x00000050
132 sti.l $r2,0,$r0
133 lda.l $r1,80
134 EXPECT $r1,0x12345678
135
136 ldk.l $r3,0xF0
137 sti.b $r2,0,$r3
138 lda.l $r1,80
139 EXPECT $r1,0x123456f0
140
141 add.l $r2,$r2,1
142 sti.l $r2,0,$r0
143 sti.b $r2,0,$r3
144 lda.l $r1,80
145 EXPECT $r1,0x1234f078
146
147 add.l $r2,$r2,1
148 sti.l $r2,0,$r0
149 sti.b $r2,0,$r3
150 lda.l $r1,80
151 EXPECT $r1,0x12f05678
152
153 add.l $r2,$r2,1
154 sti.l $r2,0,$r0
155 sti.b $r2,0,$r3
156 lda.l $r1,80
157 EXPECT $r1,0xf0345678
158
159 ldk.l $r2,80
160 sti.l $r2,0,$r0
161 ldk.s $r3,0xbeef
162 sti.s $r2,0,$r3
163 lda.l $r1,80
164 EXPECT $r1,0x1234beef
165 add.l $r2,$r2,2
166 sti.s $r2,0,$r3
167 lda.l $r1,80
168 EXPECT $r1,0xbeefbeef
169
170 # lpmi
171
172 ldk.l $r1,k_12345678
173 lpmi.l $r2,$r1,0
174 EXPECT $r2,0x12345678
175
176 lpmi.b $r2,$r1,0
177 EXPECT $r2,0x00000078
178
179 add.l $r1,$r1,1
180 lpmi.b $r2,$r1,0
181 EXPECT $r2,0x00000056
182
183 add.l $r1,$r1,1
184 lpmi.b $r2,$r1,0
185 EXPECT $r2,0x00000034
186
187 add.l $r1,$r1,1
188 lpmi.b $r2,$r1,0
189 EXPECT $r2,0x00000012
190
191 lpmi.l $r2,$r1,4
192 EXPECT $r2,0xabcdef01
193
194 lpmi.l $r2,$r1,-4
195 EXPECT $r2,0x10111213
196
197 lpmi.b $r2,$r1,-4
198 EXPECT $r2,0x00000010
199
200 ldk.l $r1,k_12345678
201 lpmi.s $r2,$r1,0
202 EXPECT $r2,0x00005678
203 lpmi.s $r2,$r1,2
204 EXPECT $r2,0x00001234
205 lpmi.b $r2,$r1,6
206 EXPECT $r2,0x000000cd
207 lpmi.b $r2,$r1,7
208 EXPECT $r2,0x000000ab
209 lpmi.b $r2,$r1,-1
210 EXPECT $r2,0x00000010
211 lpmi.s $r2,$r1,-2
212 EXPECT $r2,0x00001011
213
214 ldk.l $r1,k_12345678-127
215 lpmi.b $r2,$r1,127
216 EXPECT $r2,0x00000078
217
218 ldk.l $r1,k_12345678+128
219 lpmi.b $r2,$r1,-128
220 EXPECT $r2,0x00000078
221
222 # shifts
223
224 lpm.l $r0,k_12345678
225 ldk.l $r2,4
226 ashl.l $r1,$r0,$r2
227 EXPECT $r1,0x23456780
228 lshr.l $r1,$r0,$r2
229 EXPECT $r1,0x01234567
230 ashr.l $r1,$r0,$r2
231 EXPECT $r1,0x01234567
232
233 lpm.l $r0,k_abcdef01
234 ashl.l $r1,$r0,$r2
235 EXPECT $r1,0xbcdef010
236 lshr.l $r1,$r0,$r2
237 EXPECT $r1,0x0abcdef0
238 ashr.l $r1,$r0,$r2
239 EXPECT $r1,0xfabcdef0
240
241 # rotate right
242
243 lpm.l $r0,k_12345678
244 ror.l $r1,$r0,0
245 EXPECT $r1,0x12345678
246 ror.l $r1,$r0,12
247 EXPECT $r1,0x67812345
248 ror.l $r1,$r0,-4
249 EXPECT $r1,0x23456781
250
251 # jmpx
252 ldk $r28,0xaaaaa
253 jmpx 0,$r28,1,failcase
254 jmpx 1,$r28,0,failcase
255 jmpx 2,$r28,1,failcase
256 jmpx 3,$r28,0,failcase
257 jmpx 4,$r28,1,failcase
258 jmpx 5,$r28,0,failcase
259 jmpx 6,$r28,1,failcase
260 jmpx 7,$r28,0,failcase
261 jmpx 8,$r28,1,failcase
262 jmpx 9,$r28,0,failcase
263 jmpx 10,$r28,1,failcase
264 jmpx 11,$r28,0,failcase
265 jmpx 12,$r28,1,failcase
266 jmpx 13,$r28,0,failcase
267 jmpx 14,$r28,1,failcase
268 jmpx 15,$r28,0,failcase
269 jmpx 16,$r28,1,failcase
270 jmpx 17,$r28,0,failcase
271 jmpx 18,$r28,1,failcase
272 jmpx 19,$r28,0,failcase
273
274 move $r29,$r28
275 ldk $r28,0
276 jmpx 0,$r29,1,failcase
277 jmpx 1,$r29,0,failcase
278 jmpx 2,$r29,1,failcase
279 jmpx 3,$r29,0,failcase
280 jmpx 4,$r29,1,failcase
281 jmpx 5,$r29,0,failcase
282 jmpx 6,$r29,1,failcase
283 jmpx 7,$r29,0,failcase
284 jmpx 8,$r29,1,failcase
285 jmpx 9,$r29,0,failcase
286 jmpx 10,$r29,1,failcase
287 jmpx 11,$r29,0,failcase
288 jmpx 12,$r29,1,failcase
289 jmpx 13,$r29,0,failcase
290 jmpx 14,$r29,1,failcase
291 jmpx 15,$r29,0,failcase
292 jmpx 16,$r29,1,failcase
293 jmpx 17,$r29,0,failcase
294 jmpx 18,$r29,1,failcase
295 jmpx 19,$r29,0,failcase
296
297 move $r30,$r29
298 ldk $r29,0
299 jmpx 0,$r30,1,failcase
300 jmpx 1,$r30,0,failcase
301 jmpx 2,$r30,1,failcase
302 jmpx 3,$r30,0,failcase
303 jmpx 4,$r30,1,failcase
304 jmpx 5,$r30,0,failcase
305 jmpx 6,$r30,1,failcase
306 jmpx 7,$r30,0,failcase
307 jmpx 8,$r30,1,failcase
308 jmpx 9,$r30,0,failcase
309 jmpx 10,$r30,1,failcase
310 jmpx 11,$r30,0,failcase
311 jmpx 12,$r30,1,failcase
312 jmpx 13,$r30,0,failcase
313 jmpx 14,$r30,1,failcase
314 jmpx 15,$r30,0,failcase
315 jmpx 16,$r30,1,failcase
316 jmpx 17,$r30,0,failcase
317 jmpx 18,$r30,1,failcase
318 jmpx 19,$r30,0,failcase
319
320 # callx
321 ldk $r30,0xaaaaa
322 callx 0,$r30,0,skip1
323 jmp failcase
324 callx 1,$r30,1,skip1
325 jmp failcase
326 callx 2,$r30,0,skip1
327 jmp failcase
328 callx 3,$r30,1,skip1
329 jmp failcase
330
331 callx 0,$r30,1,skip1
332 ldk $r30,0x123
333 EXPECT $r30,0x123
334
335 #define BIT(N,M) ((((N) & 15) << 5) | (M))
336 # bextu
337 bextu.l $r1,$r0,(0<<5)|0
338 EXPECT $r1,0x00005678
339 bextu.l $r1,$r0,(4<<5)|0
340 EXPECT $r1,0x00000008
341 bextu.l $r1,$r0,(4<<5)|4
342 EXPECT $r1,0x00000007
343 bextu.l $r1,$r0,(4<<5)|28
344 EXPECT $r1,0x00000001
345 bextu.l $r1,$r0,(8<<5)|16
346 EXPECT $r1,0x00000034
347 ldk.l $r2,-1
348 bextu.l $r1,$r2,(6<<5)|(3)
349 EXPECT $r1,0x0000003f
350
351 # bexts
352 bexts.l $r1,$r0,(8<<5)|0
353 EXPECT $r1,0x00000078
354 bexts.l $r1,$r0,(0<<5)|16
355 EXPECT $r1,0x00001234
356 bexts.l $r1,$r0,(4<<5)|0
357 EXPECT $r1,0xfffffff8
358 # extract the '5' digit in widths 4-1
359 bexts.l $r1,$r0,(4<<5)|12
360 EXPECT $r1,0x00000005
361 bexts.l $r1,$r0,(3<<5)|12
362 EXPECT $r1,0xfffffffd
363 bexts.l $r1,$r0,(2<<5)|12
364 EXPECT $r1,0x00000001
365 bexts.l $r1,$r0,(1<<5)|12
366 EXPECT $r1,0xffffffff
367
368 # btst
369 # low four bits should be 0,0,0,1
370 btst.l $r0,(1<<5)|0
371 jmpc nz,failcase
372 btst.l $r0,(1<<5)|1
373 jmpc nz,failcase
374 btst.l $r0,(1<<5)|2
375 jmpc nz,failcase
376 btst.l $r0,(1<<5)|3
377 jmpc z,failcase
378
379 # the 6 bit field starting at position 24 is positive
380 btst.l $r0,(6<<5)|24
381 jmpc s,failcase
382 # the 5 bit field starting at position 24 is negative
383 btst.l $r0,(5<<5)|24
384 jmpc ns,failcase
385
386 EXPECT $r0,0x12345678
387
388 # bins
389 bins.l $r1,$r0,(8 << 5) | (0)
390 EXPECT $r1,0x12345600
391
392 bins.l $r1,$r0,(0 << 5) | (8)
393 EXPECT $r1,0x12000078
394
395 ldk.l $r1,(0xff << 10) | (8 << 5) | (8)
396 bins.l $r1,$r0,$r1
397 EXPECT $r1,0x1234ff78
398
399 call litr1
400 .long (0x8dd1 << 10) | (0 << 5) | (0)
401 bins.l $r1,$r0,$r1
402 EXPECT $r1,0x12348dd1
403
404 call litr1
405 .long (0x8dd1 << 10) | (0 << 5) | (16)
406 bins.l $r1,$r0,$r1
407 EXPECT $r1,0x8dd15678
408
409 ldk.l $r1,(0xde << 10) | (8 << 5) | (0)
410 bins.l $r1,$r0,$r1
411 EXPECT $r1,0x123456de
412
413 # ldl
414 ldk.l $r0,0
415 ldl.l $r3,$r0,0
416 EXPECT $r3,0x00000000
417 ldk.l $r0,-1
418 ldl.l $r3,$r0,-1
419 EXPECT $r3,0xffffffff
420 ldk.l $r0,(0x12345678 >> 10)
421 ldl.l $r3,$r0,(0x12345678 & 0x3ff)
422 EXPECT $r3,0x12345678
423 ldk.l $r0,(0xe2345678 >> 10)
424 ldl.l $r3,$r0,(0xe2345678 & 0x3ff)
425 EXPECT $r3,0xe2345678
426
427 # flip
428 ldk.l $r0,0x0000001
429 flip.l $r1,$r0,0
430 EXPECT $r1,0x00000001
431
432 lpm.l $r0,k_12345678
433 flip.l $r1,$r0,0
434 EXPECT $r1,0x12345678
435 flip.l $r1,$r0,24
436 EXPECT $r1,0x78563412
437 flip.l $r1,$r0,31
438 EXPECT $r1,0x1e6a2c48
439
440 # stack push pop
441
442 EXPECT $sp,0x00000000
443 ldk.l $r6,0x6666
444 push.l $r6
445 or.l $r0,$r0,$r0 # xxx
446 EXPECT $sp,0x0000fffc
447 ldi.l $r1,$sp,0
448 EXPECT $r1,0x00006666
449 pop.l $r1
450 EXPECT $r1,0x00006666
451 EXPECT $sp,0x00000000
452
453 # call/return
454 call fowia
455 push.l $r1
456 call fowia
457 pop.l $r2
458 sub.l $r1,$r1,$r2
459 EXPECT $r1,0x00000008
460
461 # add,carry
462
463 ldk.l $r0,0
464 ldk.l $r1,0
465 call add64
466 EXPECT $r1,0x00000000
467 EXPECT $r0,0x00000000
468
469 lpm.l $r0,k_abcdef01
470 lpm.l $r1,k_abcdef01
471 call add64
472 EXPECT $r1,0x00000001
473 EXPECT $r0,0x579bde02
474
475 ldk.l $r0,4
476 ldk.l $r1,-5
477 call add64
478 EXPECT $r1,0x00000000
479 EXPECT $r0,0xffffffff
480
481 ldk.l $r0,5
482 ldk.l $r1,-5
483 call add64
484 EXPECT $r1,0x00000001
485 EXPECT $r0,0x00000000
486
487 lpm.l $r0,k_12345678
488 ldk.l $r1,-1
489 call add64
490 EXPECT $r1,0x00000001
491 EXPECT $r0,0x12345677
492
493 ldk.l $r0,-1
494 ldk.l $r1,-1
495 call add64
496 EXPECT $r1,0x00000001
497 EXPECT $r0,0xfffffffe
498
499 # inline literal
500 call lit
501 .long 0xdecafbad
502 EXPECT $r0,0xdecafbad
503
504 ldk.l $r1,0xee
505 call lit
506 ldk.l $r1,0xfe
507 EXPECT $r1,0x000000ee
508
509 call lit
510 .long 0x01020304
511 EXPECT $r0,0x01020304
512
513 call lit
514 .long lit
515 calli $r0
516 .long 0xffaa55aa
517 EXPECT $r0,0xffaa55aa
518
519 # comparisons
520 ldk.l $r0,-100
521 ldk.l $r1,100
522 cmp.l $r0,$r1
523
524 ldk.l $r2,0
525 jmpc lt,.c1
526 ldk.l $r2,1
527 .c1:
528 EXPECT $r2,0x00000000
529
530 ldk.l $r2,0
531 jmpc gt,.c2
532 ldk.l $r2,1
533 .c2:
534 EXPECT $r2,0x00000001
535
536 ldk.l $r2,0
537 jmpc a,.c3
538 ldk.l $r2,1
539 .c3:
540 EXPECT $r2,0x00000000
541
542 ldk.l $r2,0
543 jmpc b,.c4
544 ldk.l $r2,1
545 .c4:
546 EXPECT $r2,0x00000001
547
548 ldk.l $r2,0
549 jmpc be,.c5
550 ldk.l $r2,1
551 .c5:
552 EXPECT $r2,0x00000001
553
554 # 8-bit comparisons
555 ldk.l $r0,0x8fe
556 ldk.l $r1,0x708
557 cmp.b $r0,$r1
558
559 ldk.l $r2,0
560 jmpc lt,.8c1
561 ldk.l $r2,1
562 .8c1:
563 EXPECT $r2,0x00000000
564
565 ldk.l $r2,0
566 jmpc gt,.8c2
567 ldk.l $r2,1
568 .8c2:
569 EXPECT $r2,0x00000001
570
571 ldk.l $r2,0
572 jmpc a,.8c3
573 ldk.l $r2,1
574 .8c3:
575 EXPECT $r2,0x00000000
576
577 ldk.l $r2,0
578 jmpc b,.8c4
579 ldk.l $r2,1
580 .8c4:
581 EXPECT $r2,0x00000001
582
583 ldk.l $r2,0
584 jmpc be,.8c5
585 ldk.l $r2,1
586 .8c5:
587 EXPECT $r2,0x00000001
588
589 ldk.l $r0,0x8aa
590 ldk.l $r1,0x7aa
591 cmp.b $r0,$r1
592
593 ldk.l $r2,0
594 jmpc z,.8c6
595 ldk.l $r2,1
596 .8c6:
597 EXPECT $r2,0x00000000
598
599 ldk.b $r0,1
600 ldk.b $r2,0xe0
601 cmp.b $r2,0x1c0
602 jmpc a,.8c7
603 ldk.b $r0,0
604 .8c7:
605 EXPECT $r0,0x00000001
606
607 # conditional call
608 cmp.l $r0,$r0
609 callc z,lit
610 .long 0xccddeeff
611 callc nz,zr0
612 EXPECT $r0,0xccddeeff
613
614 # modify return address
615 ldk.l $r0,0x66
616 call skip1
617 ldk.l $r0,0xAA
618 EXPECT $r0,0x00000066
619
620 ldk.l $r0,0x77
621 call skip2
622 ldk.l $r0,0xBB
623 EXPECT $r0,0x00000077
624
625 # simple recursive function
626 ldk.l $r0,1
627 call factorial
628 EXPECT $r0,0x00000001
629 ldk.l $r0,2
630 call factorial
631 EXPECT $r0,0x00000002
632 ldk.l $r0,3
633 call factorial
634 EXPECT $r0,0x00000006
635 ldk.l $r0,4
636 call factorial
637 EXPECT $r0,0x00000018
638 ldk.l $r0,5
639 call factorial
640 EXPECT $r0,0x00000078
641 ldk.l $r0,6
642 call factorial
643 EXPECT $r0,0x000002d0
644 ldk.l $r0,7
645 call factorial
646 EXPECT $r0,0x000013b0
647 ldk.l $r0,12
648 call factorial
649 EXPECT $r0,0x1c8cfc00
650
651 # read sp after a call
652 call nullfunc
653 EXPECT $sp,0x00000000
654
655 # CALLI->RETURN
656 ldk.l $r4,nullfunc
657 calli $r4
658 EXPECT $sp,0x00000000
659
660 # Link/unlink
661 ldk.l $r14,0x17566
662
663 link $r14,48
664 EXPECT $r14,0x0000fffc
665 sub.l $sp,$sp,200
666 unlink $r14
667 EXPECT $r14,0x00017566
668
669 # LINK->UNLINK
670 link $r14,48
671 unlink $r14
672 EXPECT $r14,0x00017566
673
674 # LINK->JUMPI
675 ldk.l $r3,.here
676 link $r14,48
677 jmpi $r3
678 jmp failcase
679 .here:
680 unlink $r14
681 EXPECT $r14,0x00017566
682
683 # LINK->RETURN
684 # (This is a nonsense combination, but can still exericse it by
685 # using a negative parameter for the link. "link $r14,-4" leaves
686 # $sp exactly unchanged.)
687 ldk.l $r0,.returnhere
688 push.l $r0
689 link $r14,0xfffc
690 return
691 .returnhere:
692 EXPECT $sp,0x00000000
693
694 # LPMI->CALLI
695 ldk.l $r0,k_abcdef01
696 ldk.l $r1,increment
697 lpmi.l $r0,$r0,0
698 calli $r1
699 EXPECT $r0,0xabcdef02
700
701 # STRLen
702 lpm.l $r4,str3
703 sta.l tmp,$r4
704 ldk.l $r0,tmp
705 strlen.b $r1,$r0
706 EXPECT $r1,0x00000003
707 strlen.s $r1,$r0
708 EXPECT $r1,0x00000003
709 strlen.l $r1,$r0
710 EXPECT $r1,0x00000003
711
712 ldk.l $r4,0
713 sta.b 4,$r4
714 strlen.l $r1,$r0
715 EXPECT $r1,0x00000000
716
717 ldk.l $r4,-1
718 sta.l 4,$r4
719 lpm.l $r4,str3
720 sta.l 8,$r4
721 strlen.l $r1,$r0
722 EXPECT $r1,0x00000007
723
724 # MEMSet
725 ldk.l $r0,4
726 ldk.l $r1,0xaa
727 memset.s $r0,$r1,8
728 ldk.l $r1,0x55
729 memset.b $r0,$r1,5
730 lda.l $r0,4
731 EXPECT $r0,0x55555555
732 lda.l $r0,8
733 EXPECT $r0,0xaaaaaa55
734
735 # first cycle after mispredict
736 ldk.l $r0,3
737 cmp.l $r0,$r0
738 jmpc nz,failcase
739 add.l $r0,$r0,7
740 EXPECT $r0,0x0000000a
741 jmpc nz,failcase
742 push.l $r0
743 EXPECT $sp,0x0000fffc
744 pop.l $r0
745
746 # $sp access after stall
747 lpm.l $r13,0
748 push.l $r0
749 EXPECT $sp,0x0000fffc
750 pop.l $r0
751
752 push.l $r0
753 add.l $sp,$sp,-484
754 EXPECT $sp,0x0000fe18
755 EXPECT $sp,0x0000fe18
756 EXPECT $sp,0x0000fe18
757 add.l $sp,$sp,484
758 EXPECT $sp,0x0000fffc
759 pop.l $r0
760
761 # atomic exchange
762 lpm.l $r0,k_12345678
763 lpm.l $r1,k_abcdef01
764 sta.l 100,$r1
765 exa.l $r0,100
766 EXPECT $r0,0xabcdef01
767 lda.l $r0,100
768 EXPECT $r0,0x12345678
769
770 lpm.l $r0,k_12345678
771 lpm.l $r1,k_abcdef01
772 sta.l 144,$r1
773 ldk.l $r7,20
774 exi.l $r0,$r7,124
775 EXPECT $r0,0xabcdef01
776 lda.l $r0,144
777 EXPECT $r0,0x12345678
778
779 lpm.l $r0,k_12345678
780 lpm.l $r1,k_abcdef01
781 push $r1
782 exi.l $r0,$sp,0
783 EXPECT $r0,0xabcdef01
784 pop.l $r0
785 EXPECT $r0,0x12345678
786
787 # final stack check
788 EXPECT $sp,0x00000000
789
790 PASS
791
792 # --------------------------------------------------
793
794 skip1: # skip the instruction after the call
795 pop.l $r1
796 add.l $r1,$r1,4
797 push.l $r1
798 return
799
800 skipparent: # skip the instruction after the caller's call
801 ldi.l $r1,$sp,4
802 add.l $r1,$r1,4
803 sti.l $sp,4,$r1
804 return
805 skip2:
806 call skipparent
807 return
808
809 add64:
810 addcc.l $r0,$r1
811 add.l $r0,$r0,$r1
812 ldk.l $r1,0
813 jmpc nc,.done
814 ldk.l $r1,1
815 .done:
816 return
817
818 fowia: # find out where I'm at
819 ldi.l $r1,$sp,0
820 return
821
822 lit: # load literal to $r0
823 pop.l $r14
824 lpmi.l $r0,$r14,0
825 add.l $r14,$r14,4
826 jmpi $r14
827 zr0:
828 ldk.l $r0,0
829 return
830 litr1:
831 ldi.l $r1,$sp,0
832 add.l $r1,$r1,4
833 sti.l $sp,0,$r1
834 lpmi.l $r1,$r1,-4
835 return
836
837 factorial:
838 ldk.l $r1,1
839 cmp.l $r0,$r1
840 jmpc z,.factdone
841 push.l $r0
842 add.l $r0,$r0,-1
843 call factorial
844 pop.l $r1
845 mul.l $r0,$r0,$r1
846 .factdone:
847 return
848
849 nullfunc:
850 return
851
852 increment:
853 add.l $r0,$r0,1
854 return
855
856 .long 0x10111213
857 k_12345678:
858 .long 0x12345678
859 k_abcdef01:
860 .long 0xabcdef01
861 str3:
862 .string "abc"
This page took 0.075322 seconds and 4 git commands to generate.