Procedure Calling Convention on Alpha

The Alpha version of the compiler uses a different procedure calling convention than the x86 version. The Alpha calling convention is a register-based convention that frequently uses argument registers in cases where the x86 version of the compiler would place all arguments on a stack frame. There are six integer argument registers and six floating-point argument registers on Alpha. Consequently, code that assumes that an argument is on the stack is likely to fail. Additionally, note that using a unified calling standard precludes the use of _ _declspec (naked).

All differences in the calling conventions are resolved at the C/C++ source code level, as long as you do not make assumptions about how arguments are located on the stack or in memory. Code written to optimize handling of variable argument lists sometimes makes such assumptions by using direct manipulation through pointers. The section Handling Variable Argument Lists discusses safe, portable approaches to variable argument lists.