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}
if (buffer_space() <= kGap) {
GrowBuffer();
}
- if (pc_offset() >= next_buffer_check_) {
- CheckConstPool(false, true);
- }
+ MaybeCheckConstPool();
}
// 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);
void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
ArmOperandConverter i(this, instr);
+ masm()->MaybeCheckConstPool();
+
switch (ArchOpcodeField::decode(instr->opcode())) {
case kArchCallCodeObject: {
EnsureSpaceForLazyDeopt();