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

Unified Diff: runtime/vm/intrinsifier_ia32.cc

Issue 10458031: In generated code for x64 don't load object's class directly from class_ field. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Eliminate CoreClass helpers on ia32/x64 and use class ids for array classes. Created 8 years, 7 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/intermediate_language_x64.cc ('k') | runtime/vm/opt_code_generator_ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intrinsifier_ia32.cc
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 11e2c40c712a4953aa7ef23b25c7a35de07971d2..1a3c1516c0d5725fcaae4317f4053d2803a4d34a 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -204,9 +204,7 @@ bool Intrinsifier::Array_setIndexed(Assembler* assembler) {
__ j(EQUAL, &checked_ok, Assembler::kNearJump);
// Check if it's Dynamic.
// For now handle only TypeArguments and bail out if InstantiatedTypeArgs.
- __ CompareClassOfObject(EBX,
- Class::Handle(Object::type_arguments_class()),
- EAX);
+ __ CompareClassId(EBX, kTypeArguments, EAX);
__ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
// Get type at index 0.
__ movl(EAX, FieldAddress(EBX, TypeArguments::type_at_offset(0)));
@@ -740,7 +738,6 @@ bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
// At least one of the arguments was not Smi, inline code for Smi/Mint
// equality comparison.
- ObjectStore* object_store = Isolate::Current()->object_store();
Label receiver_not_smi;
__ Bind(&check_for_mint);
__ movl(EAX, Address(ESP, + 2 * kWordSize)); // Receiver.
@@ -751,14 +748,14 @@ bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
// represented by Smi.
// Left is Smi, return false if right is Mint, otherwise fall through.
__ movl(EAX, Address(ESP, + 1 * kWordSize)); // Right argument.
- __ CompareClassOfObject(EAX, Class::Handle(object_store->mint_class()), EAX);
+ __ CompareClassId(EAX, kMint, EAX);
__ j(NOT_EQUAL, &fall_through);
__ LoadObject(EAX, bool_false); // Smi == Mint -> false.
__ ret();
__ Bind(&receiver_not_smi);
// EAX:: receiver.
- __ CompareClassOfObject(EAX, Class::Handle(object_store->mint_class()), EAX);
+ __ CompareClassId(EAX, kMint, EAX);
__ j(NOT_EQUAL, &fall_through);
// Receiver is Mint, return false if right is Smi.
__ movl(EAX, Address(ESP, + 1 * kWordSize)); // Right argument.
@@ -827,8 +824,7 @@ static void TestLastArgumentIsDouble(Assembler* assembler,
__ movl(EAX, Address(ESP, + 1 * kWordSize));
__ testl(EAX, Immediate(kSmiTagMask));
__ j(ZERO, is_smi, Assembler::kNearJump); // Jump if Smi.
- __ CompareClassOfObject(EAX, Class::Handle(
- Isolate::Current()->object_store()->double_class()), EBX);
+ __ CompareClassId(EAX, kDouble, EBX);
__ j(NOT_EQUAL, not_double_smi, Assembler::kNearJump);
// Fall through if double.
}
@@ -1241,7 +1237,6 @@ bool Intrinsifier::String_getLength(Assembler* assembler) {
// TODO(srdjan): Implement for two and four byte strings as well.
bool Intrinsifier::String_charCodeAt(Assembler* assembler) {
- ObjectStore* object_store = Isolate::Current()->object_store();
Label fall_through;
__ movl(EBX, Address(ESP, + 1 * kWordSize)); // Index.
__ movl(EAX, Address(ESP, + 2 * kWordSize)); // String.
@@ -1251,9 +1246,7 @@ bool Intrinsifier::String_charCodeAt(Assembler* assembler) {
__ cmpl(EBX, FieldAddress(EAX, String::length_offset()));
// Runtime throws exception.
__ j(ABOVE_EQUAL, &fall_through, Assembler::kNearJump);
- __ CompareClassOfObject(EAX,
- Class::Handle(object_store->one_byte_string_class()),
- EDI);
+ __ CompareClassId(EAX, kOneByteString, EDI);
__ j(NOT_EQUAL, &fall_through);
__ SmiUntag(EBX);
__ movzxb(EAX, FieldAddress(EAX, EBX, TIMES_1, OneByteString::data_offset()));
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/opt_code_generator_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698