summaryrefslogtreecommitdiff
path: root/src/jit/target.h
diff options
context:
space:
mode:
authorsivarv <sivarv@microsoft.com>2016-04-20 16:36:53 -0700
committersivarv <sivarv@microsoft.com>2016-04-20 16:40:19 -0700
commit8e01e2a7a1c78a69ef1667a8c1cf675ca5f31a43 (patch)
tree71d7e6095156ec89f652bd3fe9db188032975aca /src/jit/target.h
parent1a89827d6ce553d793ffc0787129b07df0047457 (diff)
downloadcoreclr-8e01e2a7a1c78a69ef1667a8c1cf675ca5f31a43.tar.gz
coreclr-8e01e2a7a1c78a69ef1667a8c1cf675ca5f31a43.tar.bz2
coreclr-8e01e2a7a1c78a69ef1667a8c1cf675ca5f31a43.zip
Model kill set of CORINFO_HELP_STOP_FOR_GC correctly on unix.
Diffstat (limited to 'src/jit/target.h')
-rw-r--r--src/jit/target.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/jit/target.h b/src/jit/target.h
index 88ad1b0bb9..fdc1c92b57 100644
--- a/src/jit/target.h
+++ b/src/jit/target.h
@@ -1081,9 +1081,18 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
#define RBM_PROFILER_ENTER_TRASH RBM_CALLEE_TRASH
#define RBM_PROFILER_LEAVE_TRASH (RBM_CALLEE_TRASH & ~(RBM_FLOATRET | RBM_INTRET))
- // The registers trashed by the CORINFO_HELP_STOP_FOR_GC helper
- // See vm\amd64\amshelpers.asm for more details.
+ // The registers trashed by the CORINFO_HELP_STOP_FOR_GC helper.
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ // See vm\amd64\unixasmhelpers.S for more details.
+ //
+ // On Unix a struct of size >=9 and <=16 bytes in size is returned in two return registers.
+ // The return registers could be any two from the set { RAX, RDX, XMM0, XMM1 }.
+ // STOP_FOR_GC helper preserves all the 4 possible return registers.
+ #define RBM_STOP_FOR_GC_TRASH (RBM_CALLEE_TRASH & ~(RBM_FLOATRET | RBM_INTRET | RBM_FLOATRET_1 | RBM_INTRET_1))
+#else
+ // See vm\amd64\asmhelpers.asm for more details.
#define RBM_STOP_FOR_GC_TRASH (RBM_CALLEE_TRASH & ~(RBM_FLOATRET | RBM_INTRET))
+#endif
// What sort of reloc do we use for [disp32] address mode
#define IMAGE_REL_BASED_DISP32 IMAGE_REL_BASED_REL32