Mercurial > hg > truffle
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; |