src/hotspot/share/oops/accessBackend.hpp
changeset 53075 747d29313e5a
parent 52100 62523934374c
child 57875 427b38332f20
child 58678 9cf78a70fa4f
equal deleted inserted replaced
53074:1e213c37befa 53075:747d29313e5a
  1190     verify_types<decorators, T>();
  1190     verify_types<decorators, T>();
  1191     typedef typename Decay<T>::type DecayedT;
  1191     typedef typename Decay<T>::type DecayedT;
  1192     DecayedT decayed_value = value;
  1192     DecayedT decayed_value = value;
  1193     const DecoratorSet expanded_decorators = DecoratorFixup<decorators |
  1193     const DecoratorSet expanded_decorators = DecoratorFixup<decorators |
  1194                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1194                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1195                                               INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY)>::value;
  1195                                               INTERNAL_CONVERT_COMPRESSED_OOP : DECORATORS_NONE)>::value;
  1196     PreRuntimeDispatch::store_at<expanded_decorators>(base, offset, decayed_value);
  1196     PreRuntimeDispatch::store_at<expanded_decorators>(base, offset, decayed_value);
  1197   }
  1197   }
  1198 
  1198 
  1199   template <DecoratorSet decorators, typename P, typename T>
  1199   template <DecoratorSet decorators, typename P, typename T>
  1200   inline T load(P* addr) {
  1200   inline T load(P* addr) {
  1219                                  typename Decay<T>::type>::type DecayedT;
  1219                                  typename Decay<T>::type>::type DecayedT;
  1220     // Expand the decorators (figure out sensible defaults)
  1220     // Expand the decorators (figure out sensible defaults)
  1221     // Potentially remember if we need compressed oop awareness
  1221     // Potentially remember if we need compressed oop awareness
  1222     const DecoratorSet expanded_decorators = DecoratorFixup<decorators |
  1222     const DecoratorSet expanded_decorators = DecoratorFixup<decorators |
  1223                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1223                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1224                                               INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY)>::value;
  1224                                               INTERNAL_CONVERT_COMPRESSED_OOP : DECORATORS_NONE)>::value;
  1225     return PreRuntimeDispatch::load_at<expanded_decorators, DecayedT>(base, offset);
  1225     return PreRuntimeDispatch::load_at<expanded_decorators, DecayedT>(base, offset);
  1226   }
  1226   }
  1227 
  1227 
  1228   template <DecoratorSet decorators, typename P, typename T>
  1228   template <DecoratorSet decorators, typename P, typename T>
  1229   inline T atomic_cmpxchg(T new_value, P* addr, T compare_value) {
  1229   inline T atomic_cmpxchg(T new_value, P* addr, T compare_value) {
  1251       (!HasDecorator<decorators, MO_DECORATOR_MASK>::value) ?
  1251       (!HasDecorator<decorators, MO_DECORATOR_MASK>::value) ?
  1252       (MO_SEQ_CST | decorators) : decorators>::value;
  1252       (MO_SEQ_CST | decorators) : decorators>::value;
  1253     // Potentially remember that we need compressed oop awareness
  1253     // Potentially remember that we need compressed oop awareness
  1254     const DecoratorSet final_decorators = expanded_decorators |
  1254     const DecoratorSet final_decorators = expanded_decorators |
  1255                                           (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1255                                           (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1256                                            INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY);
  1256                                            INTERNAL_CONVERT_COMPRESSED_OOP : DECORATORS_NONE);
  1257     return PreRuntimeDispatch::atomic_cmpxchg_at<final_decorators>(new_decayed_value, base,
  1257     return PreRuntimeDispatch::atomic_cmpxchg_at<final_decorators>(new_decayed_value, base,
  1258                                                                    offset, compare_decayed_value);
  1258                                                                    offset, compare_decayed_value);
  1259   }
  1259   }
  1260 
  1260 
  1261   template <DecoratorSet decorators, typename P, typename T>
  1261   template <DecoratorSet decorators, typename P, typename T>
  1276     typedef typename Decay<T>::type DecayedT;
  1276     typedef typename Decay<T>::type DecayedT;
  1277     DecayedT new_decayed_value = new_value;
  1277     DecayedT new_decayed_value = new_value;
  1278     // atomic_xchg is only available in SEQ_CST flavour.
  1278     // atomic_xchg is only available in SEQ_CST flavour.
  1279     const DecoratorSet expanded_decorators = DecoratorFixup<decorators | MO_SEQ_CST |
  1279     const DecoratorSet expanded_decorators = DecoratorFixup<decorators | MO_SEQ_CST |
  1280                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1280                                              (HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value ?
  1281                                               INTERNAL_CONVERT_COMPRESSED_OOP : INTERNAL_EMPTY)>::value;
  1281                                               INTERNAL_CONVERT_COMPRESSED_OOP : DECORATORS_NONE)>::value;
  1282     return PreRuntimeDispatch::atomic_xchg_at<expanded_decorators>(new_decayed_value, base, offset);
  1282     return PreRuntimeDispatch::atomic_xchg_at<expanded_decorators>(new_decayed_value, base, offset);
  1283   }
  1283   }
  1284 
  1284 
  1285   template <DecoratorSet decorators, typename T>
  1285   template <DecoratorSet decorators, typename T>
  1286   inline bool arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw,
  1286   inline bool arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, const T* src_raw,