summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authorcomex <comexk@gmail.com>2013-10-04 15:26:20 -0400
committercomex <comexk@gmail.com>2013-10-04 15:48:06 -0400
commit3679f9ba60b6d833b710faf41bc9feef607429d2 (patch)
tree40e67bbabc29f4fcc5a65bcff911af1a1637fba8 /Source/Core/Common
parenta91469ffa5e9cf1e3a9b966a4c3b8ddee96966a5 (diff)
Don't push registers before pairedStoreQuantized, that's dumb.
And fix some stuff up. It would probably be good to unify the stack handling some more rather than having ABI_PushRegistersAndAdjustStack do part of it and ABI_AlignStack the rest, causing unnecessary subtract instructions on Linux x86 (only).
Diffstat (limited to 'Source/Core/Common')
-rw-r--r--Source/Core/Common/Src/x64ABI.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/Source/Core/Common/Src/x64ABI.h b/Source/Core/Common/Src/x64ABI.h
index 837e4ec3d8..4b10d11e54 100644
--- a/Source/Core/Common/Src/x64ABI.h
+++ b/Source/Core/Common/Src/x64ABI.h
@@ -43,6 +43,8 @@
// 32-bit bog standard cdecl, shared between linux and windows
// MacOSX 32-bit is same as System V with a few exceptions that we probably don't care much about.
+#define ALL_CALLEE_SAVED ((1 << EAX) | (1 << ECX) | (1 << EDX))
+
#else // 64 bit calling convention
#ifdef _WIN32 // 64-bit Windows - the really exotic calling convention
@@ -52,7 +54,12 @@
#define ABI_PARAM3 R8
#define ABI_PARAM4 R9
-#else //64-bit Unix (hopefully MacOSX too)
+#define ABI_ALL_CALLEE_SAVED ((1 << RAX) | (1 << RCX) | (1 << RDX) | (1 << R8) | \
+ (1 << R9) | (1 << R10) | (1 << R11) | \
+ (1 << XMM0) | (1 << XMM1) | (1 << XMM2) | (1 << XMM3) | \
+ (1 << XMM4) | (1 << XMM5))
+
+#else //64-bit Unix / OS X
#define ABI_PARAM1 RDI
#define ABI_PARAM2 RSI
@@ -61,6 +68,10 @@
#define ABI_PARAM5 R8
#define ABI_PARAM6 R9
+#define ABI_ALL_CALLEE_SAVED ((1 << RAX) | (1 << RCX) | (1 << RDX) | (1 << RDI) | \
+ (1 << RSI) | (1 << R8) | (1 << R9) | (1 << R10) | (1 << R11) | \
+ 0xffff0000 /* xmm0..15 */)
+
#endif // WIN32
#endif // X86