< prev index next >

src/cpu/sparc/vm/templateTable_sparc.cpp

Print this page
rev 9785 : [mq]: webrev.00
rev 9786 : [mq]: webrev.010

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -3354,12 +3354,21 @@
 #else
       __ srl(RfreeValue, LogHeapWordSize, RfreeValue);
 #endif
       __ cmp_and_brx_short(RtlabWasteLimitValue, RfreeValue, Assembler::greaterEqualUnsigned, Assembler::pt, slow_case); // tlab waste is small
 
+      if (Assembler::is_simm13(ThreadLocalAllocBuffer::refill_waste_limit_increment())) {
       // increment waste limit to prevent getting stuck on this slow path
       __ add(RtlabWasteLimitValue, ThreadLocalAllocBuffer::refill_waste_limit_increment(), RtlabWasteLimitValue);
+      } else {
+        // set64 does not use the temp register if the given constant is 32 bit. So
+        // we can just use any register; using G0 results in ignoring of the upper 32 bit
+        // of that value.
+        __ set64(ThreadLocalAllocBuffer::refill_waste_limit_increment(), G4_scratch, G0);
+        // increment waste limit to prevent getting stuck on this slow path
+        __ add(RtlabWasteLimitValue, G4_scratch, RtlabWasteLimitValue);
+      }
       __ st_ptr(RtlabWasteLimitValue, G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()));
     } else {
       // No allocation in the shared eden.
       __ ba_short(slow_case);
     }
< prev index next >