diff options
author | Scott Mosier <smosier@microsoft.com> | 2016-02-08 23:44:58 +0300 |
---|---|---|
committer | Scott Mosier <smosier@microsoft.com> | 2016-02-08 23:44:58 +0300 |
commit | e7cf9872439f602b39a320c6ade8c9af6dd2e817 (patch) | |
tree | 140ac9095691a81167d010f81fb4688daf00cae7 /src/Native/Runtime/shash.h | |
parent | cfb63d562045aafa3a81a4834dd457ad60e81ba6 (diff) |
Fix RhpLoopHijack to stop trashing important registers
The loop hijack worker routine is not honoring the contract that it should be. Namely, the runtime is not allowed to trash any registers in our worker (except r12 on ARM). The two big oversights were scratch FP registers and the flags registers.
I have also added a per-module map from loop index to target address (thus requiring all the shash.h includes). This primarily helps gcstress throughput because the loop indirection cell address calculation ends up being surprisingly lengthy. I considered the other obvious approach of "back-patching" the loop indirection cell in the gcstress case (normal loop hijacking does this, but under gcstress, we do not). However, I ended up preferring this because it could help GC suspension latency in normal operation.
[tfs-changeset: 1573401]
Diffstat (limited to 'src/Native/Runtime/shash.h')
-rw-r--r-- | src/Native/Runtime/shash.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/Native/Runtime/shash.h b/src/Native/Runtime/shash.h index eb5b9bab6..93be39adb 100644 --- a/src/Native/Runtime/shash.h +++ b/src/Native/Runtime/shash.h @@ -72,6 +72,7 @@ // disable the "Conditional expression is constant" warning +#pragma warning(push) #pragma warning(disable:4127) @@ -626,6 +627,6 @@ public: }; -// restore "Conditional expression is constant" warning to default value -#pragma warning(default:4127) +// restore "Conditional expression is constant" warning to previous value +#pragma warning(pop) |