< prev index next >

src/hotspot/cpu/ppc/templateTable_ppc_64.cpp

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2013, 2017 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as

@@ -3529,10 +3529,27 @@
                  Rrecv_klass      = Rreceiver,
                  Rflags           = R7_ARG5;
 
   prepare_invoke(byte_no, Rinterface_klass, Rret_addr, Rindex, Rreceiver, Rflags, Rscratch1);
 
+  // Check for private method invocation - indicated by vfinal
+  Label LnotVFinal;
+
+  __ testbitdi(CCR0, R0, Rflags, ConstantPoolCacheEntry::is_vfinal_shift);
+  __ bfalse(CCR0, LnotVFinal);
+
+  __ null_check_throw(Rreceiver, -1, Rscratch3);
+
+  Register Rscratch = Rflags; // Rflags is dead now.
+
+  __ profile_final_call(Rscratch1, Rscratch);
+  __ profile_arguments_type(Rindex, Rscratch, Rrecv_klass /* scratch */, true);
+
+  __ call_from_interpreter(Rindex, Rret_addr, Rscratch, Rrecv_klass /* scratch */);
+
+  __ bind(LnotVFinal);
+
   // Get receiver klass.
   __ null_check_throw(Rreceiver, oopDesc::klass_offset_in_bytes(), Rscratch3);
   __ load_klass(Rrecv_klass, Rreceiver);
 
   // Check corner case object method.
< prev index next >