| Index: src/arm/assembler-arm.cc
|
| diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc
|
| index eae38be6ebb6a2be61f7e35a2be6fc46a91a4071..a65cf15f41afeca210d29b3f85ca56dd849dcca4 100644
|
| --- a/src/arm/assembler-arm.cc
|
| +++ b/src/arm/assembler-arm.cc
|
| @@ -1798,71 +1798,119 @@ void Assembler::pkhtb(Register dst,
|
| }
|
|
|
|
|
| -void Assembler::uxtb(Register dst,
|
| - const Operand& src,
|
| - Condition cond) {
|
| +void Assembler::sxtb(Register dst, Register src, int rotate, Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.233.
|
| + // cond(31-28) | 01101010(27-20) | 1111(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6A * B20 | 0xF * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::sxtab(Register dst, Register src1, Register src2, int rotate,
|
| + Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.233.
|
| + // cond(31-28) | 01101010(27-20) | Rn(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src1.is(pc));
|
| + DCHECK(!src2.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6A * B20 | src1.code() * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src2.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::sxth(Register dst, Register src, int rotate, Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.235.
|
| + // cond(31-28) | 01101011(27-20) | 1111(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6B * B20 | 0xF * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::sxtah(Register dst, Register src1, Register src2, int rotate,
|
| + Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.235.
|
| + // cond(31-28) | 01101011(27-20) | Rn(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src1.is(pc));
|
| + DCHECK(!src2.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6B * B20 | src1.code() * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src2.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::uxtb(Register dst, Register src, int rotate, Condition cond) {
|
| // Instruction details available in ARM DDI 0406C.b, A8.8.274.
|
| // cond(31-28) | 01101110(27-20) | 1111(19-16) |
|
| // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| DCHECK(!dst.is(pc));
|
| - DCHECK(!src.rm().is(pc));
|
| - DCHECK(!src.rm().is(no_reg));
|
| - DCHECK(src.rs().is(no_reg));
|
| - DCHECK((src.shift_imm_ == 0) ||
|
| - (src.shift_imm_ == 8) ||
|
| - (src.shift_imm_ == 16) ||
|
| - (src.shift_imm_ == 24));
|
| - // Operand maps ROR #0 to LSL #0.
|
| - DCHECK((src.shift_op() == ROR) ||
|
| - ((src.shift_op() == LSL) && (src.shift_imm_ == 0)));
|
| - emit(cond | 0x6E*B20 | 0xF*B16 | dst.code()*B12 |
|
| - ((src.shift_imm_ >> 1)&0xC)*B8 | 7*B4 | src.rm().code());
|
| -}
|
| -
|
| -
|
| -void Assembler::uxtab(Register dst,
|
| - Register src1,
|
| - const Operand& src2,
|
| + DCHECK(!src.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6E * B20 | 0xF * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::uxtab(Register dst, Register src1, Register src2, int rotate,
|
| Condition cond) {
|
| // Instruction details available in ARM DDI 0406C.b, A8.8.271.
|
| // cond(31-28) | 01101110(27-20) | Rn(19-16) |
|
| // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| DCHECK(!dst.is(pc));
|
| DCHECK(!src1.is(pc));
|
| - DCHECK(!src2.rm().is(pc));
|
| - DCHECK(!src2.rm().is(no_reg));
|
| - DCHECK(src2.rs().is(no_reg));
|
| - DCHECK((src2.shift_imm_ == 0) ||
|
| - (src2.shift_imm_ == 8) ||
|
| - (src2.shift_imm_ == 16) ||
|
| - (src2.shift_imm_ == 24));
|
| - // Operand maps ROR #0 to LSL #0.
|
| - DCHECK((src2.shift_op() == ROR) ||
|
| - ((src2.shift_op() == LSL) && (src2.shift_imm_ == 0)));
|
| - emit(cond | 0x6E*B20 | src1.code()*B16 | dst.code()*B12 |
|
| - ((src2.shift_imm_ >> 1) &0xC)*B8 | 7*B4 | src2.rm().code());
|
| + DCHECK(!src2.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6E * B20 | src1.code() * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src2.code());
|
| }
|
|
|
|
|
| -void Assembler::uxtb16(Register dst,
|
| - const Operand& src,
|
| - Condition cond) {
|
| +void Assembler::uxtb16(Register dst, Register src, int rotate, Condition cond) {
|
| // Instruction details available in ARM DDI 0406C.b, A8.8.275.
|
| // cond(31-28) | 01101100(27-20) | 1111(19-16) |
|
| // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| DCHECK(!dst.is(pc));
|
| - DCHECK(!src.rm().is(pc));
|
| - DCHECK(!src.rm().is(no_reg));
|
| - DCHECK(src.rs().is(no_reg));
|
| - DCHECK((src.shift_imm_ == 0) ||
|
| - (src.shift_imm_ == 8) ||
|
| - (src.shift_imm_ == 16) ||
|
| - (src.shift_imm_ == 24));
|
| - // Operand maps ROR #0 to LSL #0.
|
| - DCHECK((src.shift_op() == ROR) ||
|
| - ((src.shift_op() == LSL) && (src.shift_imm_ == 0)));
|
| - emit(cond | 0x6C*B20 | 0xF*B16 | dst.code()*B12 |
|
| - ((src.shift_imm_ >> 1)&0xC)*B8 | 7*B4 | src.rm().code());
|
| + DCHECK(!src.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6C * B20 | 0xF * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::uxth(Register dst, Register src, int rotate, Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.276.
|
| + // cond(31-28) | 01101111(27-20) | 1111(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6F * B20 | 0xF * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src.code());
|
| +}
|
| +
|
| +
|
| +void Assembler::uxtah(Register dst, Register src1, Register src2, int rotate,
|
| + Condition cond) {
|
| + // Instruction details available in ARM DDI 0406C.b, A8.8.273.
|
| + // cond(31-28) | 01101111(27-20) | Rn(19-16) |
|
| + // Rd(15-12) | rotate(11-10) | 00(9-8)| 0111(7-4) | Rm(3-0)
|
| + DCHECK(!dst.is(pc));
|
| + DCHECK(!src1.is(pc));
|
| + DCHECK(!src2.is(pc));
|
| + DCHECK(rotate == 0 || rotate == 8 || rotate == 16 || rotate == 24);
|
| + emit(cond | 0x6F * B20 | src1.code() * B16 | dst.code() * B12 |
|
| + ((rotate >> 1) & 0xC) * B8 | 7 * B4 | src2.code());
|
| }
|
|
|
|
|
|
|