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

Unified Diff: runtime/vm/stub_code_x64.cc

Issue 10580024: This is https://chromiumcodereview.appspot.com/10581006/ that I forgot to submit, and messed up the… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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 | « runtime/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: runtime/vm/stub_code_x64.cc
===================================================================
--- runtime/vm/stub_code_x64.cc (revision 8870)
+++ runtime/vm/stub_code_x64.cc (working copy)
@@ -1565,7 +1565,7 @@
__ movq(RAX, FieldAddress(R10, Array::data_offset()));
__ movq(RAX, Address(RSP, RAX, TIMES_4, 0)); // RAX (argument count) is Smi.
- Label get_class, ic_miss;
+ Label get_class_id_as_smi, ic_miss;
// RBX: IC data array.
#if defined(DEBUG)
@@ -1590,10 +1590,10 @@
Immediate(reinterpret_cast<intptr_t>(Object::null()));
Label loop, found;
if (num_args == 1) {
- __ call(&get_class);
- // RAX: receiver's class.
+ __ call(&get_class_id_as_smi);
+ // RAX: receiver's class id as Smi.
__ Bind(&loop);
- __ movq(R13, Address(R12, 0)); // Get class to check.
+ __ movq(R13, Address(R12, 0)); // Get class if (Smi) to check.
__ cmpq(RAX, R13); // Match?
__ j(EQUAL, &found, Assembler::kNearJump);
__ addq(R12, Immediate(kWordSize * 2)); // Next element (class + target).
@@ -1605,18 +1605,17 @@
// Get receiver.
__ movq(RAX, FieldAddress(R10, Array::data_offset()));
__ movq(RAX, Address(RSP, RAX, TIMES_4, 0)); // RAX is Smi.
- __ call(&get_class);
- // TODO(vegorov): switch IC data to store class index instead of class.
- __ movq(R13, Address(R12, 0)); // Get class from IC data to check.
- __ cmpq(RAX, R13); // Match?
+ __ call(&get_class_id_as_smi);
+ __ movq(R13, Address(R12, 0)); // Get class id from IC data to check.
+ __ cmpq(RAX, R13); // Class id match?
__ j(NOT_EQUAL, &no_match, Assembler::kNearJump);
// Check second.
// Get next argument.
__ movq(RAX, FieldAddress(R10, Array::data_offset()));
__ movq(RAX, Address(RSP, RAX, TIMES_4, -kWordSize)); // RAX is Smi.
- __ call(&get_class);
- __ movq(R13, Address(R12, kWordSize)); // Get class from IC data to check.
- __ cmpq(RAX, R13); // Match?
+ __ call(&get_class_id_as_smi);
+ __ movq(R13, Address(R12, kWordSize)); // Get class id from IC data.
+ __ cmpq(RAX, R13); // Class id match?
__ j(EQUAL, &found);
__ Bind(&no_match);
__ addq(R12, Immediate(kWordSize * (1 + num_args))); // Next element.
@@ -1670,18 +1669,17 @@
__ addq(RAX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
__ jmp(RAX);
- __ Bind(&get_class);
+ __ Bind(&get_class_id_as_smi);
Label not_smi;
// Test if Smi -> load Smi class for comparison.
__ testq(RAX, Immediate(kSmiTagMask));
__ j(NOT_ZERO, &not_smi, Assembler::kNearJump);
- const Class& smi_class =
- Class::ZoneHandle(Isolate::Current()->object_store()->smi_class());
- __ LoadObject(RAX, smi_class);
+ __ movq(RAX, Immediate(Smi::RawValue(kSmi)));
__ ret();
__ Bind(&not_smi);
- __ LoadClass(RAX, RAX);
+ __ LoadClassId(RAX, RAX);
+ __ SmiTag(RAX);
__ ret();
}
« no previous file with comments | « runtime/vm/stub_code_ia32.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698