374 __ jccb(Assembler::equal, isOop); 375 __ movl(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); 376 __ push(itos); 377 __ jmp(Done); 378 __ bind(isOop); 379 __ movptr(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); 380 __ push(atos); 381 382 if (VerifyOops) { 383 __ verify_oop(rax); 384 } 385 __ bind(Done); 386 } 387 388 // Fast path for caching oop constants. 389 // %%% We should use this to handle Class and String constants also. 390 // %%% It will simplify the ldc/primitive path considerably. 391 void TemplateTable::fast_aldc(bool wide) { 392 transition(vtos, atos); 393 394 if (!EnableMethodHandles) { 395 // We should not encounter this bytecode if !EnableMethodHandles. 396 // The verifier will stop it. However, if we get past the verifier, 397 // this will stop the thread in a reasonable way, without crashing the JVM. 398 __ call_VM(noreg, CAST_FROM_FN_PTR(address, 399 InterpreterRuntime::throw_IncompatibleClassChangeError)); 400 // the call_VM checks for exception, so we should never return here. 401 __ should_not_reach_here(); 402 return; 403 } 404 405 const Register cache = rcx; 406 const Register index = rdx; 407 408 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); 409 if (VerifyOops) { 410 __ verify_oop(rax); 411 } 412 413 Label L_done, L_throw_exception; 414 const Register con_klass_temp = rcx; // same as Rcache 415 __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes())); | 374 __ jccb(Assembler::equal, isOop); 375 __ movl(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); 376 __ push(itos); 377 __ jmp(Done); 378 __ bind(isOop); 379 __ movptr(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); 380 __ push(atos); 381 382 if (VerifyOops) { 383 __ verify_oop(rax); 384 } 385 __ bind(Done); 386 } 387 388 // Fast path for caching oop constants. 389 // %%% We should use this to handle Class and String constants also. 390 // %%% It will simplify the ldc/primitive path considerably. 391 void TemplateTable::fast_aldc(bool wide) { 392 transition(vtos, atos); 393 394 if (!EnableInvokeDynamic) { 395 // We should not encounter this bytecode if !EnableInvokeDynamic. 396 // The verifier will stop it. However, if we get past the verifier, 397 // this will stop the thread in a reasonable way, without crashing the JVM. 398 __ call_VM(noreg, CAST_FROM_FN_PTR(address, 399 InterpreterRuntime::throw_IncompatibleClassChangeError)); 400 // the call_VM checks for exception, so we should never return here. 401 __ should_not_reach_here(); 402 return; 403 } 404 405 const Register cache = rcx; 406 const Register index = rdx; 407 408 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); 409 if (VerifyOops) { 410 __ verify_oop(rax); 411 } 412 413 Label L_done, L_throw_exception; 414 const Register con_klass_temp = rcx; // same as Rcache 415 __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes())); |