summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_arm.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2017-06-15 12:34:36 +0100
committerNicolas Geoffray <ngeoffray@google.com>2017-06-15 14:05:08 +0100
commitf789353025401c1907d2264952a88f253a9af8e7 (patch)
tree9ad4c6a4eed419eb8664fd8aa6b4811d5f259f71 /compiler/optimizing/code_generator_arm.cc
parent1368312bb4772a1c505452f766fdaceef4c48f6e (diff)
Set the deopt flag after adjusting the stack pointer.
One should not write to something below the stack pointer, or it could be overwritten during an interrupt. Test: test.py Change-Id: Ie6c997b9f7548ca5844303d6a3fc0c531f469c6e
Diffstat (limited to 'compiler/optimizing/code_generator_arm.cc')
-rw-r--r--compiler/optimizing/code_generator_arm.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index e4efbef394..0b3ac204ff 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -2521,12 +2521,6 @@ void CodeGeneratorARM::GenerateFrameEntry() {
__ cfi().RelOffsetForMany(DWARFReg(S0), 0, fpu_spill_mask_, kArmWordSize);
}
- if (GetGraph()->HasShouldDeoptimizeFlag()) {
- // Initialize should_deoptimize flag to 0.
- __ mov(IP, ShifterOperand(0));
- __ StoreToOffset(kStoreWord, IP, SP, -kShouldDeoptimizeFlagSize);
- }
-
int adjust = GetFrameSize() - FrameEntrySpillSize();
__ AddConstant(SP, -adjust);
__ cfi().AdjustCFAOffset(adjust);
@@ -2537,6 +2531,12 @@ void CodeGeneratorARM::GenerateFrameEntry() {
if (RequiresCurrentMethod()) {
__ StoreToOffset(kStoreWord, kMethodRegisterArgument, SP, 0);
}
+
+ if (GetGraph()->HasShouldDeoptimizeFlag()) {
+ // Initialize should_deoptimize flag to 0.
+ __ mov(IP, ShifterOperand(0));
+ __ StoreToOffset(kStoreWord, IP, SP, GetStackOffsetOfShouldDeoptimizeFlag());
+ }
}
void CodeGeneratorARM::GenerateFrameExit() {