Chromium Code Reviews| 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()); |