| Index: src/arm/assembler-arm.h
|
| diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h
|
| index 09392941715ce7e2f135733fb35bc5437a187e94..6fb692f22ef4616786f8740d93eaae44e484480d 100644
|
| --- a/src/arm/assembler-arm.h
|
| +++ b/src/arm/assembler-arm.h
|
| @@ -785,6 +785,7 @@ class Assembler : public AssemblerBase {
|
|
|
| // Size of an instruction.
|
| static const int kInstrSize = sizeof(Instr);
|
| + static const int kInstr16Size = sizeof(Instr16);
|
|
|
| // Distance between start of patched return sequence and the emitted address
|
| // to jump to.
|
| @@ -1367,6 +1368,10 @@ class Assembler : public AssemblerBase {
|
| Instr16 thumb16_instr_at(int pos) {
|
| return *reinterpret_cast<Instr16*>(buffer_ + pos);
|
| }
|
| + Instr thumb32_instr_at(int pos) {
|
| + return (*reinterpret_cast<Instr16*>(buffer_ + pos) << 16) |
|
| + (*reinterpret_cast<Instr16*>(buffer_ + pos + 2) & 0xffff);
|
| + }
|
| void instr_at_put(int pos, Instr instr) {
|
| *reinterpret_cast<Instr*>(buffer_ + pos) = instr;
|
| }
|
| @@ -1535,6 +1540,7 @@ class Assembler : public AssemblerBase {
|
| void GrowBuffer();
|
| inline void emit(Instr x);
|
| inline void emit16(Instr16 x, bool check_buffer = true);
|
| + inline void emit32(Instr x); // proper half-word order for thumb
|
|
|
| // 32-bit immediate values
|
| void move_32_bit_immediate(Condition cond,
|
| @@ -1596,6 +1602,61 @@ class Assembler : public AssemblerBase {
|
| bool is_low_reg(Register reg);
|
| bool are_low_reg(Register reg1, Register reg2);
|
|
|
| + Instr thumb32_mode1(ThumbOpcode32Mode1 op, SBit s);
|
| + Instr thumb32_mode3(ThumbOpcode32Mode3 op);
|
| + Instr thumb32_mode4(ThumbOpcode32Mode4 op);
|
| + Instr thumb32_mode5();
|
| + Instr thumb32_mode6(ThumbOpcode32Mode6 op1, ThumbOpcode32Mode6 op2);
|
| + Instr thumb32_mode7(ThumbOpcode32Mode7 op);
|
| + Instr thumb32_mode8(ThumbOpcode32Mode8 op);
|
| + Instr thumb32_mode9(ThumbOpcode32Mode9 op);
|
| + Instr thumb32_mode10(ThumbOpcode32Mode10 op);
|
| + Instr thumb32_mode11(ThumbOpcode32Mode11 op, SBit s);
|
| + Instr thumb32_mode12(ThumbOpcode32Mode12 op1);
|
| + Instr thumb32_mode16(ThumbOpcode32Mode16 op2);
|
| + Instr thumb32_mode17(ThumbOpcode32Mode17 op);
|
| +
|
| + bool thumb_expand_imm(uint32_t imm32,
|
| + uint32_t* i,
|
| + uint32_t* imm3,
|
| + uint32_t* imm8);
|
| + Instr thumb32_1reg_zero_extend_imm_split_4i38(Register rd,
|
| + uint32_t imm);
|
| + Instr thumb32_sign_extend_imm24(int imm);
|
| + Instr thumb32_2reg_zero_extend_imm12(Register rd,
|
| + const MemOperand& x);
|
| + Instr thumb32_2reg_zero_extend_imm8(Register rd,
|
| + const MemOperand& x);
|
| + Instr thumb32_3reg_zero_extend_imm8(Register rt,
|
| + Register rt2,
|
| + const MemOperand& x);
|
| + Instr thumb32_2reg_zero_extend_imm_split(Register rn,
|
| + Register rd,
|
| + const Operand& x);
|
| + Instr thumb32_2reg_thumb_expand_imm(Register rn,
|
| + Register rd,
|
| + uint32_t i,
|
| + uint32_t imm3,
|
| + uint32_t imm8);
|
| + Instr thumb32_3reg_shift_imm8(Register rn,
|
| + Register rd,
|
| + const Operand& x);
|
| + Instr thumb32_bit_field(Register rn,
|
| + Register rd,
|
| + int split_imm,
|
| + int lower_imm);
|
| + Instr thumb32_3reg_lsl(Register rd,
|
| + const MemOperand& x);
|
| + Instr thumb32_3reg_shift(Register rd,
|
| + const Operand& x);
|
| + Instr thumb32_4reg(Register dst, Register src1, Register src2,
|
| + Register srcA);
|
| + static uint16_t thumb32_movw_immediate(Instr instr);
|
| + static Instr thumb32_instr_at(Address addr);
|
| + static Instr thumb32_set_movw_immediate(uint32_t imm);
|
| + void thumb32_instr_at_put(int pos, Instr instr);
|
| + static void thumb32_instr_at_put(byte* pc, Instr instr);
|
| +
|
| // Labels
|
| void print(Label* L);
|
| void bind_to(Label* L, int pos);
|
|
|