| Index: src/arm/lithium-codegen-arm.cc
 | 
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
 | 
| index 23bfb2144bc658088a111f6e0c235c4c123a3b1d..456b16832792abd77040f6d4ef8bfe025a0a239e 100644
 | 
| --- a/src/arm/lithium-codegen-arm.cc
 | 
| +++ b/src/arm/lithium-codegen-arm.cc
 | 
| @@ -2790,20 +2790,31 @@ void LCodeGen::DoStringCharCodeAt(LStringCharCodeAt* instr) {
 | 
|      LStringCharCodeAt* instr_;
 | 
|    };
 | 
|  
 | 
| -  DeferredStringCharCodeAt* deferred
 | 
| -      = new DeferredStringCharCodeAt(this, instr);
 | 
| -
 | 
|    Register scratch = scratch0();
 | 
|    Register string = ToRegister(instr->string());
 | 
|    Register index = no_reg;
 | 
|    int const_index = -1;
 | 
|    if (instr->index()->IsConstantOperand()) {
 | 
|      const_index = ToInteger32(LConstantOperand::cast(instr->index()));
 | 
| +    STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue);
 | 
| +    if (!Smi::IsValid(const_index)) {
 | 
| +      // Guaranteed to be out of bounds because of the assert above.
 | 
| +      // So the bounds check that must dominate this instruction must
 | 
| +      // have deoptimized already.
 | 
| +      if (FLAG_debug_code) {
 | 
| +        __ Abort("StringCharCodeAt: out of bounds index.");
 | 
| +      }
 | 
| +      // No code needs to be generated.
 | 
| +      return;
 | 
| +    }
 | 
|    } else {
 | 
|      index = ToRegister(instr->index());
 | 
|    }
 | 
|    Register result = ToRegister(instr->result());
 | 
|  
 | 
| +  DeferredStringCharCodeAt* deferred =
 | 
| +      new DeferredStringCharCodeAt(this, instr);
 | 
| +
 | 
|    Label flat_string, ascii_string, done;
 | 
|  
 | 
|    // Fetch the instance type of the receiver into result register.
 | 
| @@ -2887,7 +2898,8 @@ void LCodeGen::DoDeferredStringCharCodeAt(LStringCharCodeAt* instr) {
 | 
|  
 | 
|    __ PushSafepointRegisters();
 | 
|    __ push(string);
 | 
| -  // Push the index as a smi.
 | 
| +  // Push the index as a smi. This is safe because of the checks in
 | 
| +  // DoStringCharCodeAt above.
 | 
|    if (instr->index()->IsConstantOperand()) {
 | 
|      int const_index = ToInteger32(LConstantOperand::cast(instr->index()));
 | 
|      __ mov(scratch, Operand(Smi::FromInt(const_index)));
 | 
| 
 |