src/hotspot/share/oops/access.hpp
changeset 50599 ecc2af326b5f
parent 50532 a18c60527166
child 50728 9375184cec98
equal deleted inserted replaced
50598:8d9d4d91be7f 50599:ecc2af326b5f
   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