comparison src/cpu/x86/vm/methodHandles_x86.cpp @ 2258:28bf941f445e

7018378: JSR 292: _bound_int_mh produces wrong result on 64-bit SPARC Reviewed-by: kvn
author twisti
date Mon, 14 Feb 2011 03:21:18 -0800
parents d810e9a3fc33
children 1b4e6a5d98e0
comparison
equal deleted inserted replaced
2257:34457f6ac818 2258:28bf941f445e
600 get_ek_bound_mh_info(ek, arg_type, arg_mask, arg_slots); 600 get_ek_bound_mh_info(ek, arg_type, arg_mask, arg_slots);
601 601
602 // make room for the new argument: 602 // make room for the new argument:
603 __ movl(rax_argslot, rcx_bmh_vmargslot); 603 __ movl(rax_argslot, rcx_bmh_vmargslot);
604 __ lea(rax_argslot, __ argument_address(rax_argslot)); 604 __ lea(rax_argslot, __ argument_address(rax_argslot));
605 insert_arg_slots(_masm, arg_slots * stack_move_unit(), arg_mask, 605
606 rax_argslot, rbx_temp, rdx_temp); 606 insert_arg_slots(_masm, arg_slots * stack_move_unit(), arg_mask, rax_argslot, rbx_temp, rdx_temp);
607 607
608 // store bound argument into the new stack slot: 608 // store bound argument into the new stack slot:
609 __ load_heap_oop(rbx_temp, rcx_bmh_argument); 609 __ load_heap_oop(rbx_temp, rcx_bmh_argument);
610 Address prim_value_addr(rbx_temp, java_lang_boxing_object::value_offset_in_bytes(arg_type));
611 if (arg_type == T_OBJECT) { 610 if (arg_type == T_OBJECT) {
612 __ movptr(Address(rax_argslot, 0), rbx_temp); 611 __ movptr(Address(rax_argslot, 0), rbx_temp);
613 } else { 612 } else {
614 __ load_sized_value(rdx_temp, prim_value_addr, 613 Address prim_value_addr(rbx_temp, java_lang_boxing_object::value_offset_in_bytes(arg_type));
615 type2aelembytes(arg_type), is_signed_subword_type(arg_type)); 614 const int arg_size = type2aelembytes(arg_type);
616 __ movptr(Address(rax_argslot, 0), rdx_temp); 615 __ load_sized_value(rdx_temp, prim_value_addr, arg_size, is_signed_subword_type(arg_type), rbx_temp);
617 #ifndef _LP64 616 __ store_sized_value(Address(rax_argslot, 0), rdx_temp, arg_size, rbx_temp);
618 if (arg_slots == 2) {
619 __ movl(rdx_temp, prim_value_addr.plus_disp(wordSize));
620 __ movl(Address(rax_argslot, Interpreter::stackElementSize), rdx_temp);
621 }
622 #endif //_LP64
623 } 617 }
624 618
625 if (direct_to_method) { 619 if (direct_to_method) {
626 Register rbx_method = rbx_temp; 620 Register rbx_method = rbx_temp;
627 __ load_heap_oop(rbx_method, rcx_mh_vmtarget); 621 __ load_heap_oop(rbx_method, rcx_mh_vmtarget);