diff options
author | Sean Gillespie <sean@swgillespie.me> | 2017-03-16 17:18:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-16 17:18:28 -0700 |
commit | 1b827b5a82f8c6f8a9ed760ee127938dea5a7ea4 (patch) | |
tree | 6187e2b2fb4e7858b39298cf60afcc2f838dcdd1 /src/vm/jithelpers.cpp | |
parent | 54368dad5842089ed7b6a444fa50116d2c0a0b09 (diff) | |
download | coreclr-1b827b5a82f8c6f8a9ed760ee127938dea5a7ea4.tar.gz coreclr-1b827b5a82f8c6f8a9ed760ee127938dea5a7ea4.tar.bz2 coreclr-1b827b5a82f8c6f8a9ed760ee127938dea5a7ea4.zip |
[Local GC] Break EE dependency on GC's generation table and alloc lock in single-proc scenarios (#10065)
* Remove usage of the generation table from the EE by introducing an
EE-owned GC alloc context used for allocations on single-proc machines.
* Move the GC alloc lock to the EE side of the interface
* Repair the Windows ARM build
* Move the decision to use per-thread alloc contexts to the EE
* Rename the lock used by StartNoGCRegion and EndNoGCRegion to be more indicative of what it is protecting
* Address code review feedback 2 (enumerate the global alloc context as a part of GCToEEInterface)
* Code review feedback (3)
* Address code review feedback (move some GC-internal globals to gcimpl.h and gc.cpp)
* g_global_alloc_lock is a dword, not a qword - fixes a deadlock
* Move GlobalAllocLock to gchelpers.cpp and switch to preemptive mode when spinning
* Repair the Windows x86 build
Diffstat (limited to 'src/vm/jithelpers.cpp')
-rw-r--r-- | src/vm/jithelpers.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/vm/jithelpers.cpp b/src/vm/jithelpers.cpp index b46ac98ba5..aaab58963b 100644 --- a/src/vm/jithelpers.cpp +++ b/src/vm/jithelpers.cpp @@ -2752,7 +2752,7 @@ HCIMPL1(Object*, JIT_NewS_MP_FastPortable, CORINFO_CLASS_HANDLE typeHnd_) do { - _ASSERTE(GCHeapUtilities::UseAllocationContexts()); + _ASSERTE(GCHeapUtilities::UseThreadAllocationContexts()); // This is typically the only call in the fast path. Making the call early seems to be better, as it allows the compiler // to use volatile registers for intermediate values. This reduces the number of push/pop instructions and eliminates @@ -2844,7 +2844,7 @@ HCIMPL1(StringObject*, AllocateString_MP_FastPortable, DWORD stringLength) do { - _ASSERTE(GCHeapUtilities::UseAllocationContexts()); + _ASSERTE(GCHeapUtilities::UseThreadAllocationContexts()); // Instead of doing elaborate overflow checks, we just limit the number of elements. This will avoid all overflow // problems, as well as making sure big string objects are correctly allocated in the big object heap. @@ -3008,7 +3008,7 @@ HCIMPL2(Object*, JIT_NewArr1VC_MP_FastPortable, CORINFO_CLASS_HANDLE arrayTypeHn do { - _ASSERTE(GCHeapUtilities::UseAllocationContexts()); + _ASSERTE(GCHeapUtilities::UseThreadAllocationContexts()); // Do a conservative check here. This is to avoid overflow while doing the calculations. We don't // have to worry about "large" objects, since the allocation quantum is never big enough for @@ -3085,7 +3085,7 @@ HCIMPL2(Object*, JIT_NewArr1OBJ_MP_FastPortable, CORINFO_CLASS_HANDLE arrayTypeH do { - _ASSERTE(GCHeapUtilities::UseAllocationContexts()); + _ASSERTE(GCHeapUtilities::UseThreadAllocationContexts()); // Make sure that the total size cannot reach LARGE_OBJECT_SIZE, which also allows us to avoid overflow checks. The // "256" slack is to cover the array header size and round-up, using a constant value here out of laziness. |