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 66abrt: 67 fail 68 69try: 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 82bar: 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) 97a: 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