Skip to content

Commit 71b8ad4

Browse files
committed
8266609: AArch64: include FP/LR space in LIR_Assembler::initial_frame_size_in_bytes()
Reviewed-by: aph
1 parent ebb68d2 commit 71b8ad4

File tree

4 files changed

+8
-10
lines changed

4 files changed

+8
-10
lines changed

src/hotspot/cpu/aarch64/aarch64.ad

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1886,7 +1886,6 @@ void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
18861886

18871887
// n.b. frame size includes space for return pc and rfp
18881888
const int framesize = C->output()->frame_size_in_bytes();
1889-
assert(framesize%(2*wordSize) == 0, "must preserve 2*wordSize alignment");
18901889

18911890
// insert a nop at the start of the prolog so we can patch in a
18921891
// branch if we need to invalidate the method later

src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,7 @@ void LIR_Assembler::jobject2reg_with_patching(Register reg, CodeEmitInfo *info)
374374
int LIR_Assembler::initial_frame_size_in_bytes() const {
375375
// if rounding, must let FrameMap know!
376376

377-
// The frame_map records size in slots (32bit word)
378-
379-
// subtract two words to account for return address and link
380-
return (frame_map()->framesize() - (2*VMRegImpl::slots_per_word)) * VMRegImpl::stack_slot_size;
377+
return in_bytes(frame_map()->framesize_in_bytes());
381378
}
382379

383380

src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,17 +341,17 @@ void C1_MacroAssembler::inline_cache_check(Register receiver, Register iCache) {
341341
void C1_MacroAssembler::build_frame(int framesize, int bang_size_in_bytes) {
342342
assert(bang_size_in_bytes >= framesize, "stack bang size incorrect");
343343
// Make sure there is enough stack space for this method's activation.
344-
// Note that we do this before doing an enter().
344+
// Note that we do this before creating a frame.
345345
generate_stack_overflow_check(bang_size_in_bytes);
346-
MacroAssembler::build_frame(framesize + 2 * wordSize);
346+
MacroAssembler::build_frame(framesize);
347347

348348
// Insert nmethod entry barrier into frame.
349349
BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
350350
bs->nmethod_entry_barrier(this);
351351
}
352352

353353
void C1_MacroAssembler::remove_frame(int framesize) {
354-
MacroAssembler::remove_frame(framesize + 2 * wordSize);
354+
MacroAssembler::remove_frame(framesize);
355355
}
356356

357357

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4438,7 +4438,8 @@ void MacroAssembler::load_byte_map_base(Register reg) {
44384438
}
44394439

44404440
void MacroAssembler::build_frame(int framesize) {
4441-
assert(framesize > 0, "framesize must be > 0");
4441+
assert(framesize >= 2 * wordSize, "framesize must include space for FP/LR");
4442+
assert(framesize % (2*wordSize) == 0, "must preserve 2*wordSize alignment");
44424443
if (framesize < ((1 << 9) + 2 * wordSize)) {
44434444
sub(sp, sp, framesize);
44444445
stp(rfp, lr, Address(sp, framesize - 2 * wordSize));
@@ -4457,7 +4458,8 @@ void MacroAssembler::build_frame(int framesize) {
44574458
}
44584459

44594460
void MacroAssembler::remove_frame(int framesize) {
4460-
assert(framesize > 0, "framesize must be > 0");
4461+
assert(framesize >= 2 * wordSize, "framesize must include space for FP/LR");
4462+
assert(framesize % (2*wordSize) == 0, "must preserve 2*wordSize alignment");
44614463
if (framesize < ((1 << 9) + 2 * wordSize)) {
44624464
ldp(rfp, lr, Address(sp, framesize - 2 * wordSize));
44634465
add(sp, sp, framesize);

0 commit comments

Comments
 (0)