diff a/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp b/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp @@ -128,10 +128,22 @@ if (gc_state == FORWARDED_MARKING_WEAK) return POS_FORWARDED_MARKING_WEAK; ShouldNotReachHere(); return 0; } + static char fast_array_index_to_gc_state(int index) { + if (index == POS_FORWARDED) return FORWARDED; + if (index == POS_MARKING) return MARKING; + if (index == POS_WEAK) return WEAK; + if (index == POS_FORWARDED_MARKING) return FORWARDED_MARKING; + if (index == POS_FORWARDED_WEAK) return FORWARDED_WEAK; + if (index == POS_MARKING_WEAK) return MARKING_WEAK; + if (index == POS_FORWARDED_MARKING_WEAK) return FORWARDED_MARKING_WEAK; + ShouldNotReachHere(); + return 0; + } + static void set_gc_state(Thread* thread, char gc_state) { ShenandoahThreadLocalData* d = data(thread); d->_gc_state = gc_state; d->_gc_state_fast_array[POS_FORWARDED] = (gc_state & FORWARDED) != 0; d->_gc_state_fast_array[POS_MARKING] = (gc_state & MARKING) != 0;