Index: src/arm64/macro-assembler-arm64.cc |
diff --git a/src/arm64/macro-assembler-arm64.cc b/src/arm64/macro-assembler-arm64.cc |
index 0b2954e18f54ee9b78eeb5b6ff3a517e62b5876e..1c59128dd4ca92b83ed0d55ec141521d92873e61 100644 |
--- a/src/arm64/macro-assembler-arm64.cc |
+++ b/src/arm64/macro-assembler-arm64.cc |
@@ -800,13 +800,6 @@ void MacroAssembler::Pop(const CPURegister& dst0, const CPURegister& dst1, |
PrepareForPop(count, size); |
PopHelper(count, size, dst0, dst1, dst2, dst3); |
- |
- if (!csp.Is(StackPointer()) && emit_debug_code()) { |
- // It is safe to leave csp where it is when unwinding the JavaScript stack, |
- // but if we keep it matching StackPointer, the simulator can detect memory |
- // accesses in the now-free part of the stack. |
- Mov(csp, StackPointer()); |
jbramley
2014/05/01 15:17:10
It would be better to leave this here (or replace
rmcilroy
2014/05/01 18:29:11
I see what you mean, but actually, looking at it a
|
- } |
} |
@@ -895,13 +888,6 @@ void MacroAssembler::PopCPURegList(CPURegList registers) { |
int count = count_before - registers.Count(); |
PopHelper(count, size, dst0, dst1, dst2, dst3); |
} |
- |
- if (!csp.Is(StackPointer()) && emit_debug_code()) { |
- // It is safe to leave csp where it is when unwinding the JavaScript stack, |
- // but if we keep it matching StackPointer, the simulator can detect memory |
- // accesses in the now-free part of the stack. |
- Mov(csp, StackPointer()); |
- } |
} |
@@ -1104,6 +1090,11 @@ void MacroAssembler::PrepareForPop(Operand total_size) { |
// Don't check access size for non-immediate sizes. It's difficult to do |
// well, and it will be caught by hardware (or the simulator) anyway. |
+ } else if (emit_debug_code()) { |
+ // It is safe to leave csp where it is when unwinding the JavaScript stack, |
+ // but if we keep it matching StackPointer, the simulator can detect memory |
+ // accesses in the now-free part of the stack. |
+ SyncSystemStackPointer(); |
} |
} |
@@ -1200,12 +1191,12 @@ void MacroAssembler::PopCalleeSavedRegisters() { |
void MacroAssembler::AssertStackConsistency() { |
if (emit_debug_code()) { |
- if (csp.Is(StackPointer())) { |
- // We can't check the alignment of csp without using a scratch register |
- // (or clobbering the flags), but the processor (or simulator) will abort |
- // if it is not properly aligned during a load. |
- ldr(xzr, MemOperand(csp, 0)); |
- } else if (FLAG_enable_slow_asserts) { |
+ // Always check the alignment of csp since it could have been bumped even if |
+ // it is not the stack pointer. We can't check the alignment of csp without |
+ // using a scratch register (or clobbering the flags), but the processor |
+ // (or simulator) will abort if it is not properly aligned during a load. |
+ ldr(xzr, MemOperand(csp, 0)); |
+ if (FLAG_enable_slow_asserts && !csp.Is(StackPointer())) { |
Label ok; |
// Check that csp <= StackPointer(), preserving all registers and NZCV. |
sub(StackPointer(), csp, StackPointer()); |