@@ -212,8 +212,9 @@ typedef struct ShenandoahSharedBitmap {
212212
213213template <class T >
214214struct ShenandoahSharedEnumFlag {
215+ typedef uint32_t EnumValueType;
215216 shenandoah_padding (0 );
216- volatile ShenandoahSharedValue value;
217+ volatile EnumValueType value;
217218 shenandoah_padding (1 );
218219
219220 ShenandoahSharedEnumFlag () {
@@ -222,8 +223,8 @@ struct ShenandoahSharedEnumFlag {
222223
223224 void set (T v) {
224225 assert (v >= 0 , " sanity" );
225- assert (v < (sizeof (ShenandoahSharedValue ) * CHAR_MAX), " sanity" );
226- Atomic::release_store_fence (&value, (ShenandoahSharedValue )v);
226+ assert (v < (sizeof (EnumValueType ) * CHAR_MAX), " sanity" );
227+ Atomic::release_store_fence (&value, (EnumValueType )v);
227228 }
228229
229230 T get () const {
@@ -232,11 +233,17 @@ struct ShenandoahSharedEnumFlag {
232233
233234 T cmpxchg (T new_value, T expected) {
234235 assert (new_value >= 0 , " sanity" );
235- assert (new_value < (sizeof (ShenandoahSharedValue ) * CHAR_MAX), " sanity" );
236- return (T)Atomic::cmpxchg (&value, (ShenandoahSharedValue )expected, (ShenandoahSharedValue )new_value);
236+ assert (new_value < (sizeof (EnumValueType ) * CHAR_MAX), " sanity" );
237+ return (T)Atomic::cmpxchg (&value, (EnumValueType )expected, (EnumValueType )new_value);
237238 }
238239
239- volatile ShenandoahSharedValue* addr_of () {
240+ T xchg (T new_value) {
241+ assert (new_value >= 0 , " sanity" );
242+ assert (new_value < (sizeof (EnumValueType) * CHAR_MAX), " sanity" );
243+ return (T)Atomic::xchg (&value, (EnumValueType)new_value);
244+ }
245+
246+ volatile EnumValueType* addr_of () {
240247 return &value;
241248 }
242249
0 commit comments