183 const DecoratorSet ON_PHANTOM_OOP_REF = UCONST64(1) << 16;
184 const DecoratorSet ON_UNKNOWN_OOP_REF = UCONST64(1) << 17;
185 const DecoratorSet ON_DECORATOR_MASK = ON_STRONG_OOP_REF | ON_WEAK_OOP_REF |
186 ON_PHANTOM_OOP_REF | ON_UNKNOWN_OOP_REF;
187
188 // === Access Location ===
189 // Accesses can take place in, e.g. the heap, old or young generation and different native roots.
190 // The location is important to the GC as it may imply different actions. The following decorators are used:
191 // * IN_HEAP: The access is performed in the heap. Many barriers such as card marking will
192 // be omitted if this decorator is not set.
193 // * IN_HEAP_ARRAY: The access is performed on a heap allocated array. This is sometimes a special case
194 // for some GCs, and implies that it is an IN_HEAP.
195 // * IN_ROOT: The access is performed in an off-heap data structure pointing into the Java heap.
196 // * IN_CONCURRENT_ROOT: The access is performed in an off-heap data structure pointing into the Java heap,
197 // but is notably not scanned during safepoints. This is sometimes a special case for some GCs and
198 // implies that it is also an IN_ROOT.
199 const DecoratorSet IN_HEAP = UCONST64(1) << 18;
200 const DecoratorSet IN_HEAP_ARRAY = UCONST64(1) << 19;
201 const DecoratorSet IN_ROOT = UCONST64(1) << 20;
202 const DecoratorSet IN_CONCURRENT_ROOT = UCONST64(1) << 21;
203 const DecoratorSet IN_DECORATOR_MASK = IN_HEAP | IN_HEAP_ARRAY |
204 IN_ROOT | IN_CONCURRENT_ROOT;
205
206 // == Value Decorators ==
207 // * OOP_NOT_NULL: This property can make certain barriers faster such as compressing oops.
208 const DecoratorSet OOP_NOT_NULL = UCONST64(1) << 22;
209 const DecoratorSet OOP_DECORATOR_MASK = OOP_NOT_NULL;
210
211 // == Arraycopy Decorators ==
212 // * ARRAYCOPY_DEST_NOT_INITIALIZED: This property can be important to e.g. SATB barriers by
213 // marking that the previous value uninitialized nonsense rather than a real value.
214 // * ARRAYCOPY_CHECKCAST: This property means that the class of the objects in source
215 // are not guaranteed to be subclasses of the class of the destination array. This requires
216 // a check-cast barrier during the copying operation. If this is not set, it is assumed
217 // that the array is covariant: (the source array type is-a destination array type)
218 // * ARRAYCOPY_DISJOINT: This property means that it is known that the two array ranges
219 // are disjoint.
220 // * ARRAYCOPY_ARRAYOF: The copy is in the arrayof form.
221 // * ARRAYCOPY_ATOMIC: The accesses have to be atomic over the size of its elements.
222 // * ARRAYCOPY_ALIGNED: The accesses have to be aligned on a HeapWord.
223 const DecoratorSet ARRAYCOPY_DEST_NOT_INITIALIZED = UCONST64(1) << 24;
224 const DecoratorSet ARRAYCOPY_CHECKCAST = UCONST64(1) << 25;
225 const DecoratorSet ARRAYCOPY_DISJOINT = UCONST64(1) << 26;
226 const DecoratorSet ARRAYCOPY_ARRAYOF = UCONST64(1) << 27;
227 const DecoratorSet ARRAYCOPY_ATOMIC = UCONST64(1) << 28;
228 const DecoratorSet ARRAYCOPY_ALIGNED = UCONST64(1) << 29;
|
183 const DecoratorSet ON_PHANTOM_OOP_REF = UCONST64(1) << 16;
184 const DecoratorSet ON_UNKNOWN_OOP_REF = UCONST64(1) << 17;
185 const DecoratorSet ON_DECORATOR_MASK = ON_STRONG_OOP_REF | ON_WEAK_OOP_REF |
186 ON_PHANTOM_OOP_REF | ON_UNKNOWN_OOP_REF;
187
188 // === Access Location ===
189 // Accesses can take place in, e.g. the heap, old or young generation and different native roots.
190 // The location is important to the GC as it may imply different actions. The following decorators are used:
191 // * IN_HEAP: The access is performed in the heap. Many barriers such as card marking will
192 // be omitted if this decorator is not set.
193 // * IN_HEAP_ARRAY: The access is performed on a heap allocated array. This is sometimes a special case
194 // for some GCs, and implies that it is an IN_HEAP.
195 // * IN_ROOT: The access is performed in an off-heap data structure pointing into the Java heap.
196 // * IN_CONCURRENT_ROOT: The access is performed in an off-heap data structure pointing into the Java heap,
197 // but is notably not scanned during safepoints. This is sometimes a special case for some GCs and
198 // implies that it is also an IN_ROOT.
199 const DecoratorSet IN_HEAP = UCONST64(1) << 18;
200 const DecoratorSet IN_HEAP_ARRAY = UCONST64(1) << 19;
201 const DecoratorSet IN_ROOT = UCONST64(1) << 20;
202 const DecoratorSet IN_CONCURRENT_ROOT = UCONST64(1) << 21;
203 const DecoratorSet IN_ARCHIVE_ROOT = UCONST64(1) << 22;
204 const DecoratorSet IN_DECORATOR_MASK = IN_HEAP | IN_HEAP_ARRAY |
205 IN_ROOT | IN_CONCURRENT_ROOT |
206 IN_ARCHIVE_ROOT;
207
208 // == Value Decorators ==
209 // * OOP_NOT_NULL: This property can make certain barriers faster such as compressing oops.
210 const DecoratorSet OOP_NOT_NULL = UCONST64(1) << 23;
211 const DecoratorSet OOP_DECORATOR_MASK = OOP_NOT_NULL;
212
213 // == Arraycopy Decorators ==
214 // * ARRAYCOPY_DEST_NOT_INITIALIZED: This property can be important to e.g. SATB barriers by
215 // marking that the previous value uninitialized nonsense rather than a real value.
216 // * ARRAYCOPY_CHECKCAST: This property means that the class of the objects in source
217 // are not guaranteed to be subclasses of the class of the destination array. This requires
218 // a check-cast barrier during the copying operation. If this is not set, it is assumed
219 // that the array is covariant: (the source array type is-a destination array type)
220 // * ARRAYCOPY_DISJOINT: This property means that it is known that the two array ranges
221 // are disjoint.
222 // * ARRAYCOPY_ARRAYOF: The copy is in the arrayof form.
223 // * ARRAYCOPY_ATOMIC: The accesses have to be atomic over the size of its elements.
224 // * ARRAYCOPY_ALIGNED: The accesses have to be aligned on a HeapWord.
225 const DecoratorSet ARRAYCOPY_DEST_NOT_INITIALIZED = UCONST64(1) << 24;
226 const DecoratorSet ARRAYCOPY_CHECKCAST = UCONST64(1) << 25;
227 const DecoratorSet ARRAYCOPY_DISJOINT = UCONST64(1) << 26;
228 const DecoratorSet ARRAYCOPY_ARRAYOF = UCONST64(1) << 27;
229 const DecoratorSet ARRAYCOPY_ATOMIC = UCONST64(1) << 28;
230 const DecoratorSet ARRAYCOPY_ALIGNED = UCONST64(1) << 29;
|