Chromium Code Reviews| Index: src/arm/code-stubs-arm.cc |
| =================================================================== |
| --- src/arm/code-stubs-arm.cc (revision 6435) |
| +++ 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,17 @@ |
| } |
| #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 |
|
Mads Ager (chromium)
2011/01/24 18:21:08
You haven't changed this, but where is the '+ 8'?
Søren Thygesen Gjesse
2011/01/25 07:48:39
The '+ 8' refers to that the pc is already at '+ 8
|
| - masm->push(lr); |
| + __ 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 +2696,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 +2704,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 +2714,7 @@ |
| &throw_termination_exception, |
| &throw_out_of_memory_exception, |
| true, |
| - true, |
| - kPointerSize); |
| + true); |
| __ bind(&throw_out_of_memory_exception); |
| GenerateThrowUncatchable(masm, OUT_OF_MEMORY); |