62 lines
2.4 KiB
Diff
62 lines
2.4 KiB
Diff
# HG changeset patch
|
|
# User adinn
|
|
# Date 1516881392 0
|
|
# Thu Jan 25 11:56:32 2018 +0000
|
|
# Node ID 51d97ee431ff04f126c436b25dc75de7e0d2d4dd
|
|
# Parent 2da4a52715d837b639edcfe37c66e5428c023abd
|
|
8196136: AArch64: Correct register use in patch for JDK-8195685
|
|
Summary: itable stubs must not use java argument registers as scratch registers
|
|
Reviewed-by: aph
|
|
|
|
diff --git a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
|
|
--- a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
|
|
+++ b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
|
|
@@ -64,8 +64,8 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
|
|
|
#ifndef PRODUCT
|
|
if (CountCompiledCalls) {
|
|
- __ lea(r19, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr()));
|
|
- __ incrementw(Address(r19));
|
|
+ __ lea(r16, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr()));
|
|
+ __ incrementw(Address(r16));
|
|
}
|
|
#endif
|
|
|
|
@@ -74,13 +74,13 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
|
|
|
// get receiver klass
|
|
address npe_addr = __ pc();
|
|
- __ load_klass(r19, j_rarg0);
|
|
+ __ load_klass(r16, j_rarg0);
|
|
|
|
#ifndef PRODUCT
|
|
if (DebugVtables) {
|
|
Label L;
|
|
// check offset vs vtable length
|
|
- __ ldrw(rscratch1, Address(r19, InstanceKlass::vtable_length_offset() * wordSize));
|
|
+ __ ldrw(rscratch1, Address(r16, InstanceKlass::vtable_length_offset() * wordSize));
|
|
__ cmpw(rscratch1, vtable_index * vtableEntry::size());
|
|
__ br(Assembler::GT, L);
|
|
__ enter();
|
|
@@ -92,7 +92,7 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
|
}
|
|
#endif // PRODUCT
|
|
|
|
- __ lookup_virtual_method(r19, vtable_index, rmethod);
|
|
+ __ lookup_virtual_method(r16, vtable_index, rmethod);
|
|
|
|
if (DebugVtables) {
|
|
Label L;
|
|
@@ -145,9 +145,9 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) {
|
|
// rscratch2: CompiledICHolder
|
|
// j_rarg0: Receiver
|
|
|
|
- // Most registers are in use; we'll use r0, rmethod, r10, r11
|
|
+ // Most registers are in use; we'll use r16, rmethod, r10, r11
|
|
const Register recv_klass_reg = r10;
|
|
- const Register holder_klass_reg = r0; // declaring interface klass (DECC)
|
|
+ const Register holder_klass_reg = r16; // declaring interface klass (DECC)
|
|
const Register resolved_klass_reg = rmethod; // resolved interface klass (REFC)
|
|
const Register temp_reg = r11;
|
|
const Register icholder_reg = rscratch2;
|