comparison src/cpu/x86/vm/sharedRuntime_x86_32.cpp @ 165:437d03ea40b1

6703888: Compressed Oops: use the 32-bits gap after klass in a object Summary: Use the gap also for a narrow oop field and a boxing object value. Reviewed-by: coleenp, never
author kvn
date Wed, 21 May 2008 16:31:35 -0700
parents 018d5b58dd4f
children d1605aabd0a1
comparison
equal deleted inserted replaced
164:c436414a719e 165:437d03ea40b1
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));