113 static void destroy(Thread* thread) {
114 data(thread)->~ShenandoahThreadLocalData();
115 }
116
117 static SATBMarkQueue& satb_mark_queue(Thread* thread) {
118 return data(thread)->_satb_mark_queue;
119 }
120
121 static char gc_state_to_fast_array_index(char gc_state) {
122 if (gc_state == FORWARDED) return POS_FORWARDED;
123 if (gc_state == MARKING) return POS_MARKING;
124 if (gc_state == WEAK) return POS_WEAK;
125 if (gc_state == FORWARDED_MARKING) return POS_FORWARDED_MARKING;
126 if (gc_state == FORWARDED_WEAK) return POS_FORWARDED_WEAK;
127 if (gc_state == MARKING_WEAK) return POS_MARKING_WEAK;
128 if (gc_state == FORWARDED_MARKING_WEAK) return POS_FORWARDED_MARKING_WEAK;
129 ShouldNotReachHere();
130 return 0;
131 }
132
133 static void set_gc_state(Thread* thread, char gc_state) {
134 ShenandoahThreadLocalData* d = data(thread);
135 d->_gc_state = gc_state;
136 d->_gc_state_fast_array[POS_FORWARDED] = (gc_state & FORWARDED) != 0;
137 d->_gc_state_fast_array[POS_MARKING] = (gc_state & MARKING) != 0;
138 d->_gc_state_fast_array[POS_WEAK] = (gc_state & WEAK) != 0;
139 d->_gc_state_fast_array[POS_FORWARDED_MARKING] = (gc_state & FORWARDED_MARKING) != 0;
140 d->_gc_state_fast_array[POS_FORWARDED_WEAK] = (gc_state & FORWARDED_WEAK) != 0;
141 d->_gc_state_fast_array[POS_MARKING_WEAK] = (gc_state & MARKING_WEAK) != 0;
142 d->_gc_state_fast_array[POS_FORWARDED_MARKING_WEAK] = (gc_state & FORWARDED_MARKING_WEAK) != 0;
143 }
144
145 static char gc_state(Thread* thread) {
146 return data(thread)->_gc_state;
147 }
148
149 static bool is_gc_state(Thread* thread, ShenandoahHeap::GCState state) {
150 return (gc_state(thread) & state) != 0;
151 }
152
|
113 static void destroy(Thread* thread) {
114 data(thread)->~ShenandoahThreadLocalData();
115 }
116
117 static SATBMarkQueue& satb_mark_queue(Thread* thread) {
118 return data(thread)->_satb_mark_queue;
119 }
120
121 static char gc_state_to_fast_array_index(char gc_state) {
122 if (gc_state == FORWARDED) return POS_FORWARDED;
123 if (gc_state == MARKING) return POS_MARKING;
124 if (gc_state == WEAK) return POS_WEAK;
125 if (gc_state == FORWARDED_MARKING) return POS_FORWARDED_MARKING;
126 if (gc_state == FORWARDED_WEAK) return POS_FORWARDED_WEAK;
127 if (gc_state == MARKING_WEAK) return POS_MARKING_WEAK;
128 if (gc_state == FORWARDED_MARKING_WEAK) return POS_FORWARDED_MARKING_WEAK;
129 ShouldNotReachHere();
130 return 0;
131 }
132
133 static char fast_array_index_to_gc_state(int index) {
134 if (index == POS_FORWARDED) return FORWARDED;
135 if (index == POS_MARKING) return MARKING;
136 if (index == POS_WEAK) return WEAK;
137 if (index == POS_FORWARDED_MARKING) return FORWARDED_MARKING;
138 if (index == POS_FORWARDED_WEAK) return FORWARDED_WEAK;
139 if (index == POS_MARKING_WEAK) return MARKING_WEAK;
140 if (index == POS_FORWARDED_MARKING_WEAK) return FORWARDED_MARKING_WEAK;
141 ShouldNotReachHere();
142 return 0;
143 }
144
145 static void set_gc_state(Thread* thread, char gc_state) {
146 ShenandoahThreadLocalData* d = data(thread);
147 d->_gc_state = gc_state;
148 d->_gc_state_fast_array[POS_FORWARDED] = (gc_state & FORWARDED) != 0;
149 d->_gc_state_fast_array[POS_MARKING] = (gc_state & MARKING) != 0;
150 d->_gc_state_fast_array[POS_WEAK] = (gc_state & WEAK) != 0;
151 d->_gc_state_fast_array[POS_FORWARDED_MARKING] = (gc_state & FORWARDED_MARKING) != 0;
152 d->_gc_state_fast_array[POS_FORWARDED_WEAK] = (gc_state & FORWARDED_WEAK) != 0;
153 d->_gc_state_fast_array[POS_MARKING_WEAK] = (gc_state & MARKING_WEAK) != 0;
154 d->_gc_state_fast_array[POS_FORWARDED_MARKING_WEAK] = (gc_state & FORWARDED_MARKING_WEAK) != 0;
155 }
156
157 static char gc_state(Thread* thread) {
158 return data(thread)->_gc_state;
159 }
160
161 static bool is_gc_state(Thread* thread, ShenandoahHeap::GCState state) {
162 return (gc_state(thread) & state) != 0;
163 }
164
|