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

src/cpu/x86/vm/sharedRuntime_x86_64.cpp

Print this page

        

*** 1948,1958 **** int i=0; int total_strings = 0; int first_arg_to_pass = 0; int total_c_args = 0; - int box_offset = java_lang_boxing_object::value_offset_in_bytes(); // Skip the receiver as dtrace doesn't want to see it if( !method->is_static() ) { in_sig_bt[i++] = T_OBJECT; first_arg_to_pass = 1; --- 1948,1957 ----
*** 2195,2206 **** __ movptr(Address(rsp, reg2offset_out(dst.first())), (int32_t)NULL_WORD); __ testq(in_reg, in_reg); __ jcc(Assembler::zero, skipUnbox); Address src1(in_reg, box_offset); ! if ( out_sig_bt[c_arg] == T_LONG ) { __ movq(in_reg, src1); __ movq(stack_dst, in_reg); assert(out_sig_bt[c_arg+1] == T_VOID, "must be"); ++c_arg; // skip over T_VOID to keep the loop indices in sync } else { --- 2194,2207 ---- __ movptr(Address(rsp, reg2offset_out(dst.first())), (int32_t)NULL_WORD); __ testq(in_reg, in_reg); __ jcc(Assembler::zero, skipUnbox); + BasicType bt = out_sig_bt[c_arg]; + int box_offset = java_lang_boxing_object::value_offset_in_bytes(bt); Address src1(in_reg, box_offset); ! if ( bt == T_LONG ) { __ movq(in_reg, src1); __ movq(stack_dst, in_reg); assert(out_sig_bt[c_arg+1] == T_VOID, "must be"); ++c_arg; // skip over T_VOID to keep the loop indices in sync } else {
*** 2458,2469 **** if (out_sig_bt[c_arg] == T_INT || out_sig_bt[c_arg] == T_LONG) { // need to unbox a one-word value Label skip; __ testq(r, r); __ jcc(Assembler::equal, skip); Address src1(r, box_offset); ! if ( out_sig_bt[c_arg] == T_LONG ) { __ movq(r, src1); } else { __ movl(r, src1); } __ bind(skip); --- 2459,2472 ---- if (out_sig_bt[c_arg] == T_INT || out_sig_bt[c_arg] == T_LONG) { // need to unbox a one-word value Label skip; __ testq(r, r); __ jcc(Assembler::equal, skip); + BasicType bt = out_sig_bt[c_arg]; + int box_offset = java_lang_boxing_object::value_offset_in_bytes(bt); Address src1(r, box_offset); ! if ( bt == T_LONG ) { __ movq(r, src1); } else { __ movl(r, src1); } __ bind(skip);
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File