< 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 >