src/cpu/x86/vm/methodHandles_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/methodHandles_x86.cpp Wed Oct 28 19:30:38 2009
--- new/src/cpu/x86/vm/methodHandles_x86.cpp Wed Oct 28 19:30:38 2009
*** 533,552 ****
--- 533,551 ----
__ movptr(rbx_temp, rcx_bmh_argument);
Address prim_value_addr(rbx_temp, java_lang_boxing_object::value_offset_in_bytes(arg_type));
if (arg_type == T_OBJECT) {
__ movptr(Address(rax_argslot, 0), rbx_temp);
} else {
! __ load_sized_value(rbx_temp, prim_value_addr,
! __ load_sized_value(rdx_temp, prim_value_addr,
type2aelembytes(arg_type), is_signed_subword_type(arg_type));
! __ movptr(Address(rax_argslot, 0), rbx_temp);
! __ movptr(Address(rax_argslot, 0), rdx_temp);
#ifndef _LP64
if (arg_slots == 2) {
! __ movl(rbx_temp, prim_value_addr.plus_disp(wordSize));
! __ movl(Address(rax_argslot, Interpreter::stackElementSize()), rbx_temp);
! __ movl(rdx_temp, prim_value_addr.plus_disp(wordSize));
! __ movl(Address(rax_argslot, Interpreter::stackElementSize()), rdx_temp);
}
#endif //_LP64
break;
}
if (direct_to_method) {
Register rbx_method = rbx_temp;
__ movptr(rbx_method, rcx_mh_vmtarget);
*** 676,686 ****
--- 675,685 ----
__ movptr(rcx_recv, rcx_mh_vmtarget);
// (now we are done with the old MH)
// original 32-bit vmdata word must be of this form:
// | MBZ:16 | signBitCount:8 | srcDstTypes:8 | conversionOp:8 |
! __ xchgl(rcx, rbx_vminfo); // free rcx for shifts
! __ xchgptr(rcx, rbx_vminfo); // free rcx for shifts
__ shll(rdx_temp /*, rcx*/);
Label zero_extend, done;
__ testl(rcx, CONV_VMINFO_SIGN_FLAG);
__ jcc(Assembler::zero, zero_extend);
*** 691,702 ****
--- 690,701 ----
__ bind(zero_extend);
// this is taken for int->char
__ shrl(rdx_temp /*, rcx*/);
__ bind(done);
! __ movptr(vmarg, rdx_temp);
! __ xchgl(rcx, rbx_vminfo); // restore rcx_recv
! __ movl(vmarg, rdx_temp);
! __ xchgptr(rcx, rbx_vminfo); // restore rcx_recv
__ jump_to_method_handle_entry(rcx_recv, rdx_temp);
}
break;
src/cpu/x86/vm/methodHandles_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File