equal
deleted
inserted
replaced
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 } |