Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index 1bdfda992e1e60e2a428d2aa1dd8b2300fe3e632..7e6b63c56143ca9680820ccb16fa551dfc48036e 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -4226,9 +4226,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); |