aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/c1/c1_Runtime1.cpp
diff options
context:
space:
mode:
authoriveresov <none@none>2010-11-30 23:23:40 -0800
committeriveresov <none@none>2010-11-30 23:23:40 -0800
commit61117a198d5c72b2b2ec5b2d4b0fde59ca480a4f (patch)
tree8378aa96ac19b9583d8a238cdaee0896e0c89de8 /src/share/vm/c1/c1_Runtime1.cpp
parent8ab8d32ae3f2b4a9ea9cb79079ef402c1241b2c5 (diff)
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
Diffstat (limited to 'src/share/vm/c1/c1_Runtime1.cpp')
-rw-r--r--src/share/vm/c1/c1_Runtime1.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/share/vm/c1/c1_Runtime1.cpp b/src/share/vm/c1/c1_Runtime1.cpp
index fe754ab78..89cb28c38 100644
--- a/src/share/vm/c1/c1_Runtime1.cpp
+++ b/src/share/vm/c1/c1_Runtime1.cpp
@@ -1174,7 +1174,7 @@ JRT_LEAF(int, Runtime1::arraycopy(oopDesc* src, int src_pos, oopDesc* dst, int d
memmove(dst_addr, src_addr, length << l2es);
return ac_ok;
} else if (src->is_objArray() && dst->is_objArray()) {
- if (UseCompressedOops) { // will need for tiered
+ if (UseCompressedOops) {
narrowOop *src_addr = objArrayOop(src)->obj_at_addr<narrowOop>(src_pos);
narrowOop *dst_addr = objArrayOop(dst)->obj_at_addr<narrowOop>(dst_pos);
return obj_arraycopy_work(src, src_addr, dst, dst_addr, length);
@@ -1210,10 +1210,11 @@ JRT_LEAF(void, Runtime1::oop_arraycopy(HeapWord* src, HeapWord* dst, int num))
assert(bs->has_write_ref_array_pre_opt(), "For pre-barrier as well.");
if (UseCompressedOops) {
bs->write_ref_array_pre((narrowOop*)dst, num);
+ Copy::conjoint_oops_atomic((narrowOop*) src, (narrowOop*) dst, num);
} else {
bs->write_ref_array_pre((oop*)dst, num);
+ Copy::conjoint_oops_atomic((oop*) src, (oop*) dst, num);
}
- Copy::conjoint_oops_atomic((oop*) src, (oop*) dst, num);
bs->write_ref_array(dst, num);
JRT_END