< prev index next >
src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
Print this page
rev 8300 : 8079564: Use FP register as proper frame pointer in JIT compiled code on aarch64
Summary: Add support for PreserveFramePointer for debug/profile
Reviewed-by: duke
*** 3794,3824 ****
return UseAcqRelForVolatileFields;
#endif
}
void MacroAssembler::build_frame(int framesize) {
! if (framesize == 0) {
! // Is this even possible?
! stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
! } else if (framesize < ((1 << 9) + 2 * wordSize)) {
sub(sp, sp, framesize);
stp(rfp, lr, Address(sp, framesize - 2 * wordSize));
} else {
stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
if (framesize < ((1 << 12) + 2 * wordSize))
sub(sp, sp, framesize - 2 * wordSize);
else {
mov(rscratch1, framesize - 2 * wordSize);
sub(sp, sp, rscratch1);
}
}
}
void MacroAssembler::remove_frame(int framesize) {
! if (framesize == 0) {
! ldp(rfp, lr, Address(post(sp, 2 * wordSize)));
! } else if (framesize < ((1 << 9) + 2 * wordSize)) {
ldp(rfp, lr, Address(sp, framesize - 2 * wordSize));
add(sp, sp, framesize);
} else {
if (framesize < ((1 << 12) + 2 * wordSize))
add(sp, sp, framesize - 2 * wordSize);
--- 3794,3823 ----
return UseAcqRelForVolatileFields;
#endif
}
void MacroAssembler::build_frame(int framesize) {
! assert(framesize > 0, "framesize must be > 0");
! if (framesize < ((1 << 9) + 2 * wordSize)) {
sub(sp, sp, framesize);
stp(rfp, lr, Address(sp, framesize - 2 * wordSize));
+ if (PreserveFramePointer) add(rfp, sp, framesize - 2 * wordSize);
} else {
stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
+ if (PreserveFramePointer) mov(rfp, sp);
if (framesize < ((1 << 12) + 2 * wordSize))
sub(sp, sp, framesize - 2 * wordSize);
else {
mov(rscratch1, framesize - 2 * wordSize);
sub(sp, sp, rscratch1);
}
}
}
void MacroAssembler::remove_frame(int framesize) {
! assert(framesize > 0, "framesize must be > 0");
! if (framesize < ((1 << 9) + 2 * wordSize)) {
ldp(rfp, lr, Address(sp, framesize - 2 * wordSize));
add(sp, sp, framesize);
} else {
if (framesize < ((1 << 12) + 2 * wordSize))
add(sp, sp, framesize - 2 * wordSize);
< prev index next >