| Index: src/arm/assembler-arm.cc | 
| diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc | 
| index da8e4327ce6588560ca2325ce68fd0df66e0079a..4ad0d706ebff29a3706a34e605ad732e9b128ed9 100644 | 
| --- a/src/arm/assembler-arm.cc | 
| +++ b/src/arm/assembler-arm.cc | 
| @@ -848,6 +848,19 @@ void Assembler::target_at_put(int pos, int target_pos) { | 
| // Load the position of the label relative to the generated code object | 
| // pointer in a register. | 
|  | 
| +    // The existing code must be a single 24-bit label chain link, followed by | 
| +    // nops encoding the destination register. See mov_label_offset. | 
| + | 
| +    // Extract the destination register from the first nop instructions. | 
| +    Register dst = | 
| +        Register::from_code(Instruction::RmValue(instr_at(pos + kInstrSize))); | 
| +    // In addition to the 24-bit label chain link, we expect to find one nop for | 
| +    // ARMv7 and above, or two nops for ARMv6. See mov_label_offset. | 
| +    DCHECK(IsNop(instr_at(pos + kInstrSize), dst.code())); | 
| +    if (!CpuFeatures::IsSupported(ARMv7)) { | 
| +      DCHECK(IsNop(instr_at(pos + 2 * kInstrSize), dst.code())); | 
| +    } | 
| + | 
| // Here are the instructions we need to emit: | 
| //   For ARMv7: target24 => target16_1:target16_0 | 
| //      movw dst, #target16_0 | 
| @@ -857,10 +870,6 @@ void Assembler::target_at_put(int pos, int target_pos) { | 
| //      orr dst, dst, #target8_1 << 8 | 
| //      orr dst, dst, #target8_2 << 16 | 
|  | 
| -    // We extract the destination register from the emitted nop instruction. | 
| -    Register dst = Register::from_code( | 
| -        Instruction::RmValue(instr_at(pos + kInstrSize))); | 
| -    DCHECK(IsNop(instr_at(pos + kInstrSize), dst.code())); | 
| uint32_t target24 = target_pos + (Code::kHeaderSize - kHeapObjectTag); | 
| DCHECK(is_uint24(target24)); | 
| if (is_uint8(target24)) { | 
|  |