@@ -1100,6 +1100,11 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
11001100
11011101 // ... and push the new frame F0.
11021102 __ push_frame (top_frame_size, fp, true /* copy_sp*/ , false );
1103+
1104+ __ z_lcgr (top_frame_size); // negate
1105+ __ z_srag (top_frame_size, top_frame_size, Interpreter::logStackElementSize);
1106+ // Store relativized top_frame_sp
1107+ __ z_stg (top_frame_size, _z_ijava_state_neg (top_frame_sp), fp);
11031108 }
11041109
11051110 // =============================================================================
@@ -2068,6 +2073,14 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
20682073 __ z_lg (Z_fp, _z_abi (callers_sp), Z_SP); // Frame accessors use Z_fp.
20692074 // Z_ARG1 (==Z_tos): exception
20702075 // Z_ARG2 : Return address/pc that threw exception.
2076+ {
2077+ Register top_frame_sp = Z_R1_scratch; // anyway going to load it with correct value
2078+ __ z_lg (top_frame_sp, Address (Z_fp, _z_ijava_state_neg (top_frame_sp)));
2079+ __ z_slag (top_frame_sp, top_frame_sp, Interpreter::logStackElementSize);
2080+ __ z_agr (top_frame_sp, Z_fp);
2081+
2082+ __ resize_frame_absolute (top_frame_sp, /* temp = */ Z_R0, /* load_fp = */ true );
2083+ }
20712084 __ restore_bcp (); // R13 points to call/send.
20722085 __ restore_locals ();
20732086
@@ -2175,6 +2188,14 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
21752188 false , // install_monitor_exception
21762189 false ); // notify_jvmdi
21772190 __ z_lg (Z_fp, _z_abi (callers_sp), Z_SP); // Restore frame pointer.
2191+ {
2192+ Register top_frame_sp = Z_R1_scratch;
2193+ __ z_lg (top_frame_sp, Address (Z_fp, _z_ijava_state_neg (top_frame_sp)));
2194+ __ z_slag (top_frame_sp, top_frame_sp, Interpreter::logStackElementSize);
2195+ __ z_agr (top_frame_sp, Z_fp);
2196+
2197+ __ resize_frame_absolute (top_frame_sp, /* temp = */ Z_R0, /* load_fp = */ true );
2198+ }
21782199 __ restore_bcp ();
21792200 __ restore_locals ();
21802201 __ restore_esp ();
0 commit comments