1918 |
1918 |
1919 int i=0; |
1919 int i=0; |
1920 int total_strings = 0; |
1920 int total_strings = 0; |
1921 int first_arg_to_pass = 0; |
1921 int first_arg_to_pass = 0; |
1922 int total_c_args = 0; |
1922 int total_c_args = 0; |
1923 int box_offset = java_lang_boxing_object::value_offset_in_bytes(); |
|
1924 |
1923 |
1925 if( !method->is_static() ) { // Pass in receiver first |
1924 if( !method->is_static() ) { // Pass in receiver first |
1926 in_sig_bt[i++] = T_OBJECT; |
1925 in_sig_bt[i++] = T_OBJECT; |
1927 first_arg_to_pass = 1; |
1926 first_arg_to_pass = 1; |
1928 } |
1927 } |
2129 __ testl(in_reg, in_reg); |
2128 __ testl(in_reg, in_reg); |
2130 __ jcc(Assembler::zero, skipUnbox); |
2129 __ jcc(Assembler::zero, skipUnbox); |
2131 assert(dst.first()->is_stack() && |
2130 assert(dst.first()->is_stack() && |
2132 (!dst.second()->is_valid() || dst.second()->is_stack()), |
2131 (!dst.second()->is_valid() || dst.second()->is_stack()), |
2133 "value(s) must go into stack slots"); |
2132 "value(s) must go into stack slots"); |
2134 if ( out_sig_bt[c_arg] == T_LONG ) { |
2133 |
|
2134 BasicType bt = out_sig_bt[c_arg]; |
|
2135 int box_offset = java_lang_boxing_object::value_offset_in_bytes(bt); |
|
2136 if ( bt == T_LONG ) { |
2135 __ movl(rbx, Address(in_reg, |
2137 __ movl(rbx, Address(in_reg, |
2136 box_offset + VMRegImpl::stack_slot_size)); |
2138 box_offset + VMRegImpl::stack_slot_size)); |
2137 __ movl(Address(rsp, reg2offset_out(dst.second())), rbx); |
2139 __ movl(Address(rsp, reg2offset_out(dst.second())), rbx); |
2138 } |
2140 } |
2139 __ movl(in_reg, Address(in_reg, box_offset)); |
2141 __ movl(in_reg, Address(in_reg, box_offset)); |