mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 12:09:14 +00:00
8350308: [s390x] Relativize last_sp (and top_frame_sp) in interpreter frames
Reviewed-by: lucy, rrich
This commit is contained in:
parent
762423d64d
commit
0eb680ca46
@ -203,11 +203,14 @@ inline intptr_t* frame::interpreter_frame_expression_stack() const {
|
||||
// Also begin is one past last monitor.
|
||||
|
||||
inline intptr_t* frame::interpreter_frame_top_frame_sp() {
|
||||
return (intptr_t*)ijava_state()->top_frame_sp;
|
||||
intptr_t n = *addr_at(_z_ijava_idx(top_frame_sp));
|
||||
return &fp()[n]; // return relativized locals
|
||||
}
|
||||
|
||||
inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) {
|
||||
ijava_state()->top_frame_sp = (intptr_t) top_frame_sp;
|
||||
assert(is_interpreted_frame(), "interpreted frame expected");
|
||||
// set relativized top_frame_sp
|
||||
ijava_state()->top_frame_sp = (intptr_t) (top_frame_sp - fp());
|
||||
}
|
||||
|
||||
inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp) {
|
||||
|
||||
@ -576,7 +576,10 @@ void InterpreterMacroAssembler::prepare_to_jump_from_interpreted(Register method
|
||||
// Satisfy interpreter calling convention (see generate_normal_entry()).
|
||||
z_lgr(Z_R10, Z_SP); // Set sender sp (aka initial caller sp, aka unextended sp).
|
||||
// Record top_frame_sp, because the callee might modify it, if it's compiled.
|
||||
z_stg(Z_SP, _z_ijava_state_neg(top_frame_sp), Z_fp);
|
||||
assert_different_registers(Z_R1, method);
|
||||
z_sgrk(Z_R1, Z_SP, Z_fp);
|
||||
z_srag(Z_R1, Z_R1, Interpreter::logStackElementSize);
|
||||
z_stg(Z_R1, _z_ijava_state_neg(top_frame_sp), Z_fp);
|
||||
save_bcp();
|
||||
save_esp();
|
||||
z_lgr(Z_method, method); // Set Z_method (kills Z_fp!).
|
||||
|
||||
@ -637,6 +637,8 @@ address TemplateInterpreterGenerator::generate_return_entry_for (TosState state,
|
||||
Register sp_before_i2c_extension = Z_bcp;
|
||||
__ z_lg(Z_fp, _z_abi(callers_sp), Z_SP); // Restore frame pointer.
|
||||
__ z_lg(sp_before_i2c_extension, Address(Z_fp, _z_ijava_state_neg(top_frame_sp)));
|
||||
__ z_slag(sp_before_i2c_extension, sp_before_i2c_extension, Interpreter::logStackElementSize);
|
||||
__ z_agr(sp_before_i2c_extension, Z_fp);
|
||||
__ resize_frame_absolute(sp_before_i2c_extension, Z_locals/*tmp*/, true/*load_fp*/);
|
||||
|
||||
// TODO(ZASM): necessary??
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user