Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2081)

Unified Diff: vm/stub_code_ia32.cc

Issue 10824266: Remove functions_cache_ and it's references as it is not being used anymore. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « vm/stub_code.h ('k') | vm/stub_code_x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/stub_code_ia32.cc
===================================================================
--- vm/stub_code_ia32.cc (revision 10541)
+++ vm/stub_code_ia32.cc (working copy)
@@ -252,91 +252,6 @@
}
-// Lookup for [function-name, arg count] in 'functions_map_'.
-// Input parameters (to be treated as read only, unless calling to target!):
-// ECX: ic-data.
-// EDX: arguments descriptor array (num_args is first Smi element).
-// Stack: return address, arguments.
-// If the lookup succeeds we jump to the target method from here, otherwise
-// we continue in code generated by the caller of 'MegamorphicLookup'.
-static void MegamorphicLookup(Assembler* assembler) {
- const Immediate raw_null =
- Immediate(reinterpret_cast<intptr_t>(Object::null()));
- Label class_in_eax, smi_receiver, null_receiver, not_found;
- // Total number of args is the first Smi in args descriptor array (EDX).
- __ movl(EAX, FieldAddress(EDX, Array::data_offset()));
- __ movl(EAX, Address(ESP, EAX, TIMES_2, 0)); // Get receiver. EAX is a Smi.
- // TODO(srdjan): Remove the special casing below for null receiver, once
- // NullClass is implemented.
- __ cmpl(EAX, raw_null);
- // Use Object class if receiver is null.
- __ j(EQUAL, &null_receiver, Assembler::kNearJump);
- __ testl(EAX, Immediate(kSmiTagMask));
- __ j(ZERO, &smi_receiver, Assembler::kNearJump);
- __ LoadClass(EAX, EAX, EDI);
- __ jmp(&class_in_eax, Assembler::kNearJump);
- __ Bind(&smi_receiver);
- // For Smis we need to get the class from the isolate.
- // Load current Isolate pointer from Context structure into EAX.
- __ movl(EAX, FieldAddress(CTX, Context::isolate_offset()));
- __ movl(EAX, Address(EAX, Isolate::object_store_offset()));
- __ movl(EAX, Address(EAX, ObjectStore::smi_class_offset()));
- __ jmp(&class_in_eax, Assembler::kNearJump);
- __ Bind(&null_receiver);
- __ movl(EAX, FieldAddress(CTX, Context::isolate_offset()));
- __ movl(EAX, Address(EAX, Isolate::object_store_offset()));
- __ movl(EAX, Address(EAX, ObjectStore::object_class_offset()));
-
- __ Bind(&class_in_eax);
- // Class is in EAX.
-
- Label loop, next_iteration;
- // Get functions_cache, since it is allocated lazily it maybe null.
- __ movl(EAX, FieldAddress(EAX, Class::functions_cache_offset()));
- __ cmpl(EAX, raw_null);
- __ j(EQUAL, &not_found, Assembler::kNearJump);
-
- // Iterate and search for identical name.
- __ leal(EBX, FieldAddress(EAX, Array::data_offset()));
-
- // EBX is pointing into content of functions_map_ array.
- __ Bind(&loop);
- __ movl(EDI, Address(EBX, FunctionsCache::kFunctionName * kWordSize));
-
- __ cmpl(EDI, raw_null);
- __ j(EQUAL, &not_found, Assembler::kNearJump);
-
- __ cmpl(EDI, FieldAddress(ECX, ICData::target_name_offset()));
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
-
- // Name found, check total argument count and named argument count.
- __ movl(EAX, FieldAddress(EDX, Array::data_offset()));
- // EAX is total argument count as Smi.
- __ movl(EDI, Address(EBX, FunctionsCache::kArgCount * kWordSize));
- __ cmpl(EAX, EDI); // Compare total argument counts.
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
- __ subl(EAX, FieldAddress(EDX, Array::data_offset() + kWordSize));
- // EAX is named argument count as Smi.
- __ movl(EDI, Address(EBX, FunctionsCache::kNamedArgCount * kWordSize));
- __ cmpl(EAX, EDI); // Compare named argument counts.
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
-
- // Argument count matches, jump to target.
- // EDX: arguments descriptor array.
- __ movl(ECX, Address(EBX, FunctionsCache::kFunction * kWordSize));
- __ movl(ECX, FieldAddress(ECX, Function::code_offset()));
- __ movl(ECX, FieldAddress(ECX, Code::instructions_offset()));
- __ addl(ECX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
- __ jmp(ECX);
-
- __ Bind(&next_iteration);
- __ AddImmediate(EBX, Immediate(FunctionsCache::kNumEntries * kWordSize));
- __ jmp(&loop, Assembler::kNearJump);
-
- __ Bind(&not_found);
-}
-
-
// Input parameters:
// EDI: argument count, may be zero.
// Uses EAX, EBX, ECX, EDX.
@@ -375,14 +290,10 @@
// called, the stub accesses the receiver from this location directly
// when trying to resolve the call.
// Uses EDI.
-void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+void StubCode::GenerateInstanceFunctionLookupStub(Assembler* assembler) {
const Immediate raw_null =
Immediate(reinterpret_cast<intptr_t>(Object::null()));
- MegamorphicLookup(assembler);
- // Lookup in function_table_ failed, resolve, compile and enter function
- // into function_table_.
-
// Create a stub frame as we are pushing some objects on the stack before
// calling into the runtime.
AssemblerMacros::EnterStubFrame(assembler);
@@ -1710,7 +1621,7 @@
__ cmpl(EAX, raw_null);
__ j(NOT_EQUAL, &call_target_function, Assembler::kNearJump);
// NoSuchMethod or closure.
- __ jmp(&StubCode::MegamorphicLookupLabel());
+ __ jmp(&StubCode::InstanceFunctionLookupLabel());
__ Bind(&found);
// EBX: Pointer to an IC data check group (classes + target)
« no previous file with comments | « vm/stub_code.h ('k') | vm/stub_code_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698