< prev index next >
src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, Red Hat Inc. 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
@@ -3281,14 +3281,28 @@
prepare_invoke(byte_no, r0, rmethod, // get f1 Klass*, f2 itable index
r2, r3); // recv, flags
// r0: interface klass (from f1)
- // rmethod: itable index (from f2)
+ // rmethod: itable index (from f2) or Method*
// r2: receiver
// r3: flags
+ // 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(r2);
+
+ __ profile_final_call(r0);
+ __ profile_arguments_type(r0, rmethod, r4, true);
+ __ jump_from_interpreted(rmethod, r0);
+
+ __ 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;
< prev index next >