src/hotspot/cpu/arm/vtableStubs_arm.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
open Cdiff src/hotspot/cpu/arm/vtableStubs_arm.cpp
src/hotspot/cpu/arm/vtableStubs_arm.cpp
Print this page
*** 90,100 ****
{ // lookup virtual method
int entry_offset = in_bytes(Klass::vtable_start_offset()) + vtable_index * vtableEntry::size_in_bytes();
int method_offset = vtableEntry::method_offset_in_bytes() + entry_offset;
assert ((method_offset & (wordSize - 1)) == 0, "offset should be aligned");
! int offset_mask = AARCH64_ONLY(0xfff << LogBytesPerWord) NOT_AARCH64(0xfff);
if (method_offset & ~offset_mask) {
__ add(tmp, tmp, method_offset & ~offset_mask);
}
__ ldr(Rmethod, Address(tmp, method_offset & offset_mask));
}
--- 90,100 ----
{ // lookup virtual method
int entry_offset = in_bytes(Klass::vtable_start_offset()) + vtable_index * vtableEntry::size_in_bytes();
int method_offset = vtableEntry::method_offset_in_bytes() + entry_offset;
assert ((method_offset & (wordSize - 1)) == 0, "offset should be aligned");
! int offset_mask = 0xfff;
if (method_offset & ~offset_mask) {
__ add(tmp, tmp, method_offset & ~offset_mask);
}
__ ldr(Rmethod, Address(tmp, method_offset & offset_mask));
}
*** 107,122 ****
// Implementation required?
}
#endif
address ame_addr = __ pc();
- #ifdef AARCH64
- __ ldr(tmp, Address(Rmethod, Method::from_compiled_offset()));
- __ br(tmp);
- #else
__ ldr(PC, Address(Rmethod, Method::from_compiled_offset()));
- #endif // AARCH64
masm->flush();
bookkeeping(masm, tty, s, npe_addr, ame_addr, true, vtable_index, slop_bytes, 0);
return s;
--- 107,117 ----
*** 148,160 ****
#endif
assert(VtableStub::receiver_location() == R0->as_VMReg(), "receiver expected in R0");
// R0-R3 / R0-R7 registers hold the arguments and cannot be spoiled
! const Register Rclass = AARCH64_ONLY(R9) NOT_AARCH64(R4);
! const Register Rintf = AARCH64_ONLY(R10) NOT_AARCH64(R5);
! const Register Rscan = AARCH64_ONLY(R11) NOT_AARCH64(R6);
Label L_no_such_interface;
assert_different_registers(Ricklass, Rclass, Rintf, Rscan, Rtemp);
--- 143,155 ----
#endif
assert(VtableStub::receiver_location() == R0->as_VMReg(), "receiver expected in R0");
// R0-R3 / R0-R7 registers hold the arguments and cannot be spoiled
! const Register Rclass = R4;
! const Register Rintf = R5;
! const Register Rscan = R6;
Label L_no_such_interface;
assert_different_registers(Ricklass, Rclass, Rintf, Rscan, Rtemp);
*** 198,213 ****
}
#endif
address ame_addr = __ pc();
- #ifdef AARCH64
- __ 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);
// Handle IncompatibleClassChangeError in itable stubs.
// More detailed error message.
// We force resolving of the call site by jumping to the "handle
--- 193,203 ----
src/hotspot/cpu/arm/vtableStubs_arm.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File