| Index: runtime/vm/assembler_arm.cc
|
| ===================================================================
|
| --- runtime/vm/assembler_arm.cc (revision 36715)
|
| +++ runtime/vm/assembler_arm.cc (working copy)
|
| @@ -115,7 +115,7 @@
|
| int set_cc,
|
| Register rn,
|
| Register rd,
|
| - ShifterOperand so) {
|
| + Operand o) {
|
| ASSERT(rd != kNoRegister);
|
| ASSERT(cond != kNoCondition);
|
| int32_t encoding = static_cast<int32_t>(cond) << kConditionShift |
|
| @@ -124,7 +124,7 @@
|
| set_cc << kSShift |
|
| static_cast<int32_t>(rn) << kRnShift |
|
| static_cast<int32_t>(rd) << kRdShift |
|
| - so.encoding();
|
| + o.encoding();
|
| Emit(encoding);
|
| }
|
|
|
| @@ -190,13 +190,13 @@
|
| Shift opcode,
|
| Register rd,
|
| Register rm,
|
| - ShifterOperand so) {
|
| + Operand o) {
|
| ASSERT(cond != kNoCondition);
|
| - ASSERT(so.type() == 1);
|
| + ASSERT(o.type() == 1);
|
| int32_t encoding = static_cast<int32_t>(cond) << kConditionShift |
|
| static_cast<int32_t>(MOV) << kOpcodeShift |
|
| static_cast<int32_t>(rd) << kRdShift |
|
| - so.encoding() << kShiftImmShift |
|
| + o.encoding() << kShiftImmShift |
|
| static_cast<int32_t>(opcode) << kShiftShift |
|
| static_cast<int32_t>(rm);
|
| Emit(encoding);
|
| @@ -207,13 +207,13 @@
|
| Shift opcode,
|
| Register rd,
|
| Register rm,
|
| - ShifterOperand so) {
|
| + Operand o) {
|
| ASSERT(cond != kNoCondition);
|
| - ASSERT(so.type() == 0);
|
| + ASSERT(o.type() == 0);
|
| int32_t encoding = static_cast<int32_t>(cond) << kConditionShift |
|
| static_cast<int32_t>(MOV) << kOpcodeShift |
|
| static_cast<int32_t>(rd) << kRdShift |
|
| - so.encoding() << kShiftRegisterShift |
|
| + o.encoding() << kShiftRegisterShift |
|
| static_cast<int32_t>(opcode) << kShiftShift |
|
| B4 |
|
| static_cast<int32_t>(rm);
|
| @@ -221,143 +221,126 @@
|
| }
|
|
|
|
|
| -void Assembler::and_(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), AND, 0, rn, rd, so);
|
| +void Assembler::and_(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), AND, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::eor(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), EOR, 0, rn, rd, so);
|
| +void Assembler::eor(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), EOR, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::sub(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), SUB, 0, rn, rd, so);
|
| +void Assembler::sub(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), SUB, 0, rn, rd, o);
|
| }
|
|
|
| -void Assembler::rsb(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), RSB, 0, rn, rd, so);
|
| +void Assembler::rsb(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), RSB, 0, rn, rd, o);
|
| }
|
|
|
| -void Assembler::rsbs(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), RSB, 1, rn, rd, so);
|
| +void Assembler::rsbs(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), RSB, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::add(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ADD, 0, rn, rd, so);
|
| +void Assembler::add(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ADD, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::adds(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ADD, 1, rn, rd, so);
|
| +void Assembler::adds(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ADD, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::subs(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), SUB, 1, rn, rd, so);
|
| +void Assembler::subs(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), SUB, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::adc(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ADC, 0, rn, rd, so);
|
| +void Assembler::adc(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ADC, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::adcs(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ADC, 1, rn, rd, so);
|
| +void Assembler::adcs(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ADC, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::sbc(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), SBC, 0, rn, rd, so);
|
| +void Assembler::sbc(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), SBC, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::sbcs(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), SBC, 1, rn, rd, so);
|
| +void Assembler::sbcs(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), SBC, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::rsc(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), RSC, 0, rn, rd, so);
|
| +void Assembler::rsc(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), RSC, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::tst(Register rn, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), TST, 1, rn, R0, so);
|
| +void Assembler::tst(Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), TST, 1, rn, R0, o);
|
| }
|
|
|
|
|
| -void Assembler::teq(Register rn, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), TEQ, 1, rn, R0, so);
|
| +void Assembler::teq(Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), TEQ, 1, rn, R0, o);
|
| }
|
|
|
|
|
| -void Assembler::cmp(Register rn, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), CMP, 1, rn, R0, so);
|
| +void Assembler::cmp(Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), CMP, 1, rn, R0, o);
|
| }
|
|
|
|
|
| -void Assembler::cmn(Register rn, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), CMN, 1, rn, R0, so);
|
| +void Assembler::cmn(Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), CMN, 1, rn, R0, o);
|
| }
|
|
|
|
|
| -void Assembler::orr(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ORR, 0, rn, rd, so);
|
| +void Assembler::orr(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ORR, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::orrs(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), ORR, 1, rn, rd, so);
|
| +void Assembler::orrs(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), ORR, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::mov(Register rd, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), MOV, 0, R0, rd, so);
|
| +void Assembler::mov(Register rd, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), MOV, 0, R0, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::movs(Register rd, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), MOV, 1, R0, rd, so);
|
| +void Assembler::movs(Register rd, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), MOV, 1, R0, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::bic(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), BIC, 0, rn, rd, so);
|
| +void Assembler::bic(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), BIC, 0, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::bics(Register rd, Register rn, ShifterOperand so,
|
| - Condition cond) {
|
| - EmitType01(cond, so.type(), BIC, 1, rn, rd, so);
|
| +void Assembler::bics(Register rd, Register rn, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), BIC, 1, rn, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::mvn(Register rd, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), MVN, 0, R0, rd, so);
|
| +void Assembler::mvn(Register rd, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), MVN, 0, R0, rd, o);
|
| }
|
|
|
|
|
| -void Assembler::mvns(Register rd, ShifterOperand so, Condition cond) {
|
| - EmitType01(cond, so.type(), MVN, 1, R0, rd, so);
|
| +void Assembler::mvns(Register rd, Operand o, Condition cond) {
|
| + EmitType01(cond, o.type(), MVN, 1, R0, rd, o);
|
| }
|
|
|
|
|
| @@ -412,16 +395,14 @@
|
| }
|
|
|
|
|
| -void Assembler::mul(Register rd, Register rn,
|
| - Register rm, Condition cond) {
|
| +void Assembler::mul(Register rd, Register rn, Register rm, Condition cond) {
|
| // Assembler registers rd, rn, rm are encoded as rn, rm, rs.
|
| EmitMulOp(cond, 0, R0, rd, rn, rm);
|
| }
|
|
|
|
|
| // Like mul, but sets condition flags.
|
| -void Assembler::muls(Register rd, Register rn,
|
| - Register rm, Condition cond) {
|
| +void Assembler::muls(Register rd, Register rn, Register rm, Condition cond) {
|
| EmitMulOp(cond, B20, R0, rd, rn, rm);
|
| }
|
|
|
| @@ -434,7 +415,7 @@
|
| EmitMulOp(cond, B21, ra, rd, rn, rm);
|
| } else {
|
| mul(IP, rn, rm, cond);
|
| - add(rd, ra, ShifterOperand(IP), cond);
|
| + add(rd, ra, Operand(IP), cond);
|
| }
|
| }
|
|
|
| @@ -447,7 +428,7 @@
|
| EmitMulOp(cond, B22 | B21, ra, rd, rn, rm);
|
| } else {
|
| mul(IP, rn, rm, cond);
|
| - sub(rd, ra, ShifterOperand(IP), cond);
|
| + sub(rd, ra, Operand(IP), cond);
|
| }
|
| }
|
|
|
| @@ -1499,7 +1480,7 @@
|
|
|
|
|
| void Assembler::MarkExceptionHandler(Label* label) {
|
| - EmitType01(AL, 1, TST, 1, PC, R0, ShifterOperand(0));
|
| + EmitType01(AL, 1, TST, 1, PC, R0, Operand(0));
|
| Label l;
|
| b(&l);
|
| EmitBranch(AL, label, false);
|
| @@ -1527,12 +1508,12 @@
|
| int32_t offset_hi = offset & ~offset_mask; // signed
|
| uint32_t offset_lo = offset & offset_mask; // unsigned
|
| // Inline a simplified version of AddImmediate(rd, PP, offset_hi).
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(offset_hi, &shifter_op)) {
|
| - add(rd, PP, shifter_op, cond);
|
| + Operand o;
|
| + if (Operand::CanHold(offset_hi, &o)) {
|
| + add(rd, PP, o, cond);
|
| } else {
|
| LoadImmediate(rd, offset_hi, cond);
|
| - add(rd, PP, ShifterOperand(LR), cond);
|
| + add(rd, PP, Operand(LR), cond);
|
| }
|
| ldr(rd, Address(rd, offset_lo), cond);
|
| }
|
| @@ -1577,7 +1558,7 @@
|
| CompareImmediate(rn, reinterpret_cast<int32_t>(object.raw()));
|
| } else {
|
| LoadObject(IP, object);
|
| - cmp(rn, ShifterOperand(IP));
|
| + cmp(rn, Operand(IP));
|
| }
|
| }
|
|
|
| @@ -1593,8 +1574,8 @@
|
| // the object is in the old space (has bit cleared).
|
| // To check that, we compute value & ~object and skip the write barrier
|
| // if the bit is not set. We can't destroy the object.
|
| - bic(IP, value, ShifterOperand(object));
|
| - tst(IP, ShifterOperand(kNewObjectAlignmentOffset));
|
| + bic(IP, value, Operand(object));
|
| + tst(IP, Operand(kNewObjectAlignmentOffset));
|
| b(no_update, EQ);
|
| }
|
|
|
| @@ -1605,10 +1586,10 @@
|
| Label* no_update) {
|
| // For the value we are only interested in the new/old bit and the tag bit.
|
| // And the new bit with the tag bit. The resulting bit will be 0 for a Smi.
|
| - and_(IP, value, ShifterOperand(value, LSL, kObjectAlignmentLog2 - 1));
|
| + and_(IP, value, Operand(value, LSL, kObjectAlignmentLog2 - 1));
|
| // And the result with the negated space bit of the object.
|
| - bic(IP, IP, ShifterOperand(object));
|
| - tst(IP, ShifterOperand(kNewObjectAlignmentOffset));
|
| + bic(IP, IP, Operand(object));
|
| + tst(IP, Operand(kNewObjectAlignmentOffset));
|
| b(no_update, EQ);
|
| }
|
|
|
| @@ -1632,7 +1613,7 @@
|
| }
|
| PushList(regs);
|
| if (object != R0) {
|
| - mov(R0, ShifterOperand(object));
|
| + mov(R0, Operand(object));
|
| }
|
| BranchLink(&StubCode::UpdateStoreBufferLabel());
|
| PopList(regs);
|
| @@ -2171,7 +2152,7 @@
|
|
|
| void Assembler::MoveRegister(Register rd, Register rm, Condition cond) {
|
| if (rd != rm) {
|
| - mov(rd, ShifterOperand(rm), cond);
|
| + mov(rd, Operand(rm), cond);
|
| }
|
| }
|
|
|
| @@ -2179,12 +2160,12 @@
|
| void Assembler::Lsl(Register rd, Register rm, uint32_t shift_imm,
|
| Condition cond) {
|
| ASSERT(shift_imm != 0); // Do not use Lsl if no shift is wanted.
|
| - mov(rd, ShifterOperand(rm, LSL, shift_imm), cond);
|
| + mov(rd, Operand(rm, LSL, shift_imm), cond);
|
| }
|
|
|
|
|
| void Assembler::Lsl(Register rd, Register rm, Register rs, Condition cond) {
|
| - mov(rd, ShifterOperand(rm, LSL, rs), cond);
|
| + mov(rd, Operand(rm, LSL, rs), cond);
|
| }
|
|
|
|
|
| @@ -2192,12 +2173,12 @@
|
| Condition cond) {
|
| ASSERT(shift_imm != 0); // Do not use Lsr if no shift is wanted.
|
| if (shift_imm == 32) shift_imm = 0; // Comply to UAL syntax.
|
| - mov(rd, ShifterOperand(rm, LSR, shift_imm), cond);
|
| + mov(rd, Operand(rm, LSR, shift_imm), cond);
|
| }
|
|
|
|
|
| void Assembler::Lsr(Register rd, Register rm, Register rs, Condition cond) {
|
| - mov(rd, ShifterOperand(rm, LSR, rs), cond);
|
| + mov(rd, Operand(rm, LSR, rs), cond);
|
| }
|
|
|
|
|
| @@ -2205,29 +2186,29 @@
|
| Condition cond) {
|
| ASSERT(shift_imm != 0); // Do not use Asr if no shift is wanted.
|
| if (shift_imm == 32) shift_imm = 0; // Comply to UAL syntax.
|
| - mov(rd, ShifterOperand(rm, ASR, shift_imm), cond);
|
| + mov(rd, Operand(rm, ASR, shift_imm), cond);
|
| }
|
|
|
|
|
| void Assembler::Asr(Register rd, Register rm, Register rs, Condition cond) {
|
| - mov(rd, ShifterOperand(rm, ASR, rs), cond);
|
| + mov(rd, Operand(rm, ASR, rs), cond);
|
| }
|
|
|
|
|
| void Assembler::Ror(Register rd, Register rm, uint32_t shift_imm,
|
| Condition cond) {
|
| ASSERT(shift_imm != 0); // Use Rrx instruction.
|
| - mov(rd, ShifterOperand(rm, ROR, shift_imm), cond);
|
| + mov(rd, Operand(rm, ROR, shift_imm), cond);
|
| }
|
|
|
|
|
| void Assembler::Ror(Register rd, Register rm, Register rs, Condition cond) {
|
| - mov(rd, ShifterOperand(rm, ROR, rs), cond);
|
| + mov(rd, Operand(rm, ROR, rs), cond);
|
| }
|
|
|
|
|
| void Assembler::Rrx(Register rd, Register rm, Condition cond) {
|
| - mov(rd, ShifterOperand(rm, ROR, 0), cond);
|
| + mov(rd, Operand(rm, ROR, 0), cond);
|
| }
|
|
|
|
|
| @@ -2345,10 +2326,10 @@
|
| const uint32_t byte1 = (value & 0x0000ff00) >> 8;
|
| const uint32_t byte2 = (value & 0x00ff0000) >> 16;
|
| const uint32_t byte3 = (value & 0xff000000) >> 24;
|
| - mov(rd, ShifterOperand(4, byte3), cond);
|
| - orr(rd, rd, ShifterOperand(8, byte2), cond);
|
| - orr(rd, rd, ShifterOperand(12, byte1), cond);
|
| - orr(rd, rd, ShifterOperand(byte0), cond);
|
| + mov(rd, Operand(4, byte3), cond);
|
| + orr(rd, rd, Operand(8, byte2), cond);
|
| + orr(rd, rd, Operand(12, byte1), cond);
|
| + orr(rd, rd, Operand(byte0), cond);
|
| } else {
|
| ASSERT(version == ARMv7);
|
| const uint16_t value_low = Utils::Low16Bits(value);
|
| @@ -2376,11 +2357,11 @@
|
|
|
|
|
| void Assembler::LoadImmediate(Register rd, int32_t value, Condition cond) {
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(value, &shifter_op)) {
|
| - mov(rd, shifter_op, cond);
|
| - } else if (ShifterOperand::CanHold(~value, &shifter_op)) {
|
| - mvn(rd, shifter_op, cond);
|
| + Operand o;
|
| + if (Operand::CanHold(value, &o)) {
|
| + mov(rd, o, cond);
|
| + } else if (Operand::CanHold(~value, &o)) {
|
| + mvn(rd, o, cond);
|
| } else {
|
| LoadDecodableImmediate(rd, value, cond);
|
| }
|
| @@ -2645,29 +2626,29 @@
|
| Condition cond) {
|
| if (value == 0) {
|
| if (rd != rn) {
|
| - mov(rd, ShifterOperand(rn), cond);
|
| + mov(rd, Operand(rn), cond);
|
| }
|
| return;
|
| }
|
| // We prefer to select the shorter code sequence rather than selecting add for
|
| // positive values and sub for negatives ones, which would slightly improve
|
| // the readability of generated code for some constants.
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(value, &shifter_op)) {
|
| - add(rd, rn, shifter_op, cond);
|
| - } else if (ShifterOperand::CanHold(-value, &shifter_op)) {
|
| - sub(rd, rn, shifter_op, cond);
|
| + Operand o;
|
| + if (Operand::CanHold(value, &o)) {
|
| + add(rd, rn, o, cond);
|
| + } else if (Operand::CanHold(-value, &o)) {
|
| + sub(rd, rn, o, cond);
|
| } else {
|
| ASSERT(rn != IP);
|
| - if (ShifterOperand::CanHold(~value, &shifter_op)) {
|
| - mvn(IP, shifter_op, cond);
|
| - add(rd, rn, ShifterOperand(IP), cond);
|
| - } else if (ShifterOperand::CanHold(~(-value), &shifter_op)) {
|
| - mvn(IP, shifter_op, cond);
|
| - sub(rd, rn, ShifterOperand(IP), cond);
|
| + if (Operand::CanHold(~value, &o)) {
|
| + mvn(IP, o, cond);
|
| + add(rd, rn, Operand(IP), cond);
|
| + } else if (Operand::CanHold(~(-value), &o)) {
|
| + mvn(IP, o, cond);
|
| + sub(rd, rn, Operand(IP), cond);
|
| } else {
|
| LoadDecodableImmediate(IP, value, cond);
|
| - add(rd, rn, ShifterOperand(IP), cond);
|
| + add(rd, rn, Operand(IP), cond);
|
| }
|
| }
|
| }
|
| @@ -2675,25 +2656,25 @@
|
|
|
| void Assembler::AddImmediateSetFlags(Register rd, Register rn, int32_t value,
|
| Condition cond) {
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(value, &shifter_op)) {
|
| + Operand o;
|
| + if (Operand::CanHold(value, &o)) {
|
| // Handles value == kMinInt32.
|
| - adds(rd, rn, shifter_op, cond);
|
| - } else if (ShifterOperand::CanHold(-value, &shifter_op)) {
|
| + adds(rd, rn, o, cond);
|
| + } else if (Operand::CanHold(-value, &o)) {
|
| ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
|
| - subs(rd, rn, shifter_op, cond);
|
| + subs(rd, rn, o, cond);
|
| } else {
|
| ASSERT(rn != IP);
|
| - if (ShifterOperand::CanHold(~value, &shifter_op)) {
|
| - mvn(IP, shifter_op, cond);
|
| - adds(rd, rn, ShifterOperand(IP), cond);
|
| - } else if (ShifterOperand::CanHold(~(-value), &shifter_op)) {
|
| + if (Operand::CanHold(~value, &o)) {
|
| + mvn(IP, o, cond);
|
| + adds(rd, rn, Operand(IP), cond);
|
| + } else if (Operand::CanHold(~(-value), &o)) {
|
| ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
|
| - mvn(IP, shifter_op, cond);
|
| - subs(rd, rn, ShifterOperand(IP), cond);
|
| + mvn(IP, o, cond);
|
| + subs(rd, rn, Operand(IP), cond);
|
| } else {
|
| LoadDecodableImmediate(IP, value, cond);
|
| - adds(rd, rn, ShifterOperand(IP), cond);
|
| + adds(rd, rn, Operand(IP), cond);
|
| }
|
| }
|
| }
|
| @@ -2701,25 +2682,25 @@
|
|
|
| void Assembler::SubImmediateSetFlags(Register rd, Register rn, int32_t value,
|
| Condition cond) {
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(value, &shifter_op)) {
|
| + Operand o;
|
| + if (Operand::CanHold(value, &o)) {
|
| // Handles value == kMinInt32.
|
| - subs(rd, rn, shifter_op, cond);
|
| - } else if (ShifterOperand::CanHold(-value, &shifter_op)) {
|
| + subs(rd, rn, o, cond);
|
| + } else if (Operand::CanHold(-value, &o)) {
|
| ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
|
| - adds(rd, rn, shifter_op, cond);
|
| + adds(rd, rn, o, cond);
|
| } else {
|
| ASSERT(rn != IP);
|
| - if (ShifterOperand::CanHold(~value, &shifter_op)) {
|
| - mvn(IP, shifter_op, cond);
|
| - subs(rd, rn, ShifterOperand(IP), cond);
|
| - } else if (ShifterOperand::CanHold(~(-value), &shifter_op)) {
|
| + if (Operand::CanHold(~value, &o)) {
|
| + mvn(IP, o, cond);
|
| + subs(rd, rn, Operand(IP), cond);
|
| + } else if (Operand::CanHold(~(-value), &o)) {
|
| ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
|
| - mvn(IP, shifter_op, cond);
|
| - adds(rd, rn, ShifterOperand(IP), cond);
|
| + mvn(IP, o, cond);
|
| + adds(rd, rn, Operand(IP), cond);
|
| } else {
|
| LoadDecodableImmediate(IP, value, cond);
|
| - subs(rd, rn, ShifterOperand(IP), cond);
|
| + subs(rd, rn, Operand(IP), cond);
|
| }
|
| }
|
| }
|
| @@ -2727,35 +2708,35 @@
|
|
|
| void Assembler::AndImmediate(Register rd, Register rs, int32_t imm,
|
| Condition cond) {
|
| - ShifterOperand op;
|
| - if (ShifterOperand::CanHold(imm, &op)) {
|
| - and_(rd, rs, ShifterOperand(op), cond);
|
| + Operand o;
|
| + if (Operand::CanHold(imm, &o)) {
|
| + and_(rd, rs, Operand(o), cond);
|
| } else {
|
| LoadImmediate(TMP, imm, cond);
|
| - and_(rd, rs, ShifterOperand(TMP), cond);
|
| + and_(rd, rs, Operand(TMP), cond);
|
| }
|
| }
|
|
|
|
|
| void Assembler::CompareImmediate(Register rn, int32_t value, Condition cond) {
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(value, &shifter_op)) {
|
| - cmp(rn, shifter_op, cond);
|
| + Operand o;
|
| + if (Operand::CanHold(value, &o)) {
|
| + cmp(rn, o, cond);
|
| } else {
|
| ASSERT(rn != IP);
|
| LoadImmediate(IP, value, cond);
|
| - cmp(rn, ShifterOperand(IP), cond);
|
| + cmp(rn, Operand(IP), cond);
|
| }
|
| }
|
|
|
|
|
| void Assembler::TestImmediate(Register rn, int32_t imm, Condition cond) {
|
| - ShifterOperand shifter_op;
|
| - if (ShifterOperand::CanHold(imm, &shifter_op)) {
|
| - tst(rn, shifter_op, cond);
|
| + Operand o;
|
| + if (Operand::CanHold(imm, &o)) {
|
| + tst(rn, o, cond);
|
| } else {
|
| LoadImmediate(IP, imm);
|
| - tst(rn, ShifterOperand(IP), cond);
|
| + tst(rn, Operand(IP), cond);
|
| }
|
| }
|
|
|
| @@ -2797,7 +2778,7 @@
|
| // Both positive.
|
| LoadImmediate(tmp, INT_MAX);
|
| IntegerDivide(tmp, tmp, left, dtmp0, dtmp1);
|
| - cmp(tmp, ShifterOperand(right));
|
| + cmp(tmp, Operand(right));
|
| b(overflow, LT);
|
| b(&done);
|
|
|
| @@ -2805,7 +2786,7 @@
|
| Bind(&left_pos_right_neg);
|
| LoadImmediate(tmp, INT_MIN);
|
| IntegerDivide(tmp, tmp, left, dtmp0, dtmp1);
|
| - cmp(tmp, ShifterOperand(right));
|
| + cmp(tmp, Operand(right));
|
| b(overflow, GT);
|
| b(&done);
|
|
|
| @@ -2817,7 +2798,7 @@
|
| // both negative.
|
| LoadImmediate(tmp, INT_MAX);
|
| IntegerDivide(tmp, tmp, left, dtmp0, dtmp1);
|
| - cmp(tmp, ShifterOperand(right));
|
| + cmp(tmp, Operand(right));
|
| b(overflow, GT);
|
| b(&done);
|
|
|
| @@ -2825,7 +2806,7 @@
|
| Bind(&left_neg_right_pos);
|
| LoadImmediate(tmp, INT_MIN);
|
| IntegerDivide(tmp, tmp, right, dtmp0, dtmp1);
|
| - cmp(tmp, ShifterOperand(left));
|
| + cmp(tmp, Operand(left));
|
| b(overflow, GT);
|
|
|
| Bind(&done);
|
| @@ -2850,7 +2831,7 @@
|
| PushList(regs);
|
| if ((regs & (1 << FP)) != 0) {
|
| // Set FP to the saved previous FP.
|
| - add(FP, SP, ShifterOperand(4 * NumRegsBelowFP(regs)));
|
| + add(FP, SP, Operand(4 * NumRegsBelowFP(regs)));
|
| }
|
| AddImmediate(SP, -frame_size);
|
| }
|
| @@ -2860,7 +2841,7 @@
|
| ASSERT((regs & (1 << PC)) == 0); // Must not pop PC.
|
| if ((regs & (1 << FP)) != 0) {
|
| // Use FP to set SP.
|
| - sub(SP, FP, ShifterOperand(4 * NumRegsBelowFP(regs)));
|
| + sub(SP, FP, Operand(4 * NumRegsBelowFP(regs)));
|
| }
|
| PopList(regs);
|
| }
|
| @@ -2876,7 +2857,7 @@
|
| // the C++ world.
|
| AddImmediate(SP, -frame_space);
|
| if (OS::ActivationFrameAlignment() > 1) {
|
| - bic(SP, SP, ShifterOperand(OS::ActivationFrameAlignment() - 1));
|
| + bic(SP, SP, Operand(OS::ActivationFrameAlignment() - 1));
|
| }
|
| }
|
|
|
| @@ -2970,7 +2951,7 @@
|
| const intptr_t offset = CodeSize();
|
|
|
| Comment("EnterOsrFrame");
|
| - mov(IP, ShifterOperand(PC));
|
| + mov(IP, Operand(PC));
|
|
|
| AddImmediate(IP, -offset);
|
| str(IP, Address(FP, kPcMarkerSlotFromFp * kWordSize));
|
| @@ -2991,8 +2972,8 @@
|
|
|
| void Assembler::EnterStubFrame(bool load_pp) {
|
| // Push 0 as saved PC for stub frames.
|
| - mov(IP, ShifterOperand(LR));
|
| - mov(LR, ShifterOperand(0));
|
| + mov(IP, Operand(LR));
|
| + mov(LR, Operand(0));
|
| RegList regs = (1 << PP) | (1 << FP) | (1 << IP) | (1 << LR);
|
| EnterFrame(regs, 0);
|
| if (load_pp) {
|
| @@ -3071,7 +3052,7 @@
|
| AddImmediate(TMP, 1);
|
| str(TMP, count_address);
|
| ldr(TMP, size_address);
|
| - add(TMP, TMP, ShifterOperand(size_reg));
|
| + add(TMP, TMP, Operand(size_reg));
|
| str(TMP, size_address);
|
| } else {
|
| ASSERT(temp_reg != kNoRegister);
|
| @@ -3089,7 +3070,7 @@
|
| AddImmediate(TMP, 1);
|
| str(TMP, Address(temp_reg, count_field_offset));
|
| ldr(TMP, Address(temp_reg, size_field_offset));
|
| - add(TMP, TMP, ShifterOperand(size_reg));
|
| + add(TMP, TMP, Operand(size_reg));
|
| str(TMP, Address(temp_reg, size_field_offset));
|
| }
|
| }
|
| @@ -3110,7 +3091,7 @@
|
| // instance_reg: potential next object start.
|
| LoadImmediate(IP, heap->EndAddress());
|
| ldr(IP, Address(IP, 0));
|
| - cmp(IP, ShifterOperand(instance_reg));
|
| + cmp(IP, Operand(instance_reg));
|
| // fail if heap end unsigned less than or equal to instance_reg.
|
| b(failure, LS);
|
|
|
|
|