mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 12:09:14 +00:00
8350482: [s390x] Relativize esp in interpreter frames
Reviewed-by: lucy, rrich
This commit is contained in:
parent
8fcfddb2d2
commit
a1c7e494c8
@ -176,7 +176,7 @@ void AbstractInterpreter::layout_activation(Method* method,
|
||||
intptr_t* monitor_base = (intptr_t*)((address)interpreter_frame->fp() - frame::z_ijava_state_size);
|
||||
intptr_t* monitor = monitor_base - (moncount * frame::interpreter_frame_monitor_size());
|
||||
intptr_t* operand_stack_base = monitor;
|
||||
intptr_t* tos = operand_stack_base - tempcount - popframe_extra_args;
|
||||
intptr_t* esp = operand_stack_base - tempcount - popframe_extra_args - 1;
|
||||
intptr_t* top_frame_sp =
|
||||
operand_stack_base - method->max_stack() - frame::z_top_ijava_frame_abi_size / Interpreter::stackElementSize;
|
||||
intptr_t* sender_sp;
|
||||
@ -206,7 +206,7 @@ void AbstractInterpreter::layout_activation(Method* method,
|
||||
interpreter_frame->interpreter_frame_set_locals(locals_base);
|
||||
interpreter_frame->interpreter_frame_set_monitor_end((BasicObjectLock *)monitor);
|
||||
*interpreter_frame->interpreter_frame_cache_addr() = method->constants()->cache();
|
||||
interpreter_frame->interpreter_frame_set_tos_address(tos);
|
||||
interpreter_frame->interpreter_frame_set_esp(esp);
|
||||
if (!is_bottom_frame) {
|
||||
interpreter_frame->interpreter_frame_set_sender_sp(sender_sp);
|
||||
}
|
||||
|
||||
@ -498,12 +498,12 @@
|
||||
|
||||
inline z_ijava_state* ijava_state() const;
|
||||
|
||||
// Where z_ijava_state.esp is saved.
|
||||
inline intptr_t** interpreter_frame_esp_addr() const;
|
||||
|
||||
public:
|
||||
|
||||
inline intptr_t* interpreter_frame_esp() const;
|
||||
// Where z_ijava_state.esp is saved.
|
||||
inline void interpreter_frame_set_esp(intptr_t* esp);
|
||||
inline intptr_t* interpreter_frame_top_frame_sp();
|
||||
inline void interpreter_frame_set_tos_address(intptr_t* x);
|
||||
inline void interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp);
|
||||
inline void interpreter_frame_set_sender_sp(intptr_t* sender_sp);
|
||||
#ifdef ASSERT
|
||||
|
||||
@ -226,18 +226,20 @@ inline void frame::interpreter_frame_set_magic() {
|
||||
}
|
||||
#endif
|
||||
|
||||
inline intptr_t* frame::interpreter_frame_esp() const {
|
||||
return (intptr_t*) at_relative(_z_ijava_idx(esp));
|
||||
}
|
||||
|
||||
// Where z_ijava_state.esp is saved.
|
||||
inline intptr_t** frame::interpreter_frame_esp_addr() const {
|
||||
return (intptr_t**) &(ijava_state()->esp);
|
||||
inline void frame::interpreter_frame_set_esp(intptr_t* esp) {
|
||||
assert(is_interpreted_frame(), "interpreted frame expected");
|
||||
// set relativized esp
|
||||
ijava_state()->esp = (intptr_t) (esp - fp());
|
||||
}
|
||||
|
||||
// top of expression stack (lowest address)
|
||||
inline intptr_t* frame::interpreter_frame_tos_address() const {
|
||||
return *interpreter_frame_esp_addr() + 1;
|
||||
}
|
||||
|
||||
inline void frame::interpreter_frame_set_tos_address(intptr_t* x) {
|
||||
*interpreter_frame_esp_addr() = x - 1;
|
||||
return interpreter_frame_esp() + Interpreter::stackElementWords;
|
||||
}
|
||||
|
||||
// Stack slot needed for native calls and GC.
|
||||
|
||||
@ -665,13 +665,20 @@ void InterpreterMacroAssembler::restore_bcp() {
|
||||
z_lg(Z_bcp, Address(Z_fp, _z_ijava_state_neg(bcp)));
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::save_esp() {
|
||||
z_stg(Z_esp, Address(Z_fp, _z_ijava_state_neg(esp)));
|
||||
void InterpreterMacroAssembler::save_esp(Register fp) {
|
||||
if (fp == noreg) {
|
||||
fp = Z_fp;
|
||||
}
|
||||
z_sgrk(Z_R0, Z_esp, fp);
|
||||
z_srag(Z_R0, Z_R0, Interpreter::logStackElementSize);
|
||||
z_stg(Z_R0, Address(fp, _z_ijava_state_neg(esp)));
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::restore_esp() {
|
||||
asm_assert_ijava_state_magic(Z_esp);
|
||||
z_lg(Z_esp, Address(Z_fp, _z_ijava_state_neg(esp)));
|
||||
z_slag(Z_esp, Z_esp, Interpreter::logStackElementSize);
|
||||
z_agr(Z_esp, Z_fp);
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::get_monitors(Register reg) {
|
||||
|
||||
@ -169,7 +169,7 @@ class InterpreterMacroAssembler: public MacroAssembler {
|
||||
|
||||
void restore_bcp();
|
||||
|
||||
void save_esp();
|
||||
void save_esp(Register fp = noreg);
|
||||
|
||||
void restore_esp();
|
||||
|
||||
|
||||
@ -1180,7 +1180,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
|
||||
__ z_stg(Z_R0, _z_ijava_state_neg(monitors), fp);
|
||||
|
||||
__ add2reg(Z_esp, -Interpreter::stackElementSize);
|
||||
__ z_stg(Z_esp, _z_ijava_state_neg(esp), fp);
|
||||
|
||||
__ save_esp(fp);
|
||||
|
||||
// z_ijava_state->cpoolCache = Z_R1_scratch (see load above);
|
||||
__ z_stg(Z_R1_scratch, _z_ijava_state_neg(cpoolCache), fp);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user