Index: src/arm/assembler-arm.h |
diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h |
index 8f224c8af162eb4e075a3f299dd900d7f708b6eb..c0f0125803c285f1b87e820c537ebb1f4f736342 100644 |
--- a/src/arm/assembler-arm.h |
+++ b/src/arm/assembler-arm.h |
@@ -824,6 +824,7 @@ class Assembler : public AssemblerBase { |
// Branch instructions |
void b(int branch_offset, Condition cond = al); |
+ void b_thumb(int branch_offset, Condition cond); |
void bl(int branch_offset, Condition cond = al); |
void blx(int branch_offset); // v5 and above |
void blx(Register target, Condition cond = al); // v5 and above |
@@ -1023,12 +1024,18 @@ class Assembler : public AssemblerBase { |
void mla(Register dst, Register src1, Register src2, Register srcA, |
SBit s = LeaveCC, Condition cond = al); |
+ void mla_thumb(Register dst, Register src1, Register src2, Register srcA, |
+ SBit s, Condition cond); |
void mls(Register dst, Register src1, Register src2, Register srcA, |
Condition cond = al); |
+ void mls_thumb(Register dst, Register src1, Register src2, Register srcA, |
+ Condition cond); |
void sdiv(Register dst, Register src1, Register src2, |
Condition cond = al); |
+ void sdiv_thumb(Register dst, Register src1, Register src2, |
+ Condition cond); |
void mul(Register dst, Register src1, Register src2, |
SBit s = LeaveCC, Condition cond = al); |
@@ -1039,15 +1046,23 @@ class Assembler : public AssemblerBase { |
void smlal(Register dstL, Register dstH, Register src1, Register src2, |
SBit s = LeaveCC, Condition cond = al); |
+ void smlal_thumb(Register dstL, Register dstH, Register src1, Register src2, |
+ SBit s, Condition cond); |
void smull(Register dstL, Register dstH, Register src1, Register src2, |
SBit s = LeaveCC, Condition cond = al); |
+ void smull_thumb(Register dstL, Register dstH, Register src1, Register src2, |
+ SBit s, Condition cond); |
void umlal(Register dstL, Register dstH, Register src1, Register src2, |
SBit s = LeaveCC, Condition cond = al); |
+ void umlal_thumb(Register dstL, Register dstH, Register src1, Register src2, |
+ SBit s, Condition cond); |
void umull(Register dstL, Register dstH, Register src1, Register src2, |
SBit s = LeaveCC, Condition cond = al); |
+ void umull_thumb(Register dstL, Register dstH, Register src1, Register src2, |
+ SBit s, Condition cond); |
// Miscellaneous arithmetic instructions |
@@ -1105,13 +1120,45 @@ class Assembler : public AssemblerBase { |
// Load/Store instructions |
void ldr(Register dst, const MemOperand& src, Condition cond = al); |
+ void ldr_thumb(Register dst, const MemOperand& src); |
+ void ldr_thumb_immediate(Register dst, const MemOperand& src); |
+ void ldr_thumb_register(Register dst, const MemOperand& src); |
+ |
void str(Register src, const MemOperand& dst, Condition cond = al); |
+ void str_thumb(Register src, const MemOperand& dst); |
+ void str_thumb_register(Register src, const MemOperand& dst); |
+ void str_thumb_immediate(Register src, const MemOperand& dst); |
+ |
void ldrb(Register dst, const MemOperand& src, Condition cond = al); |
+ void ldrb_thumb_immediate(Register dst, const MemOperand& src); |
+ void ldrb_thumb_register(Register dst, const MemOperand& src); |
+ void ldrb_thumb(Register dst, const MemOperand& src); |
+ |
void strb(Register src, const MemOperand& dst, Condition cond = al); |
+ void strb_thumb_immediate(Register src, const MemOperand& dst); |
+ void strb_thumb_register(Register src, const MemOperand& dst); |
+ void strb_thumb(Register src, const MemOperand& dst); |
+ |
void ldrh(Register dst, const MemOperand& src, Condition cond = al); |
+ void ldrh_thumb_immediate(Register dst, const MemOperand& src); |
+ void ldrh_thumb_register(Register dst, const MemOperand& src); |
+ void ldrh_thumb(Register dst, const MemOperand& src); |
+ |
void strh(Register src, const MemOperand& dst, Condition cond = al); |
+ void strh_thumb_immediate(Register src, const MemOperand& dst); // 4_4 |
+ void strh_thumb_register(Register src, const MemOperand& dst); // 4_1 |
+ void strh_thumb(Register src, const MemOperand& dst); |
+ |
void ldrsb(Register dst, const MemOperand& src, Condition cond = al); |
+ void ldrsb_thumb_immediate(Register dst, const MemOperand& src); |
+ void ldrsb_thumb_register(Register dst, const MemOperand& src); |
+ void ldrsb_thumb(Register dst, const MemOperand& src); |
+ |
void ldrsh(Register dst, const MemOperand& src, Condition cond = al); |
+ void ldrsh_thumb(Register dst, const MemOperand& src); |
+ void ldrsh_thumb_immediate(Register dst, const MemOperand& src); |
+ void ldrsh_thumb_register(Register dst, const MemOperand& src); |
+ |
void ldrd(Register dst1, |
Register dst2, |
const MemOperand& src, Condition cond = al); |
@@ -1130,7 +1177,10 @@ class Assembler : public AssemblerBase { |
// Load/Store multiple instructions |
void ldm(BlockAddrMode am, Register base, RegList dst, Condition cond = al); |
+ void ldm_thumb(BlockAddrMode am, Register base, RegList dst, Condition cond); |
+ |
void stm(BlockAddrMode am, Register base, RegList src, Condition cond = al); |
+ void stm_thumb(BlockAddrMode am, Register base, RegList dst, Condition cond); |
// Exception-generating instructions and debugging support |
void stop(const char* msg, |
@@ -1389,6 +1439,7 @@ class Assembler : public AssemblerBase { |
void it_thumb(Condition cond, int num_instr, bool cond2 = false, |
bool cond3 = false, bool cond4 = false); |
inline void emit_it(Condition cond); |
+ void ldr_pc_thumb(Register dst, const Operand& src); |
static bool use_immediate_embedded_pointer_loads( |
const Assembler* assembler) { |
@@ -1663,6 +1714,10 @@ class Assembler : public AssemblerBase { |
Register rd, |
SBit s, |
const Operand& x); |
+ void move_32_bit_immediate_thumb(Register rd, |
+ SBit s, |
+ const Operand& x, |
+ Condition cond = al); |
// Instruction generation |
void addrmod1(Instr instr, Register rn, Register rd, const Operand& x); |