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

Unified Diff: vm/stub_code_x64.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_ia32.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/stub_code_x64.cc
===================================================================
--- vm/stub_code_x64.cc (revision 10541)
+++ vm/stub_code_x64.cc (working copy)
@@ -247,91 +247,6 @@
}
-// Lookup for [function-name, arg count] in 'functions_map_'.
-// Input parameters (to be treated as read only, unless calling to target!):
-// RBX: ic-data.
-// R10: 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_rax, smi_receiver, null_receiver, not_found;
- // Total number of args is the first Smi in args descriptor array (R10).
- __ movq(RAX, FieldAddress(R10, Array::data_offset()));
- __ movq(RAX, Address(RSP, RAX, TIMES_4, 0)); // Get receiver. RAX is a Smi.
- // TODO(srdjan): Remove the special casing below for null receiver, once
- // NullClass is implemented.
- __ cmpq(RAX, raw_null);
- // Use Object class if receiver is null.
- __ j(EQUAL, &null_receiver, Assembler::kNearJump);
- __ testq(RAX, Immediate(kSmiTagMask));
- __ j(ZERO, &smi_receiver, Assembler::kNearJump);
- __ LoadClass(RAX, RAX);
- __ jmp(&class_in_rax, Assembler::kNearJump);
- __ Bind(&smi_receiver);
- // For Smis we need to get the class from the isolate.
- // Load current Isolate pointer from Context structure into RAX.
- __ movq(RAX, FieldAddress(CTX, Context::isolate_offset()));
- __ movq(RAX, Address(RAX, Isolate::object_store_offset()));
- __ movq(RAX, Address(RAX, ObjectStore::smi_class_offset()));
- __ jmp(&class_in_rax, Assembler::kNearJump);
- __ Bind(&null_receiver);
- __ movq(RAX, FieldAddress(CTX, Context::isolate_offset()));
- __ movq(RAX, Address(RAX, Isolate::object_store_offset()));
- __ movq(RAX, Address(RAX, ObjectStore::object_class_offset()));
-
- __ Bind(&class_in_rax);
- // Class is in RAX.
-
- Label loop, next_iteration;
- // Get functions_cache, since it is allocated lazily it maybe null.
- __ movq(RAX, FieldAddress(RAX, Class::functions_cache_offset()));
- __ cmpq(RAX, raw_null);
- __ j(EQUAL, &not_found, Assembler::kNearJump);
-
- // Iterate and search for identical name.
- __ leaq(R12, FieldAddress(RAX, Array::data_offset()));
-
- // R12 is pointing into content of functions_map_ array.
- __ Bind(&loop);
- __ movq(R13, Address(R12, FunctionsCache::kFunctionName * kWordSize));
-
- __ cmpq(R13, raw_null);
- __ j(EQUAL, &not_found, Assembler::kNearJump);
-
- __ cmpq(R13, FieldAddress(RBX, ICData::target_name_offset()));
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
-
- // Name found, check total argument count and named argument count.
- __ movq(RAX, FieldAddress(R10, Array::data_offset()));
- // RAX is total argument count as Smi.
- __ movq(R13, Address(R12, FunctionsCache::kArgCount * kWordSize));
- __ cmpq(RAX, R13); // Compare total argument counts.
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
- __ subq(RAX, FieldAddress(R10, Array::data_offset() + kWordSize));
- // RAX is named argument count as Smi.
- __ movq(R13, Address(R12, FunctionsCache::kNamedArgCount * kWordSize));
- __ cmpq(RAX, R13); // Compare named argument counts.
- __ j(NOT_EQUAL, &next_iteration, Assembler::kNearJump);
-
- // Argument count matches, jump to target.
- // R10: arguments descriptor array.
- __ movq(RBX, Address(R12, FunctionsCache::kFunction * kWordSize));
- __ movq(RBX, FieldAddress(RBX, Function::code_offset()));
- __ movq(RBX, FieldAddress(RBX, Code::instructions_offset()));
- __ addq(RBX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
- __ jmp(RBX);
-
- __ Bind(&next_iteration);
- __ AddImmediate(R12, Immediate(FunctionsCache::kNumEntries * kWordSize));
- __ jmp(&loop, Assembler::kNearJump);
-
- __ Bind(&not_found);
-}
-
-
// Input parameters:
// R13: argument count, may be zero.
static void PushArgumentsArray(Assembler* assembler, intptr_t arg_offset) {
@@ -368,14 +283,10 @@
// Note: The receiver object is the first argument to the function being
// called, the stub accesses the receiver from this location directly
// when trying to resolve the call.
-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);
@@ -1681,7 +1592,7 @@
__ cmpq(RAX, raw_null);
__ j(NOT_EQUAL, &call_target_function, Assembler::kNearJump);
// NoSuchMethod or closure.
- __ jmp(&StubCode::MegamorphicLookupLabel());
+ __ jmp(&StubCode::InstanceFunctionLookupLabel());
__ Bind(&found);
// R12: Pointer to an IC data check group (classes + target)
« no previous file with comments | « vm/stub_code_ia32.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698