equal
deleted
inserted
replaced
119 |
119 |
120 template <DecoratorSet expected_mo_decorators> |
120 template <DecoratorSet expected_mo_decorators> |
121 static void verify_heap_oop_decorators() { |
121 static void verify_heap_oop_decorators() { |
122 const DecoratorSet heap_oop_decorators = AS_DECORATOR_MASK | ON_DECORATOR_MASK | |
122 const DecoratorSet heap_oop_decorators = AS_DECORATOR_MASK | ON_DECORATOR_MASK | |
123 OOP_DECORATOR_MASK | (IN_DECORATOR_MASK ^ |
123 OOP_DECORATOR_MASK | (IN_DECORATOR_MASK ^ |
124 (IN_ROOT | IN_CONCURRENT_ROOT)); // no root accesses in the heap |
124 (IN_NATIVE | IN_CONCURRENT_ROOT)); // no root accesses in the heap |
125 verify_decorators<expected_mo_decorators | heap_oop_decorators>(); |
125 verify_decorators<expected_mo_decorators | heap_oop_decorators>(); |
126 } |
126 } |
127 |
127 |
128 static const DecoratorSet load_mo_decorators = MO_UNORDERED | MO_VOLATILE | MO_RELAXED | MO_ACQUIRE | MO_SEQ_CST; |
128 static const DecoratorSet load_mo_decorators = MO_UNORDERED | MO_VOLATILE | MO_RELAXED | MO_ACQUIRE | MO_SEQ_CST; |
129 static const DecoratorSet store_mo_decorators = MO_UNORDERED | MO_VOLATILE | MO_RELAXED | MO_RELEASE | MO_SEQ_CST; |
129 static const DecoratorSet store_mo_decorators = MO_UNORDERED | MO_VOLATILE | MO_RELAXED | MO_RELEASE | MO_SEQ_CST; |
294 class HeapAccess: public Access<IN_HEAP | decorators> {}; |
294 class HeapAccess: public Access<IN_HEAP | decorators> {}; |
295 |
295 |
296 // Helper for performing normal accesses in roots. These accesses |
296 // Helper for performing normal accesses in roots. These accesses |
297 // may resolve an accessor on a GC barrier set |
297 // may resolve an accessor on a GC barrier set |
298 template <DecoratorSet decorators = INTERNAL_EMPTY> |
298 template <DecoratorSet decorators = INTERNAL_EMPTY> |
299 class RootAccess: public Access<IN_ROOT | decorators> {}; |
299 class NativeAccess: public Access<IN_NATIVE | decorators> {}; |
300 |
300 |
301 // Helper for array access. |
301 // Helper for array access. |
302 template <DecoratorSet decorators = INTERNAL_EMPTY> |
302 template <DecoratorSet decorators = INTERNAL_EMPTY> |
303 class ArrayAccess: public HeapAccess<IN_HEAP_ARRAY | decorators> { |
303 class ArrayAccess: public HeapAccess<IN_HEAP_ARRAY | decorators> { |
304 typedef HeapAccess<IN_HEAP_ARRAY | decorators> AccessT; |
304 typedef HeapAccess<IN_HEAP_ARRAY | decorators> AccessT; |
374 (memory_ordering_decorators ^ MO_RELEASE) == 0 || |
374 (memory_ordering_decorators ^ MO_RELEASE) == 0 || |
375 (memory_ordering_decorators ^ MO_SEQ_CST) == 0 |
375 (memory_ordering_decorators ^ MO_SEQ_CST) == 0 |
376 )); |
376 )); |
377 const DecoratorSet location_decorators = decorators & IN_DECORATOR_MASK; |
377 const DecoratorSet location_decorators = decorators & IN_DECORATOR_MASK; |
378 STATIC_ASSERT(location_decorators == 0 || ( // make sure location decorators are disjoint if set |
378 STATIC_ASSERT(location_decorators == 0 || ( // make sure location decorators are disjoint if set |
379 (location_decorators ^ IN_ROOT) == 0 || |
379 (location_decorators ^ IN_NATIVE) == 0 || |
380 (location_decorators ^ IN_HEAP) == 0 || |
380 (location_decorators ^ IN_HEAP) == 0 || |
381 (location_decorators ^ (IN_HEAP | IN_HEAP_ARRAY)) == 0 || |
381 (location_decorators ^ (IN_HEAP | IN_HEAP_ARRAY)) == 0 || |
382 (location_decorators ^ (IN_ROOT | IN_CONCURRENT_ROOT)) == 0 |
382 (location_decorators ^ (IN_NATIVE | IN_CONCURRENT_ROOT)) == 0 |
383 )); |
383 )); |
384 } |
384 } |
385 |
385 |
386 #endif // SHARE_OOPS_ACCESS_HPP |
386 #endif // SHARE_OOPS_ACCESS_HPP |