| Index: src/arm/codegen-arm.cc | 
| =================================================================== | 
| --- src/arm/codegen-arm.cc	(revision 4999) | 
| +++ src/arm/codegen-arm.cc	(working copy) | 
| @@ -748,38 +748,44 @@ | 
| JumpTarget* false_target) { | 
| // Note: The generated code snippet does not change stack variables. | 
| //       Only the condition code should be set. | 
| +  bool known_smi = frame_->KnownSmiAt(0); | 
| Register tos = frame_->PopToRegister(); | 
|  | 
| // Fast case checks | 
|  | 
| // Check if the value is 'false'. | 
| -  __ LoadRoot(ip, Heap::kFalseValueRootIndex); | 
| -  __ cmp(tos, ip); | 
| -  false_target->Branch(eq); | 
| +  if (!known_smi) { | 
| +    __ LoadRoot(ip, Heap::kFalseValueRootIndex); | 
| +    __ cmp(tos, ip); | 
| +    false_target->Branch(eq); | 
|  | 
| -  // Check if the value is 'true'. | 
| -  __ LoadRoot(ip, Heap::kTrueValueRootIndex); | 
| -  __ cmp(tos, ip); | 
| -  true_target->Branch(eq); | 
| +    // Check if the value is 'true'. | 
| +    __ LoadRoot(ip, Heap::kTrueValueRootIndex); | 
| +    __ cmp(tos, ip); | 
| +    true_target->Branch(eq); | 
|  | 
| -  // Check if the value is 'undefined'. | 
| -  __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); | 
| -  __ cmp(tos, ip); | 
| -  false_target->Branch(eq); | 
| +    // Check if the value is 'undefined'. | 
| +    __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); | 
| +    __ cmp(tos, ip); | 
| +    false_target->Branch(eq); | 
| +  } | 
|  | 
| // Check if the value is a smi. | 
| __ cmp(tos, Operand(Smi::FromInt(0))); | 
| -  false_target->Branch(eq); | 
| -  __ tst(tos, Operand(kSmiTagMask)); | 
| -  true_target->Branch(eq); | 
|  | 
| -  // Slow case: call the runtime. | 
| -  frame_->EmitPush(tos); | 
| -  frame_->CallRuntime(Runtime::kToBool, 1); | 
| -  // Convert the result (r0) to a condition code. | 
| -  __ LoadRoot(ip, Heap::kFalseValueRootIndex); | 
| -  __ cmp(r0, ip); | 
| +  if (!known_smi) { | 
| +    false_target->Branch(eq); | 
| +    __ tst(tos, Operand(kSmiTagMask)); | 
| +    true_target->Branch(eq); | 
|  | 
| +    // Slow case: call the runtime. | 
| +    frame_->EmitPush(tos); | 
| +    frame_->CallRuntime(Runtime::kToBool, 1); | 
| +    // Convert the result (r0) to a condition code. | 
| +    __ LoadRoot(ip, Heap::kFalseValueRootIndex); | 
| +    __ cmp(r0, ip); | 
| +  } | 
| + | 
| cc_reg_ = ne; | 
| } | 
|  | 
|  |