| Index: src/arm/stub-cache-arm.cc
|
| ===================================================================
|
| --- src/arm/stub-cache-arm.cc (revision 4699)
|
| +++ src/arm/stub-cache-arm.cc (working copy)
|
| @@ -27,6 +27,8 @@
|
|
|
| #include "v8.h"
|
|
|
| +#if defined(V8_TARGET_ARCH_ARM)
|
| +
|
| #include "ic-inl.h"
|
| #include "codegen-inl.h"
|
| #include "stub-cache.h"
|
| @@ -506,8 +508,7 @@
|
| ASSERT(callback->getter() != NULL);
|
|
|
| Label cleanup;
|
| - __ pop(scratch2);
|
| - __ Push(receiver, scratch2);
|
| + __ push(receiver);
|
|
|
| holder = stub_compiler->CheckPrototypes(holder_obj, holder,
|
| lookup->holder(), scratch1,
|
| @@ -526,9 +527,7 @@
|
| __ TailCallExternalReference(ref, 5, 1);
|
|
|
| __ bind(&cleanup);
|
| - __ pop(scratch1);
|
| __ pop(scratch2);
|
| - __ push(scratch1);
|
| }
|
| }
|
|
|
| @@ -1618,15 +1617,11 @@
|
| JSObject* object,
|
| JSObject* last) {
|
| // ----------- S t a t e -------------
|
| - // -- r2 : name
|
| + // -- r0 : receiver
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - // Load receiver.
|
| - __ ldr(r0, MemOperand(sp, 0));
|
| -
|
| // Check that receiver is not a smi.
|
| __ tst(r0, Operand(kSmiTagMask));
|
| __ b(eq, &miss);
|
| @@ -1663,14 +1658,12 @@
|
| int index,
|
| String* name) {
|
| // ----------- S t a t e -------------
|
| + // -- r0 : receiver
|
| // -- r2 : name
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - __ ldr(r0, MemOperand(sp, 0));
|
| -
|
| GenerateLoadField(object, holder, r0, r3, r1, index, name, &miss);
|
| __ bind(&miss);
|
| GenerateLoadMiss(masm(), Code::LOAD_IC);
|
| @@ -1685,13 +1678,12 @@
|
| JSObject* holder,
|
| AccessorInfo* callback) {
|
| // ----------- S t a t e -------------
|
| + // -- r0 : receiver
|
| // -- r2 : name
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - __ ldr(r0, MemOperand(sp, 0));
|
| Failure* failure = Failure::InternalError();
|
| bool success = GenerateLoadCallback(object, holder, r0, r2, r3, r1,
|
| callback, name, &miss, &failure);
|
| @@ -1710,14 +1702,12 @@
|
| Object* value,
|
| String* name) {
|
| // ----------- S t a t e -------------
|
| + // -- r0 : receiver
|
| // -- r2 : name
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - __ ldr(r0, MemOperand(sp, 0));
|
| -
|
| GenerateLoadConstant(object, holder, r0, r3, r1, value, name, &miss);
|
| __ bind(&miss);
|
| GenerateLoadMiss(masm(), Code::LOAD_IC);
|
| @@ -1731,14 +1721,12 @@
|
| JSObject* holder,
|
| String* name) {
|
| // ----------- S t a t e -------------
|
| + // -- r0 : receiver
|
| // -- r2 : name
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - __ ldr(r0, MemOperand(sp, 0));
|
| -
|
| LookupResult lookup;
|
| LookupPostInterceptor(holder, name, &lookup);
|
| GenerateLoadInterceptor(object,
|
| @@ -1764,10 +1752,9 @@
|
| String* name,
|
| bool is_dont_delete) {
|
| // ----------- S t a t e -------------
|
| + // -- r0 : receiver
|
| // -- r2 : name
|
| // -- lr : return address
|
| - // -- r0 : receiver
|
| - // -- sp[0] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| @@ -1974,32 +1961,31 @@
|
| String* name) {
|
| // ----------- S t a t e -------------
|
| // -- r0 : value
|
| - // -- r2 : name
|
| + // -- r1 : key
|
| + // -- r2 : receiver
|
| // -- lr : return address
|
| - // -- [sp] : receiver
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - __ IncrementCounter(&Counters::keyed_store_field, 1, r1, r3);
|
| + __ IncrementCounter(&Counters::keyed_store_field, 1, r3, r4);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(r2, Operand(Handle<String>(name)));
|
| + __ cmp(r1, Operand(Handle<String>(name)));
|
| __ b(ne, &miss);
|
|
|
| - // Load receiver from the stack.
|
| - __ ldr(r3, MemOperand(sp));
|
| - // r1 is used as scratch register, r3 and r2 might be clobbered.
|
| + // r3 is used as scratch register. r1 and r2 keep their values if a jump to
|
| + // the miss label is generated.
|
| GenerateStoreField(masm(),
|
| object,
|
| index,
|
| transition,
|
| - r3, r2, r1,
|
| + r2, r1, r3,
|
| &miss);
|
| __ bind(&miss);
|
|
|
| - __ DecrementCounter(&Counters::keyed_store_field, 1, r1, r3);
|
| - __ mov(r2, Operand(Handle<String>(name))); // restore name register.
|
| + __ DecrementCounter(&Counters::keyed_store_field, 1, r3, r4);
|
| Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss));
|
| +
|
| __ Jump(ic, RelocInfo::CODE_TARGET);
|
|
|
| // Return the generated code.
|
| @@ -2153,3 +2139,5 @@
|
| #undef __
|
|
|
| } } // namespace v8::internal
|
| +
|
| +#endif // V8_TARGET_ARCH_ARM
|
|
|