< prev index next >
src/hotspot/cpu/arm/templateTable_arm.cpp
Print this page
*** 4198,4235 ****
const Register Rflags = R3_tmp;
const Register Rklass = R3_tmp;
prepare_invoke(byte_no, Rinterf, Rmethod, Rrecv, Rflags);
// Check for private method invocation - indicated by vfinal
Label notVFinal;
__ tbz(flags, ConstantPoolCacheEntry::is_vfinal_shift, notVFinal);
! // do the call - the index is actually the method to call
! __ null_check(Rrecv, Rtemp);
__ profile_final_call(R0_tmp);
__ jump_from_interpreted(Rindex);
__ bind(notVFinal);
// 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.
Label notMethod;
__ tbz(Rflags, ConstantPoolCacheEntry::is_forced_virtual_shift, notMethod);
invokevirtual_helper(Rmethod, Rrecv, Rflags);
__ bind(notMethod);
- // Get receiver klass into Rklass - also a null check
- __ load_klass(Rklass, Rrecv);
-
- Label no_such_interface;
-
// Receiver subtype check against REFC.
__ lookup_interface_method(// inputs: rec. class, interface
Rklass, Rinterf, noreg,
// outputs: scan temp. reg1, scan temp. reg2
noreg, Ritable, Rtemp,
--- 4198,4243 ----
const Register Rflags = R3_tmp;
const Register Rklass = R3_tmp;
prepare_invoke(byte_no, Rinterf, Rmethod, Rrecv, Rflags);
+
+ Label no_such_interface;
+
// Check for private method invocation - indicated by vfinal
Label notVFinal;
__ tbz(flags, ConstantPoolCacheEntry::is_vfinal_shift, notVFinal);
! // Get receiver klass into Rklass - also a null check
! __ load_klass(Rklass, Rrecv);
! Label subtype;
! __ check_klass_subtype(Rklass, Rinterf, R1_tmp, R0_tmp, subtype);
! // If we get here the typecheck failed
! __ b(no_such_interface);
! __ bind(subtype);
!
! // do the call - the index is actually the method to call
__ profile_final_call(R0_tmp);
__ jump_from_interpreted(Rindex);
__ bind(notVFinal);
+ // Get receiver klass into Rklass - also a null check
+ __ load_klass(Rklass, Rrecv);
+
// 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.
Label notMethod;
__ tbz(Rflags, ConstantPoolCacheEntry::is_forced_virtual_shift, notMethod);
invokevirtual_helper(Rmethod, Rrecv, Rflags);
__ bind(notMethod);
// Receiver subtype check against REFC.
__ lookup_interface_method(// inputs: rec. class, interface
Rklass, Rinterf, noreg,
// outputs: scan temp. reg1, scan temp. reg2
noreg, Ritable, Rtemp,
< prev index next >