What's New for the ARM Compiler

The ARM Procedure Calling Standard differs from the ARM Calling Sequence Specification for Windows CE .NET in the following ways:

  • Windows CE .NET Compiler uses R9 and R10 as called function saved registers, and not as a static base and a stack limit register.
  • The ARM compiler saves register arguments in the called function stack frame after the stack, link register, frame, and permanent registers, and passes additional arguments beginning at the start of the calling function's stack frame. This allows saving all the registers with one instruction in the prolog, but the resulting stack cannot support varargs as mentioned; arguments must be stored differently when varargs is used or when structures need to be passed partially in registers.
  • The ARM compiler uses a frame pointer by default and pushes outgoing arguments on the stack frame. Except when alloca and SEH are used, CLARM and CLTHUMB use a fixed stack and no frame pointer, and arguments are not pushed.

ARM's compiler returns some 4-byte structures in R0. CLARM and CLTHUMB always return structures in the calling function's stack space to which the first argument points.

See Also

ARM Calling Sequence Specification | What's New for the ARM Compiler | ARM Registers | ARM Stack Frame Layout | ARM Parameter Passing | ARM Return Values | ARM Prolog and Epilog | ARM pdata Structures | ARM Assembler Macros

 Last updated on Thursday, April 08, 2004

© 1992-2003 Microsoft Corporation. All rights reserved.