src/cpu/x86/vm/templateTable_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6817525 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateTable_x86_64.cpp

Print this page




 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


src/cpu/x86/vm/templateTable_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File