// setup a dummy stack and put values in memory 0,1,2,3...n // then restore registers with pop instruction. # mach: bfin .include "testutils.inc" start SP += -12; P1 = SP; R1 = 0; P5.L = 0xdead; SP += -((8+5)*4); // lets move the stack pointer and include the current location. i.e. 5 P4 = (8+6); // 8 data registers and 6 pointer registers are being stored. LSETUP ( ls0 , le0 ) LC0 = P4; ls0: R1 += 1; le0: [ P1-- ] = R1; ( R7:0, P5:0 ) = [ SP ++ ]; DBGA ( R0.L , 1 ); DBGA ( R1.L , 2 ); DBGA ( R2.L , 3 ); DBGA ( R3.L , 4 ); DBGA ( R4.L , 5 ); DBGA ( R5.L , 6 ); DBGA ( R6.L , 7 ); DBGA ( R7.L , 8 ); R0 = P0; DBGA ( R0.L , 9 ); R0 = P1; DBGA ( R0.L , 10 ); R0 = P2; DBGA ( R0.L , 11 ); R0 = P3; DBGA ( R0.L , 12 ); R0 = P4; DBGA ( R0.L , 13 ); R0 = P5; DBGA ( R0.L , 14 ); R0 = 1; [ -- SP ] = ( R7:0, P5:0 ); ( R7:0, P5:0 ) = [ SP ++ ]; DBGA ( R0.L , 1 ); DBGA ( R1.L , 2 ); DBGA ( R2.L , 3 ); DBGA ( R3.L , 4 ); DBGA ( R4.L , 5 ); DBGA ( R5.L , 6 ); DBGA ( R6.L , 7 ); DBGA ( R7.L , 8 ); R0 = P0; DBGA ( R0.L , 9 ); R0 = P1; DBGA ( R0.L , 10 ); R0 = P2; DBGA ( R0.L , 11 ); R0 = P3; DBGA ( R0.L , 12 ); R0 = P4; DBGA ( R0.L , 13 ); R0 = P5; DBGA ( R0.L , 14 ); R0 = 1; pass