hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
changeset 7114 65d21c4c6337
parent 6772 2563324665d5
child 7397 5b173b4ca846
equal deleted inserted replaced
7113:f05a0ba2802f 7114:65d21c4c6337
   411 
   411 
   412   resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1));
   412   resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1));
   413   if (VerifyOops) {
   413   if (VerifyOops) {
   414     __ verify_oop(rax);
   414     __ verify_oop(rax);
   415   }
   415   }
       
   416 
       
   417   Label L_done, L_throw_exception;
       
   418   const Register con_klass_temp = rcx;  // same as cache
       
   419   const Register array_klass_temp = rdx;  // same as index
       
   420   __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes()));
       
   421   __ lea(array_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr()));
       
   422   __ cmpptr(con_klass_temp, Address(array_klass_temp, 0));
       
   423   __ jcc(Assembler::notEqual, L_done);
       
   424   __ cmpl(Address(rax, arrayOopDesc::length_offset_in_bytes()), 0);
       
   425   __ jcc(Assembler::notEqual, L_throw_exception);
       
   426   __ xorptr(rax, rax);
       
   427   __ jmp(L_done);
       
   428 
       
   429   // Load the exception from the system-array which wraps it:
       
   430   __ bind(L_throw_exception);
       
   431   __ movptr(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
       
   432   __ jump(ExternalAddress(Interpreter::throw_exception_entry()));
       
   433 
       
   434   __ bind(L_done);
   416 }
   435 }
   417 
   436 
   418 void TemplateTable::ldc2_w() {
   437 void TemplateTable::ldc2_w() {
   419   transition(vtos, vtos);
   438   transition(vtos, vtos);
   420   Label Long, Done;
   439   Label Long, Done;