src/hotspot/os_cpu/windows_x86/atomic_windows_x86.hpp
changeset 59249 29b0d0b61615
parent 59248 e92153ed8bdc
child 59251 4cbfa5077d68
equal deleted inserted replaced
59248:e92153ed8bdc 59249:29b0d0b61615
    55 
    55 
    56 template<size_t byte_size>
    56 template<size_t byte_size>
    57 struct Atomic::PlatformAdd
    57 struct Atomic::PlatformAdd
    58   : Atomic::AddAndFetch<Atomic::PlatformAdd<byte_size> >
    58   : Atomic::AddAndFetch<Atomic::PlatformAdd<byte_size> >
    59 {
    59 {
    60   template<typename I, typename D>
    60   template<typename D, typename I>
    61   D add_and_fetch(I add_value, D volatile* dest, atomic_memory_order order) const;
    61   D add_and_fetch(D volatile* dest, I add_value, atomic_memory_order order) const;
    62 };
    62 };
    63 
    63 
    64 #ifdef AMD64
    64 #ifdef AMD64
    65 template<>
    65 template<>
    66 template<typename I, typename D>
    66 template<typename D, typename I>
    67 inline D Atomic::PlatformAdd<4>::add_and_fetch(I add_value, D volatile* dest,
    67 inline D Atomic::PlatformAdd<4>::add_and_fetch(D volatile* dest, I add_value,
    68                                                atomic_memory_order order) const {
    68                                                atomic_memory_order order) const {
    69   return add_using_helper<int32_t>(os::atomic_add_func, add_value, dest);
    69   return add_using_helper<int32_t>(os::atomic_add_func, dest, add_value);
    70 }
    70 }
    71 
    71 
    72 template<>
    72 template<>
    73 template<typename I, typename D>
    73 template<typename D, typename I>
    74 inline D Atomic::PlatformAdd<8>::add_and_fetch(I add_value, D volatile* dest,
    74 inline D Atomic::PlatformAdd<8>::add_and_fetch(D volatile* dest, I add_value,
    75                                                atomic_memory_order order) const {
    75                                                atomic_memory_order order) const {
    76   return add_using_helper<int64_t>(os::atomic_add_long_func, add_value, dest);
    76   return add_using_helper<int64_t>(os::atomic_add_long_func, dest, add_value);
    77 }
    77 }
    78 
    78 
    79 #define DEFINE_STUB_XCHG(ByteSize, StubType, StubName)                  \
    79 #define DEFINE_STUB_XCHG(ByteSize, StubType, StubName)                  \
    80   template<>                                                            \
    80   template<>                                                            \
    81   template<typename T>                                                  \
    81   template<typename T>                                                  \
   109 #undef DEFINE_STUB_CMPXCHG
   109 #undef DEFINE_STUB_CMPXCHG
   110 
   110 
   111 #else // !AMD64
   111 #else // !AMD64
   112 
   112 
   113 template<>
   113 template<>
   114 template<typename I, typename D>
   114 template<typename D, typename I>
   115 inline D Atomic::PlatformAdd<4>::add_and_fetch(I add_value, D volatile* dest,
   115 inline D Atomic::PlatformAdd<4>::add_and_fetch(D volatile* dest, I add_value,
   116                                                atomic_memory_order order) const {
   116                                                atomic_memory_order order) const {
   117   STATIC_ASSERT(4 == sizeof(I));
   117   STATIC_ASSERT(4 == sizeof(I));
   118   STATIC_ASSERT(4 == sizeof(D));
   118   STATIC_ASSERT(4 == sizeof(D));
   119   __asm {
   119   __asm {
   120     mov edx, dest;
   120     mov edx, dest;