< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahSharedVariables.hpp
Print this page
*** 45,67 ****
ShenandoahSharedFlag() {
unset();
}
void set() {
! OrderAccess::release_store_fence(&value, (ShenandoahSharedValue)SET);
}
void unset() {
! OrderAccess::release_store_fence(&value, (ShenandoahSharedValue)UNSET);
}
bool is_set() const {
! return OrderAccess::load_acquire(&value) == SET;
}
bool is_unset() const {
! return OrderAccess::load_acquire(&value) == UNSET;
}
void set_cond(bool val) {
if (val) {
set();
--- 45,67 ----
ShenandoahSharedFlag() {
unset();
}
void set() {
! Atomic::release_store_fence(&value, (ShenandoahSharedValue)SET);
}
void unset() {
! Atomic::release_store_fence(&value, (ShenandoahSharedValue)UNSET);
}
bool is_set() const {
! return Atomic::load_acquire(&value) == SET;
}
bool is_unset() const {
! return Atomic::load_acquire(&value) == UNSET;
}
void set_cond(bool val) {
if (val) {
set();
*** 116,126 ****
void set(uint mask) {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
ShenandoahSharedValue mask_val = (ShenandoahSharedValue) mask;
while (true) {
! ShenandoahSharedValue ov = OrderAccess::load_acquire(&value);
if ((ov & mask_val) != 0) {
// already set
return;
}
--- 116,126 ----
void set(uint mask) {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
ShenandoahSharedValue mask_val = (ShenandoahSharedValue) mask;
while (true) {
! ShenandoahSharedValue ov = Atomic::load_acquire(&value);
if ((ov & mask_val) != 0) {
// already set
return;
}
*** 134,144 ****
void unset(uint mask) {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
ShenandoahSharedValue mask_val = (ShenandoahSharedValue) mask;
while (true) {
! ShenandoahSharedValue ov = OrderAccess::load_acquire(&value);
if ((ov & mask_val) == 0) {
// already unset
return;
}
--- 134,144 ----
void unset(uint mask) {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
ShenandoahSharedValue mask_val = (ShenandoahSharedValue) mask;
while (true) {
! ShenandoahSharedValue ov = Atomic::load_acquire(&value);
if ((ov & mask_val) == 0) {
// already unset
return;
}
*** 149,172 ****
}
}
}
void clear() {
! OrderAccess::release_store_fence(&value, (ShenandoahSharedValue)0);
}
bool is_set(uint mask) const {
return !is_unset(mask);
}
bool is_unset(uint mask) const {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
! return (OrderAccess::load_acquire(&value) & (ShenandoahSharedValue) mask) == 0;
}
bool is_clear() const {
! return (OrderAccess::load_acquire(&value)) == 0;
}
void set_cond(uint mask, bool val) {
if (val) {
set(mask);
--- 149,172 ----
}
}
}
void clear() {
! Atomic::release_store_fence(&value, (ShenandoahSharedValue)0);
}
bool is_set(uint mask) const {
return !is_unset(mask);
}
bool is_unset(uint mask) const {
assert (mask < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
! return (Atomic::load_acquire(&value) & (ShenandoahSharedValue) mask) == 0;
}
bool is_clear() const {
! return (Atomic::load_acquire(&value)) == 0;
}
void set_cond(uint mask, bool val) {
if (val) {
set(mask);
*** 209,223 ****
}
void set(T v) {
assert (v >= 0, "sanity");
assert (v < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
! OrderAccess::release_store_fence(&value, (ShenandoahSharedValue)v);
}
T get() const {
! return (T)OrderAccess::load_acquire(&value);
}
T cmpxchg(T new_value, T expected) {
assert (new_value >= 0, "sanity");
assert (new_value < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
--- 209,223 ----
}
void set(T v) {
assert (v >= 0, "sanity");
assert (v < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
! Atomic::release_store_fence(&value, (ShenandoahSharedValue)v);
}
T get() const {
! return (T)Atomic::load_acquire(&value);
}
T cmpxchg(T new_value, T expected) {
assert (new_value >= 0, "sanity");
assert (new_value < (sizeof(ShenandoahSharedValue) * CHAR_MAX), "sanity");
< prev index next >