| Index: src/ia32/stub-cache-ia32.cc
|
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc
|
| index 9786cffe8660219f989e972c5abaf8994474d4ba..fda9c205c4c11d8ae9cc08651e8dcf2126fd9000 100644
|
| --- a/src/ia32/stub-cache-ia32.cc
|
| +++ b/src/ia32/stub-cache-ia32.cc
|
| @@ -137,38 +137,34 @@ static void ProbeTable(Isolate* isolate,
|
| }
|
|
|
|
|
| -// Helper function used to check that the dictionary doesn't contain
|
| -// the property. This function may return false negatives, so miss_label
|
| -// must always call a backup property check that is complete.
|
| -// This function is safe to call if the receiver has fast properties.
|
| -// Name must be unique and receiver must be a heap object.
|
| -static void GenerateDictionaryNegativeLookup(MacroAssembler* masm,
|
| - Label* miss_label,
|
| - Register receiver,
|
| - Handle<Name> name,
|
| - Register r0,
|
| - Register r1) {
|
| +void StubCompiler::GenerateDictionaryNegativeLookup(MacroAssembler* masm,
|
| + Label* miss_label,
|
| + Register receiver,
|
| + Handle<Name> name,
|
| + Register scratch0,
|
| + Register scratch1) {
|
| ASSERT(name->IsUniqueName());
|
| + ASSERT(!receiver.is(scratch0));
|
| Counters* counters = masm->isolate()->counters();
|
| __ IncrementCounter(counters->negative_lookups(), 1);
|
| __ IncrementCounter(counters->negative_lookups_miss(), 1);
|
|
|
| - __ mov(r0, FieldOperand(receiver, HeapObject::kMapOffset));
|
| + __ mov(scratch0, FieldOperand(receiver, HeapObject::kMapOffset));
|
|
|
| const int kInterceptorOrAccessCheckNeededMask =
|
| (1 << Map::kHasNamedInterceptor) | (1 << Map::kIsAccessCheckNeeded);
|
|
|
| // Bail out if the receiver has a named interceptor or requires access checks.
|
| - __ test_b(FieldOperand(r0, Map::kBitFieldOffset),
|
| + __ test_b(FieldOperand(scratch0, Map::kBitFieldOffset),
|
| kInterceptorOrAccessCheckNeededMask);
|
| __ j(not_zero, miss_label);
|
|
|
| // Check that receiver is a JSObject.
|
| - __ CmpInstanceType(r0, FIRST_SPEC_OBJECT_TYPE);
|
| + __ CmpInstanceType(scratch0, FIRST_SPEC_OBJECT_TYPE);
|
| __ j(below, miss_label);
|
|
|
| // Load properties array.
|
| - Register properties = r0;
|
| + Register properties = scratch0;
|
| __ mov(properties, FieldOperand(receiver, JSObject::kPropertiesOffset));
|
|
|
| // Check that the properties array is a dictionary.
|
| @@ -182,7 +178,7 @@ static void GenerateDictionaryNegativeLookup(MacroAssembler* masm,
|
| &done,
|
| properties,
|
| name,
|
| - r1);
|
| + scratch1);
|
| __ bind(&done);
|
| __ DecrementCounter(counters->negative_lookups_miss(), 1);
|
| }
|
| @@ -792,11 +788,11 @@ void StoreStubCompiler::GenerateRestoreName(MacroAssembler* masm,
|
| // Generate code to check that a global property cell is empty. Create
|
| // the property cell at compilation time if no cell exists for the
|
| // property.
|
| -static void GenerateCheckPropertyCell(MacroAssembler* masm,
|
| - Handle<GlobalObject> global,
|
| - Handle<Name> name,
|
| - Register scratch,
|
| - Label* miss) {
|
| +void StubCompiler::GenerateCheckPropertyCell(MacroAssembler* masm,
|
| + Handle<GlobalObject> global,
|
| + Handle<Name> name,
|
| + Register scratch,
|
| + Label* miss) {
|
| Handle<PropertyCell> cell =
|
| GlobalObject::EnsurePropertyCell(global, name);
|
| ASSERT(cell->value()->IsTheHole());
|
| @@ -1122,14 +1118,12 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -// Calls GenerateCheckPropertyCell for each global object in the prototype chain
|
| -// from object to (but not including) holder.
|
| -static void GenerateCheckPropertyCells(MacroAssembler* masm,
|
| - Handle<JSObject> object,
|
| - Handle<JSObject> holder,
|
| - Handle<Name> name,
|
| - Register scratch,
|
| - Label* miss) {
|
| +void StubCompiler::GenerateCheckPropertyCells(MacroAssembler* masm,
|
| + Handle<JSObject> object,
|
| + Handle<JSObject> holder,
|
| + Handle<Name> name,
|
| + Register scratch,
|
| + Label* miss) {
|
| Handle<JSObject> current = object;
|
| while (!current.is_identical_to(holder)) {
|
| if (current->IsGlobalObject()) {
|
| @@ -1355,26 +1349,6 @@ Register LoadStubCompiler::CallbackHandlerFrontend(
|
| }
|
|
|
|
|
| -void LoadStubCompiler::NonexistentHandlerFrontend(
|
| - Handle<JSObject> object,
|
| - Handle<JSObject> last,
|
| - Handle<Name> name,
|
| - Label* success,
|
| - Handle<GlobalObject> global) {
|
| - Label miss;
|
| -
|
| - HandlerFrontendHeader(object, receiver(), last, name, &miss);
|
| -
|
| - // If the last object in the prototype chain is a global object,
|
| - // check that the global property cell is empty.
|
| - if (!global.is_null()) {
|
| - GenerateCheckPropertyCell(masm(), global, name, scratch2(), &miss);
|
| - }
|
| -
|
| - HandlerFrontendFooter(name, success, &miss);
|
| -}
|
| -
|
| -
|
| void LoadStubCompiler::GenerateLoadField(Register reg,
|
| Handle<JSObject> holder,
|
| PropertyIndex field,
|
|
|