1 # check that basic insns work.
4 .include "testutils.inc"
81 # 0x12345678 ** 2 = 0x14b66dc1df4d840L
105 EXPECT $sp,0x0000fff0
107 EXPECT $r1,0x00004444
109 EXPECT $r1,0x00003333
111 EXPECT $r1,0x00002222
113 EXPECT $r1,0x00001111
115 # push and pop with $sp changes
124 EXPECT $r1,0x0000a222
127 EXPECT $r1,0x0000a111
131 EXPECT $r2,0x00000050
134 EXPECT $r1,0x12345678
139 EXPECT $r1,0x123456f0
145 EXPECT $r1,0x1234f078
151 EXPECT $r1,0x12f05678
157 EXPECT $r1,0xf0345678
164 EXPECT $r1,0x1234beef
168 EXPECT $r1,0xbeefbeef
174 EXPECT $r2,0x12345678
177 EXPECT $r2,0x00000078
181 EXPECT $r2,0x00000056
185 EXPECT $r2,0x00000034
189 EXPECT $r2,0x00000012
192 EXPECT $r2,0xabcdef01
195 EXPECT $r2,0x10111213
198 EXPECT $r2,0x00000010
202 EXPECT $r2,0x00005678
204 EXPECT $r2,0x00001234
206 EXPECT $r2,0x000000cd
208 EXPECT $r2,0x000000ab
210 EXPECT $r2,0x00000010
212 EXPECT $r2,0x00001011
214 ldk.l $r1,k_12345678-127
216 EXPECT $r2,0x00000078
218 ldk.l $r1,k_12345678+128
220 EXPECT $r2,0x00000078
227 EXPECT $r1,0x23456780
229 EXPECT $r1,0x01234567
231 EXPECT $r1,0x01234567
235 EXPECT $r1,0xbcdef010
237 EXPECT $r1,0x0abcdef0
239 EXPECT $r1,0xfabcdef0
245 EXPECT $r1,0x12345678
247 EXPECT $r1,0x67812345
249 EXPECT $r1,0x23456781
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
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
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
335 #define BIT(N,M) ((((N) & 15) << 5) | (M))
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
348 bextu.l $r1,$r2,(6<<5)|(3)
349 EXPECT $r1,0x0000003f
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
369 # low four bits should be 0,0,0,1
379 # the 6 bit field starting at position 24 is positive
382 # the 5 bit field starting at position 24 is negative
386 EXPECT $r0,0x12345678
389 bins.l $r1,$r0,(8 << 5) | (0)
390 EXPECT $r1,0x12345600
392 bins.l $r1,$r0,(0 << 5) | (8)
393 EXPECT $r1,0x12000078
395 ldk.l $r1,(0xff << 10) | (8 << 5) | (8)
397 EXPECT $r1,0x1234ff78
400 .long (0x8dd1 << 10) | (0 << 5) | (0)
402 EXPECT $r1,0x12348dd1
405 .long (0x8dd1 << 10) | (0 << 5) | (16)
407 EXPECT $r1,0x8dd15678
409 ldk.l $r1,(0xde << 10) | (8 << 5) | (0)
411 EXPECT $r1,0x123456de
416 EXPECT $r3,0x00000000
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
430 EXPECT $r1,0x00000001
434 EXPECT $r1,0x12345678
436 EXPECT $r1,0x78563412
438 EXPECT $r1,0x1e6a2c48
442 EXPECT $sp,0x00000000
445 or.l $r0,$r0,$r0 # xxx
446 EXPECT $sp,0x0000fffc
448 EXPECT $r1,0x00006666
450 EXPECT $r1,0x00006666
451 EXPECT $sp,0x00000000
459 EXPECT $r1,0x00000008
466 EXPECT $r1,0x00000000
467 EXPECT $r0,0x00000000
472 EXPECT $r1,0x00000001
473 EXPECT $r0,0x579bde02
478 EXPECT $r1,0x00000000
479 EXPECT $r0,0xffffffff
484 EXPECT $r1,0x00000001
485 EXPECT $r0,0x00000000
490 EXPECT $r1,0x00000001
491 EXPECT $r0,0x12345677
496 EXPECT $r1,0x00000001
497 EXPECT $r0,0xfffffffe
502 EXPECT $r0,0xdecafbad
507 EXPECT $r1,0x000000ee
511 EXPECT $r0,0x01020304
517 EXPECT $r0,0xffaa55aa
528 EXPECT $r2,0x00000000
534 EXPECT $r2,0x00000001
540 EXPECT $r2,0x00000000
546 EXPECT $r2,0x00000001
552 EXPECT $r2,0x00000001
563 EXPECT $r2,0x00000000
569 EXPECT $r2,0x00000001
575 EXPECT $r2,0x00000000
581 EXPECT $r2,0x00000001
587 EXPECT $r2,0x00000001
597 EXPECT $r2,0x00000000
605 EXPECT $r0,0x00000001
612 EXPECT $r0,0xccddeeff
614 # modify return address
618 EXPECT $r0,0x00000066
623 EXPECT $r0,0x00000077
625 # simple recursive function
628 EXPECT $r0,0x00000001
631 EXPECT $r0,0x00000002
634 EXPECT $r0,0x00000006
637 EXPECT $r0,0x00000018
640 EXPECT $r0,0x00000078
643 EXPECT $r0,0x000002d0
646 EXPECT $r0,0x000013b0
649 EXPECT $r0,0x1c8cfc00
651 # read sp after a call
653 EXPECT $sp,0x00000000
658 EXPECT $sp,0x00000000
664 EXPECT $r14,0x0000fffc
667 EXPECT $r14,0x00017566
672 EXPECT $r14,0x00017566
681 EXPECT $r14,0x00017566
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
692 EXPECT $sp,0x00000000
699 EXPECT $r0,0xabcdef02
706 EXPECT $r1,0x00000003
708 EXPECT $r1,0x00000003
710 EXPECT $r1,0x00000003
715 EXPECT $r1,0x00000000
722 EXPECT $r1,0x00000007
731 EXPECT $r0,0x55555555
733 EXPECT $r0,0xaaaaaa55
735 # first cycle after mispredict
740 EXPECT $r0,0x0000000a
743 EXPECT $sp,0x0000fffc
746 # $sp access after stall
749 EXPECT $sp,0x0000fffc
754 EXPECT $sp,0x0000fe18
755 EXPECT $sp,0x0000fe18
756 EXPECT $sp,0x0000fe18
758 EXPECT $sp,0x0000fffc
766 EXPECT $r0,0xabcdef01
768 EXPECT $r0,0x12345678
775 EXPECT $r0,0xabcdef01
777 EXPECT $r0,0x12345678
783 EXPECT $r0,0xabcdef01
785 EXPECT $r0,0x12345678
788 EXPECT $sp,0x00000000
792 # --------------------------------------------------
794 skip1: # skip the instruction after the call
800 skipparent: # skip the instruction after the caller's call
818 fowia: # find out where I'm at
822 lit: # load literal to $r0