| Index: src/arm/assembler-arm.cc
|
| diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc
|
| index 0860bd2ffb51feefb1e40bc5870d12a87306fdfd..9be62a404bd2935864095744d1d4fa8a985a937b 100644
|
| --- a/src/arm/assembler-arm.cc
|
| +++ b/src/arm/assembler-arm.cc
|
| @@ -900,13 +900,17 @@ void Assembler::addrmod1(Instr instr,
|
| if ((instr & ~kCondMask) == 13*B21) { // mov, S not set
|
| move_32_bit_immediate(cond, rd, LeaveCC, x);
|
| } else {
|
| - // If this is not a mov or mvn instruction we may still be able to avoid
|
| - // a constant pool entry by using mvn or movw.
|
| - if (!x.must_output_reloc_info(this) &&
|
| - (instr & kMovMvnMask) != kMovMvnPattern) {
|
| - mov(ip, x, LeaveCC, cond);
|
| - } else {
|
| + if ((instr & kMovMvnMask) == kMovMvnPattern) {
|
| + // Moves need to use a constant pool entry.
|
| + RecordRelocInfo(x.rmode_, x.imm32_, USE_CONSTANT_POOL);
|
| + ldr(ip, MemOperand(pc, 0), cond);
|
| + } else if (x.must_output_reloc_info(this)) {
|
| + // Otherwise, use most efficient form of fetching from constant pool.
|
| move_32_bit_immediate(cond, ip, LeaveCC, x);
|
| + } else {
|
| + // If this is not a mov or mvn instruction we may still be able to
|
| + // avoid a constant pool entry by using mvn or movw.
|
| + mov(ip, x, LeaveCC, cond);
|
| }
|
| addrmod1(instr, rn, rd, Operand(ip));
|
| }
|
|
|