summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Forstall <brucefo@microsoft.com>2019-04-12 13:15:42 -0700
committerBruce Forstall <brucefo@microsoft.com>2019-04-12 13:22:22 -0700
commitf98564c3382bedf53b65689f5ea1c53942cf6729 (patch)
treee29012a3dfc1190ce91401a33eb73ff3b0abfd41 /src
parenta6b1e978157278d09247bb82543a21886e087583 (diff)
downloadcoreclr-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.cpp4
-rw-r--r--src/jit/unwind.h4
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