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