diff options
author | Bruce Forstall <brucefo@microsoft.com> | 2019-04-12 13:15:42 -0700 |
---|---|---|
committer | Bruce Forstall <brucefo@microsoft.com> | 2019-04-12 13:22:22 -0700 |
commit | f98564c3382bedf53b65689f5ea1c53942cf6729 (patch) | |
tree | e29012a3dfc1190ce91401a33eb73ff3b0abfd41 /src | |
parent | a6b1e978157278d09247bb82543a21886e087583 (diff) | |
download | coreclr-f98564c3382bedf53b65689f5ea1c53942cf6729.tar.gz coreclr-f98564c3382bedf53b65689f5ea1c53942cf6729.tar.bz2 coreclr-f98564c3382bedf53b65689f5ea1c53942cf6729.zip |
Update maximum allowed arm prolog size
Change #23715 changed the localloc stack probe loop to load a
negative constant instead of zero to start the probing loop.
This increased the size of the probing loop, and hence the
size of the maximum prolog, by 4 bytes. Bump the assert on
the maximum size to match.
Note that as the comment says, the maximum size there is not
actually a maximum (it was originally), it is just to alert
us when the maximum generated prolog size has gone up.
Fixes #23920
Diffstat (limited to 'src')
-rw-r--r-- | src/jit/codegenarmarch.cpp | 4 | ||||
-rw-r--r-- | src/jit/unwind.h | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/jit/codegenarmarch.cpp b/src/jit/codegenarmarch.cpp index 55b3f0a7ba..add7b9867d 100644 --- a/src/jit/codegenarmarch.cpp +++ b/src/jit/codegenarmarch.cpp @@ -3849,7 +3849,9 @@ void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pIni // Generate: // - // mov rOffset, -pageSize + // mov rOffset, -pageSize // On arm, this turns out to be "movw r1, 0xf000; sxth r1, r1". + // // We could save 4 bytes in the prolog by using "movs r1, 0" at the + // // runtime expense of running a useless first loop iteration. // mov rLimit, -frameSize // loop: // ldr rTemp, [sp + rOffset] // rTemp = wzr on ARM64 diff --git a/src/jit/unwind.h b/src/jit/unwind.h index a78df32f1f..06396f2a9a 100644 --- a/src/jit/unwind.h +++ b/src/jit/unwind.h @@ -20,8 +20,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // You can increase this "max" number if necessary. #if defined(_TARGET_ARM_) -const unsigned MAX_PROLOG_SIZE_BYTES = 40; -const unsigned MAX_EPILOG_SIZE_BYTES = 40; +const unsigned MAX_PROLOG_SIZE_BYTES = 44; +const unsigned MAX_EPILOG_SIZE_BYTES = 44; #define UWC_END 0xFF // "end" unwind code #define UW_MAX_FRAGMENT_SIZE_BYTES (1U << 19) #define UW_MAX_CODE_WORDS_COUNT 15 // Max number that can be encoded in the "Code Words" field of the .pdata record |