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