From 5c4ad70ed7bcc178122d02f75f136841a329f16e Mon Sep 17 00:00:00 2001 From: Bruce Forstall Date: Wed, 3 Apr 2019 23:23:39 -0700 Subject: WIP Fix ARM32/ARM64 large frame stack probing --- src/jit/compiler.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/jit/compiler.h') diff --git a/src/jit/compiler.h b/src/jit/compiler.h index 400e61b1f3..24153d6f51 100644 --- a/src/jit/compiler.h +++ b/src/jit/compiler.h @@ -10491,11 +10491,14 @@ extern const BYTE genActualTypes[]; // VERY_LARGE_FRAME_SIZE_REG_MASK is the set of registers we need to use for // the probing loop generated for very large stack frames (see `getVeryLargeFrameSize`). +// We only use this to ensure that if we need to reserve a callee-saved register, +// it will be reserved. For ARM32, only R12 and LR are non-callee-saved, non-argument +// registers, so we save at least one more callee-saved register. For ARM64, however, +// we already know we have at least three non-callee-saved, non-argument integer registers, +// so we don't need to save any more. #ifdef _TARGET_ARM_ -#define VERY_LARGE_FRAME_SIZE_REG_MASK (RBM_R4 | RBM_R5 | RBM_R6) -#elif defined(_TARGET_ARM64_) -#define VERY_LARGE_FRAME_SIZE_REG_MASK (RBM_R9 | RBM_R10 | RBM_R11) +#define VERY_LARGE_FRAME_SIZE_REG_MASK (RBM_R4) #endif /*****************************************************************************/ -- cgit v1.2.3