src/hotspot/share/jfr/recorder/stringpool/jfrStringPoolBuffer.cpp
changeset 50123 f222eba39694
parent 50113 caf115bb98ad
child 50429 83aec1d357d4
equal deleted inserted replaced
50122:d2bcbcf0d3d9 50123:f222eba39694
    53 void JfrStringPoolBuffer::set_string_pos(uint64_t value) {
    53 void JfrStringPoolBuffer::set_string_pos(uint64_t value) {
    54   Atomic::store(value, &_string_count_pos);
    54   Atomic::store(value, &_string_count_pos);
    55 }
    55 }
    56 
    56 
    57 void JfrStringPoolBuffer::increment(uint64_t value) {
    57 void JfrStringPoolBuffer::increment(uint64_t value) {
       
    58 #if !(defined(ARM) || defined(IA32))
    58   Atomic::add(value, &_string_count_pos);
    59   Atomic::add(value, &_string_count_pos);
       
    60 #else
       
    61   // TODO: This should be fixed in Atomic::add handling for 32-bit platforms,
       
    62   // see JDK-8203283. We workaround the absence of support right here.
       
    63   uint64_t cur, val;
       
    64   do {
       
    65      cur = Atomic::load(&_string_count_top);
       
    66      val = cur + value;
       
    67   } while (Atomic::cmpxchg(val, &_string_count_pos, cur) != cur);
       
    68 #endif
    59 }
    69 }
    60 
    70 
    61 void JfrStringPoolBuffer::set_string_top(uint64_t value) {
    71 void JfrStringPoolBuffer::set_string_top(uint64_t value) {
    62   Atomic::store(value, &_string_count_top);
    72   Atomic::store(value, &_string_count_top);
    63 }
    73 }