< prev index next >
src/hotspot/cpu/s390/templateTable_s390.cpp
Print this page
@@ -3616,15 +3616,25 @@
receiver, flags);
// Z_R14 (== Z_bytecode) : return entry
// Check for private method invocation - indicated by vfinal
- Label notVFinal;
+ NearLabel notVFinal;
__ testbit(flags, ConstantPoolCacheEntry::is_vfinal_shift);
__ z_brz(notVFinal);
- __ null_check(receiver);
+ // 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_temp_3, subtype);
+ // If we get here the typecheck failed
+ __ z_bru(no_such_interface);
+ __ bind(subtype);
+
+ // do the call
__ profile_final_call(Z_tmp_2);
__ profile_arguments_type(Z_tmp_2, method, Z_ARG5, true);
__ jump_from_interpreted(method, Z_tmp_2);
@@ -3632,11 +3642,11 @@
// Special case of invokeinterface called for virtual method of
// java.lang.Object. See cpCacheOop.cpp for details.
// This code isn't produced by javac, but could be produced by
// another compliant java compiler.
- NearLabel notMethod, no_such_interface, no_such_method;
+ NearLabel notMethod, no_such_method;
__ testbit(flags, ConstantPoolCacheEntry::is_forced_virtual_shift);
__ z_brz(notMethod);
invokevirtual_helper(method, receiver, flags);
__ bind(notMethod);
< prev index next >