comparison src/cpu/x86/vm/templateTable_x86_64.cpp @ 1913:3b2dea75431e

6984311: JSR 292 needs optional bootstrap method parameters Summary: Allow CONSTANT_InvokeDynamic nodes to have any number of extra operands. Reviewed-by: twisti
author jrose
date Sat, 30 Oct 2010 13:08:23 -0700
parents d55217dc206f
children f95d63e2154a
comparison
equal deleted inserted replaced
1912:8213b0f5c92d 1913:3b2dea75431e
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;