--- /dev/null
+// 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