src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6893081 Cdiff src/cpu/x86/vm/methodHandles_x86.cpp

src/cpu/x86/vm/methodHandles_x86.cpp

Print this page
rev 1022 : 6829192: JSR 292 needs to support 64-bit x86
Summary: changes for method handles and invokedynamic
Reviewed-by: ?, ?
rev 1023 : [mq]: meth.walker.patch
rev 1024 : imported patch indy-cleanup-6893081.patch

*** 533,552 **** __ 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, type2aelembytes(arg_type), is_signed_subword_type(arg_type)); ! __ movptr(Address(rax_argslot, 0), rbx_temp); #ifndef _LP64 if (arg_slots == 2) { ! __ movl(rbx_temp, prim_value_addr.plus_disp(wordSize)); ! __ movl(Address(rax_argslot, Interpreter::stackElementSize()), rbx_temp); } #endif //_LP64 - break; } if (direct_to_method) { Register rbx_method = rbx_temp; __ movptr(rbx_method, rcx_mh_vmtarget); --- 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(rdx_temp, prim_value_addr, type2aelembytes(arg_type), is_signed_subword_type(arg_type)); ! __ movptr(Address(rax_argslot, 0), rdx_temp); #ifndef _LP64 if (arg_slots == 2) { ! __ movl(rdx_temp, prim_value_addr.plus_disp(wordSize)); ! __ movl(Address(rax_argslot, Interpreter::stackElementSize()), rdx_temp); } #endif //_LP64 } if (direct_to_method) { Register rbx_method = rbx_temp; __ movptr(rbx_method, rcx_mh_vmtarget);
*** 676,686 **** __ 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 __ shll(rdx_temp /*, rcx*/); Label zero_extend, done; __ testl(rcx, CONV_VMINFO_SIGN_FLAG); __ jcc(Assembler::zero, zero_extend); --- 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 | ! __ 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 **** __ 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 __ jump_to_method_handle_entry(rcx_recv, rdx_temp); } break; --- 690,701 ---- __ bind(zero_extend); // this is taken for int->char __ shrl(rdx_temp /*, rcx*/); __ bind(done); ! __ 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