diff --git a/src/libraries/System.Private.CoreLib/src/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs b/src/libraries/System.Private.CoreLib/src/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs index 3f75953261426..fd4d242463c32 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Buffers/TlsOverPerCoreLockedStacksArrayPool.cs @@ -281,7 +281,7 @@ public bool TryPush(T[] array) // Try to push on to the associated stack first. If that fails, // round-robin through the other stacks. LockedStack[] stacks = _perCoreStacks; - int index = Thread.GetCurrentProcessorId() % stacks.Length; + int index = (int)((uint)Thread.GetCurrentProcessorId() % (uint)s_lockedStackCount); // mod by constant in tier 1 for (int i = 0; i < stacks.Length; i++) { if (stacks[index].TryPush(array)) return true; @@ -298,7 +298,7 @@ public bool TryPush(T[] array) // Try to pop from the associated stack first. If that fails, round-robin through the other stacks. T[]? arr; LockedStack[] stacks = _perCoreStacks; - int index = Thread.GetCurrentProcessorId() % s_lockedStackCount; // when ProcessorCount is a power of two, the JIT can optimize this in tier 1 + int index = (int)((uint)Thread.GetCurrentProcessorId() % (uint)s_lockedStackCount); // mod by constant in tier 1 for (int i = 0; i < stacks.Length; i++) { if ((arr = stacks[index].TryPop()) is not null) return arr;