| Index: src/arm/macro-assembler-arm.cc
|
| ===================================================================
|
| --- src/arm/macro-assembler-arm.cc (revision 7154)
|
| +++ src/arm/macro-assembler-arm.cc (working copy)
|
| @@ -113,6 +113,8 @@
|
|
|
|
|
| void MacroAssembler::Call(Register target, Condition cond) {
|
| + // Block constant pool for the call instruction sequence.
|
| + BlockConstPoolScope block_const_pool(this);
|
| #ifdef DEBUG
|
| int pre_position = pc_offset();
|
| #endif
|
| @@ -121,10 +123,8 @@
|
| blx(target, cond);
|
| #else
|
| // set lr for return at current pc + 8
|
| - { BlockConstPoolScope block_const_pool(this);
|
| - mov(lr, Operand(pc), LeaveCC, cond);
|
| - mov(pc, Operand(target), LeaveCC, cond);
|
| - }
|
| + mov(lr, Operand(pc), LeaveCC, cond);
|
| + mov(pc, Operand(target), LeaveCC, cond);
|
| #endif
|
|
|
| #ifdef DEBUG
|
| @@ -147,6 +147,8 @@
|
|
|
| void MacroAssembler::Call(
|
| intptr_t target, RelocInfo::Mode rmode, Condition cond) {
|
| + // Block constant pool for the call instruction sequence.
|
| + BlockConstPoolScope block_const_pool(this);
|
| #ifdef DEBUG
|
| int pre_position = pc_offset();
|
| #endif
|
| @@ -156,28 +158,21 @@
|
| // ldr ip, [pc, #...]
|
| // blx ip
|
|
|
| - // The two instructions (ldr and blx) could be separated by a constant
|
| - // pool and the code would still work. The issue comes from the
|
| - // patching code which expect the ldr to be just above the blx.
|
| - { BlockConstPoolScope block_const_pool(this);
|
| - // Statement positions are expected to be recorded when the target
|
| - // address is loaded. The mov method will automatically record
|
| - // positions when pc is the target, since this is not the case here
|
| - // we have to do it explicitly.
|
| - positions_recorder()->WriteRecordedPositions();
|
| + // Statement positions are expected to be recorded when the target
|
| + // address is loaded. The mov method will automatically record
|
| + // positions when pc is the target, since this is not the case here
|
| + // we have to do it explicitly.
|
| + positions_recorder()->WriteRecordedPositions();
|
|
|
| - mov(ip, Operand(target, rmode), LeaveCC, cond);
|
| - blx(ip, cond);
|
| - }
|
| + mov(ip, Operand(target, rmode), LeaveCC, cond);
|
| + blx(ip, cond);
|
|
|
| ASSERT(kCallTargetAddressOffset == 2 * kInstrSize);
|
| #else
|
| - { BlockConstPoolScope block_const_pool(this);
|
| - // Set lr for return at current pc + 8.
|
| - mov(lr, Operand(pc), LeaveCC, cond);
|
| - // Emit a ldr<cond> pc, [pc + offset of target in constant pool].
|
| - mov(pc, Operand(target, rmode), LeaveCC, cond);
|
| - }
|
| + // Set lr for return at current pc + 8.
|
| + mov(lr, Operand(pc), LeaveCC, cond);
|
| + // Emit a ldr<cond> pc, [pc + offset of target in constant pool].
|
| + mov(pc, Operand(target, rmode), LeaveCC, cond);
|
| ASSERT(kCallTargetAddressOffset == kInstrSize);
|
| #endif
|
|
|
|
|