< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.cpp

Print this page
rev 8013 : Add aarch64 support for FramePointer


3458     byte_offset = (uint64_t)dest.target() & 0xfff;
3459     _adrp(reg1, dest.target());
3460   }
3461 }
3462 
3463   bool MacroAssembler::use_acq_rel_for_volatile_fields() {
3464 #ifdef PRODUCT
3465     return false;
3466 #else
3467     return UseAcqRelForVolatileFields;
3468 #endif
3469   }
3470 
3471 void MacroAssembler::build_frame(int framesize) {
3472   if (framesize == 0) {
3473     // Is this even possible?
3474     stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
3475   } else if (framesize < ((1 << 9) + 2 * wordSize)) {
3476     sub(sp, sp, framesize);
3477     stp(rfp, lr, Address(sp, framesize - 2 * wordSize));

3478   } else {
3479     stp(rfp, lr, Address(pre(sp, -2 * wordSize)));

3480     if (framesize < ((1 << 12) + 2 * wordSize))
3481       sub(sp, sp, framesize - 2 * wordSize);
3482     else {
3483       mov(rscratch1, framesize - 2 * wordSize);
3484       sub(sp, sp, rscratch1);
3485     }
3486   }
3487 }
3488 
3489 void MacroAssembler::remove_frame(int framesize) {
3490   if (framesize == 0) {
3491     ldp(rfp, lr, Address(post(sp, 2 * wordSize)));
3492   } else if (framesize < ((1 << 9) + 2 * wordSize)) {
3493     ldp(rfp, lr, Address(sp, framesize - 2 * wordSize));
3494     add(sp, sp, framesize);
3495   } else {
3496     if (framesize < ((1 << 12) + 2 * wordSize))
3497       add(sp, sp, framesize - 2 * wordSize);
3498     else {
3499       mov(rscratch1, framesize - 2 * wordSize);




3458     byte_offset = (uint64_t)dest.target() & 0xfff;
3459     _adrp(reg1, dest.target());
3460   }
3461 }
3462 
3463   bool MacroAssembler::use_acq_rel_for_volatile_fields() {
3464 #ifdef PRODUCT
3465     return false;
3466 #else
3467     return UseAcqRelForVolatileFields;
3468 #endif
3469   }
3470 
3471 void MacroAssembler::build_frame(int framesize) {
3472   if (framesize == 0) {
3473     // Is this even possible?
3474     stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
3475   } else if (framesize < ((1 << 9) + 2 * wordSize)) {
3476     sub(sp, sp, framesize);
3477     stp(rfp, lr, Address(sp, framesize - 2 * wordSize));
3478     if (FramePointer) add(rfp, sp, framesize - 2 * wordSize);
3479   } else {
3480     stp(rfp, lr, Address(pre(sp, -2 * wordSize)));
3481     if (FramePointer) mov(rfp, sp);
3482     if (framesize < ((1 << 12) + 2 * wordSize))
3483       sub(sp, sp, framesize - 2 * wordSize);
3484     else {
3485       mov(rscratch1, framesize - 2 * wordSize);
3486       sub(sp, sp, rscratch1);
3487     }
3488   }
3489 }
3490 
3491 void MacroAssembler::remove_frame(int framesize) {
3492   if (framesize == 0) {
3493     ldp(rfp, lr, Address(post(sp, 2 * wordSize)));
3494   } else if (framesize < ((1 << 9) + 2 * wordSize)) {
3495     ldp(rfp, lr, Address(sp, framesize - 2 * wordSize));
3496     add(sp, sp, framesize);
3497   } else {
3498     if (framesize < ((1 << 12) + 2 * wordSize))
3499       add(sp, sp, framesize - 2 * wordSize);
3500     else {
3501       mov(rscratch1, framesize - 2 * wordSize);


< prev index next >