| Index: src/arm/macro-assembler-arm.cc
|
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
|
| index 7df0c0a1ff0514457fb37754902cc6072f789503..616d02d867f015696dc2d8e65b2884f04ca7299b 100644
|
| --- a/src/arm/macro-assembler-arm.cc
|
| +++ b/src/arm/macro-assembler-arm.cc
|
| @@ -51,44 +51,15 @@ MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size)
|
| }
|
|
|
|
|
| -// We always generate arm code, never thumb code, even if V8 is compiled to
|
| -// thumb, so we require inter-working support
|
| -#if defined(__thumb__) && !defined(USE_THUMB_INTERWORK)
|
| -#error "flag -mthumb-interwork missing"
|
| -#endif
|
| -
|
| -
|
| -// We do not support thumb inter-working with an arm architecture not supporting
|
| -// the blx instruction (below v5t). If you know what CPU you are compiling for
|
| -// you can use -march=armv7 or similar.
|
| -#if defined(USE_THUMB_INTERWORK) && !defined(CAN_USE_THUMB_INSTRUCTIONS)
|
| -# error "For thumb inter-working we require an architecture which supports blx"
|
| -#endif
|
| -
|
| -
|
| -// Using bx does not yield better code, so use it only when required
|
| -#if defined(USE_THUMB_INTERWORK)
|
| -#define USE_BX 1
|
| -#endif
|
| -
|
| -
|
| void MacroAssembler::Jump(Register target, Condition cond) {
|
| -#if USE_BX
|
| bx(target, cond);
|
| -#else
|
| - mov(pc, Operand(target), LeaveCC, cond);
|
| -#endif
|
| }
|
|
|
|
|
| void MacroAssembler::Jump(intptr_t target, RelocInfo::Mode rmode,
|
| Condition cond) {
|
| -#if USE_BX
|
| mov(ip, Operand(target, rmode));
|
| bx(ip, cond);
|
| -#else
|
| - mov(pc, Operand(target, rmode), LeaveCC, cond);
|
| -#endif
|
| }
|
|
|
|
|
| @@ -108,11 +79,7 @@ void MacroAssembler::Jump(Handle<Code> code, RelocInfo::Mode rmode,
|
|
|
|
|
| int MacroAssembler::CallSize(Register target, Condition cond) {
|
| -#ifdef USE_BLX
|
| return kInstrSize;
|
| -#else
|
| - return 2 * kInstrSize;
|
| -#endif
|
| }
|
|
|
|
|
| @@ -121,13 +88,7 @@ void MacroAssembler::Call(Register target, Condition cond) {
|
| BlockConstPoolScope block_const_pool(this);
|
| Label start;
|
| bind(&start);
|
| -#ifdef USE_BLX
|
| blx(target, cond);
|
| -#else
|
| - // set lr for return at current pc + 8
|
| - mov(lr, Operand(pc), LeaveCC, cond);
|
| - mov(pc, Operand(target), LeaveCC, cond);
|
| -#endif
|
| ASSERT_EQ(CallSize(target, cond), SizeOfCodeGeneratedSince(&start));
|
| }
|
|
|
| @@ -170,7 +131,6 @@ void MacroAssembler::Call(Address target,
|
| set_predictable_code_size(true);
|
| }
|
|
|
| -#ifdef USE_BLX
|
| // Call sequence on V7 or later may be :
|
| // movw ip, #... @ call address low 16
|
| // movt ip, #... @ call address high 16
|
| @@ -191,12 +151,6 @@ void MacroAssembler::Call(Address target,
|
| mov(ip, Operand(reinterpret_cast<int32_t>(target), rmode));
|
| blx(ip, cond);
|
|
|
| -#else
|
| - // 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(reinterpret_cast<int32_t>(target), rmode), LeaveCC, cond);
|
| -#endif
|
| ASSERT_EQ(CallSize(target, rmode, cond), SizeOfCodeGeneratedSince(&start));
|
| if (mode == NEVER_INLINE_TARGET_ADDRESS) {
|
| set_predictable_code_size(old_predictable_code_size);
|
| @@ -230,11 +184,7 @@ void MacroAssembler::Call(Handle<Code> code,
|
|
|
|
|
| void MacroAssembler::Ret(Condition cond) {
|
| -#if USE_BX
|
| bx(lr, cond);
|
| -#else
|
| - mov(pc, Operand(lr), LeaveCC, cond);
|
| -#endif
|
| }
|
|
|
|
|
| @@ -3226,44 +3176,6 @@ void MacroAssembler::InitializeFieldsWithFiller(Register start_offset,
|
| }
|
|
|
|
|
| -void MacroAssembler::CountLeadingZeros(Register zeros, // Answer.
|
| - Register source, // Input.
|
| - Register scratch) {
|
| - ASSERT(!zeros.is(source) || !source.is(scratch));
|
| - ASSERT(!zeros.is(scratch));
|
| - ASSERT(!scratch.is(ip));
|
| - ASSERT(!source.is(ip));
|
| - ASSERT(!zeros.is(ip));
|
| -#ifdef CAN_USE_ARMV5_INSTRUCTIONS
|
| - clz(zeros, source); // This instruction is only supported after ARM5.
|
| -#else
|
| - // Order of the next two lines is important: zeros register
|
| - // can be the same as source register.
|
| - Move(scratch, source);
|
| - mov(zeros, Operand::Zero());
|
| - // Top 16.
|
| - tst(scratch, Operand(0xffff0000));
|
| - add(zeros, zeros, Operand(16), LeaveCC, eq);
|
| - mov(scratch, Operand(scratch, LSL, 16), LeaveCC, eq);
|
| - // Top 8.
|
| - tst(scratch, Operand(0xff000000));
|
| - add(zeros, zeros, Operand(8), LeaveCC, eq);
|
| - mov(scratch, Operand(scratch, LSL, 8), LeaveCC, eq);
|
| - // Top 4.
|
| - tst(scratch, Operand(0xf0000000));
|
| - add(zeros, zeros, Operand(4), LeaveCC, eq);
|
| - mov(scratch, Operand(scratch, LSL, 4), LeaveCC, eq);
|
| - // Top 2.
|
| - tst(scratch, Operand(0xc0000000));
|
| - add(zeros, zeros, Operand(2), LeaveCC, eq);
|
| - mov(scratch, Operand(scratch, LSL, 2), LeaveCC, eq);
|
| - // Top bit.
|
| - tst(scratch, Operand(0x80000000u));
|
| - add(zeros, zeros, Operand(1), LeaveCC, eq);
|
| -#endif
|
| -}
|
| -
|
| -
|
| void MacroAssembler::CheckFor32DRegs(Register scratch) {
|
| mov(scratch, Operand(ExternalReference::cpu_features()));
|
| ldr(scratch, MemOperand(scratch));
|
|
|