| Index: src/x64/code-stubs-x64.cc
|
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
|
| index 8f27374af5f156b9c6e85ef2f6622f4fd0821ec2..f85600f8a9703342d14daeb579b4d43e14b007b1 100644
|
| --- a/src/x64/code-stubs-x64.cc
|
| +++ b/src/x64/code-stubs-x64.cc
|
| @@ -4941,9 +4941,15 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
| STATIC_ASSERT((kStringEncodingMask & kOneByteStringTag) != 0);
|
| STATIC_ASSERT((kStringEncodingMask & kTwoByteStringTag) == 0);
|
| __ testb(rbx, 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(rax, rbx, r14, &runtime);
|
| - __ jmp(&set_slice_header, Label::kNear);
|
| + __ jmp(&set_slice_header, jump_distance);
|
| __ bind(&two_byte_slice);
|
| __ AllocateTwoByteSlicedString(rax, rbx, r14, &runtime);
|
| __ bind(&set_slice_header);
|
|
|