From: bmeurer Date: Mon, 13 Jul 2015 05:26:42 +0000 (-0700) Subject: [arm] CheckConstPool between TurboFan instructions. X-Git-Tag: upstream/4.7.83~1453 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3c9c7748c386d967762116de53e31dd1d24f8627;p=platform%2Fupstream%2Fv8.git [arm] CheckConstPool between TurboFan instructions. Some TurboFan instructions block the literal pool for their entire duration. If a long enough sequence of these instructions is encountered, the literal pool can be blocked until it goes out of range. Patch from issue 1236603002 at patchset 1 (http://crrev.com/1236603002#ps1). BUG=v8:4292 LOG=y R=jarin@chromium.org Review URL: https://codereview.chromium.org/1232343002 Cr-Commit-Position: refs/heads/master@{#29587} --- diff --git a/src/arm/assembler-arm-inl.h b/src/arm/assembler-arm-inl.h index 28a323ab5..4b4e1d320 100644 --- a/src/arm/assembler-arm-inl.h +++ b/src/arm/assembler-arm-inl.h @@ -433,9 +433,7 @@ void Assembler::CheckBuffer() { if (buffer_space() <= kGap) { GrowBuffer(); } - if (pc_offset() >= next_buffer_check_) { - CheckConstPool(false, true); - } + MaybeCheckConstPool(); } diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h index 73c109972..1d09830c5 100644 --- a/src/arm/assembler-arm.h +++ b/src/arm/assembler-arm.h @@ -1492,6 +1492,12 @@ class Assembler : public AssemblerBase { // Check if is time to emit a constant pool. void CheckConstPool(bool force_emit, bool require_jump); + void MaybeCheckConstPool() { + if (pc_offset() >= next_buffer_check_) { + CheckConstPool(false, true); + } + } + int EmitEmbeddedConstantPool() { DCHECK(FLAG_enable_embedded_constant_pool); return constant_pool_builder_.Emit(this); diff --git a/src/compiler/arm/code-generator-arm.cc b/src/compiler/arm/code-generator-arm.cc index 2b6054607..0c97f846f 100644 --- a/src/compiler/arm/code-generator-arm.cc +++ b/src/compiler/arm/code-generator-arm.cc @@ -312,6 +312,8 @@ void CodeGenerator::AssembleDeconstructActivationRecord() { void CodeGenerator::AssembleArchInstruction(Instruction* instr) { ArmOperandConverter i(this, instr); + masm()->MaybeCheckConstPool(); + switch (ArchOpcodeField::decode(instr->opcode())) { case kArchCallCodeObject: { EnsureSpaceForLazyDeopt();