Print this page


Split Split Close
Expand all
Collapse all
          --- old/src/cpu/sparc/vm/templateTable_sparc.cpp
          +++ new/src/cpu/sparc/vm/templateTable_sparc.cpp
↓ open down ↓ 54 lines elided ↑ open up ↑
  55   55    switch (barrier) {
  56   56  #ifndef SERIALGC
  57   57      case BarrierSet::G1SATBCT:
  58   58      case BarrierSet::G1SATBCTLogging:
  59   59        {
  60   60          // Load and record the previous value.
  61   61          __ g1_write_barrier_pre(base, index, offset,
  62   62                                  noreg /* pre_val */,
  63   63                                  tmp, true /*preserve_o_regs*/);
  64   64  
       65 +        // G1 barrier needs uncompressed oop for region cross check.
       66 +        Register new_val = val;
       67 +        if (UseCompressedOops && val != G0) {
       68 +          new_val = tmp;
       69 +          __ mov(val, new_val);
       70 +        }
       71 +
  65   72          if (index == noreg ) {
  66   73            assert(Assembler::is_simm13(offset), "fix this code");
  67   74            __ store_heap_oop(val, base, offset);
  68   75          } else {
  69   76            __ store_heap_oop(val, base, index);
  70   77          }
  71   78  
  72   79          // No need for post barrier if storing NULL
  73   80          if (val != G0) {
  74   81            if (precise) {
  75   82              if (index == noreg) {
  76   83                __ add(base, offset, base);
  77   84              } else {
  78   85                __ add(base, index, base);
  79   86              }
  80   87            }
  81      -          __ g1_write_barrier_post(base, val, tmp);
       88 +          __ g1_write_barrier_post(base, new_val, tmp);
  82   89          }
  83   90        }
  84   91        break;
  85   92  #endif // SERIALGC
  86   93      case BarrierSet::CardTableModRef:
  87   94      case BarrierSet::CardTableExtension:
  88   95        {
  89   96          if (index == noreg ) {
  90   97            assert(Assembler::is_simm13(offset), "fix this code");
  91   98            __ store_heap_oop(val, base, offset);
↓ open down ↓ 3777 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX