Windows Driver Kit: Kernel-Mode Driver Architecture
Register Usage for x64 64-Bit

The x64 architecture provides for 16 general-purpose registers (also called integer registers) as well as 16 XMM registers available for floating-point use. Volatile registers are scratch registers that the user can assume are destroyed across a call. Nonvolatile registers are required to retain their values across a function call and must be saved by the called function if used. The following table describes how each register is used across function calls.

RegisterStatusUse
RAXVolatileReturn value register.
RCXVolatileFirst integer argument.
RDXVolatileSecond integer argument.
R8VolatileThird integer argument.
R9VolatileFourth integer argument.
R10:R11VolatileMust be preserved as required by caller; used in syscall/sysret instructions.
R12:R15NonvolatileMust be preserved by called function.
RDINonvolatileMust be preserved by called function.
RSINonvolatileMust be preserved by called function.
RBXNonvolatileMust be preserved by called function.
RBPNonvolatileCan be used as a frame pointer. Must be preserved by called function.
RSPNonvolatileStack Pointer.
XMM0VolatileFirst FP argument.
XMM1VolatileSecond FP argument.
XMM2VolatileThird FP argument.
XMM3VolatileFourth FP argument.
XMM4:XMM5VolatileMust be preserved as required by caller.
XMM6:XMM15NonvolatileMust be preserved as required by called function.


Send feedback on this topic
Built on August 05, 2009
Page view tracker