| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index b6bbe04b33b055445da9c0c2669a704c8724dbfb..6f9d54171bf519d71bdab82aad3cb7c0a49ae9b8 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -4362,9 +4362,15 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
| STATIC_ASSERT((kStringEncodingMask & kOneByteStringTag) != 0);
|
| STATIC_ASSERT((kStringEncodingMask & kTwoByteStringTag) == 0);
|
| __ test(ebx, Immediate(kStringEncodingMask));
|
| - __ j(zero, &two_byte_slice, Label::kNear);
|
| + // Make long jumps when allocations tracking is on due to
|
| + // RecordObjectAllocation inside MacroAssembler::Allocate.
|
| + Label::Distance jump_distance =
|
| + masm->isolate()->heap_profiler()->is_tracking_allocations()
|
| + ? Label::kFar
|
| + : Label::kNear;
|
| + __ j(zero, &two_byte_slice, jump_distance);
|
| __ AllocateAsciiSlicedString(eax, ebx, no_reg, &runtime);
|
| - __ jmp(&set_slice_header, Label::kNear);
|
| + __ jmp(&set_slice_header, jump_distance);
|
| __ bind(&two_byte_slice);
|
| __ AllocateTwoByteSlicedString(eax, ebx, no_reg, &runtime);
|
| __ bind(&set_slice_header);
|
|
|