| Index: src/full-codegen/x87/full-codegen-x87.cc
 | 
| diff --git a/src/full-codegen/x87/full-codegen-x87.cc b/src/full-codegen/x87/full-codegen-x87.cc
 | 
| index a7d4d50774f4a7c9e260c99ae5265ede0d70cf11..061954729b0add541f54d1815d6c293399bdc2ee 100644
 | 
| --- a/src/full-codegen/x87/full-codegen-x87.cc
 | 
| +++ b/src/full-codegen/x87/full-codegen-x87.cc
 | 
| @@ -3228,6 +3228,27 @@
 | 
|  
 | 
|    PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 | 
|    __ test(eax, Immediate(kSmiTagMask));
 | 
| +  Split(zero, if_true, if_false, fall_through);
 | 
| +
 | 
| +  context()->Plug(if_true, if_false);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void FullCodeGenerator::EmitIsNonNegativeSmi(CallRuntime* expr) {
 | 
| +  ZoneList<Expression*>* args = expr->arguments();
 | 
| +  DCHECK(args->length() == 1);
 | 
| +
 | 
| +  VisitForAccumulatorValue(args->at(0));
 | 
| +
 | 
| +  Label materialize_true, materialize_false;
 | 
| +  Label* if_true = NULL;
 | 
| +  Label* if_false = NULL;
 | 
| +  Label* fall_through = NULL;
 | 
| +  context()->PrepareTest(&materialize_true, &materialize_false,
 | 
| +                         &if_true, &if_false, &fall_through);
 | 
| +
 | 
| +  PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 | 
| +  __ test(eax, Immediate(kSmiTagMask | 0x80000000));
 | 
|    Split(zero, if_true, if_false, fall_through);
 | 
|  
 | 
|    context()->Plug(if_true, if_false);
 | 
| @@ -5021,7 +5042,7 @@
 | 
|    switch (op) {
 | 
|      case Token::IN:
 | 
|        VisitForStackValue(expr->right());
 | 
| -      __ CallRuntime(Runtime::kHasProperty, 2);
 | 
| +      __ InvokeBuiltin(Builtins::IN, CALL_FUNCTION);
 | 
|        PrepareForBailoutBeforeSplit(expr, false, NULL, NULL);
 | 
|        __ cmp(eax, isolate()->factory()->true_value());
 | 
|        Split(equal, if_true, if_false, fall_through);
 | 
| 
 |