| Index: src/arm/codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/codegen-arm.cc (revision 3854)
|
| +++ src/arm/codegen-arm.cc (working copy)
|
| @@ -3023,11 +3023,6 @@
|
| // ----------------------------------
|
| // JavaScript example: 'foo(1, 2, 3)' // foo is global
|
| // ----------------------------------
|
| -
|
| - // Push the name of the function and the receiver onto the stack.
|
| - __ mov(r0, Operand(var->name()));
|
| - frame_->EmitPush(r0);
|
| -
|
| // Pass the global object as the receiver and let the IC stub
|
| // patch the stack to use the global proxy as 'this' in the
|
| // invoked function.
|
| @@ -3039,15 +3034,14 @@
|
| LoadAndSpill(args->at(i));
|
| }
|
|
|
| - // Setup the receiver register and call the IC initialization code.
|
| + // Setup the name register and call the IC initialization code.
|
| + __ mov(r2, Operand(var->name()));
|
| InLoopFlag in_loop = loop_nesting() > 0 ? IN_LOOP : NOT_IN_LOOP;
|
| Handle<Code> stub = ComputeCallInitialize(arg_count, in_loop);
|
| CodeForSourcePosition(node->position());
|
| frame_->CallCodeObject(stub, RelocInfo::CODE_TARGET_CONTEXT,
|
| arg_count + 1);
|
| __ ldr(cp, frame_->Context());
|
| - // Remove the function from the stack.
|
| - frame_->Drop();
|
| frame_->EmitPush(r0);
|
|
|
| } else if (var != NULL && var->slot() != NULL &&
|
| @@ -3080,29 +3074,22 @@
|
| // JavaScript example: 'object.foo(1, 2, 3)' or 'map["key"](1, 2, 3)'
|
| // ------------------------------------------------------------------
|
|
|
| - // Push the name of the function and the receiver onto the stack.
|
| - __ mov(r0, Operand(literal->handle()));
|
| - frame_->EmitPush(r0);
|
| - LoadAndSpill(property->obj());
|
| -
|
| + LoadAndSpill(property->obj()); // Receiver.
|
| // Load the arguments.
|
| int arg_count = args->length();
|
| for (int i = 0; i < arg_count; i++) {
|
| LoadAndSpill(args->at(i));
|
| }
|
|
|
| - // Set the receiver register and call the IC initialization code.
|
| + // Set the name register and call the IC initialization code.
|
| + __ mov(r2, Operand(literal->handle()));
|
| InLoopFlag in_loop = loop_nesting() > 0 ? IN_LOOP : NOT_IN_LOOP;
|
| Handle<Code> stub = ComputeCallInitialize(arg_count, in_loop);
|
| CodeForSourcePosition(node->position());
|
| frame_->CallCodeObject(stub, RelocInfo::CODE_TARGET, arg_count + 1);
|
| __ ldr(cp, frame_->Context());
|
| + frame_->EmitPush(r0);
|
|
|
| - // Remove the function from the stack.
|
| - frame_->Drop();
|
| -
|
| - frame_->EmitPush(r0); // push after get rid of function from the stack
|
| -
|
| } else {
|
| // -------------------------------------------
|
| // JavaScript example: 'array[index](1, 2, 3)'
|
| @@ -3636,8 +3623,6 @@
|
|
|
| if (function == NULL) {
|
| // Prepare stack for calling JS runtime function.
|
| - __ mov(r0, Operand(node->name()));
|
| - frame_->EmitPush(r0);
|
| // Push the builtins object found in the current global object.
|
| __ ldr(r1, GlobalObject());
|
| __ ldr(r0, FieldMemOperand(r1, GlobalObject::kBuiltinsOffset));
|
| @@ -3652,11 +3637,11 @@
|
|
|
| if (function == NULL) {
|
| // Call the JS runtime function.
|
| + __ mov(r2, Operand(node->name()));
|
| InLoopFlag in_loop = loop_nesting() > 0 ? IN_LOOP : NOT_IN_LOOP;
|
| Handle<Code> stub = ComputeCallInitialize(arg_count, in_loop);
|
| frame_->CallCodeObject(stub, RelocInfo::CODE_TARGET, arg_count + 1);
|
| __ ldr(cp, frame_->Context());
|
| - frame_->Drop();
|
| frame_->EmitPush(r0);
|
| } else {
|
| // Call the C runtime function.
|
|
|