Index: runtime/vm/intrinsifier_arm.cc |
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc |
index 2daafedeeafe74c9f895d599b153b6769e5c8c24..2397f340b3db7a4d26e40e7e62283039b4fe43cc 100644 |
--- a/runtime/vm/intrinsifier_arm.cc |
+++ b/runtime/vm/intrinsifier_arm.cc |
@@ -707,11 +707,14 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
__ tst(R1, Operand(kSmiTagMask)); // Check receiver. |
__ b(&receiver_not_smi, NE); |
- // Left (receiver) is Smi, return false if right is not Double. |
+ // Left (receiver) is Smi, return false if right is not Double or Fraction. |
// Note that an instance of Mint or Bigint never contains a value that can be |
// represented by Smi. |
- __ CompareClassId(R0, kDoubleCid, R2); |
+ __ LoadClassId(R2, R0); |
+ __ CompareImmediate(R2, kDoubleCid); |
+ __ b(&fall_through, EQ); |
+ __ CompareImmediate(R2, kFractionCid); |
__ b(&fall_through, EQ); |
__ LoadObject(R0, Bool::False()); // Smi == Mint -> false. |
__ Ret(); |