comparison src/share/vm/c1/c1_Runtime1.cpp @ 2002:ac637b7220d1

6985015: C1 needs to support compressed oops Summary: This change implements compressed oops for C1 for x64 and sparc. The changes are mostly on the codegen level, with a few exceptions when we do access things outside of the heap that are uncompressed from the IR. Compressed oops are now also enabled with tiered. Reviewed-by: twisti, kvn, never, phh
author iveresov
date Tue, 30 Nov 2010 23:23:40 -0800
parents f95d63e2154a
children 06f017f7daa7 8012aa3ccede
comparison
equal deleted inserted replaced
1972:f95d63e2154a 2002:ac637b7220d1
1172 // Potential problem: memmove is not guaranteed to be word atomic 1172 // Potential problem: memmove is not guaranteed to be word atomic
1173 // Revisit in Merlin 1173 // Revisit in Merlin
1174 memmove(dst_addr, src_addr, length << l2es); 1174 memmove(dst_addr, src_addr, length << l2es);
1175 return ac_ok; 1175 return ac_ok;
1176 } else if (src->is_objArray() && dst->is_objArray()) { 1176 } else if (src->is_objArray() && dst->is_objArray()) {
1177 if (UseCompressedOops) { // will need for tiered 1177 if (UseCompressedOops) {
1178 narrowOop *src_addr = objArrayOop(src)->obj_at_addr<narrowOop>(src_pos); 1178 narrowOop *src_addr = objArrayOop(src)->obj_at_addr<narrowOop>(src_pos);
1179 narrowOop *dst_addr = objArrayOop(dst)->obj_at_addr<narrowOop>(dst_pos); 1179 narrowOop *dst_addr = objArrayOop(dst)->obj_at_addr<narrowOop>(dst_pos);
1180 return obj_arraycopy_work(src, src_addr, dst, dst_addr, length); 1180 return obj_arraycopy_work(src, src_addr, dst, dst_addr, length);
1181 } else { 1181 } else {
1182 oop *src_addr = objArrayOop(src)->obj_at_addr<oop>(src_pos); 1182 oop *src_addr = objArrayOop(src)->obj_at_addr<oop>(src_pos);
1208 BarrierSet* bs = Universe::heap()->barrier_set(); 1208 BarrierSet* bs = Universe::heap()->barrier_set();
1209 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt"); 1209 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt");
1210 assert(bs->has_write_ref_array_pre_opt(), "For pre-barrier as well."); 1210 assert(bs->has_write_ref_array_pre_opt(), "For pre-barrier as well.");
1211 if (UseCompressedOops) { 1211 if (UseCompressedOops) {
1212 bs->write_ref_array_pre((narrowOop*)dst, num); 1212 bs->write_ref_array_pre((narrowOop*)dst, num);
1213 Copy::conjoint_oops_atomic((narrowOop*) src, (narrowOop*) dst, num);
1213 } else { 1214 } else {
1214 bs->write_ref_array_pre((oop*)dst, num); 1215 bs->write_ref_array_pre((oop*)dst, num);
1215 } 1216 Copy::conjoint_oops_atomic((oop*) src, (oop*) dst, num);
1216 Copy::conjoint_oops_atomic((oop*) src, (oop*) dst, num); 1217 }
1217 bs->write_ref_array(dst, num); 1218 bs->write_ref_array(dst, num);
1218 JRT_END 1219 JRT_END
1219 1220
1220 1221
1221 #ifndef PRODUCT 1222 #ifndef PRODUCT