hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
changeset 16997 d5dfdf746abd
parent 15799 6aa92f9debd2
child 17003 c88b0123f0f6
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Mon Apr 01 10:50:30 2013 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Wed Apr 17 10:57:02 2013 -0700
@@ -63,6 +63,13 @@
                                 noreg /* pre_val */,
                                 tmp, true /*preserve_o_regs*/);
 
+        // G1 barrier needs uncompressed oop for region cross check.
+        Register new_val = val;
+        if (UseCompressedOops && val != G0) {
+          new_val = tmp;
+          __ mov(val, new_val);
+        }
+
         if (index == noreg ) {
           assert(Assembler::is_simm13(offset), "fix this code");
           __ store_heap_oop(val, base, offset);
@@ -79,7 +86,7 @@
               __ add(base, index, base);
             }
           }
-          __ g1_write_barrier_post(base, val, tmp);
+          __ g1_write_barrier_post(base, new_val, tmp);
         }
       }
       break;