Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pr jdk 10+40 #19

Merged
merged 71 commits into from
Jan 25, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
c86f53b
8172525: Improve key keying case
Apr 28, 2017
dfb37fb
8179533: Cleaner print job handling
May 17, 2017
2896bb3
8180011: Cleaner native graphics device handling
May 17, 2017
ba8dac3
8179990: Cleaner palette entry handling
May 18, 2017
9fec6be
8180020: Improve SymbolHashMap entry handling
May 25, 2017
a749902
8174962: Better interface invocations
May 26, 2017
39d8c79
8180015: Cleaner AWT robot handling
Jun 1, 2017
2b3a901
8180869: Cleaner image file reading handling
Jun 5, 2017
36eb248
8181664: Improve JVM UTF String handling
Jun 12, 2017
23ba474
8176450: Revise default document styling
Mar 23, 2017
75a694f
8180877: More deeply colored ICC spaces
Jun 29, 2017
a091adc
8174756: Extra validation for public keys
Jul 4, 2017
941668e
8182125: Improve reliability of DNS lookups
Jul 23, 2017
8528b67
8182387: Improve PKCS usage
Jul 28, 2017
f84d250
8182601: Improve usage messages
Aug 8, 2017
8db9876
8186212: Improve GSS handling
Aug 24, 2017
6265fdd
8178466: Better RSA parameters
Aug 31, 2017
851dd6f
8160104: CORBA communication improvements
Sep 3, 2017
061b971
8175932: Improve host instance supports
Mar 20, 2017
35c4072
8178449: Improve LDAP logins
Sep 4, 2017
e77f7af
8181670: Improve implementation of keystores
Sep 5, 2017
51ae208
8178458: Better use of certificates in LDAP
Sep 13, 2017
40a6c70
8186998: Improve JMX supportive features
Sep 25, 2017
2ccce30
8186080: Transform XML interfaces
Oct 4, 2017
2878a04
8185325: Improve GTK initialization
Oct 2, 2017
1888e4d
8186600: Improve property negotiations
Oct 18, 2017
8db1797
8185292: Stricter key generation
Oct 24, 2017
5761eb3
8163237: Restrict the use of EXPORT cipher suites
Oct 31, 2017
c71328e
8186606: Improve LDAP lookup robustness
Nov 4, 2017
4f74bb7
8190789: sun/security/provider/certpath/LDAPCertStore/TestURICertStor…
Nov 6, 2017
5af727f
8190289: More refactoring for client deserialization cases
Nov 6, 2017
03b095e
8191907: PPC64 and s390 parts of JDK-8174962: Better interface invoca…
Nov 27, 2017
39aea61
8189284: More refactoring for deserialization cases
Nov 28, 2017
19018b1
8191142: More refactoring for naming deserialization cases
Nov 29, 2017
f2fd06c
8193683: Increase the number of clones in the CloneableDigest
Dec 19, 2017
20cd0a4
Merge
Jan 9, 2018
c84cd63
8188145: MethodHandle resolution should follow JVMS sequence of looku…
Jan 11, 2018
ad325e8
8181878: javadoc should support/ignore --add-opens
Jan 11, 2018
2d1163c
8193664: AppCDS tests should use -XX:+UnlockCommercialFeatures when r…
Jan 12, 2018
c6a85fb
Added tag jdk-10+39 for changeset 5b834ec96236
Jan 12, 2018
5cf8ede
Merge
Jan 12, 2018
47fa14d
8194959: Correct test tag to move bugid from @test to @bug
Jan 12, 2018
31f4f75
8194044: Regression manual Test javax/swing/JFileChooser/8067660/File…
Jan 12, 2018
e7d83b4
8194955: Warn when default HTML version is used
Jan 12, 2018
d1b48c6
8194287: tools/launcher/RunpathTest.java fails with java.lang.NullPoi…
Jan 12, 2018
2fba318
Merge
Jan 12, 2018
5efc53a
8194883: Unhandleable Push Promises should be cancelled
Jan 13, 2018
f39c286
8193767: Improve javadoc in ResourceBundle working with modules
Dec 21, 2017
96ff062
8191350: jdk/internal/reflect/CallerSensitive/CheckCSMs.java test fai…
Jan 15, 2018
d82e955
8187946: Support ISO 4217 Amendments 163 and 164
Jan 15, 2018
cb69f1c
8194914: Compilation fails with "node not on backedge" in OuterStripM…
Jan 15, 2018
6f36c0d
8193597: sun/nio/cs/TestStringCoding.java fails intermittently with g…
Jan 15, 2018
72e8055
8194993: Loop Strip Mining has some leftover debugging code
Jan 15, 2018
960b102
8193933: Export ClassLoaderData claim state to support interleaved ob…
Jan 15, 2018
c3f7384
8195072: Update ASM 3rd party legal copyright to 6.0
Jan 15, 2018
4245cf1
8175542: JMX: Not enough JDP packets received
Jan 16, 2018
234b56c
8195094: Fix type-O in "8159422: Very high Concurrent Mark mark stack…
Jan 16, 2018
ebb59e5
8179700: Exceptions thrown in StartManagementAgent.java
Jan 16, 2018
55b73a2
8194929: Unreferenced FileDescriptors not closed
Jan 16, 2018
7614307
8195138: The asynchronous Http1HeaderParser doesn't handle all line f…
Jan 16, 2018
fe80ebb
8194717: JDK10 L10n resource file update - msgdrop 10
Jan 15, 2018
ce45705
8181047: Add comment to technical terms that shall not be translated
Jan 16, 2018
3767620
8189146: Have use of "var" in 9 and earlier source versions issue a w…
Jan 17, 2018
41ed20f
8194953: doclet corrupts HTML files when adding navbar
Jan 17, 2018
cb89776
Merge
Jan 17, 2018
59ce1ce
8195153: [test] runtime/6981737/Test6981737.java shouldn't check 'jav…
Jan 17, 2018
ad2c3f9
Merge
Jan 17, 2018
efb3f0f
8075939: Stream.flatMap() causes breaking of short-circuiting of term…
Dec 21, 2017
151e9ff
8195123: Very large regressions in Octane benchmarks using 10-b39
Jan 17, 2018
fcc828d
8194988: 8 Null pointer dereference defect groups related to MultiNod…
Jan 17, 2018
20bb80c
8194963: SystemDictionary::link_method_handle_constant() can't link M…
Jan 17, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .hgtags
Original file line number Diff line number Diff line change
Expand Up @@ -463,3 +463,4 @@ d8c634b016c628622c9abbdc6bf50509e5dedbec jdk-10+35
cb54a299aa91419cb7caef3992592e7b22488163 jdk-10+36
4f830b447edf04fb4a52151a5ad44d9bb60723cd jdk-10+37
e569e83139fdfbecfeb3cd9014d560917787f158 jdk-10+38
5b834ec962366e00d4445352a999a3ac14e26f64 jdk-10+39
8 changes: 4 additions & 4 deletions make/data/currency/CurrencyData.properties
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ formatVersion=3
# Version of the currency code information in this class.
# It is a serial number that accompanies with each amendment.

