< prev index next >

src/cpu/aarch32/vm/assembler_aarch32.hpp

Print this page
rev 8069 : 8164652: aarch32: C1 port

*** 872,885 **** //NOTE: arithmetic immediate instructions are defined below to allow dispatch. #undef INSN protected: // Mov data to destination register in the shortest number of instructions // possible. ! void mov_immediate(Register dst, u_int32_t imm32, Condition cond, bool s); // Mov data to destination register but always emit enough instructions that would // permit any 32-bit constant to be loaded. (Allow for rewriting later). ! void mov_immediate32(Register dst, u_int32_t imm32, Condition cond, bool s); void add_sub_imm(int decode, Register Rd, Register Rn, int imm, Condition cond, bool s); public: --- 872,885 ---- //NOTE: arithmetic immediate instructions are defined below to allow dispatch. #undef INSN protected: // Mov data to destination register in the shortest number of instructions // possible. ! void mov_immediate(Register dst, uint32_t imm32, Condition cond, bool s); // Mov data to destination register but always emit enough instructions that would // permit any 32-bit constant to be loaded. (Allow for rewriting later). ! void mov_immediate32(Register dst, uint32_t imm32, Condition cond, bool s); void add_sub_imm(int decode, Register Rd, Register Rn, int imm, Condition cond, bool s); public:
*** 1208,1218 **** if(encodeable(op, dest)) { /* Plan A */ \ long offset = dest - pc(); \ NAME(Rt, Address(r15_pc, offset), cond); \ } else if(isload){ /* Plan B */ \ /* TODO check we don't have to relocate this*/ \ ! mov_immediate(Rt, (u_int32_t)dest, cond, false); \ NAME(Rt, Address(Rt, 0), cond); \ } else { /* There is no plan C */ \ ShouldNotReachHere(); \ } \ } \ --- 1208,1218 ---- if(encodeable(op, dest)) { /* Plan A */ \ long offset = dest - pc(); \ NAME(Rt, Address(r15_pc, offset), cond); \ } else if(isload){ /* Plan B */ \ /* TODO check we don't have to relocate this*/ \ ! mov_immediate(Rt, (uint32_t)dest, cond, false); \ NAME(Rt, Address(Rt, 0), cond); \ } else { /* There is no plan C */ \ ShouldNotReachHere(); \ } \ } \
*** 1594,1604 **** } void dsb(enum barrier option) { sync_instr(0b0100, option); } void dmb(enum barrier option) { ! sync_instr(0b0100, option); } void bkpt(); void isb() { sync_instr(0b0110, SY); } --- 1594,1604 ---- } void dsb(enum barrier option) { sync_instr(0b0100, option); } void dmb(enum barrier option) { ! sync_instr(0b0101, option); } void bkpt(); void isb() { sync_instr(0b0110, SY); }
< prev index next >