< prev index next >
src/cpu/aarch32/vm/macroAssembler_aarch32.hpp
Print this page
rev 8069 : 8164652: aarch32: C1 port
*** 157,179 ****
inline void mov(Register dst, address addr, Condition cond = C_DFLT) {
// TODO: Do Address end up as address and then passing through this method, after
// being marked for relocation elsewhere? If not (as I suspect) then this can
// be relaxed to mov_immediate to potentially produce shorter code sequences.
! mov_immediate32(dst, (u_int32_t)addr, cond, false);
}
inline void mov(Register dst, long l, Condition cond = C_DFLT) {
! mov(dst, (u_int32_t)l, cond);
}
inline void mov(Register dst, unsigned long l, Condition cond = C_DFLT) {
! mov(dst, (u_int32_t)l, cond);
}
inline void mov(Register dst, int i, Condition cond = C_DFLT) {
! mov(dst, (u_int32_t)i, cond);
}
! inline void mov(Register dst, u_int32_t i, Condition cond = C_DFLT) {
mov_immediate(dst, i, cond, false);
}
inline void mov(Register dst, Register src, Condition cond = C_DFLT) {
Assembler::mov(dst, src, cond);
--- 157,179 ----
inline void mov(Register dst, address addr, Condition cond = C_DFLT) {
// TODO: Do Address end up as address and then passing through this method, after
// being marked for relocation elsewhere? If not (as I suspect) then this can
// be relaxed to mov_immediate to potentially produce shorter code sequences.
! mov_immediate32(dst, (uint32_t)addr, cond, false);
}
inline void mov(Register dst, long l, Condition cond = C_DFLT) {
! mov(dst, (uint32_t)l, cond);
}
inline void mov(Register dst, unsigned long l, Condition cond = C_DFLT) {
! mov(dst, (uint32_t)l, cond);
}
inline void mov(Register dst, int i, Condition cond = C_DFLT) {
! mov(dst, (uint32_t)i, cond);
}
! inline void mov(Register dst, uint32_t i, Condition cond = C_DFLT) {
mov_immediate(dst, i, cond, false);
}
inline void mov(Register dst, Register src, Condition cond = C_DFLT) {
Assembler::mov(dst, src, cond);
*** 588,600 ****
// Stack overflow checking
void bang_stack_with_offset(int offset) {
// stack grows down, caller passes positive offset
assert(offset > 0, "must bang with negative offset");
! mov(rscratch2, -offset);
! // bang with random number from r0
! str(r0, Address(sp, rscratch2));
}
// Writes to stack successive pages until offset reached to check for
// stack overflow + shadow pages. Also, clobbers tmp
void bang_stack_size(Register size, Register tmp);
--- 588,605 ----
// Stack overflow checking
void bang_stack_with_offset(int offset) {
// stack grows down, caller passes positive offset
assert(offset > 0, "must bang with negative offset");
! // bang with random value from r0
! if (operand_valid_for_add_sub_immediate(offset)) {
! sub(rscratch2, sp, offset);
! strb(r0, Address(rscratch2));
! } else {
! mov(rscratch2, offset);
! strb(r0, Address(sp, rscratch2, Assembler::lsl(), Address::SUB));
! }
}
// Writes to stack successive pages until offset reached to check for
// stack overflow + shadow pages. Also, clobbers tmp
void bang_stack_size(Register size, Register tmp);
*** 651,661 ****
--- 656,670 ----
void far_call(Address entry, CodeBuffer *cbuf = NULL, Register tmp = rscratch1);
void far_jump(Address entry, CodeBuffer *cbuf = NULL, Register tmp = rscratch1);
static int far_branch_size() {
// TODO performance issue: always generate real far jumps
+ if (far_branches()) {
return 3 * 4; // movw, movt, br
+ } else {
+ return 4;
+ }
}
// Emit the CompiledIC call idiom
void ic_call(address entry);
< prev index next >