| 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()));
|
|
|