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

Unified Diff: runtime/vm/intrinsifier_ia32.cc

Issue 10447064: In generated code for ia32 don't load object's class directly from class_ field. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
Index: runtime/vm/intrinsifier_ia32.cc
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 8a0c666f4203111d653ece7788dd21d5acfd6358..11e2c40c712a4953aa7ef23b25c7a35de07971d2 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -204,8 +204,9 @@ 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.
- __ movl(EAX, FieldAddress(EBX, Object::class_offset()));
- __ CompareObject(EAX, Object::ZoneHandle(Object::type_arguments_class()));
+ __ CompareClassOfObject(EBX,
+ Class::Handle(Object::type_arguments_class()),
+ EAX);
__ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
// Get type at index 0.
__ movl(EAX, FieldAddress(EBX, TypeArguments::type_at_offset(0)));
@@ -750,16 +751,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.
- __ movl(EAX, FieldAddress(EAX, Object::class_offset()));
- __ CompareObject(EAX, Class::ZoneHandle(object_store->mint_class()));
+ __ CompareClassOfObject(EAX, Class::Handle(object_store->mint_class()), EAX);
__ j(NOT_EQUAL, &fall_through);
__ LoadObject(EAX, bool_false); // Smi == Mint -> false.
__ ret();
__ Bind(&receiver_not_smi);
// EAX:: receiver.
- __ movl(EAX, FieldAddress(EAX, Object::class_offset()));
- __ CompareObject(EAX, Class::ZoneHandle(object_store->mint_class()));
+ __ CompareClassOfObject(EAX, Class::Handle(object_store->mint_class()), EAX);
__ j(NOT_EQUAL, &fall_through);
// Receiver is Mint, return false if right is Smi.
__ movl(EAX, Address(ESP, + 1 * kWordSize)); // Right argument.
@@ -828,9 +827,8 @@ static void TestLastArgumentIsDouble(Assembler* assembler,
__ movl(EAX, Address(ESP, + 1 * kWordSize));
__ testl(EAX, Immediate(kSmiTagMask));
__ j(ZERO, is_smi, Assembler::kNearJump); // Jump if Smi.
- __ LoadObject(EBX, Class::ZoneHandle(
- Isolate::Current()->object_store()->double_class()));
- __ cmpl(EBX, FieldAddress(EAX, Object::class_offset()));
+ __ CompareClassOfObject(EAX, Class::Handle(
+ Isolate::Current()->object_store()->double_class()), EBX);
__ j(NOT_EQUAL, not_double_smi, Assembler::kNearJump);
// Fall through if double.
}
@@ -1253,9 +1251,9 @@ bool Intrinsifier::String_charCodeAt(Assembler* assembler) {
__ cmpl(EBX, FieldAddress(EAX, String::length_offset()));
// Runtime throws exception.
__ j(ABOVE_EQUAL, &fall_through, Assembler::kNearJump);
- __ movl(EDI, FieldAddress(EAX, Instance::class_offset()));
- __ CompareObject(EDI,
- Class::ZoneHandle(object_store->one_byte_string_class()));
+ __ CompareClassOfObject(EAX,
+ Class::Handle(object_store->one_byte_string_class()),
+ EDI);
__ j(NOT_EQUAL, &fall_through);
__ SmiUntag(EBX);
__ movzxb(EAX, FieldAddress(EAX, EBX, TIMES_1, OneByteString::data_offset()));

Powered by Google App Engine
This is Rietveld 408576698