Click to Rate and Give Feedback
MSDN
MSDN Library
Visual Studio 2008
Visual Studio
Visual C++
 Register Usage

  Switch on low bandwidth view
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
Visual C++
Register Usage

The x64 architecture provides for 16 general-purpose registers (hereafter referred to as integer registers) as well as 16 XMM 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

Volatile

First FP argument

XMM1

Volatile

Second FP argument

XMM2

Volatile

Third FP argument

XMM3

Volatile

Fourth FP argument

XMM4:XMM5

Volatile

Must be preserved as needed by caller

XMM6:XMM15

Nonvolatile

Must be preserved as needed by callee.

Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Page view tracker