dataVersion=162
dataVersion=164

# List of all valid ISO 4217 currency codes.
# To ensure compatibility, do not remove codes.
Expand All @@ -52,7 +52,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\
PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\
UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
Expand Down Expand Up @@ -196,7 +196,7 @@ CU=CUP
CW=ANG
# CYPRUS
CY=EUR
# CZECH REPUBLIC (THE)
# CZECHIA
CZ=CZK
# DENMARK
DK=DKK
Expand Down Expand Up @@ -470,7 +470,7 @@ SM=EUR
# SOUTH SUDAN
SS=SSP
# SAO TOME AND PRINCIPE
ST=STD
ST=STN
# SAUDI ARABIA
SA=SAR
# SENEGAL
Expand Down
3 changes: 2 additions & 1 deletion make/mapfiles/libjava/mapfile-vers
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1997, 2018, Oracle and/or its affiliates. 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
Expand Down Expand Up @@ -74,6 +74,7 @@ SUNWprivate_1.1 {
JNU_ThrowStringIndexOutOfBoundsException;
JNU_ToString;

Java_java_io_FileDescriptor_cleanupClose0;
Java_java_io_FileDescriptor_close0;
Java_java_io_FileDescriptor_initIDs;
Java_java_io_FileDescriptor_sync;
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -774,7 +774,7 @@ AdapterHandlerEntry* SharedRuntime::generate_i2c2i_adapters(MacroAssembler *masm
__ load_klass(rscratch1, receiver);
__ ldr(tmp, Address(holder, CompiledICHolder::holder_klass_offset()));
__ cmp(rscratch1, tmp);
__ ldr(rmethod, Address(holder, CompiledICHolder::holder_method_offset()));
__ ldr(rmethod, Address(holder, CompiledICHolder::holder_metadata_offset()));
__ br(Assembler::EQ, ok);
__ far_jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub()));

