128 lines
2.3 KiB
ArmAsm
128 lines
2.3 KiB
ArmAsm
|
|
.EXTERN MY_LABEL2;
|
|
.section .text;
|
|
|
|
//
|
|
//5 STACK CONTROL
|
|
//
|
|
|
|
//[ -- SP ] = allreg ; /* predecrement SP (a) */
|
|
|
|
[--SP ] = R0;
|
|
[--SP ] = R6;
|
|
|
|
[--SP ] = P0;
|
|
[--SP ] = P4;
|
|
|
|
[--SP ] = I0;
|
|
[--SP ] = I1;
|
|
|
|
[--SP ] = M0;
|
|
[--SP ] = M1;
|
|
|
|
[--SP ] = L0;
|
|
[--SP ] = L1;
|
|
|
|
[--SP ] = B0;
|
|
[--SP ] = B1;
|
|
|
|
[--SP ] = A0.X;
|
|
[--SP ] = A1.X;
|
|
|
|
[--SP ] = A0.W;
|
|
[--SP ] = A1.W;
|
|
|
|
[--SP ] = ASTAT;
|
|
[--SP ] = RETS;
|
|
[--SP ] = RETI;
|
|
[--SP ] = RETX;
|
|
[--SP ] = RETN;
|
|
[--SP ] = RETE;
|
|
[--SP ] = LC0;
|
|
[--SP ] = LC1;
|
|
[--SP ] = LT0;
|
|
[--SP ] = LT1;
|
|
[--SP ] = LB0;
|
|
[--SP ] = LB1;
|
|
[--SP ] = CYCLES;
|
|
[--SP ] = CYCLES2;
|
|
//[--SP ] = EMUDAT;
|
|
[--SP ] = USP;
|
|
[--SP ] = SEQSTAT;
|
|
[--SP ] = SYSCFG;
|
|
|
|
|
|
//[ -- SP ] = ( R7 : Dreglim , P5 : Preglim ) ; /* Dregs and indexed Pregs (a) */
|
|
[--SP ] = ( R7:0, P5:0);
|
|
|
|
|
|
//[ -- SP ] = ( R7 : Dreglim ) ; /* Dregs, only (a) */
|
|
[--SP ] = ( R7:0);
|
|
|
|
//[ -- SP ] = ( P5 : Preglim ) ; /* indexed Pregs, only (a) */
|
|
[--SP ] = (P5:0);
|
|
|
|
|
|
//mostreg = [ SP ++ ] ; /* post-increment SP; does not apply to Data Registers and Pointer Registers (a) */
|
|
|
|
R0= [ SP ++ ] ;
|
|
R6= [ SP ++ ] ;
|
|
|
|
P0= [ SP ++ ] ;
|
|
P4= [ SP ++ ] ;
|
|
|
|
I0= [ SP ++ ] ;
|
|
I1= [ SP ++ ] ;
|
|
|
|
M0= [ SP ++ ] ;
|
|
M1= [ SP ++ ] ;
|
|
|
|
L0= [ SP ++ ] ;
|
|
L1= [ SP ++ ] ;
|
|
|
|
B0= [ SP ++ ] ;
|
|
B1= [ SP ++ ] ;
|
|
|
|
A0.X= [ SP ++ ] ;
|
|
A1.X= [ SP ++ ] ;
|
|
|
|
A0.W= [ SP ++ ] ;
|
|
A1.W= [ SP ++ ] ;
|
|
|
|
ASTAT= [ SP ++ ] ;
|
|
RETS= [ SP ++ ] ;
|
|
RETI= [ SP ++ ] ;
|
|
RETX= [ SP ++ ] ;
|
|
RETN= [ SP ++ ] ;
|
|
RETE= [ SP ++ ] ;
|
|
LC0= [ SP ++ ] ;
|
|
LC1= [ SP ++ ] ;
|
|
LT0= [ SP ++ ] ;
|
|
LT1= [ SP ++ ] ;
|
|
LB0= [ SP ++ ] ;
|
|
LB1= [ SP ++ ] ;
|
|
CYCLES= [ SP ++ ] ;
|
|
CYCLES2= [ SP ++ ] ;
|
|
//EMUDAT= [ SP ++ ] ;
|
|
USP= [ SP ++ ] ;
|
|
SEQSTAT= [ SP ++ ] ;
|
|
SYSCFG= [ SP ++ ] ;
|
|
|
|
//( R7 : Dreglim, P5 : Preglim ) = [ SP ++ ] ; /* Dregs and indexed Pregs (a) */
|
|
( R7:0, P5:0) = [ SP++ ];
|
|
|
|
//( R7 : Dreglim ) = [ SP ++ ] ; /* Dregs, only (a) */
|
|
( R7:0) = [ SP++ ];
|
|
|
|
//( P5 : Preglim ) = [ SP ++ ] ; /* indexed Pregs, only (a) */
|
|
( P5:0) = [ SP++ ];
|
|
|
|
//LINK uimm18m4 ; /* allocate a stack frame of specified size (b) */
|
|
LINK 0X0;
|
|
LINK 0X8;
|
|
LINK 0x3FFFC;
|
|
|
|
UNLINK ; /* de-allocate the stack frame (b)*/
|
|
|
|
L$L$foo: (R7:6,P5:3) = [SP++]; /* Pop multiple on the same line with a label */
|