< prev index next >
src/hotspot/cpu/s390/templateTable_s390.cpp
Print this page
rev 50942 : 8206459: [s390] Prevent restoring incorrect bcp and locals in interpreter and avoid incorrect size of partialSubtypeCheckNode in C2
Reviewed-by:
*** 3634,3644 ****
// Get receiver klass into klass - also a null check.
__ load_klass(klass, receiver);
NearLabel subtype, no_such_interface;
! __ check_klass_subtype(klass, interface, Z_tmp_2, Z_tmp_3, subtype);
// If we get here the typecheck failed
__ z_bru(no_such_interface);
__ bind(subtype);
// do the call
--- 3634,3644 ----
// Get receiver klass into klass - also a null check.
__ load_klass(klass, receiver);
NearLabel subtype, no_such_interface;
! __ check_klass_subtype(klass, interface, Z_tmp_2, flags/*scratch*/, subtype);
// If we get here the typecheck failed
__ z_bru(no_such_interface);
__ bind(subtype);
// do the call
*** 3647,3657 ****
__ jump_from_interpreted(method, Z_tmp_2);
__ bind(notVFinal);
// Get receiver klass into klass - also a null check.
- __ restore_locals();
__ load_klass(klass, receiver);
__ lookup_interface_method(klass, interface, noreg, noreg, /*temp*/Z_ARG1,
no_such_interface, /*return_method=*/false);
--- 3647,3656 ----
*** 3693,3704 ****
// state for exception handling to work correctly!
__ bind(no_such_method);
// Throw exception.
- __ restore_bcp(); // Bcp must be correct for exception handler (was destroyed).
- __ restore_locals(); // Make sure locals pointer is correct as well (was destroyed).
// Pass arguments for generating a verbose error message.
__ z_lgr(Z_tmp_1, method); // Prevent register clash.
__ call_VM(noreg,
CAST_FROM_FN_PTR(address,
InterpreterRuntime::throw_AbstractMethodErrorVerbose),
--- 3692,3701 ----
*** 3707,3718 ****
__ should_not_reach_here();
__ bind(no_such_interface);
// Throw exception.
- __ restore_bcp(); // Bcp must be correct for exception handler (was destroyed).
- __ restore_locals(); // Make sure locals pointer is correct as well (was destroyed).
// Pass arguments for generating a verbose error message.
__ call_VM(noreg,
CAST_FROM_FN_PTR(address,
InterpreterRuntime::throw_IncompatibleClassChangeErrorVerbose),
klass, interface);
--- 3704,3713 ----
< prev index next >