< prev index next >
src/share/vm/runtime/atomic.hpp
Print this page
rev 13266 : imported patch Atomic_refactoring
rev 13268 : [mq]: Atomic_polishing_v2
*** 24,40 ****
#ifndef SHARE_VM_RUNTIME_ATOMIC_HPP
#define SHARE_VM_RUNTIME_ATOMIC_HPP
#include "memory/allocation.hpp"
- #include "metaprogramming/conditional.hpp"
- #include "metaprogramming/enableIf.hpp"
#include "metaprogramming/integerTypes.hpp"
#include "metaprogramming/isIntegral.hpp"
#include "metaprogramming/isPointer.hpp"
- #include "metaprogramming/isSame.hpp"
- #include "metaprogramming/removePointer.hpp"
#include "utilities/align.hpp"
#include "utilities/debug.hpp"
#include "utilities/macros.hpp"
enum cmpxchg_memory_order {
--- 24,36 ----
*** 245,255 ****
}
template <typename T, typename U>
inline U* Atomic::add(T add_value, U* volatile* dst) {
STATIC_ASSERT(IsIntegral<T>::value);
! typedef typename IntegerTypes::Signed<intptr_t>::type Raw;
ptrdiff_t value = add_value;
Raw raw_value = IntegerTypes::cast_to_signed(value * sizeof(U));
Raw result = specialized_add(raw_value, reinterpret_cast<volatile Raw*>(dst));
return IntegerTypes::cast<U*>(result);
}
--- 241,251 ----
}
template <typename T, typename U>
inline U* Atomic::add(T add_value, U* volatile* dst) {
STATIC_ASSERT(IsIntegral<T>::value);
! typedef typename IntegerTypes::Signed<U*>::type Raw;
ptrdiff_t value = add_value;
Raw raw_value = IntegerTypes::cast_to_signed(value * sizeof(U));
Raw result = specialized_add(raw_value, reinterpret_cast<volatile Raw*>(dst));
return IntegerTypes::cast<U*>(result);
}
*** 264,274 ****
template <typename T>
inline void Atomic::inc(T* volatile* src) {
if (sizeof(T) != 1) {
add(1, src);
} else {
! typedef typename IntegerTypes::Signed<intptr_t>::type Raw;
specialized_inc(reinterpret_cast<volatile Raw*>(src));
}
}
template <typename T>
--- 260,270 ----
template <typename T>
inline void Atomic::inc(T* volatile* src) {
if (sizeof(T) != 1) {
add(1, src);
} else {
! typedef typename IntegerTypes::Signed<T*>::type Raw;
specialized_inc(reinterpret_cast<volatile Raw*>(src));
}
}
template <typename T>
*** 281,291 ****
template <typename T>
inline void Atomic::dec(T* volatile* src) {
if (sizeof(T) != 1) {
add(-1, src);
} else {
! typedef typename IntegerTypes::Signed<intptr_t>::type Raw;
specialized_dec(reinterpret_cast<volatile Raw*>(src));
}
}
template <typename T, typename U>
--- 277,287 ----
template <typename T>
inline void Atomic::dec(T* volatile* src) {
if (sizeof(T) != 1) {
add(-1, src);
} else {
! typedef typename IntegerTypes::Signed<T*>::type Raw;
specialized_dec(reinterpret_cast<volatile Raw*>(src));
}
}
template <typename T, typename U>
< prev index next >