diff options
| author | 2017-06-15 14:41:37 +0000 | |
|---|---|---|
| committer | 2017-06-15 14:41:39 +0000 | |
| commit | 718ec6e04614a844e6383df95137629fb0698f5c (patch) | |
| tree | 99cfb010f005bf79cfad10db65e39ec06799169d | |
| parent | c51d94b2c9322197b2691765a05a979b500f2317 (diff) | |
| parent | f789353025401c1907d2264952a88f253a9af8e7 (diff) | |
Merge "Set the deopt flag after adjusting the stack pointer."
| -rw-r--r-- | compiler/optimizing/code_generator_arm.cc | 12 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_arm_vixl.cc | 16 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 10 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 11 |
4 files changed, 24 insertions, 25 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() { diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc index c6bd871bc5..a8b00c358b 100644 --- a/compiler/optimizing/code_generator_arm_vixl.cc +++ b/compiler/optimizing/code_generator_arm_vixl.cc @@ -2659,14 +2659,6 @@ void CodeGeneratorARMVIXL::GenerateFrameEntry() { GetAssembler()->cfi().RelOffsetForMany(DWARFReg(s0), 0, fpu_spill_mask_, kArmWordSize); } - if (GetGraph()->HasShouldDeoptimizeFlag()) { - UseScratchRegisterScope temps(GetVIXLAssembler()); - vixl32::Register temp = temps.Acquire(); - // Initialize should_deoptimize flag to 0. - __ Mov(temp, 0); - GetAssembler()->StoreToOffset(kStoreWord, temp, sp, -kShouldDeoptimizeFlagSize); - } - int adjust = GetFrameSize() - FrameEntrySpillSize(); __ Sub(sp, sp, adjust); GetAssembler()->cfi().AdjustCFAOffset(adjust); @@ -2677,6 +2669,14 @@ void CodeGeneratorARMVIXL::GenerateFrameEntry() { if (RequiresCurrentMethod()) { GetAssembler()->StoreToOffset(kStoreWord, kMethodRegister, sp, 0); } + + if (GetGraph()->HasShouldDeoptimizeFlag()) { + UseScratchRegisterScope temps(GetVIXLAssembler()); + vixl32::Register temp = temps.Acquire(); + // Initialize should_deoptimize flag to 0. + __ Mov(temp, 0); + GetAssembler()->StoreToOffset(kStoreWord, temp, sp, GetStackOffsetOfShouldDeoptimizeFlag()); + } } void CodeGeneratorARMVIXL::GenerateFrameExit() { diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc index 83a261d334..79fccfeaef 100644 --- a/compiler/optimizing/code_generator_x86.cc +++ b/compiler/optimizing/code_generator_x86.cc @@ -1086,11 +1086,6 @@ void CodeGeneratorX86::GenerateFrameEntry() { } } - if (GetGraph()->HasShouldDeoptimizeFlag()) { - // Initialize should_deoptimize flag to 0. - __ movl(Address(ESP, -kShouldDeoptimizeFlagSize), Immediate(0)); - } - int adjust = GetFrameSize() - FrameEntrySpillSize(); __ subl(ESP, Immediate(adjust)); __ cfi().AdjustCFAOffset(adjust); @@ -1100,6 +1095,11 @@ void CodeGeneratorX86::GenerateFrameEntry() { if (RequiresCurrentMethod()) { __ movl(Address(ESP, kCurrentMethodStackOffset), kMethodRegisterArgument); } + + if (GetGraph()->HasShouldDeoptimizeFlag()) { + // Initialize should_deoptimize flag to 0. + __ movl(Address(ESP, GetStackOffsetOfShouldDeoptimizeFlag()), Immediate(0)); + } } void CodeGeneratorX86::GenerateFrameExit() { diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index 7331a9e98e..57319ce735 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -1298,12 +1298,6 @@ void CodeGeneratorX86_64::GenerateFrameEntry() { } } - if (GetGraph()->HasShouldDeoptimizeFlag()) { - // Initialize should_deoptimize flag to 0. - __ movl(Address(CpuRegister(RSP), xmm_spill_location - kShouldDeoptimizeFlagSize), - Immediate(0)); - } - // Save the current method if we need it. Note that we do not // do this in HCurrentMethod, as the instruction might have been removed // in the SSA graph. @@ -1311,6 +1305,11 @@ void CodeGeneratorX86_64::GenerateFrameEntry() { __ movq(Address(CpuRegister(RSP), kCurrentMethodStackOffset), CpuRegister(kMethodRegisterArgument)); } + + if (GetGraph()->HasShouldDeoptimizeFlag()) { + // Initialize should_deoptimize flag to 0. + __ movl(Address(CpuRegister(RSP), GetStackOffsetOfShouldDeoptimizeFlag()), Immediate(0)); + } } void CodeGeneratorX86_64::GenerateFrameExit() { |