388 __ push_i(rax); 389 __ jmp(Done); 390 391 __ bind(isOop); 392 __ movptr(rax, Address(rcx, rbx, Address::times_8, base_offset)); 393 __ push_ptr(rax); 394 395 if (VerifyOops) { 396 __ verify_oop(rax); 397 } 398 399 __ bind(Done); 400 } 401 402 // Fast path for caching oop constants. 403 // %%% We should use this to handle Class and String constants also. 404 // %%% It will simplify the ldc/primitive path considerably. 405 void TemplateTable::fast_aldc(bool wide) { 406 transition(vtos, atos); 407 408 if (!EnableMethodHandles) { 409 // We should not encounter this bytecode if !EnableMethodHandles. 410 // The verifier will stop it. However, if we get past the verifier, 411 // this will stop the thread in a reasonable way, without crashing the JVM. 412 __ call_VM(noreg, CAST_FROM_FN_PTR(address, 413 InterpreterRuntime::throw_IncompatibleClassChangeError)); 414 // the call_VM checks for exception, so we should never return here. 415 __ should_not_reach_here(); 416 return; 417 } 418 419 const Register cache = rcx; 420 const Register index = rdx; 421 422 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); 423 if (VerifyOops) { 424 __ verify_oop(rax); 425 } 426 427 Label L_done, L_throw_exception; 428 const Register con_klass_temp = rcx; // same as cache 429 const Register array_klass_temp = rdx; // same as index | 388 __ push_i(rax); 389 __ jmp(Done); 390 391 __ bind(isOop); 392 __ movptr(rax, Address(rcx, rbx, Address::times_8, base_offset)); 393 __ push_ptr(rax); 394 395 if (VerifyOops) { 396 __ verify_oop(rax); 397 } 398 399 __ bind(Done); 400 } 401 402 // Fast path for caching oop constants. 403 // %%% We should use this to handle Class and String constants also. 404 // %%% It will simplify the ldc/primitive path considerably. 405 void TemplateTable::fast_aldc(bool wide) { 406 transition(vtos, atos); 407 408 if (!EnableInvokeDynamic) { 409 // We should not encounter this bytecode if !EnableInvokeDynamic. 410 // The verifier will stop it. However, if we get past the verifier, 411 // this will stop the thread in a reasonable way, without crashing the JVM. 412 __ call_VM(noreg, CAST_FROM_FN_PTR(address, 413 InterpreterRuntime::throw_IncompatibleClassChangeError)); 414 // the call_VM checks for exception, so we should never return here. 415 __ should_not_reach_here(); 416 return; 417 } 418 419 const Register cache = rcx; 420 const Register index = rdx; 421 422 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); 423 if (VerifyOops) { 424 __ verify_oop(rax); 425 } 426 427 Label L_done, L_throw_exception; 428 const Register con_klass_temp = rcx; // same as cache 429 const Register array_klass_temp = rdx; // same as index |