Skip to content

Commit c8f3a97

Browse files
committed
8305171: PPC: Should use IMA::load_resolved_indy_entry() in TIG::generate_return_entry_for()
Reviewed-by: mdoerr
1 parent 7fe5bd2 commit c8f3a97

File tree

3 files changed

+7
-12
lines changed

3 files changed

+7
-12
lines changed

src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,6 @@ void InterpreterMacroAssembler::load_resolved_indy_entry(Register cache, Registe
488488
ld_ptr(cache, in_bytes(ConstantPoolCache::invokedynamic_entries_offset()), R27_constPoolCache);
489489
// Scale the index to be the entry index * sizeof(ResolvedInvokeDynamicInfo)
490490
sldi(index, index, log2i_exact(sizeof(ResolvedIndyEntry)));
491-
addi(index, index, Array<ResolvedIndyEntry>::base_offset_in_bytes());
492491
add(cache, cache, index);
493492
}
494493

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -644,12 +644,7 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
644644
const Register cache = R11_scratch1;
645645
const Register size = R12_scratch2;
646646
if (index_size == sizeof(u4)) {
647-
__ get_cache_index_at_bcp(size, 1, index_size); // Load index.
648-
// Get address of invokedynamic array
649-
__ ld_ptr(cache, in_bytes(ConstantPoolCache::invokedynamic_entries_offset()), R27_constPoolCache);
650-
// Scale the index to be the entry index * sizeof(ResolvedInvokeDynamicInfo)
651-
__ sldi(size, size, log2i_exact(sizeof(ResolvedIndyEntry)));
652-
__ add(cache, cache, size);
647+
__ load_resolved_indy_entry(cache, size /* tmp */);
653648
__ lhz(size, Array<ResolvedIndyEntry>::base_offset_in_bytes() + in_bytes(ResolvedIndyEntry::num_parameters_offset()), cache);
654649
} else {
655650
__ get_cache_and_index_at_bcp(cache, 1, index_size);

src/hotspot/cpu/ppc/templateTable_ppc_64.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2286,12 +2286,13 @@ void TemplateTable::load_invokedynamic_entry(Register method) {
22862286
const Register cache = R31;
22872287
const Register index = R21_tmp1;
22882288
const Register tmp = R11_scratch1;
2289+
const int array_base_offset = Array<ResolvedIndyEntry>::base_offset_in_bytes();
22892290
assert_different_registers(method, appendix, cache, index, tmp);
22902291

22912292
Label resolved;
22922293

22932294
__ load_resolved_indy_entry(cache, index);
2294-
__ ld_ptr(method, in_bytes(ResolvedIndyEntry::method_offset()), cache);
2295+
__ ld_ptr(method, array_base_offset + in_bytes(ResolvedIndyEntry::method_offset()), cache);
22952296

22962297
// The invokedynamic is unresolved iff method is NULL
22972298
__ cmpdi(CCR0, method, 0);
@@ -2305,7 +2306,7 @@ void TemplateTable::load_invokedynamic_entry(Register method) {
23052306
__ call_VM(noreg, entry, R4_ARG2, true);
23062307
// Update registers with resolved info
23072308
__ load_resolved_indy_entry(cache, index);
2308-
__ ld_ptr(method, in_bytes(ResolvedIndyEntry::method_offset()), cache);
2309+
__ ld_ptr(method, array_base_offset + in_bytes(ResolvedIndyEntry::method_offset()), cache);
23092310

23102311
DEBUG_ONLY(__ cmpdi(CCR0, method, 0));
23112312
__ asm_assert_ne("Should be resolved by now");
@@ -2314,12 +2315,12 @@ void TemplateTable::load_invokedynamic_entry(Register method) {
23142315

23152316
Label L_no_push;
23162317
// Check if there is an appendix
2317-
__ lbz(index, in_bytes(ResolvedIndyEntry::flags_offset()), cache);
2318+
__ lbz(index, array_base_offset + in_bytes(ResolvedIndyEntry::flags_offset()), cache);
23182319
__ rldicl_(R0, index, 64-ResolvedIndyEntry::has_appendix_shift, 63);
23192320
__ beq(CCR0, L_no_push);
23202321

23212322
// Get appendix
2322-
__ lhz(index, in_bytes(ResolvedIndyEntry::resolved_references_index_offset()), cache);
2323+
__ lhz(index, array_base_offset + in_bytes(ResolvedIndyEntry::resolved_references_index_offset()), cache);
23232324
// Push the appendix as a trailing parameter
23242325
assert(cache->is_nonvolatile(), "C-call in resolve_oop_handle");
23252326
__ load_resolved_reference_at_index(appendix, index, /* temp */ ret_addr, tmp);
@@ -2333,7 +2334,7 @@ void TemplateTable::load_invokedynamic_entry(Register method) {
23332334
address table_addr = (address) Interpreter::invoke_return_entry_table_for(code);
23342335

23352336
// compute return type
2336-
__ lbz(index, in_bytes(ResolvedIndyEntry::result_type_offset()), cache);
2337+
__ lbz(index, array_base_offset + in_bytes(ResolvedIndyEntry::result_type_offset()), cache);
23372338
__ load_dispatch_table(Rtable_addr, (address*)table_addr);
23382339
__ sldi(index, index, LogBytesPerWord);
23392340
// Get return address.

0 commit comments

Comments
 (0)