195 __ lookup_interface_method(// inputs: rec. class, interface
196 recv_klass_reg, resolved_klass_reg, noreg,
197 // outputs: scan temp. reg1, scan temp. reg2
198 temp_reg2, temp_reg,
199 L_no_such_interface,
200 /*return_method=*/false);
201
202 const ptrdiff_t typecheckSize = __ pc() - start_pc;
203 start_pc = __ pc();
204
205 // Get selected method from declaring class and itable index
206 __ lookup_interface_method(// inputs: rec. class, interface, itable index
207 recv_klass_reg, holder_klass_reg, itable_index,
208 // outputs: method, scan temp. reg
209 rmethod, temp_reg,
210 L_no_such_interface);
211
212 const ptrdiff_t lookupSize = __ pc() - start_pc;
213
214 // Reduce "estimate" such that "padding" does not drop below 8.
215 const ptrdiff_t estimate = 124;
216 const ptrdiff_t codesize = typecheckSize + lookupSize;
217 slop_delta = (int)(estimate - codesize);
218 slop_bytes += slop_delta;
219 assert(slop_delta >= 0, "itable #%d: Code size estimate (%d) for lookup_interface_method too small, required: %d", itable_index, (int)estimate, (int)codesize);
220
221 #ifdef ASSERT
222 if (DebugVtables) {
223 Label L2;
224 __ cbz(rmethod, L2);
225 __ ldr(rscratch1, Address(rmethod, Method::from_compiled_offset()));
226 __ cbnz(rscratch1, L2);
227 __ stop("compiler entrypoint is null");
228 __ bind(L2);
229 }
230 #endif // ASSERT
231
232 // rmethod: Method*
233 // j_rarg0: receiver
234 address ame_addr = __ pc();
235 __ ldr(rscratch1, Address(rmethod, Method::from_compiled_offset()));
|
195 __ lookup_interface_method(// inputs: rec. class, interface
196 recv_klass_reg, resolved_klass_reg, noreg,
197 // outputs: scan temp. reg1, scan temp. reg2
198 temp_reg2, temp_reg,
199 L_no_such_interface,
200 /*return_method=*/false);
201
202 const ptrdiff_t typecheckSize = __ pc() - start_pc;
203 start_pc = __ pc();
204
205 // Get selected method from declaring class and itable index
206 __ lookup_interface_method(// inputs: rec. class, interface, itable index
207 recv_klass_reg, holder_klass_reg, itable_index,
208 // outputs: method, scan temp. reg
209 rmethod, temp_reg,
210 L_no_such_interface);
211
212 const ptrdiff_t lookupSize = __ pc() - start_pc;
213
214 // Reduce "estimate" such that "padding" does not drop below 8.
215 const ptrdiff_t estimate = 128;
216 const ptrdiff_t codesize = typecheckSize + lookupSize;
217 slop_delta = (int)(estimate - codesize);
218 slop_bytes += slop_delta;
219 assert(slop_delta >= 0, "itable #%d: Code size estimate (%d) for lookup_interface_method too small, required: %d", itable_index, (int)estimate, (int)codesize);
220
221 #ifdef ASSERT
222 if (DebugVtables) {
223 Label L2;
224 __ cbz(rmethod, L2);
225 __ ldr(rscratch1, Address(rmethod, Method::from_compiled_offset()));
226 __ cbnz(rscratch1, L2);
227 __ stop("compiler entrypoint is null");
228 __ bind(L2);
229 }
230 #endif // ASSERT
231
232 // rmethod: Method*
233 // j_rarg0: receiver
234 address ame_addr = __ pc();
235 __ ldr(rscratch1, Address(rmethod, Method::from_compiled_offset()));
|