| Index: src/x64/macro-assembler-x64.cc
|
| ===================================================================
|
| --- src/x64/macro-assembler-x64.cc (revision 4427)
|
| +++ src/x64/macro-assembler-x64.cc (working copy)
|
| @@ -291,6 +291,21 @@
|
| }
|
|
|
|
|
| +void MacroAssembler::CheckStackAlignment() {
|
| + int frame_alignment = OS::ActivationFrameAlignment();
|
| + int frame_alignment_mask = frame_alignment - 1;
|
| + if (frame_alignment > kPointerSize) {
|
| + ASSERT(IsPowerOf2(frame_alignment));
|
| + Label alignment_as_expected;
|
| + testq(rsp, Immediate(frame_alignment_mask));
|
| + j(zero, &alignment_as_expected);
|
| + // Abort if stack is not aligned.
|
| + int3();
|
| + bind(&alignment_as_expected);
|
| + }
|
| +}
|
| +
|
| +
|
| void MacroAssembler::NegativeZeroTest(Register result,
|
| Register op,
|
| Label* then_label) {
|
| @@ -2628,6 +2643,11 @@
|
|
|
|
|
| void MacroAssembler::CallCFunction(Register function, int num_arguments) {
|
| + // Check stack alignment.
|
| + if (FLAG_debug_code) {
|
| + CheckStackAlignment();
|
| + }
|
| +
|
| call(function);
|
| ASSERT(OS::ActivationFrameAlignment() != 0);
|
| ASSERT(num_arguments >= 0);
|
|
|