From: weiliang.lin@intel.com Date: Thu, 31 Jul 2014 09:01:32 +0000 (+0000) Subject: X87: Encapsulate type in the PropertyHandlerCompiler X-Git-Tag: upstream/4.7.83~7938 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cb857ec1bf042d51ee244b5826b8aab28e2eb135;p=platform%2Fupstream%2Fv8.git X87: Encapsulate type in the PropertyHandlerCompiler port r22700. original commit message: Encapsulate type in the PropertyHandlerCompiler BUG= R=weiliang.lin@intel.com Review URL: https://codereview.chromium.org/425493005 Patch from Chunyang Dai . git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22741 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/x87/stub-cache-x87.cc b/src/x87/stub-cache-x87.cc index f351d62..75137d5 100644 --- a/src/x87/stub-cache-x87.cc +++ b/src/x87/stub-cache-x87.cc @@ -692,10 +692,10 @@ void PropertyAccessCompiler::GenerateTailCall(MacroAssembler* masm, Register PropertyHandlerCompiler::CheckPrototypes( - Handle type, Register object_reg, Handle holder, - Register holder_reg, Register scratch1, Register scratch2, - Handle name, Label* miss, PrototypeCheckType check) { - Handle receiver_map(IC::TypeToMap(*type, isolate())); + Register object_reg, Handle holder, Register holder_reg, + Register scratch1, Register scratch2, Handle name, Label* miss, + PrototypeCheckType check) { + Handle receiver_map(IC::TypeToMap(*type(), isolate())); // Make sure there's no overlap between holder and object registers. ASSERT(!scratch1.is(object_reg) && !scratch1.is(holder_reg)); @@ -707,8 +707,8 @@ Register PropertyHandlerCompiler::CheckPrototypes( int depth = 0; Handle current = Handle::null(); - if (type->IsConstant()) current = - Handle::cast(type->AsConstant()->Value()); + if (type()->IsConstant()) + current = Handle::cast(type()->AsConstant()->Value()); Handle prototype = Handle::null(); Handle current_map = receiver_map; Handle holder_map(holder->map()); @@ -823,14 +823,13 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle name, Label* miss) { } -Register NamedLoadHandlerCompiler::CallbackFrontend(Handle type, - Register object_reg, +Register NamedLoadHandlerCompiler::CallbackFrontend(Register object_reg, Handle holder, Handle name, Handle callback) { Label miss; - Register reg = FrontendHeader(type, object_reg, holder, name, &miss); + Register reg = FrontendHeader(object_reg, holder, name, &miss); if (!holder->HasFastProperties() && !holder->IsJSGlobalObject()) { ASSERT(!reg.is(scratch2())); @@ -943,9 +942,8 @@ void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle value) { void NamedLoadHandlerCompiler::GenerateLoadInterceptor( - Register holder_reg, Handle object, - Handle interceptor_holder, LookupResult* lookup, - Handle name) { + Register holder_reg, Handle interceptor_holder, + LookupResult* lookup, Handle name) { ASSERT(interceptor_holder->HasNamedInterceptor()); ASSERT(!interceptor_holder->GetNamedInterceptor()->getter()->IsUndefined()); @@ -958,10 +956,12 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( compile_followup_inline = true; } else if (lookup->type() == CALLBACKS && lookup->GetCallbackObject()->IsExecutableAccessorInfo()) { - ExecutableAccessorInfo* callback = - ExecutableAccessorInfo::cast(lookup->GetCallbackObject()); - compile_followup_inline = callback->getter() != NULL && - callback->IsCompatibleReceiver(*object); + Handle callback( + ExecutableAccessorInfo::cast(lookup->GetCallbackObject())); + compile_followup_inline = + callback->getter() != NULL && + ExecutableAccessorInfo::IsCompatibleReceiverType(isolate(), callback, + type()); } } @@ -1043,8 +1043,7 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( Handle NamedStoreHandlerCompiler::CompileStoreCallback( Handle object, Handle holder, Handle name, Handle callback) { - Register holder_reg = - Frontend(IC::CurrentTypeOf(object, isolate()), receiver(), holder, name); + Register holder_reg = Frontend(receiver(), holder, name); __ pop(scratch1()); // remove the return address __ push(receiver()); @@ -1172,8 +1171,8 @@ Handle PropertyICCompiler::CompileKeyedStorePolymorphic( Handle NamedLoadHandlerCompiler::CompileLoadNonexistent( - Handle type, Handle last, Handle name) { - NonexistentFrontend(type, last, name); + Handle last, Handle name) { + NonexistentFrontend(last, name); // Return undefined if maps of the full prototype chain are still the // same and no global property with this name contains a value. @@ -1256,25 +1255,26 @@ void NamedLoadHandlerCompiler::GenerateLoadViaGetter( Handle NamedLoadHandlerCompiler::CompileLoadGlobal( - Handle type, Handle global, - Handle cell, Handle name, bool is_dont_delete) { + Handle global, Handle cell, Handle name, + bool is_dont_delete) { Label miss; - FrontendHeader(type, receiver(), global, name, &miss); + FrontendHeader(receiver(), global, name, &miss); // Get the value from the cell. + Register result = StoreIC::ValueRegister(); if (masm()->serializer_enabled()) { - __ mov(eax, Immediate(cell)); - __ mov(eax, FieldOperand(eax, PropertyCell::kValueOffset)); + __ mov(result, Immediate(cell)); + __ mov(result, FieldOperand(result, PropertyCell::kValueOffset)); } else { - __ mov(eax, Operand::ForCell(cell)); + __ mov(result, Operand::ForCell(cell)); } // Check for deleted property if property can actually be deleted. if (!is_dont_delete) { - __ cmp(eax, factory()->the_hole_value()); + __ cmp(result, factory()->the_hole_value()); __ j(equal, &miss); } else if (FLAG_debug_code) { - __ cmp(eax, factory()->the_hole_value()); + __ cmp(result, factory()->the_hole_value()); __ Check(not_equal, kDontDeleteCellsCannotContainTheHole); }