Keil™, An ARM® Company

C166 User's Guide

SAVEUSR Compiler Directive

Abbreviation None.
Arguments None.
Default SAVESYS
µVision Options — C166 — Save Temporary Variables on User Stack.
Description 

The SAVEUSR directive instructs the C166 Compiler to save temporary results and saved-by-callee variables on the user stack. This option may be necessary if you run out of system stack space. The system stack is always located in on-chip RAM, which is faster than external RAM but is limited in size.

See Also SAVESYS
Example 
  1    extern void func (void);
  2
  3    #pragma SAVESYS // Save to SYS STACK (default)
  4    int func1 (int i1, int i2)  {
  5 1    func ();
  6 1    return (i1 + i2);
  7 1  }
  8
  9
 10    #pragma SAVEUSR // Save to USER STACK
 11    int func2 (int i1, int i2)  {
 12 1    func ();
 13 1    return (i1 + i2);
 14 1  }

ASSEMBLY LISTING OF GENERATED OBJECT CODE
	; FUNCTION func1 (BEGIN  RMASK = @0x7FFF)
			; SOURCE LINE # 4
0000 ECFD          PUSH    R13
0002 ECFE          PUSH    R14
0004 F0D9          MOV     R13,R9
;---- Variable 'i2' assigned to Register 'R13' ----
0006 F0E8          MOV     R14,R8
;---- Variable 'i1' assigned to Register 'R14' ----
		; SOURCE LINE # 5
0008 CA000000 E    CALLA   cc_UC,func
		; SOURCE LINE # 6
000C F04E          MOV     R4,R14
000E 004D          ADD     R4,R13
		; SOURCE LINE # 7
0010 FCFE          POP     R14
0012 FCFD          POP     R13
0014 CB00          RET
	; FUNCTION func1 (END    RMASK = @0x7FFF)

	; FUNCTION func2 (BEGIN  RMASK = @0x7FFF)
		; SOURCE LINE # 11
0016 88D0          MOV     [-R0],R13
0018 88E0          MOV     [-R0],R14
001A F0D9          MOV     R13,R9
;---- Variable 'i2' assigned to Register 'R13' ----
001C F0E8          MOV     R14,R8
;---- Variable 'i1' assigned to Register 'R14' ----
		; SOURCE LINE # 12
001E CA000000 E    CALLA   cc_UC,func
		; SOURCE LINE # 13
0022 F04E          MOV     R4,R14
0024 004D          ADD     R4,R13
		; SOURCE LINE # 14
0026 98E0          MOV     R14,[R0+]
0028 98D0          MOV     R13,[R0+]
002A CB00          RET
	; FUNCTION func2 (END    RMASK = @0x7FFF)