src/cpu/x86/vm/templateTable_x86_32.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_32.cpp

Print this page




 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()));


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