2015년 9월 9일 수요일

Register Usage

Visual Studio 2015
The x64 architecture provides for 16 general-purpose registers (hereafter referred to as integer registers) as well as 16 XMM/YMM registers available for floating-point use. Volatile registers are scratch registers presumed by the caller to be destroyed across a call. Nonvolatile registers are required to retain their values across a function call and must be saved by the callee if used.
The following table describes how each register is used across function calls:
Register
Status
Use
RAX
Volatile
Return value register
RCX
Volatile
First integer argument
RDX
Volatile
Second integer argument
R8
Volatile
Third integer argument
R9
Volatile
Fourth integer argument
R10:R11
Volatile
Must be preserved as needed by caller; used in syscall/sysret instructions
R12:R15
Nonvolatile
Must be preserved by callee
RDI
Nonvolatile
Must be preserved by callee
RSI
Nonvolatile
Must be preserved by callee
RBX
Nonvolatile
Must be preserved by callee
RBP
Nonvolatile
May be used as a frame pointer; must be preserved by callee
RSP
Nonvolatile
Stack pointer
XMM0, YMM0
Volatile
First FP argument; first vector-type argument when __vectorcall is used
XMM1, YMM1
Volatile
Second FP argument; second vector-type argument when __vectorcall is used
XMM2, YMM2
Volatile
Third FP argument; third vector-type argument when __vectorcall is used
XMM3, YMM3
Volatile
Fourth FP argument; fourth vector-type argument when __vectorcall is used
XMM4, YMM4
Volatile
Must be preserved as needed by caller; fifth vector-type argument when __vectorcall is used
XMM5, YMM5
Volatile
Must be preserved as needed by caller; sixth vector-type argument when __vectorcall is used
XMM6:XMM15, YMM6:YMM15
Nonvolatile (XMM), Volatile (upper half of YMM)
Must be preserved as needed by callee. YMM registers must be preserved as needed by caller.

댓글 없음:

댓글 쓰기