mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-15 16:44:36 +02:00
Merge
This commit is contained in:
commit
a842f84577
6 changed files with 8 additions and 36 deletions
|
@ -2726,11 +2726,11 @@ void MacroAssembler::lookup_interface_method(Register recv_klass,
|
||||||
BLOCK_COMMENT("lookup_interface_method {");
|
BLOCK_COMMENT("lookup_interface_method {");
|
||||||
|
|
||||||
// Load start of itable entries into itable_entry_addr.
|
// Load start of itable entries into itable_entry_addr.
|
||||||
z_llgf(vtable_len, Address(recv_klass, InstanceKlass::vtable_length_offset()));
|
z_llgf(vtable_len, Address(recv_klass, Klass::vtable_length_offset()));
|
||||||
z_sllg(vtable_len, vtable_len, exact_log2(vtableEntry::size_in_bytes()));
|
z_sllg(vtable_len, vtable_len, exact_log2(vtableEntry::size_in_bytes()));
|
||||||
|
|
||||||
// Loop over all itable entries until desired interfaceOop(Rinterface) found.
|
// Loop over all itable entries until desired interfaceOop(Rinterface) found.
|
||||||
const int vtable_base_offset = in_bytes(InstanceKlass::vtable_start_offset());
|
const int vtable_base_offset = in_bytes(Klass::vtable_start_offset());
|
||||||
|
|
||||||
add2reg_with_index(itable_entry_addr,
|
add2reg_with_index(itable_entry_addr,
|
||||||
vtable_base_offset + itableOffsetEntry::interface_offset_in_bytes(),
|
vtable_base_offset + itableOffsetEntry::interface_offset_in_bytes(),
|
||||||
|
|
|
@ -623,26 +623,6 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
#define __ (Verbose ? (_masm->block_comment(FILE_AND_LINE),_masm):_masm)->
|
#define __ (Verbose ? (_masm->block_comment(FILE_AND_LINE),_masm):_masm)->
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// The following routine generates a subroutine to throw an asynchronous
|
|
||||||
// UnknownError when an unsafe access gets a fault that could not be
|
|
||||||
// reasonably prevented by the programmer. (Example: SIGBUS/OBJERR.)
|
|
||||||
//
|
|
||||||
// Arguments:
|
|
||||||
// trapping PC: ??
|
|
||||||
//
|
|
||||||
// Results:
|
|
||||||
// Posts an asynchronous exception, skips the trapping instruction.
|
|
||||||
//
|
|
||||||
address generate_handler_for_unsafe_access() {
|
|
||||||
StubCodeMark mark(this, "StubRoutines", "handler_for_unsafe_access");
|
|
||||||
{
|
|
||||||
address start = __ pc();
|
|
||||||
__ unimplemented("StubRoutines::handler_for_unsafe_access", 86);
|
|
||||||
return start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Support for uint StubRoutine::zarch::partial_subtype_check(Klass
|
// Support for uint StubRoutine::zarch::partial_subtype_check(Klass
|
||||||
// sub, Klass super);
|
// sub, Klass super);
|
||||||
//
|
//
|
||||||
|
@ -2462,8 +2442,6 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false);
|
StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false);
|
||||||
StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false);
|
StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false);
|
||||||
|
|
||||||
StubRoutines::zarch::_handler_for_unsafe_access_entry = generate_handler_for_unsafe_access();
|
|
||||||
|
|
||||||
// Support for verify_oop (must happen after universe_init).
|
// Support for verify_oop (must happen after universe_init).
|
||||||
StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop_subroutine();
|
StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop_subroutine();
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,6 @@
|
||||||
// Implementation of the platform-specific part of StubRoutines - for
|
// Implementation of the platform-specific part of StubRoutines - for
|
||||||
// a description of how to extend it, see the stubRoutines.hpp file.
|
// a description of how to extend it, see the stubRoutines.hpp file.
|
||||||
|
|
||||||
address StubRoutines::zarch::_handler_for_unsafe_access_entry = NULL;
|
|
||||||
|
|
||||||
address StubRoutines::zarch::_partial_subtype_check = NULL;
|
address StubRoutines::zarch::_partial_subtype_check = NULL;
|
||||||
|
|
||||||
// Comapct string intrinsics: Translate table for string inflate intrinsic. Used by trot instruction.
|
// Comapct string intrinsics: Translate table for string inflate intrinsic. Used by trot instruction.
|
||||||
|
|
|
@ -68,8 +68,6 @@ class zarch {
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static address _handler_for_unsafe_access_entry;
|
|
||||||
|
|
||||||
static int _atomic_memory_operation_lock;
|
static int _atomic_memory_operation_lock;
|
||||||
|
|
||||||
static address _partial_subtype_check;
|
static address _partial_subtype_check;
|
||||||
|
@ -91,8 +89,6 @@ class zarch {
|
||||||
static int atomic_memory_operation_lock() { return _atomic_memory_operation_lock; }
|
static int atomic_memory_operation_lock() { return _atomic_memory_operation_lock; }
|
||||||
static void set_atomic_memory_operation_lock(int value) { _atomic_memory_operation_lock = value; }
|
static void set_atomic_memory_operation_lock(int value) { _atomic_memory_operation_lock = value; }
|
||||||
|
|
||||||
static address handler_for_unsafe_access_entry() { return _handler_for_unsafe_access_entry; }
|
|
||||||
|
|
||||||
static address partial_subtype_check() { return _partial_subtype_check; }
|
static address partial_subtype_check() { return _partial_subtype_check; }
|
||||||
|
|
||||||
static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
|
static void generate_load_crc_table_addr(MacroAssembler* masm, Register table);
|
||||||
|
|
|
@ -3466,7 +3466,7 @@ void TemplateTable::invokevirtual_helper(Register index,
|
||||||
__ z_sllg(index, index, exact_log2(vtableEntry::size_in_bytes()));
|
__ z_sllg(index, index, exact_log2(vtableEntry::size_in_bytes()));
|
||||||
__ mem2reg_opt(method,
|
__ mem2reg_opt(method,
|
||||||
Address(Z_tmp_2, index,
|
Address(Z_tmp_2, index,
|
||||||
InstanceKlass::vtable_start_offset() + in_ByteSize(vtableEntry::method_offset_in_bytes())));
|
Klass::vtable_start_offset() + in_ByteSize(vtableEntry::method_offset_in_bytes())));
|
||||||
__ profile_arguments_type(Z_ARG4, method, Z_ARG5, true);
|
__ profile_arguments_type(Z_ARG4, method, Z_ARG5, true);
|
||||||
__ jump_from_interpreted(method, Z_ARG4);
|
__ jump_from_interpreted(method, Z_ARG4);
|
||||||
BLOCK_COMMENT("} invokevirtual_helper");
|
BLOCK_COMMENT("} invokevirtual_helper");
|
||||||
|
|
|
@ -83,7 +83,7 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
||||||
__ load_klass(rcvr_klass, Z_ARG1);
|
__ load_klass(rcvr_klass, Z_ARG1);
|
||||||
|
|
||||||
// Set method (in case of interpreted method), and destination address.
|
// Set method (in case of interpreted method), and destination address.
|
||||||
int entry_offset = in_bytes(InstanceKlass::vtable_start_offset()) +
|
int entry_offset = in_bytes(Klass::vtable_start_offset()) +
|
||||||
vtable_index * vtableEntry::size_in_bytes();
|
vtable_index * vtableEntry::size_in_bytes();
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
|
@ -96,8 +96,8 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
||||||
// worst case actual size
|
// worst case actual size
|
||||||
padding_bytes += __ load_const_size() - __ load_const_optimized_rtn_len(vtable_idx, vtable_index*vtableEntry::size_in_bytes(), true);
|
padding_bytes += __ load_const_size() - __ load_const_optimized_rtn_len(vtable_idx, vtable_index*vtableEntry::size_in_bytes(), true);
|
||||||
|
|
||||||
assert(Immediate::is_uimm12(in_bytes(InstanceKlass::vtable_length_offset())), "disp to large");
|
assert(Immediate::is_uimm12(in_bytes(Klass::vtable_length_offset())), "disp to large");
|
||||||
__ z_cl(vtable_idx, in_bytes(InstanceKlass::vtable_length_offset()), rcvr_klass);
|
__ z_cl(vtable_idx, in_bytes(Klass::vtable_length_offset()), rcvr_klass);
|
||||||
__ z_brl(L);
|
__ z_brl(L);
|
||||||
__ z_lghi(Z_ARG3, vtable_index); // Debug code, don't optimize.
|
__ z_lghi(Z_ARG3, vtable_index); // Debug code, don't optimize.
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), Z_ARG1, Z_ARG3, false);
|
__ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), Z_ARG1, Z_ARG3, false);
|
||||||
|
@ -187,11 +187,11 @@ VtableStub* VtableStubs::create_itable_stub(int vtable_index) {
|
||||||
__ load_klass(rcvr_klass, Z_ARG1);
|
__ load_klass(rcvr_klass, Z_ARG1);
|
||||||
|
|
||||||
// Load start of itable entries into itable_entry.
|
// Load start of itable entries into itable_entry.
|
||||||
__ z_llgf(vtable_len, Address(rcvr_klass, InstanceKlass::vtable_length_offset()));
|
__ z_llgf(vtable_len, Address(rcvr_klass, Klass::vtable_length_offset()));
|
||||||
__ z_sllg(vtable_len, vtable_len, exact_log2(vtableEntry::size_in_bytes()));
|
__ z_sllg(vtable_len, vtable_len, exact_log2(vtableEntry::size_in_bytes()));
|
||||||
|
|
||||||
// Loop over all itable entries until desired interfaceOop(Rinterface) found.
|
// Loop over all itable entries until desired interfaceOop(Rinterface) found.
|
||||||
const int vtable_base_offset = in_bytes(InstanceKlass::vtable_start_offset());
|
const int vtable_base_offset = in_bytes(Klass::vtable_start_offset());
|
||||||
// Count unused bytes.
|
// Count unused bytes.
|
||||||
start_pc = __ pc();
|
start_pc = __ pc();
|
||||||
__ add2reg_with_index(itable_entry_addr, vtable_base_offset + itableOffsetEntry::interface_offset_in_bytes(), rcvr_klass, vtable_len);
|
__ add2reg_with_index(itable_entry_addr, vtable_base_offset + itableOffsetEntry::interface_offset_in_bytes(), rcvr_klass, vtable_len);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue