Chromium Code Reviews| Index: src/ia32/stub-cache-ia32.cc |
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc |
| index 1a4e3f69da0281c0dd78352c04fdd45b24337250..7d09ce3e953a1fb9009d2a16856a142cf872b405 100644 |
| --- a/src/ia32/stub-cache-ia32.cc |
| +++ b/src/ia32/stub-cache-ia32.cc |
| @@ -114,12 +114,9 @@ static void ProbeTable(Isolate* isolate, |
| } |
| -void StubCompiler::GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
| - Label* miss_label, |
| - Register receiver, |
| - Handle<Name> name, |
| - Register scratch0, |
| - Register scratch1) { |
| +void PropertyHandlerCompiler::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(); |
| @@ -233,21 +230,8 @@ void StubCache::GenerateProbe(MacroAssembler* masm, |
| } |
| -void StubCompiler::GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm, |
| - int index, |
| - Register prototype) { |
| - __ LoadGlobalFunction(index, prototype); |
| - __ LoadGlobalFunctionInitialMap(prototype, prototype); |
| - // Load the prototype from the initial map. |
| - __ mov(prototype, FieldOperand(prototype, Map::kPrototypeOffset)); |
| -} |
| - |
| - |
| -void StubCompiler::GenerateDirectLoadGlobalFunctionPrototype( |
| - MacroAssembler* masm, |
| - int index, |
| - Register prototype, |
| - Label* miss) { |
| +void NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype( |
| + MacroAssembler* masm, int index, Register prototype, Label* miss) { |
| // Get the global function with the given index. |
| Handle<JSFunction> function( |
| JSFunction::cast(masm->isolate()->native_context()->get(index))); |
| @@ -266,52 +250,15 @@ void StubCompiler::GenerateDirectLoadGlobalFunctionPrototype( |
| } |
| -void StubCompiler::GenerateLoadArrayLength(MacroAssembler* masm, |
| - Register receiver, |
| - Register scratch, |
| - Label* miss_label) { |
| - // Check that the receiver isn't a smi. |
| - __ JumpIfSmi(receiver, miss_label); |
| - |
| - // Check that the object is a JS array. |
| - __ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch); |
| - __ j(not_equal, miss_label); |
| - |
| - // Load length directly from the JS array. |
| - __ mov(eax, FieldOperand(receiver, JSArray::kLengthOffset)); |
| - __ ret(0); |
| -} |
| - |
| - |
| -void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm, |
| - Register receiver, |
| - Register scratch1, |
| - Register scratch2, |
| - Label* miss_label) { |
| +void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype( |
| + MacroAssembler* masm, Register receiver, Register scratch1, |
| + Register scratch2, Label* miss_label) { |
| __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label); |
| __ mov(eax, scratch1); |
| __ ret(0); |
| } |
| -void StubCompiler::GenerateFastPropertyLoad(MacroAssembler* masm, |
| - Register dst, |
| - Register src, |
| - bool inobject, |
| - int index, |
| - Representation representation) { |
| - ASSERT(!representation.IsDouble()); |
| - int offset = index * kPointerSize; |
| - if (!inobject) { |
| - // Calculate the offset into the properties array. |
| - offset = offset + FixedArray::kHeaderSize; |
| - __ mov(dst, FieldOperand(src, JSObject::kPropertiesOffset)); |
| - src = dst; |
| - } |
| - __ mov(dst, FieldOperand(src, offset)); |
| -} |
| - |
| - |
| static void PushInterceptorArguments(MacroAssembler* masm, |
| Register receiver, |
| Register holder, |
| @@ -351,14 +298,10 @@ static void CompileCallLoadPropertyWithInterceptor( |
| // This function uses push() to generate smaller, faster code than |
| // the version above. It is an optimization that should will be removed |
| // when api call ICs are generated in hydrogen. |
| -void StubCompiler::GenerateFastApiCall(MacroAssembler* masm, |
| - const CallOptimization& optimization, |
| - Handle<Map> receiver_map, |
| - Register receiver, |
| - Register scratch_in, |
| - bool is_store, |
| - int argc, |
| - Register* values) { |
| +void PropertyHandlerCompiler::GenerateFastApiCall( |
| + MacroAssembler* masm, const CallOptimization& optimization, |
|
mvstanton
2014/07/24 16:33:47
nit: I like the old style better, what about start
Sven Panne
2014/07/25 06:25:10
This kind of formatting bikeshedding is gone with
|
| + Handle<Map> receiver_map, Register receiver, Register scratch_in, |
| + bool is_store, int argc, Register* values) { |
| // Copy return value. |
| __ pop(scratch_in); |
| // receiver |
| @@ -428,9 +371,9 @@ void StubCompiler::GenerateFastApiCall(MacroAssembler* masm, |
| } |
| -void StoreStubCompiler::GenerateRestoreName(MacroAssembler* masm, |
| - Label* label, |
| - Handle<Name> name) { |
| +void NamedStoreHandlerCompiler::GenerateRestoreName(MacroAssembler* masm, |
| + Label* label, |
| + Handle<Name> name) { |
| if (!label->is_unused()) { |
| __ bind(label); |
| __ mov(this->name(), Immediate(name)); |
| @@ -441,11 +384,9 @@ 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. |
| -void StubCompiler::GenerateCheckPropertyCell(MacroAssembler* masm, |
| - Handle<JSGlobalObject> global, |
| - Handle<Name> name, |
| - Register scratch, |
| - Label* miss) { |
| +void PropertyHandlerCompiler::GenerateCheckPropertyCell( |
| + MacroAssembler* masm, Handle<JSGlobalObject> global, Handle<Name> name, |
| + Register scratch, Label* miss) { |
| Handle<PropertyCell> cell = |
| JSGlobalObject::EnsurePropertyCell(global, name); |
| ASSERT(cell->value()->IsTheHole()); |
| @@ -461,12 +402,9 @@ void StubCompiler::GenerateCheckPropertyCell(MacroAssembler* masm, |
| } |
| -void StoreStubCompiler::GenerateNegativeHolderLookup( |
| - MacroAssembler* masm, |
| - Handle<JSObject> holder, |
| - Register holder_reg, |
| - Handle<Name> name, |
| - Label* miss) { |
| +void NamedStoreHandlerCompiler::GenerateNegativeHolderLookup( |
| + MacroAssembler* masm, Handle<JSObject> holder, Register holder_reg, |
| + Handle<Name> name, Label* miss) { |
| if (holder->IsJSGlobalObject()) { |
| GenerateCheckPropertyCell( |
| masm, Handle<JSGlobalObject>::cast(holder), name, scratch1(), miss); |
| @@ -479,19 +417,11 @@ void StoreStubCompiler::GenerateNegativeHolderLookup( |
| // Receiver_reg is preserved on jumps to miss_label, but may be destroyed if |
| // store is successful. |
| -void StoreStubCompiler::GenerateStoreTransition(MacroAssembler* masm, |
| - Handle<JSObject> object, |
| - LookupResult* lookup, |
| - Handle<Map> transition, |
| - Handle<Name> name, |
| - Register receiver_reg, |
| - Register storage_reg, |
| - Register value_reg, |
| - Register scratch1, |
| - Register scratch2, |
| - Register unused, |
| - Label* miss_label, |
| - Label* slow) { |
| +void NamedStoreHandlerCompiler::GenerateStoreTransition( |
|
mvstanton
2014/07/24 16:33:47
Same here, it just hurts my eyes...
|
| + MacroAssembler* masm, Handle<JSObject> object, LookupResult* lookup, |
| + Handle<Map> transition, Handle<Name> name, Register receiver_reg, |
| + Register storage_reg, Register value_reg, Register scratch1, |
| + Register scratch2, Register unused, Label* miss_label, Label* slow) { |
| int descriptor = transition->LastAdded(); |
| DescriptorArray* descriptors = transition->instance_descriptors(); |
| PropertyDetails details = descriptors->GetDetails(descriptor); |
| @@ -648,15 +578,10 @@ void StoreStubCompiler::GenerateStoreTransition(MacroAssembler* masm, |
| // Both name_reg and receiver_reg are preserved on jumps to miss_label, |
| // but may be destroyed if store is successful. |
| -void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm, |
| - Handle<JSObject> object, |
| - LookupResult* lookup, |
| - Register receiver_reg, |
| - Register name_reg, |
| - Register value_reg, |
| - Register scratch1, |
| - Register scratch2, |
| - Label* miss_label) { |
| +void NamedStoreHandlerCompiler::GenerateStoreField( |
| + MacroAssembler* masm, Handle<JSObject> object, LookupResult* lookup, |
| + Register receiver_reg, Register name_reg, Register value_reg, |
| + Register scratch1, Register scratch2, Label* miss_label) { |
| // Stub never generated for non-global objects that require access |
| // checks. |
| ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); |
| @@ -758,7 +683,8 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm, |
| } |
| -void StubCompiler::GenerateTailCall(MacroAssembler* masm, Handle<Code> code) { |
| +void PropertyAccessCompiler::GenerateTailCall(MacroAssembler* masm, |
| + Handle<Code> code) { |
| __ jmp(code, RelocInfo::CODE_TARGET); |
| } |
| @@ -767,15 +693,10 @@ void StubCompiler::GenerateTailCall(MacroAssembler* masm, Handle<Code> code) { |
| #define __ ACCESS_MASM(masm()) |
| -Register StubCompiler::CheckPrototypes(Handle<HeapType> type, |
| - Register object_reg, |
| - Handle<JSObject> holder, |
| - Register holder_reg, |
| - Register scratch1, |
| - Register scratch2, |
| - Handle<Name> name, |
| - Label* miss, |
| - PrototypeCheckType check) { |
| +Register PropertyHandlerCompiler::CheckPrototypes( |
| + Handle<HeapType> type, Register object_reg, Handle<JSObject> holder, |
| + Register holder_reg, Register scratch1, Register scratch2, |
| + Handle<Name> name, Label* miss, PrototypeCheckType check) { |
| Handle<Map> receiver_map(IC::TypeToMap(*type, isolate())); |
| // Make sure there's no overlap between holder and object registers. |
| @@ -882,7 +803,7 @@ Register StubCompiler::CheckPrototypes(Handle<HeapType> type, |
| } |
| -void LoadStubCompiler::HandlerFrontendFooter(Handle<Name> name, Label* miss) { |
| +void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) { |
| if (!miss->is_unused()) { |
| Label success; |
| __ jmp(&success); |
| @@ -893,7 +814,7 @@ void LoadStubCompiler::HandlerFrontendFooter(Handle<Name> name, Label* miss) { |
| } |
| -void StoreStubCompiler::HandlerFrontendFooter(Handle<Name> name, Label* miss) { |
| +void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) { |
| if (!miss->is_unused()) { |
| Label success; |
| __ jmp(&success); |
| @@ -904,15 +825,14 @@ void StoreStubCompiler::HandlerFrontendFooter(Handle<Name> name, Label* miss) { |
| } |
| -Register LoadStubCompiler::CallbackHandlerFrontend( |
| - Handle<HeapType> type, |
| - Register object_reg, |
| - Handle<JSObject> holder, |
| - Handle<Name> name, |
| - Handle<Object> callback) { |
| +Register NamedLoadHandlerCompiler::CallbackFrontend(Handle<HeapType> type, |
| + Register object_reg, |
| + Handle<JSObject> holder, |
| + Handle<Name> name, |
| + Handle<Object> callback) { |
| Label miss; |
| - Register reg = HandlerFrontendHeader(type, object_reg, holder, name, &miss); |
| + Register reg = FrontendHeader(type, object_reg, holder, name, &miss); |
| if (!holder->HasFastProperties() && !holder->IsJSGlobalObject()) { |
| ASSERT(!reg.is(scratch2())); |
| @@ -958,24 +878,22 @@ Register LoadStubCompiler::CallbackHandlerFrontend( |
| __ j(not_equal, &miss); |
| } |
| - HandlerFrontendFooter(name, &miss); |
| + FrontendFooter(name, &miss); |
| return reg; |
| } |
| -void LoadStubCompiler::GenerateLoadField(Register reg, |
| - Handle<JSObject> holder, |
| - FieldIndex field, |
| - Representation representation) { |
| +void NamedLoadHandlerCompiler::GenerateLoadField( |
| + Register reg, Handle<JSObject> holder, FieldIndex field, |
| + Representation representation) { |
| if (!reg.is(receiver())) __ mov(receiver(), reg); |
| LoadFieldStub stub(isolate(), field); |
| GenerateTailCall(masm(), stub.GetCode()); |
| } |
| -void LoadStubCompiler::GenerateLoadCallback( |
| - Register reg, |
| - Handle<ExecutableAccessorInfo> callback) { |
| +void NamedLoadHandlerCompiler::GenerateLoadCallback( |
| + Register reg, Handle<ExecutableAccessorInfo> callback) { |
| // Insert additional parameters into the stack frame above return address. |
| ASSERT(!scratch3().is(reg)); |
| __ pop(scratch3()); // Get return address to place it below. |
| @@ -1019,18 +937,16 @@ void LoadStubCompiler::GenerateLoadCallback( |
| } |
| -void LoadStubCompiler::GenerateLoadConstant(Handle<Object> value) { |
| +void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle<Object> value) { |
| // Return the constant value. |
| __ LoadObject(eax, value); |
| __ ret(0); |
| } |
| -void LoadStubCompiler::GenerateLoadInterceptor( |
| - Register holder_reg, |
| - Handle<Object> object, |
| - Handle<JSObject> interceptor_holder, |
| - LookupResult* lookup, |
| +void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
| + Register holder_reg, Handle<Object> object, |
| + Handle<JSObject> interceptor_holder, LookupResult* lookup, |
| Handle<Name> name) { |
| ASSERT(interceptor_holder->HasNamedInterceptor()); |
| ASSERT(!interceptor_holder->GetNamedInterceptor()->getter()->IsUndefined()); |
| @@ -1125,13 +1041,11 @@ void LoadStubCompiler::GenerateLoadInterceptor( |
| } |
| -Handle<Code> StoreStubCompiler::CompileStoreCallback( |
| - Handle<JSObject> object, |
| - Handle<JSObject> holder, |
| - Handle<Name> name, |
| +Handle<Code> NamedStoreHandlerCompiler::CompileStoreCallback( |
| + Handle<JSObject> object, Handle<JSObject> holder, Handle<Name> name, |
| Handle<ExecutableAccessorInfo> callback) { |
| - Register holder_reg = HandlerFrontend( |
| - IC::CurrentTypeOf(object, isolate()), receiver(), holder, name); |
| + Register holder_reg = |
| + Frontend(IC::CurrentTypeOf(object, isolate()), receiver(), holder, name); |
| __ pop(scratch1()); // remove the return address |
| __ push(receiver()); |
| @@ -1155,10 +1069,8 @@ Handle<Code> StoreStubCompiler::CompileStoreCallback( |
| #define __ ACCESS_MASM(masm) |
| -void StoreStubCompiler::GenerateStoreViaSetter( |
| - MacroAssembler* masm, |
| - Handle<HeapType> type, |
| - Register receiver, |
| +void NamedStoreHandlerCompiler::GenerateStoreViaSetter( |
| + MacroAssembler* masm, Handle<HeapType> type, Register receiver, |
| Handle<JSFunction> setter) { |
| // ----------- S t a t e ------------- |
| // -- esp[0] : return address |
| @@ -1202,9 +1114,8 @@ void StoreStubCompiler::GenerateStoreViaSetter( |
| #define __ ACCESS_MASM(masm()) |
| -Handle<Code> StoreStubCompiler::CompileStoreInterceptor( |
| - Handle<JSObject> object, |
| - Handle<Name> name) { |
| +Handle<Code> NamedStoreHandlerCompiler::CompileStoreInterceptor( |
| + Handle<JSObject> object, Handle<Name> name) { |
| __ pop(scratch1()); // remove the return address |
| __ push(receiver()); |
| __ push(this->name()); |
| @@ -1221,7 +1132,7 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor( |
| } |
| -void StoreStubCompiler::GenerateStoreArrayLength() { |
| +void NamedStoreHandlerCompiler::GenerateStoreArrayLength() { |
| // Prepare tail call to StoreIC_ArrayLength. |
| __ pop(scratch1()); // remove the return address |
| __ push(receiver()); |
| @@ -1235,9 +1146,8 @@ void StoreStubCompiler::GenerateStoreArrayLength() { |
| } |
| -Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic( |
| - MapHandleList* receiver_maps, |
| - CodeHandleList* handler_stubs, |
| +Handle<Code> PropertyICCompiler::CompileIndexedStorePolymorphic( |
| + MapHandleList* receiver_maps, CodeHandleList* handler_stubs, |
| MapHandleList* transitioned_maps) { |
| Label miss; |
| __ JumpIfSmi(receiver(), &miss, Label::kNear); |
| @@ -1258,15 +1168,13 @@ Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic( |
| TailCallBuiltin(masm(), MissBuiltin(kind())); |
| // Return the generated code. |
| - return GetICCode( |
| - kind(), Code::NORMAL, factory()->empty_string(), POLYMORPHIC); |
| + return GetCode(kind(), Code::NORMAL, factory()->empty_string(), POLYMORPHIC); |
| } |
| -Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<HeapType> type, |
| - Handle<JSObject> last, |
| - Handle<Name> name) { |
| - NonexistentHandlerFrontend(type, last, name); |
| +Handle<Code> NamedLoadHandlerCompiler::CompileLoadNonexistent( |
| + Handle<HeapType> type, Handle<JSObject> last, Handle<Name> name) { |
| + NonexistentFrontend(type, 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. |
| @@ -1278,16 +1186,7 @@ Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<HeapType> type, |
| } |
| -Register* LoadStubCompiler::registers() { |
| - // receiver, name, scratch1, scratch2, scratch3, scratch4. |
| - Register receiver = LoadIC::ReceiverRegister(); |
| - Register name = LoadIC::NameRegister(); |
| - static Register registers[] = { receiver, name, ebx, eax, edi, no_reg }; |
| - return registers; |
| -} |
| - |
| - |
| -Register* KeyedLoadStubCompiler::registers() { |
| +Register* PropertyAccessCompiler::load_calling_convention() { |
| // receiver, name, scratch1, scratch2, scratch3, scratch4. |
| Register receiver = LoadIC::ReceiverRegister(); |
| Register name = LoadIC::NameRegister(); |
| @@ -1296,12 +1195,7 @@ Register* KeyedLoadStubCompiler::registers() { |
| } |
| -Register StoreStubCompiler::value() { |
| - return StoreIC::ValueRegister(); |
| -} |
| - |
| - |
| -Register* StoreStubCompiler::registers() { |
| +Register* PropertyAccessCompiler::store_calling_convention() { |
| // receiver, name, scratch1, scratch2, scratch3. |
| Register receiver = StoreIC::ReceiverRegister(); |
| Register name = StoreIC::NameRegister(); |
| @@ -1310,7 +1204,7 @@ Register* StoreStubCompiler::registers() { |
| } |
| -Register* KeyedStoreStubCompiler::registers() { |
| +Register* PropertyAccessCompiler::keyed_store_calling_convention() { |
| // receiver, name, scratch1/map, scratch2, scratch3. |
| Register receiver = KeyedStoreIC::ReceiverRegister(); |
| Register name = KeyedStoreIC::NameRegister(); |
| @@ -1320,14 +1214,16 @@ Register* KeyedStoreStubCompiler::registers() { |
| } |
| +Register NamedStoreHandlerCompiler::value() { return StoreIC::ValueRegister(); } |
| + |
| + |
| #undef __ |
| #define __ ACCESS_MASM(masm) |
| -void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm, |
| - Handle<HeapType> type, |
| - Register receiver, |
| - Handle<JSFunction> getter) { |
| +void NamedLoadHandlerCompiler::GenerateLoadViaGetter( |
| + MacroAssembler* masm, Handle<HeapType> type, Register receiver, |
| + Handle<JSFunction> getter) { |
| { |
| FrameScope scope(masm, StackFrame::INTERNAL); |
| @@ -1360,15 +1256,12 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm, |
| #define __ ACCESS_MASM(masm()) |
| -Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
| - Handle<HeapType> type, |
| - Handle<GlobalObject> global, |
| - Handle<PropertyCell> cell, |
| - Handle<Name> name, |
| - bool is_dont_delete) { |
| +Handle<Code> NamedLoadHandlerCompiler::CompileLoadGlobal( |
| + Handle<HeapType> type, Handle<GlobalObject> global, |
| + Handle<PropertyCell> cell, Handle<Name> name, bool is_dont_delete) { |
| Label miss; |
| - HandlerFrontendHeader(type, receiver(), global, name, &miss); |
| + FrontendHeader(type, receiver(), global, name, &miss); |
| // Get the value from the cell. |
| if (masm()->serializer_enabled()) { |
| __ mov(eax, Immediate(cell)); |
| @@ -1391,19 +1284,18 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
| // The code above already loads the result into the return register. |
| __ ret(0); |
| - HandlerFrontendFooter(name, &miss); |
| + FrontendFooter(name, &miss); |
| // Return the generated code. |
| return GetCode(kind(), Code::NORMAL, name); |
| } |
| -Handle<Code> BaseLoadStoreStubCompiler::CompilePolymorphicIC( |
| - TypeHandleList* types, |
| - CodeHandleList* handlers, |
| - Handle<Name> name, |
| - Code::StubType type, |
| - IcCheckType check) { |
| +Handle<Code> PropertyICCompiler::CompilePolymorphic(TypeHandleList* types, |
| + CodeHandleList* handlers, |
| + Handle<Name> name, |
| + Code::StubType type, |
| + IcCheckType check) { |
| Label miss; |
| if (check == PROPERTY && |
| @@ -1444,7 +1336,7 @@ Handle<Code> BaseLoadStoreStubCompiler::CompilePolymorphicIC( |
| // Return the generated code. |
| InlineCacheState state = |
| number_of_handled_maps > 1 ? POLYMORPHIC : MONOMORPHIC; |
| - return GetICCode(kind(), type, name, state); |
| + return GetCode(kind(), type, name, state); |
| } |
| @@ -1452,7 +1344,7 @@ Handle<Code> BaseLoadStoreStubCompiler::CompilePolymorphicIC( |
| #define __ ACCESS_MASM(masm) |
| -void KeyedLoadStubCompiler::GenerateLoadDictionaryElement( |
| +void IndexedHandlerCompiler::GenerateLoadDictionaryElement( |
| MacroAssembler* masm) { |
| // ----------- S t a t e ------------- |
| // -- ecx : key |