Chromium Code Reviews| Index: src/arm64/macro-assembler-arm64.h |
| diff --git a/src/arm64/macro-assembler-arm64.h b/src/arm64/macro-assembler-arm64.h |
| index 7d267a2cb0c44478db3399a4f12dc674ee26ccf1..8875dee218484de30ac24adba5504796fbfb2688 100644 |
| --- a/src/arm64/macro-assembler-arm64.h |
| +++ b/src/arm64/macro-assembler-arm64.h |
| @@ -718,10 +718,12 @@ class MacroAssembler : public Assembler { |
| // it can be evidence of a potential bug because the ABI forbids accesses |
| // below csp. |
| // |
| - // If emit_debug_code() is false, this emits no code. |
| + // If StackPointer() is the system stack pointer (csp), or csp_was_modified is |
| + // true and ALWAYS_ALIGN_CSP is enabled, then csp will be dereferenced to |
| + // cause the processor (or simulator) to abort if it is not properly aligned. |
| // |
| - // If StackPointer() is the system stack pointer, this emits no code. |
| - void AssertStackConsistency(); |
| + // If emit_debug_code() is false, this emits no code. |
| + void AssertStackConsistency(bool csp_was_modified); |
|
ulan
2014/05/08 08:18:43
Nit: we usually pass flags as enums with descripti
|
| // Preserve the callee-saved registers (as defined by AAPCS64). |
| // |
| @@ -778,12 +780,22 @@ class MacroAssembler : public Assembler { |
| // |
| // This is necessary when pushing or otherwise adding things to the stack, to |
| // satisfy the AAPCS64 constraint that the memory below the system stack |
| - // pointer is not accessed. |
| + // pointer is not accessed. The amount pushed will be increased as necessary |
| + // to ensure csp remains aligned to 16 bytes. |
| // |
| // This method asserts that StackPointer() is not csp, since the call does |
| // not make sense in that context. |
| inline void BumpSystemStackPointer(const Operand& space); |
| + // Re-synchronizes the system stack pointer (csp) with the current stack |
| + // pointer (according to StackPointer()). This function will ensure the |
| + // new value of the system stack pointer is remains aligned to 16 bytes, and |
| + // is lower than or equal to the value of the current stack pointer. |
| + // |
| + // This method asserts that StackPointer() is not csp, since the call does |
| + // not make sense in that context. |
| + inline void SyncSystemStackPointer(); |
| + |
| // Helpers ------------------------------------------------------------------ |
| // Root register. |
| inline void InitializeRootRegister(); |
| @@ -2020,14 +2032,14 @@ class MacroAssembler : public Assembler { |
| const CPURegister& dst0, const CPURegister& dst1, |
| const CPURegister& dst2, const CPURegister& dst3); |
| - // Perform necessary maintenance operations before a push or pop. |
| + // Perform necessary maintenance operations before a push or after a pop. |
| // |
| // Note that size is specified in bytes. |
| - void PrepareForPush(Operand total_size); |
| - void PrepareForPop(Operand total_size); |
| + void PushPreamble(Operand total_size); |
| + void PopPostamble(Operand total_size); |
| - void PrepareForPush(int count, int size) { PrepareForPush(count * size); } |
| - void PrepareForPop(int count, int size) { PrepareForPop(count * size); } |
| + void PushPreamble(int count, int size) { PushPreamble(count * size); } |
| + void PopPostamble(int count, int size) { PopPostamble(count * size); } |
| // Call Printf. On a native build, a simple call will be generated, but if the |
| // simulator is being used then a suitable pseudo-instruction is used. The |