Mercurial > hg > truffle
comparison src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 344:6aae2f9d0294
Merge
author | ysr |
---|---|
date | Thu, 12 Jun 2008 13:50:55 -0700 |
parents | 437d03ea40b1 |
children | d1605aabd0a1 |
comparison
equal
deleted
inserted
replaced
342:37f87013dfd8 | 344:6aae2f9d0294 |
---|---|
1948 | 1948 |
1949 int i=0; | 1949 int i=0; |
1950 int total_strings = 0; | 1950 int total_strings = 0; |
1951 int first_arg_to_pass = 0; | 1951 int first_arg_to_pass = 0; |
1952 int total_c_args = 0; | 1952 int total_c_args = 0; |
1953 int box_offset = java_lang_boxing_object::value_offset_in_bytes(); | |
1954 | 1953 |
1955 // Skip the receiver as dtrace doesn't want to see it | 1954 // Skip the receiver as dtrace doesn't want to see it |
1956 if( !method->is_static() ) { | 1955 if( !method->is_static() ) { |
1957 in_sig_bt[i++] = T_OBJECT; | 1956 in_sig_bt[i++] = T_OBJECT; |
1958 first_arg_to_pass = 1; | 1957 first_arg_to_pass = 1; |
2195 __ movptr(Address(rsp, reg2offset_out(dst.first())), | 2194 __ movptr(Address(rsp, reg2offset_out(dst.first())), |
2196 (int32_t)NULL_WORD); | 2195 (int32_t)NULL_WORD); |
2197 __ testq(in_reg, in_reg); | 2196 __ testq(in_reg, in_reg); |
2198 __ jcc(Assembler::zero, skipUnbox); | 2197 __ jcc(Assembler::zero, skipUnbox); |
2199 | 2198 |
2199 BasicType bt = out_sig_bt[c_arg]; | |
2200 int box_offset = java_lang_boxing_object::value_offset_in_bytes(bt); | |
2200 Address src1(in_reg, box_offset); | 2201 Address src1(in_reg, box_offset); |
2201 if ( out_sig_bt[c_arg] == T_LONG ) { | 2202 if ( bt == T_LONG ) { |
2202 __ movq(in_reg, src1); | 2203 __ movq(in_reg, src1); |
2203 __ movq(stack_dst, in_reg); | 2204 __ movq(stack_dst, in_reg); |
2204 assert(out_sig_bt[c_arg+1] == T_VOID, "must be"); | 2205 assert(out_sig_bt[c_arg+1] == T_VOID, "must be"); |
2205 ++c_arg; // skip over T_VOID to keep the loop indices in sync | 2206 ++c_arg; // skip over T_VOID to keep the loop indices in sync |
2206 } else { | 2207 } else { |
2458 if (out_sig_bt[c_arg] == T_INT || out_sig_bt[c_arg] == T_LONG) { | 2459 if (out_sig_bt[c_arg] == T_INT || out_sig_bt[c_arg] == T_LONG) { |
2459 // need to unbox a one-word value | 2460 // need to unbox a one-word value |
2460 Label skip; | 2461 Label skip; |
2461 __ testq(r, r); | 2462 __ testq(r, r); |
2462 __ jcc(Assembler::equal, skip); | 2463 __ jcc(Assembler::equal, skip); |
2464 BasicType bt = out_sig_bt[c_arg]; | |
2465 int box_offset = java_lang_boxing_object::value_offset_in_bytes(bt); | |
2463 Address src1(r, box_offset); | 2466 Address src1(r, box_offset); |
2464 if ( out_sig_bt[c_arg] == T_LONG ) { | 2467 if ( bt == T_LONG ) { |
2465 __ movq(r, src1); | 2468 __ movq(r, src1); |
2466 } else { | 2469 } else { |
2467 __ movl(r, src1); | 2470 __ movl(r, src1); |
2468 } | 2471 } |
2469 __ bind(skip); | 2472 __ bind(skip); |