Index: runtime/vm/intrinsifier_x64.cc |
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc |
index cdb11df87889566bef98ccde1b8fa09180d47a1d..3837aa5f6d3ecde070ea89e266e195ae757fb443 100644 |
--- a/runtime/vm/intrinsifier_x64.cc |
+++ b/runtime/vm/intrinsifier_x64.cc |
@@ -660,11 +660,14 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
__ testq(RAX, Immediate(kSmiTagMask)); |
__ j(NOT_ZERO, &receiver_not_smi); |
- // 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. |
__ movq(RAX, Address(RSP, + kArgumentOffset * kWordSize)); |
- __ CompareClassId(RAX, kDoubleCid); |
+ __ LoadClassId(TMP, RAX); |
+ __ cmpl(TMP, Immediate(kDoubleCid)); |
+ __ j(EQUAL, &fall_through); |
+ __ cmpl(TMP, Immediate(kFractionCid)); |
__ j(EQUAL, &fall_through); |
__ LoadObject(RAX, Bool::False()); |
__ ret(); |