@@ -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