src/cpu/x86/vm/c1_MacroAssembler_x86.cpp

Print this page
rev 3688 : 7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by:


 142   } else {
 143     eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
 144     incr_allocated_bytes(noreg, var_size_in_bytes, con_size_in_bytes, t1);
 145   }
 146 }
 147 
 148 
 149 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
 150   assert_different_registers(obj, klass, len);
 151   if (UseBiasedLocking && !len->is_valid()) {
 152     assert_different_registers(obj, klass, len, t1, t2);
 153     movptr(t1, Address(klass, Klass::prototype_header_offset()));
 154     movptr(Address(obj, oopDesc::mark_offset_in_bytes()), t1);
 155   } else {
 156     // This assumes that all prototype bits fit in an int32_t
 157     movptr(Address(obj, oopDesc::mark_offset_in_bytes ()), (int32_t)(intptr_t)markOopDesc::prototype());
 158   }
 159 #ifdef _LP64
 160   if (UseCompressedKlassPointers) { // Take care not to kill klass
 161     movptr(t1, klass);
 162     encode_heap_oop_not_null(t1);
 163     movl(Address(obj, oopDesc::klass_offset_in_bytes()), t1);
 164   } else
 165 #endif
 166   {
 167     movptr(Address(obj, oopDesc::klass_offset_in_bytes()), klass);
 168   }
 169 
 170   if (len->is_valid()) {
 171     movl(Address(obj, arrayOopDesc::length_offset_in_bytes()), len);
 172   }
 173 #ifdef _LP64
 174   else if (UseCompressedKlassPointers) {
 175     xorptr(t1, t1);
 176     store_klass_gap(obj, t1);
 177   }
 178 #endif
 179 }
 180 
 181 
 182 // preserves obj, destroys len_in_bytes




 142   } else {
 143     eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
 144     incr_allocated_bytes(noreg, var_size_in_bytes, con_size_in_bytes, t1);
 145   }
 146 }
 147 
 148 
 149 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
 150   assert_different_registers(obj, klass, len);
 151   if (UseBiasedLocking && !len->is_valid()) {
 152     assert_different_registers(obj, klass, len, t1, t2);
 153     movptr(t1, Address(klass, Klass::prototype_header_offset()));
 154     movptr(Address(obj, oopDesc::mark_offset_in_bytes()), t1);
 155   } else {
 156     // This assumes that all prototype bits fit in an int32_t
 157     movptr(Address(obj, oopDesc::mark_offset_in_bytes ()), (int32_t)(intptr_t)markOopDesc::prototype());
 158   }
 159 #ifdef _LP64
 160   if (UseCompressedKlassPointers) { // Take care not to kill klass
 161     movptr(t1, klass);
 162     encode_klass_not_null(t1);
 163     movl(Address(obj, oopDesc::klass_offset_in_bytes()), t1);
 164   } else
 165 #endif
 166   {
 167     movptr(Address(obj, oopDesc::klass_offset_in_bytes()), klass);
 168   }
 169 
 170   if (len->is_valid()) {
 171     movl(Address(obj, arrayOopDesc::length_offset_in_bytes()), len);
 172   }
 173 #ifdef _LP64
 174   else if (UseCompressedKlassPointers) {
 175     xorptr(t1, t1);
 176     store_klass_gap(obj, t1);
 177   }
 178 #endif
 179 }
 180 
 181 
 182 // preserves obj, destroys len_in_bytes