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