Expand Down
78 changes: 47 additions & 31 deletions src/hotspot/cpu/arm/macroAssembler_arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2475,49 +2475,65 @@ void MacroAssembler::store_sized_value(Register src, Address dst, size_t size_in
// On success, the result will be in method_result, and execution falls through.
// On failure, execution transfers to the given label.
void MacroAssembler::lookup_interface_method(Register Rklass,
Register Rinterf,
Register Rindex,
Register Rintf,
RegisterOrConstant itable_index,
Register method_result,
Register temp_reg1,
Register temp_reg2,
Register Rscan,
Register Rtmp,
Label& L_no_such_interface) {

assert_different_registers(Rklass, Rinterf, temp_reg1, temp_reg2, Rindex);
assert_different_registers(Rklass, Rintf, Rscan, Rtmp);

Register Ritable = temp_reg1;
const int entry_size = itableOffsetEntry::size() * HeapWordSize;
assert(itableOffsetEntry::interface_offset_in_bytes() == 0, "not added for convenience");

// Compute start of first itableOffsetEntry (which is at the end of the vtable)
const int base = in_bytes(Klass::vtable_start_offset());
const int scale = exact_log2(vtableEntry::size_in_bytes());
ldr_s32(temp_reg2, Address(Rklass, Klass::vtable_length_offset())); // Get length of vtable
add(Ritable, Rklass, base);
add(Ritable, Ritable, AsmOperand(temp_reg2, lsl, scale));
ldr_s32(Rtmp, Address(Rklass, Klass::vtable_length_offset())); // Get length of vtable
add(Rscan, Rklass, base);
add(Rscan, Rscan, AsmOperand(Rtmp, lsl, scale));

Label entry, search;
// Search through the itable for an interface equal to incoming Rintf
// itable looks like [intface][offset][intface][offset][intface][offset]

b(entry);

bind(search);
add(Ritable, Ritable, itableOffsetEntry::size() * HeapWordSize);

bind(entry);

// Check that the entry is non-null. A null entry means that the receiver
// class doesn't implement the interface, and wasn't the same as the
// receiver class checked when the interface was resolved.

ldr(temp_reg2, Address(Ritable, itableOffsetEntry::interface_offset_in_bytes()));
cbz(temp_reg2, L_no_such_interface);

cmp(Rinterf, temp_reg2);
b(search, ne);
Label loop;
bind(loop);
ldr(Rtmp, Address(Rscan, entry_size, post_indexed));
#ifdef AARCH64
Label found;
cmp(Rtmp, Rintf);
b(found, eq);
cbnz(Rtmp, loop);
#else
cmp(Rtmp, Rintf); // set ZF and CF if interface is found
cmn(Rtmp, 0, ne); // check if tmp == 0 and clear CF if it is
b(loop, ne);
#endif // AARCH64

ldr_s32(temp_reg2, Address(Ritable, itableOffsetEntry::offset_offset_in_bytes()));
add(temp_reg2, temp_reg2, Rklass); // Add offset to Klass*
assert(itableMethodEntry::size() * HeapWordSize == wordSize, "adjust the scaling in the code below");
assert(itableMethodEntry::method_offset_in_bytes() == 0, "adjust the offset in the code below");
#ifdef AARCH64
b(L_no_such_interface);
bind(found);
#else
// CF == 0 means we reached the end of itable without finding icklass
b(L_no_such_interface, cc);
#endif // !AARCH64

ldr(method_result, Address::indexed_ptr(temp_reg2, Rindex));
if (method_result != noreg) {
// Interface found at previous position of Rscan, now load the method
ldr_s32(Rtmp, Address(Rscan, itableOffsetEntry::offset_offset_in_bytes() - entry_size));
if (itable_index.is_register()) {
add(Rtmp, Rtmp, Rklass); // Add offset to Klass*
assert(itableMethodEntry::size() * HeapWordSize == wordSize, "adjust the scaling in the code below");
assert(itableMethodEntry::method_offset_in_bytes() == 0, "adjust the offset in the code below");
ldr(method_result, Address::indexed_ptr(Rtmp, itable_index.as_register()));
} else {
int method_offset = itableMethodEntry::size() * HeapWordSize * itable_index.as_constant() +
itableMethodEntry::method_offset_in_bytes();
add_slow(method_result, Rklass, method_offset);
ldr(method_result, Address(method_result, Rtmp));
}
}
}

#ifdef COMPILER2
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/cpu/arm/macroAssembler_arm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1316,7 +1316,7 @@ class MacroAssembler: public Assembler {

void lookup_interface_method(Register recv_klass,
Register intf_klass,
Register itable_index,
RegisterOrConstant itable_index,
Register method_result,
Register temp_reg1,
Register temp_reg2,
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/cpu/arm/sharedRuntime_arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -984,7 +984,7 @@ AdapterHandlerEntry* SharedRuntime::generate_i2c2i_adapters(MacroAssembler *masm

__ load_klass(receiver_klass, receiver);
__ ldr(holder_klass, Address(Ricklass, CompiledICHolder::holder_klass_offset()));
__ ldr(Rmethod, Address(Ricklass, CompiledICHolder::holder_method_offset()));
__ ldr(Rmethod, Address(Ricklass, CompiledICHolder::holder_metadata_offset()));
__ cmp(receiver_klass, holder_klass);

#ifdef AARCH64
Expand Down
70 changes: 30 additions & 40 deletions src/hotspot/cpu/arm/templateTable_arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4198,7 +4198,7 @@ void TemplateTable::invokeinterface(int byte_no) {
const Register Rflags = R3_tmp;
const Register Rklass = R3_tmp;

prepare_invoke(byte_no, Rinterf, Rindex, Rrecv, Rflags);
prepare_invoke(byte_no, Rinterf, Rmethod, Rrecv, Rflags);

// Special case of invokeinterface called for virtual method of
// java.lang.Object. See cpCacheOop.cpp for details.
Expand All @@ -4207,56 +4207,39 @@ void TemplateTable::invokeinterface(int byte_no) {
Label notMethod;
__ tbz(Rflags, ConstantPoolCacheEntry::is_forced_virtual_shift, notMethod);

__ mov(Rmethod, Rindex);
invokevirtual_helper(Rmethod, Rrecv, Rflags);
__ bind(notMethod);

// Get receiver klass into Rklass - also a null check
__ load_klass(Rklass, Rrecv);

// profile this call
__ profile_virtual_call(R0_tmp, Rklass);

// Compute start of first itableOffsetEntry (which is at the end of the vtable)
const int base = in_bytes(Klass::vtable_start_offset());
assert(vtableEntry::size() == 1, "adjust the scaling in the code below");
__ ldr_s32(Rtemp, Address(Rklass, Klass::vtable_length_offset())); // Get length of vtable
__ add(Ritable, Rklass, base);
__ add(Ritable, Ritable, AsmOperand(Rtemp, lsl, LogBytesPerWord));

Label entry, search, interface_ok;
Label no_such_interface;

__ b(entry);

__ bind(search);
__ add(Ritable, Ritable, itableOffsetEntry::size() * HeapWordSize);

__ bind(entry);
// 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,
no_such_interface);

// Check that the entry is non-null. A null entry means that the receiver
// class doesn't implement the interface, and wasn't the same as the
// receiver class checked when the interface was resolved.

__ ldr(Rtemp, Address(Ritable, itableOffsetEntry::interface_offset_in_bytes()));
__ cbnz(Rtemp, interface_ok);

// throw exception
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
InterpreterRuntime::throw_IncompatibleClassChangeError));

// the call_VM checks for exception, so we should never return here.
__ should_not_reach_here();

__ bind(interface_ok);
// profile this call
__ profile_virtual_call(R0_tmp, Rklass);

__ cmp(Rinterf, Rtemp);
__ b(search, ne);
// Get declaring interface class from method
__ ldr(Rtemp, Address(Rmethod, Method::const_offset()));
__ ldr(Rtemp, Address(Rtemp, ConstMethod::constants_offset()));
__ ldr(Rinterf, Address(Rtemp, ConstantPool::pool_holder_offset_in_bytes()));

__ ldr_s32(Rtemp, Address(Ritable, itableOffsetEntry::offset_offset_in_bytes()));
__ add(Rtemp, Rtemp, Rklass); // Add offset to Klass*
assert(itableMethodEntry::size() == 1, "adjust the scaling in the code below");
// Get itable index from method
__ ldr_s32(Rtemp, Address(Rmethod, Method::itable_index_offset()));
__ add(Rtemp, Rtemp, (-Method::itable_index_max)); // small negative constant is too large for an immediate on arm32
__ neg(Rindex, Rtemp);

__ ldr(Rmethod, Address::indexed_ptr(Rtemp, Rindex));
__ lookup_interface_method(// inputs: rec. class, interface
Rklass, Rinterf, Rindex,
// outputs: scan temp. reg1, scan temp. reg2
Rmethod, Ritable, Rtemp,
no_such_interface);

// Rmethod: Method* to call

Expand All @@ -4278,6 +4261,13 @@ void TemplateTable::invokeinterface(int byte_no) {

// do the call
__ jump_from_interpreted(Rmethod);

// throw exception
__ bind(no_such_interface);
__ restore_method();
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError));
// the call_VM checks for exception, so we should never return here.
__ should_not_reach_here();
}

void TemplateTable::invokehandle(int byte_no) {
Expand Down
70 changes: 26 additions & 44 deletions src/hotspot/cpu/arm/vtableStubs_arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "code/vtableStubs.hpp"
#include "interp_masm_arm.hpp"
#include "memory/resourceArea.hpp"
#include "oops/compiledICHolder.hpp"
#include "oops/instanceKlass.hpp"
#include "oops/klassVtable.hpp"
#include "runtime/sharedRuntime.hpp"
Expand Down Expand Up @@ -118,67 +119,48 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) {

// R0-R3 / R0-R7 registers hold the arguments and cannot be spoiled
const Register Rclass = AARCH64_ONLY(R9) NOT_AARCH64(R4);
const Register Rlength = AARCH64_ONLY(R10) NOT_AARCH64(R5);
const Register Rintf = AARCH64_ONLY(R10) NOT_AARCH64(R5);
const Register Rscan = AARCH64_ONLY(R11) NOT_AARCH64(R6);
const Register tmp = Rtemp;

assert_different_registers(Ricklass, Rclass, Rlength, Rscan, tmp);
assert_different_registers(Ricklass, Rclass, Rintf, Rscan, Rtemp);

// Calculate the start of itable (itable goes after vtable)
const int scale = exact_log2(vtableEntry::size_in_bytes());
address npe_addr = __ pc();
__ load_klass(Rclass, R0);
__ ldr_s32(Rlength, Address(Rclass, Klass::vtable_length_offset()));

__ add(Rscan, Rclass, in_bytes(Klass::vtable_start_offset()));
__ add(Rscan, Rscan, AsmOperand(Rlength, lsl, scale));
Label L_no_such_interface;

// Search through the itable for an interface equal to incoming Ricklass
// itable looks like [intface][offset][intface][offset][intface][offset]
const int entry_size = itableOffsetEntry::size() * HeapWordSize;
assert(itableOffsetEntry::interface_offset_in_bytes() == 0, "not added for convenience");
// Receiver subtype check against REFC.
__ ldr(Rintf, Address(Ricklass, CompiledICHolder::holder_klass_offset()));
__ lookup_interface_method(// inputs: rec. class, interface, itable index
Rclass, Rintf, noreg,
// outputs: temp reg1, temp reg2
noreg, Rscan, Rtemp,
L_no_such_interface);

Label loop;
__ bind(loop);
__ ldr(tmp, Address(Rscan, entry_size, post_indexed));
#ifdef AARCH64
Label found;
__ cmp(tmp, Ricklass);
__ b(found, eq);
__ cbnz(tmp, loop);
#else
__ cmp(tmp, Ricklass); // set ZF and CF if interface is found
__ cmn(tmp, 0, ne); // check if tmp == 0 and clear CF if it is
__ b(loop, ne);
#endif // AARCH64

assert(StubRoutines::throw_IncompatibleClassChangeError_entry() != NULL, "Check initialization order");
#ifdef AARCH64
__ jump(StubRoutines::throw_IncompatibleClassChangeError_entry(), relocInfo::runtime_call_type, tmp);
__ bind(found);
#else
// CF == 0 means we reached the end of itable without finding icklass
__ jump(StubRoutines::throw_IncompatibleClassChangeError_entry(), relocInfo::runtime_call_type, noreg, cc);
#endif // !AARCH64

// Interface found at previous position of Rscan, now load the method oop
__ ldr_s32(tmp, Address(Rscan, itableOffsetEntry::offset_offset_in_bytes() - entry_size));
{
const int method_offset = itableMethodEntry::size() * HeapWordSize * itable_index +
itableMethodEntry::method_offset_in_bytes();
__ add_slow(Rmethod, Rclass, method_offset);
}
__ ldr(Rmethod, Address(Rmethod, tmp));
// Get Method* and entry point for compiler
__ ldr(Rintf, Address(Ricklass, CompiledICHolder::holder_metadata_offset()));
__ lookup_interface_method(// inputs: rec. class, interface, itable index
Rclass, Rintf, itable_index,
// outputs: temp reg1, temp reg2, temp reg3
Rmethod, Rscan, Rtemp,
L_no_such_interface);

address ame_addr = __ pc();

#ifdef AARCH64
__ ldr(tmp, Address(Rmethod, Method::from_compiled_offset()));
__ br(tmp);
__ ldr(Rtemp, Address(Rmethod, Method::from_compiled_offset()));
__ br(Rtemp);
#else
__ ldr(PC, Address(Rmethod, Method::from_compiled_offset()));
#endif // AARCH64

__ bind(L_no_such_interface);

assert(StubRoutines::throw_IncompatibleClassChangeError_entry() != NULL, "check initialization order");
__ jump(StubRoutines::throw_IncompatibleClassChangeError_entry(), relocInfo::runtime_call_type, Rtemp);

masm->flush();

if (PrintMiscellaneous && (WizardMode || Verbose)) {
Expand All @@ -205,7 +187,7 @@ int VtableStub::pd_code_size_limit(bool is_vtable_stub) {
instr_count = NOT_AARCH64(4) AARCH64_ONLY(5);
} else {
// itable stub size
instr_count = NOT_AARCH64(20) AARCH64_ONLY(20);
instr_count = NOT_AARCH64(31) AARCH64_ONLY(31);
}

#ifdef AARCH64
Expand Down
Loading