| Index: src/arm/code-stubs-arm.cc
|
| ===================================================================
|
| --- src/arm/code-stubs-arm.cc (revision 6446)
|
| +++ src/arm/code-stubs-arm.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2010 the V8 project authors. All rights reserved.
|
| +// Copyright 2011 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -2557,8 +2557,7 @@
|
| Label* throw_termination_exception,
|
| Label* throw_out_of_memory_exception,
|
| bool do_gc,
|
| - bool always_allocate,
|
| - int frame_alignment_skew) {
|
| + bool always_allocate) {
|
| // r0: result parameter for PerformGC, if any
|
| // r4: number of arguments including receiver (C callee-saved)
|
| // r5: pointer to builtin function (C callee-saved)
|
| @@ -2584,14 +2583,13 @@
|
| __ mov(r0, Operand(r4));
|
| __ mov(r1, Operand(r6));
|
|
|
| +#if defined(V8_HOST_ARCH_ARM)
|
| int frame_alignment = MacroAssembler::ActivationFrameAlignment();
|
| int frame_alignment_mask = frame_alignment - 1;
|
| -#if defined(V8_HOST_ARCH_ARM)
|
| if (FLAG_debug_code) {
|
| if (frame_alignment > kPointerSize) {
|
| Label alignment_as_expected;
|
| ASSERT(IsPowerOf2(frame_alignment));
|
| - __ sub(r2, sp, Operand(frame_alignment_skew));
|
| __ tst(r2, Operand(frame_alignment_mask));
|
| __ b(eq, &alignment_as_expected);
|
| // Don't use Check here, as it will call Runtime_Abort re-entering here.
|
| @@ -2601,36 +2599,21 @@
|
| }
|
| #endif
|
|
|
| - // Just before the call (jump) below lr is pushed, so the actual alignment is
|
| - // adding one to the current skew.
|
| - int alignment_before_call =
|
| - (frame_alignment_skew + kPointerSize) & frame_alignment_mask;
|
| - if (alignment_before_call > 0) {
|
| - // Push until the alignment before the call is met.
|
| - __ mov(r2, Operand(0, RelocInfo::NONE));
|
| - for (int i = alignment_before_call;
|
| - (i & frame_alignment_mask) != 0;
|
| - i += kPointerSize) {
|
| - __ push(r2);
|
| - }
|
| - }
|
| -
|
| // TODO(1242173): To let the GC traverse the return address of the exit
|
| // frames, we need to know where the return address is. Right now,
|
| - // we push it on the stack to be able to find it again, but we never
|
| + // we store it on the stack to be able to find it again, but we never
|
| // restore from it in case of changes, which makes it impossible to
|
| // support moving the C entry code stub. This should be fixed, but currently
|
| // this is OK because the CEntryStub gets generated so early in the V8 boot
|
| // sequence that it is not moving ever.
|
| - masm->add(lr, pc, Operand(4)); // Compute return address: (pc + 8) + 4
|
| - masm->push(lr);
|
| +
|
| + // Compute the return address in lr to return to after the jump below. Pc is
|
| + // already at '+ 8' from the current instruction but return is after three
|
| + // instructions so add another 4 to pc to get the return address.
|
| + masm->add(lr, pc, Operand(4));
|
| + __ str(lr, MemOperand(sp, 0));
|
| masm->Jump(r5);
|
|
|
| - // Restore sp back to before aligning the stack.
|
| - if (alignment_before_call > 0) {
|
| - __ add(sp, sp, Operand(alignment_before_call));
|
| - }
|
| -
|
| if (always_allocate) {
|
| // It's okay to clobber r2 and r3 here. Don't mess with r0 and r1
|
| // though (contain the result).
|
| @@ -2717,8 +2700,7 @@
|
| &throw_termination_exception,
|
| &throw_out_of_memory_exception,
|
| false,
|
| - false,
|
| - -kPointerSize);
|
| + false);
|
|
|
| // Do space-specific GC and retry runtime call.
|
| GenerateCore(masm,
|
| @@ -2726,8 +2708,7 @@
|
| &throw_termination_exception,
|
| &throw_out_of_memory_exception,
|
| true,
|
| - false,
|
| - 0);
|
| + false);
|
|
|
| // Do full GC and retry runtime call one final time.
|
| Failure* failure = Failure::InternalError();
|
| @@ -2737,8 +2718,7 @@
|
| &throw_termination_exception,
|
| &throw_out_of_memory_exception,
|
| true,
|
| - true,
|
| - kPointerSize);
|
| + true);
|
|
|
| __ bind(&throw_out_of_memory_exception);
|
| GenerateThrowUncatchable(masm, OUT_OF_MEMORY);
|
|
|