Skip to content
Discussion options

You must be logged in to vote

Every platform has an Application Binary Interface (ABI) and that dictates which registers are callee vs caller save.

On Windows x64, XMM0-XMM5 are considered volatile across a call boundary and so must be preserved by the caller if the value needs to be saved. XMM6-XMM15 however are considered non-volatile and must be preserved by the callee if they are used. The upper bits of these registers are all volatile and must be preserved by the caller. On Unix x64, there are no non-volatile registers and all of XMM0-XMM15 are considered caller save.

When you use more than the number of volatile (caller save) registers, then the method needs to spill the non-volatile (callee save) values. Invers…

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@MadProbe
Comment options

Answer selected by MadProbe
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants