Home | History | Annotate | Line # | Download | only in bfin
      1 // load up some registers.
      2 // setup up a global pointer table and load some state.
      3 // save the machine state and clear some of the values.
      4 // then restore and assert some of the values to ensure that
      5 // we maintain consitent machine state.
      6 # mach: bfin
      7 
      8 
      9 .include "testutils.inc"
     10 	start
     11 
     12 	R0 = 1;
     13 	R1 = 2;
     14 	R2 = 3;
     15 	R3 = -7;
     16 	R4 = 4;
     17 	R5 = 5;
     18 	R6 = 6;
     19 	R7 = 7;
     20 
     21 	loadsym P0, a;
     22 	P1.L = 0x1000;
     23 //DBG P0;
     24 //DBG P1;
     25 	SP = P0;
     26 	FP = P0;
     27 
     28 	CALL try;
     29 
     30 	P1 = [ P0 ++ ];
     31 	P2 = [ P0 ++ ];
     32 	P0 += 4;
     33 	P4 = [ P0 ++ ];
     34 	P5 = [ P0 ++ ];
     35 // DBG;
     36 	[ -- SP ] = ( R7:0, P5:0 );
     37 // DBG SP;
     38 // DBG FP;
     39 	R0 = R0 ^ R0;
     40 	R1 = R1 ^ R1;
     41 	R2 = R2 ^ R2;
     42 	R4 = R4 ^ R4;
     43 	R5 = R5 ^ R5;
     44 	R6 = R6 ^ R6;
     45 	R7 = R7 ^ R7;
     46 // DBG;
     47 	( R7:0, P5:0 ) = [ SP ++ ];
     48 	DBGA ( R0.L , 1 );
     49 	DBGA ( R1.L , 2 );
     50 	DBGA ( R2.L , 3 );
     51 	DBGA ( R3.L , 0xfff9 );
     52 	DBGA ( R4.L , 4 );
     53 	DBGA ( R5.L , 5 );
     54 	DBGA ( R6.L , 6 );
     55 	DBGA ( R7.L , 7 );
     56 
     57 	R0 = SP;
     58 	loadsym R1, a;
     59 	CC = R0 == R1;
     60 	IF !CC JUMP abrt;
     61 	R0 = FP;
     62 	CC = R0 == R1;
     63 	CC = R0 == R1;
     64 	IF !CC JUMP abrt;
     65 	pass
     66 abrt:
     67 	fail
     68 
     69 try:
     70 	LINK 0;
     71 	[ -- SP ] = R7;
     72 	[ -- SP ] = R0;
     73 	R7 = 0x1234 (X);
     74 	[ -- SP ] = R7;
     75 	CALL bar;
     76 	SP += 4;
     77 	R0 = [ SP ++ ];
     78 	R7 = [ SP ++ ];
     79 	UNLINK;
     80 	RTS;
     81 
     82 bar:
     83 	R0 = [ SP ];
     84 	DBGA ( R0.L , 0x1234 );
     85 	RTS;
     86 
     87 	.data
     88 _gptab:
     89 	.dw 0x200
     90 	.dw 0x000
     91 	.dw 0x300
     92 	.dw 0x400
     93 	.dw 0x500
     94 	.dw 0x600
     95 
     96 	.space (0x100)
     97 a:
     98 	.dw 1
     99 	.dw 2
    100 	.dw 3
    101 	.dw 4
    102 	.dw 5
    103 	.dw 6
    104 	.dw 7
    105 	.dw 8
    106 	.dw 9
    107 	.dw 0xa
    108