397 |
397 |
398 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); |
398 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); |
399 if (VerifyOops) { |
399 if (VerifyOops) { |
400 __ verify_oop(rax); |
400 __ verify_oop(rax); |
401 } |
401 } |
|
402 |
|
403 Label L_done, L_throw_exception; |
|
404 const Register con_klass_temp = rcx; // same as Rcache |
|
405 __ movptr(con_klass_temp, Address(rax, oopDesc::klass_offset_in_bytes())); |
|
406 __ cmpptr(con_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr())); |
|
407 __ jcc(Assembler::notEqual, L_done); |
|
408 __ cmpl(Address(rax, arrayOopDesc::length_offset_in_bytes()), 0); |
|
409 __ jcc(Assembler::notEqual, L_throw_exception); |
|
410 __ xorptr(rax, rax); |
|
411 __ jmp(L_done); |
|
412 |
|
413 // Load the exception from the system-array which wraps it: |
|
414 __ bind(L_throw_exception); |
|
415 __ movptr(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT))); |
|
416 __ jump(ExternalAddress(Interpreter::throw_exception_entry())); |
|
417 |
|
418 __ bind(L_done); |
402 } |
419 } |
403 |
420 |
404 void TemplateTable::ldc2_w() { |
421 void TemplateTable::ldc2_w() { |
405 transition(vtos, vtos); |
422 transition(vtos, vtos); |
406 Label Long, Done; |
423 Label Long, Done; |