src/hotspot/share/gc/shenandoah/shenandoahNumberSeq.cpp
changeset 59249 29b0d0b61615
parent 52925 9c18c9d839d3
equal deleted inserted replaced
59248:e92153ed8bdc 59249:29b0d0b61615
   130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() {
   130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() {
   131   FREE_C_HEAP_ARRAY(size_t, _mags);
   131   FREE_C_HEAP_ARRAY(size_t, _mags);
   132 }
   132 }
   133 
   133 
   134 void BinaryMagnitudeSeq::add(size_t val) {
   134 void BinaryMagnitudeSeq::add(size_t val) {
   135   Atomic::add(val, &_sum);
   135   Atomic::add(&_sum, val);
   136 
   136 
   137   int mag = log2_intptr(val) + 1;
   137   int mag = log2_intptr(val) + 1;
   138 
   138 
   139   // Defensively saturate for product bits:
   139   // Defensively saturate for product bits:
   140   if (mag < 0) {
   140   if (mag < 0) {
   145   if (mag >= BitsPerSize_t) {
   145   if (mag >= BitsPerSize_t) {
   146     assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val);
   146     assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val);
   147     mag = BitsPerSize_t - 1;
   147     mag = BitsPerSize_t - 1;
   148   }
   148   }
   149 
   149 
   150   Atomic::add((size_t)1, &_mags[mag]);
   150   Atomic::add(&_mags[mag], (size_t)1);
   151 }
   151 }
   152 
   152 
   153 size_t BinaryMagnitudeSeq::level(int level) const {
   153 size_t BinaryMagnitudeSeq::level(int level) const {
   154   if (0 <= level && level < BitsPerSize_t) {
   154   if (0 <= level && level < BitsPerSize_t) {
   155     return _mags[level];
   155     return _mags[level];