diff options
Diffstat (limited to 'deps/v8/src/ia32')
-rw-r--r-- | deps/v8/src/ia32/lithium-codegen-ia32.cc | 5 | ||||
-rw-r--r-- | deps/v8/src/ia32/lithium-ia32.cc | 10 | ||||
-rw-r--r-- | deps/v8/src/ia32/lithium-ia32.h | 8 | ||||
-rw-r--r-- | deps/v8/src/ia32/stub-cache-ia32.cc | 82 |
4 files changed, 47 insertions, 58 deletions
diff --git a/deps/v8/src/ia32/lithium-codegen-ia32.cc b/deps/v8/src/ia32/lithium-codegen-ia32.cc index 46c87e1d62..0c7e8d6ef3 100644 --- a/deps/v8/src/ia32/lithium-codegen-ia32.cc +++ b/deps/v8/src/ia32/lithium-codegen-ia32.cc @@ -6216,6 +6216,11 @@ void LCodeGen::DoDeoptimize(LDeoptimize* instr) { } +void LCodeGen::DoDummy(LDummy* instr) { + // Nothing to see here, move on! +} + + void LCodeGen::DoDummyUse(LDummyUse* instr) { // Nothing to see here, move on! } diff --git a/deps/v8/src/ia32/lithium-ia32.cc b/deps/v8/src/ia32/lithium-ia32.cc index fdddef3f47..73aabd6b1e 100644 --- a/deps/v8/src/ia32/lithium-ia32.cc +++ b/deps/v8/src/ia32/lithium-ia32.cc @@ -916,10 +916,12 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) { LInstruction* instr = NULL; if (current->CanReplaceWithDummyUses()) { - HValue* first_operand = current->OperandCount() == 0 - ? graph()->GetConstant1() - : current->OperandAt(0); - instr = DefineAsRegister(new(zone()) LDummyUse(UseAny(first_operand))); + if (current->OperandCount() == 0) { + instr = DefineAsRegister(new(zone()) LDummy()); + } else { + instr = DefineAsRegister(new(zone()) + LDummyUse(UseAny(current->OperandAt(0)))); + } for (int i = 1; i < current->OperandCount(); ++i) { LInstruction* dummy = new(zone()) LDummyUse(UseAny(current->OperandAt(i))); diff --git a/deps/v8/src/ia32/lithium-ia32.h b/deps/v8/src/ia32/lithium-ia32.h index 752fdd4f6a..9b00f3c358 100644 --- a/deps/v8/src/ia32/lithium-ia32.h +++ b/deps/v8/src/ia32/lithium-ia32.h @@ -93,6 +93,7 @@ class LCodeGen; V(DoubleToI) \ V(DoubleToSmi) \ V(Drop) \ + V(Dummy) \ V(DummyUse) \ V(ElementsKind) \ V(ForInCacheArray) \ @@ -431,6 +432,13 @@ class LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> { }; +class LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> { + public: + explicit LDummy() { } + DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") +}; + + class LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> { public: explicit LDummyUse(LOperand* value) { diff --git a/deps/v8/src/ia32/stub-cache-ia32.cc b/deps/v8/src/ia32/stub-cache-ia32.cc index 9786cffe86..0648833dc7 100644 --- a/deps/v8/src/ia32/stub-cache-ia32.cc +++ b/deps/v8/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,13 +788,13 @@ 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<JSGlobalObject> global, + Handle<Name> name, + Register scratch, + Label* miss) { Handle<PropertyCell> cell = - GlobalObject::EnsurePropertyCell(global, name); + JSGlobalObject::EnsurePropertyCell(global, name); ASSERT(cell->value()->IsTheHole()); Handle<Oddball> the_hole = masm->isolate()->factory()->the_hole_value(); if (Serializer::enabled()) { @@ -820,7 +816,7 @@ void StoreStubCompiler::GenerateNegativeHolderLookup( Label* miss) { if (holder->IsJSGlobalObject()) { GenerateCheckPropertyCell( - masm, Handle<GlobalObject>::cast(holder), name, scratch1(), miss); + masm, Handle<JSGlobalObject>::cast(holder), name, scratch1(), miss); } else if (!holder->HasFastProperties() && !holder->IsJSGlobalProxy()) { GenerateDictionaryNegativeLookup( masm, miss, holder_reg, name, scratch1(), scratch2()); @@ -1122,19 +1118,17 @@ 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()) { + if (current->IsJSGlobalObject()) { GenerateCheckPropertyCell(masm, - Handle<GlobalObject>::cast(current), + Handle<JSGlobalObject>::cast(current), name, scratch, miss); @@ -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, @@ -3049,7 +3023,7 @@ Handle<Code> LoadStubCompiler::CompileLoadNonexistent( Handle<JSObject> object, Handle<JSObject> last, Handle<Name> name, - Handle<GlobalObject> global) { + Handle<JSGlobalObject> global) { Label success; NonexistentHandlerFrontend(object, last, name, &success, global); |