| Index: runtime/vm/intrinsifier_ia32.cc | 
| =================================================================== | 
| --- runtime/vm/intrinsifier_ia32.cc	(revision 9596) | 
| +++ runtime/vm/intrinsifier_ia32.cc	(working copy) | 
| @@ -804,7 +804,8 @@ | 
| } | 
|  | 
|  | 
| -// This is called for Smi, Mint and Bigint receivers. Bigints are not handled. | 
| +// This is called for Smi, Mint and Bigint receivers. The right argument | 
| +// can be Smi, Mint, Bigint or double. | 
| bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) { | 
| Label fall_through, true_label, check_for_mint; | 
| const Bool& bool_true = Bool::ZoneHandle(Bool::True()); | 
| @@ -824,20 +825,19 @@ | 
| __ LoadObject(EAX, bool_true); | 
| __ ret(); | 
|  | 
| -  // At least one of the arguments was not Smi, inline code for Smi/Mint | 
| -  // equality comparison. | 
| +  // At least one of the arguments was not Smi. | 
| Label receiver_not_smi; | 
| __ Bind(&check_for_mint); | 
| __ movl(EAX, Address(ESP, + 2 * kWordSize));  // Receiver. | 
| __ testl(EAX, Immediate(kSmiTagMask)); | 
| __ j(NOT_ZERO, &receiver_not_smi); | 
|  | 
| -  // Note that an instance of Mint never contains a value that can be | 
| +  // Left (receiver) is Smi, return false if right is not Double. | 
| +  // Note that an instance of Mint or Bigint never contains a value that can be | 
| // represented by Smi. | 
| -  // Left is Smi, return false if right is Mint, otherwise fall through. | 
| __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Right argument. | 
| -  __ CompareClassId(EAX, kMint, EDI); | 
| -  __ j(NOT_EQUAL, &fall_through); | 
| +  __ CompareClassId(EAX, kDouble, EDI); | 
| +  __ j(EQUAL, &fall_through); | 
| __ LoadObject(EAX, bool_false);  // Smi == Mint -> false. | 
| __ ret(); | 
|  | 
| @@ -849,7 +849,7 @@ | 
| __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Right argument. | 
| __ testl(EAX, Immediate(kSmiTagMask)); | 
| __ j(NOT_ZERO, &fall_through); | 
| -  __ LoadObject(EAX, bool_false);  // Smi == Mint -> false. | 
| +  __ LoadObject(EAX, bool_false); | 
| __ ret(); | 
| // TODO(srdjan): Implement Mint == Mint comparison. | 
|  | 
| @@ -890,16 +890,13 @@ | 
| } | 
|  | 
|  | 
| +// Argument is Smi (receiver). | 
| bool Intrinsifier::Smi_bitNegate(Assembler* assembler) { | 
| -  Label fall_through; | 
| __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Index. | 
| -  __ testl(EAX, Immediate(kSmiTagMask)); | 
| -  __ j(NOT_ZERO, &fall_through, Assembler::kNearJump);  // Non-smi. | 
| __ notl(EAX); | 
| __ andl(EAX, Immediate(~kSmiTagMask));  // Remove inverted smi-tag. | 
| __ ret(); | 
| -  __ Bind(&fall_through); | 
| -  return false; | 
| +  return true; | 
| } | 
|  | 
|  | 
| @@ -988,12 +985,12 @@ | 
| } | 
|  | 
|  | 
| -// Expects EAX to contain right argument, left argument is on stack. Left | 
| -// argument is double, right argument is of unknown type. | 
| +// Expects left argument to be double (receiver). Right argument is unknown. | 
| +// Both arguments are on stack. | 
| static bool DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { | 
| Label fall_through; | 
| TestLastArgumentIsDouble(assembler, &fall_through, &fall_through); | 
| -  // Both arguments are double, right operand is in EAX, class in EBX. | 
| +  // Both arguments are double, right operand is in EAX. | 
| __ movsd(XMM1, FieldAddress(EAX, Double::value_offset())); | 
| __ movl(EAX, Address(ESP, + 2 * kWordSize));  // Left argument. | 
| __ movsd(XMM0, FieldAddress(EAX, Double::value_offset())); | 
| @@ -1037,7 +1034,7 @@ | 
| } | 
|  | 
|  | 
| -// Left is double right is integer (bigint or Smi) | 
| +// Left is double right is integer (Bigint, Mint or Smi) | 
| bool Intrinsifier::Double_mulFromInteger(Assembler* assembler) { | 
| Label fall_through; | 
| // Only Smi-s allowed. | 
|  |