< 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,11 +3634,11 @@
   // 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);
+  __ 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,11 +3647,10 @@
   __ 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);
 

@@ -3693,12 +3692,10 @@
   // 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),

@@ -3707,12 +3704,10 @@
   __ 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);
< prev index next >