| Index: src/arm/regexp-macro-assembler-arm.cc
|
| ===================================================================
|
| --- src/arm/regexp-macro-assembler-arm.cc (revision 4372)
|
| +++ src/arm/regexp-macro-assembler-arm.cc (working copy)
|
| @@ -163,7 +163,7 @@
|
| CheckPreemption();
|
| // Pop Code* offset from backtrack stack, add Code* and jump to location.
|
| Pop(r0);
|
| - __ add(pc, r0, Operand(r5));
|
| + __ add(pc, r0, Operand(code_pointer()));
|
| }
|
|
|
|
|
| @@ -338,7 +338,7 @@
|
| } else {
|
| ASSERT(mode_ == UC16);
|
| int argument_count = 3;
|
| - FrameAlign(argument_count, r2);
|
| + __ PrepareCallCFunction(argument_count, r2);
|
|
|
| // r0 - offset of start of capture
|
| // r1 - length of capture
|
| @@ -360,7 +360,7 @@
|
|
|
| ExternalReference function =
|
| ExternalReference::re_case_insensitive_compare_uc16();
|
| - CallCFunction(function, argument_count);
|
| + __ CallCFunction(function, argument_count);
|
|
|
| // Check if function returned non-zero for success or zero for failure.
|
| __ cmp(r0, Operand(0));
|
| @@ -770,12 +770,12 @@
|
|
|
| // Call GrowStack(backtrack_stackpointer())
|
| static const int num_arguments = 2;
|
| - FrameAlign(num_arguments, r0);
|
| + __ PrepareCallCFunction(num_arguments, r0);
|
| __ mov(r0, backtrack_stackpointer());
|
| __ add(r1, frame_pointer(), Operand(kStackHighEnd));
|
| ExternalReference grow_stack =
|
| ExternalReference::re_grow_stack();
|
| - CallCFunction(grow_stack, num_arguments);
|
| + __ CallCFunction(grow_stack, num_arguments);
|
| // If return NULL, we have failed to grow the stack, and
|
| // must exit with a stack-overflow exception.
|
| __ cmp(r0, Operand(0));
|
| @@ -971,7 +971,7 @@
|
|
|
| void RegExpMacroAssemblerARM::CallCheckStackGuardState(Register scratch) {
|
| static const int num_arguments = 3;
|
| - FrameAlign(num_arguments, scratch);
|
| + __ PrepareCallCFunction(num_arguments, scratch);
|
| // RegExp code frame pointer.
|
| __ mov(r2, frame_pointer());
|
| // Code* of self.
|
| @@ -1183,47 +1183,12 @@
|
| }
|
|
|
|
|
| -void RegExpMacroAssemblerARM::FrameAlign(int num_arguments, Register scratch) {
|
| - int frameAlignment = OS::ActivationFrameAlignment();
|
| - // Up to four simple arguments are passed in registers r0..r3.
|
| - int stack_passed_arguments = (num_arguments <= 4) ? 0 : num_arguments - 4;
|
| - if (frameAlignment != 0) {
|
| - // Make stack end at alignment and make room for num_arguments - 4 words
|
| - // and the original value of sp.
|
| - __ mov(scratch, sp);
|
| - __ sub(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize));
|
| - ASSERT(IsPowerOf2(frameAlignment));
|
| - __ and_(sp, sp, Operand(-frameAlignment));
|
| - __ str(scratch, MemOperand(sp, stack_passed_arguments * kPointerSize));
|
| - } else {
|
| - __ sub(sp, sp, Operand(stack_passed_arguments * kPointerSize));
|
| - }
|
| -}
|
| -
|
| -
|
| -void RegExpMacroAssemblerARM::CallCFunction(ExternalReference function,
|
| - int num_arguments) {
|
| - __ mov(r5, Operand(function));
|
| - // Just call directly. The function called cannot cause a GC, or
|
| - // allow preemption, so the return address in the link register
|
| - // stays correct.
|
| - __ Call(r5);
|
| - int stack_passed_arguments = (num_arguments <= 4) ? 0 : num_arguments - 4;
|
| - if (OS::ActivationFrameAlignment() > kIntSize) {
|
| - __ ldr(sp, MemOperand(sp, stack_passed_arguments * kPointerSize));
|
| - } else {
|
| - __ add(sp, sp, Operand(stack_passed_arguments * sizeof(kPointerSize)));
|
| - }
|
| - __ mov(code_pointer(), Operand(masm_->CodeObject()));
|
| -}
|
| -
|
| -
|
| void RegExpMacroAssemblerARM::CallCFunctionUsingStub(
|
| ExternalReference function,
|
| int num_arguments) {
|
| // Must pass all arguments in registers. The stub pushes on the stack.
|
| ASSERT(num_arguments <= 4);
|
| - __ mov(r5, Operand(function));
|
| + __ mov(code_pointer(), Operand(function));
|
| RegExpCEntryStub stub;
|
| __ CallStub(&stub);
|
| if (OS::ActivationFrameAlignment() != 0) {
|
|
|