src/os_cpu/aix_ppc/vm/orderAccess_aix_ppc.inline.hpp

changeset 6495
67fa91961822
parent 6465
666e6ce3976c
child 6876
710a3c8b516e
     1.1 --- a/src/os_cpu/aix_ppc/vm/orderAccess_aix_ppc.inline.hpp	Tue Dec 10 14:29:43 2013 +0100
     1.2 +++ b/src/os_cpu/aix_ppc/vm/orderAccess_aix_ppc.inline.hpp	Wed Dec 11 00:06:11 2013 +0100
     1.3 @@ -34,114 +34,114 @@
     1.4  //
     1.5  // Machine barrier instructions:
     1.6  //
     1.7 -// - ppc_sync            Two-way memory barrier, aka fence.
     1.8 -// - ppc_lwsync          orders  Store|Store,
     1.9 -//                                Load|Store,
    1.10 -//                                Load|Load,
    1.11 -//                       but not Store|Load
    1.12 -// - ppc_eieio           orders  Store|Store
    1.13 -// - ppc_isync           Invalidates speculatively executed instructions,
    1.14 -//                       but isync may complete before storage accesses
    1.15 -//                       associated with instructions preceding isync have
    1.16 -//                       been performed.
    1.17 +// - sync            Two-way memory barrier, aka fence.
    1.18 +// - lwsync          orders  Store|Store,
    1.19 +//                            Load|Store,
    1.20 +//                            Load|Load,
    1.21 +//                   but not Store|Load
    1.22 +// - eieio           orders  Store|Store
    1.23 +// - isync           Invalidates speculatively executed instructions,
    1.24 +//                   but isync may complete before storage accesses
    1.25 +//                   associated with instructions preceding isync have
    1.26 +//                   been performed.
    1.27  //
    1.28  // Semantic barrier instructions:
    1.29  // (as defined in orderAccess.hpp)
    1.30  //
    1.31 -// - ppc_release         orders Store|Store,       (maps to ppc_lwsync)
    1.32 -//                               Load|Store
    1.33 -// - ppc_acquire         orders  Load|Store,       (maps to ppc_lwsync)
    1.34 -//                               Load|Load
    1.35 -// - ppc_fence           orders Store|Store,       (maps to ppc_sync)
    1.36 -//                               Load|Store,
    1.37 -//                               Load|Load,
    1.38 -//                              Store|Load
    1.39 +// - release         orders Store|Store,       (maps to lwsync)
    1.40 +//                           Load|Store
    1.41 +// - acquire         orders  Load|Store,       (maps to lwsync)
    1.42 +//                           Load|Load
    1.43 +// - fence           orders Store|Store,       (maps to sync)
    1.44 +//                           Load|Store,
    1.45 +//                           Load|Load,
    1.46 +//                          Store|Load
    1.47  //
    1.48  
    1.49 -#define inlasm_ppc_sync()     __asm__ __volatile__ ("sync"   : : : "memory");
    1.50 -#define inlasm_ppc_lwsync()   __asm__ __volatile__ ("lwsync" : : : "memory");
    1.51 -#define inlasm_ppc_eieio()    __asm__ __volatile__ ("eieio"  : : : "memory");
    1.52 -#define inlasm_ppc_isync()    __asm__ __volatile__ ("isync"  : : : "memory");
    1.53 -#define inlasm_ppc_release()  inlasm_ppc_lwsync();
    1.54 -#define inlasm_ppc_acquire()  inlasm_ppc_lwsync();
    1.55 +#define inlasm_sync()     __asm__ __volatile__ ("sync"   : : : "memory");
    1.56 +#define inlasm_lwsync()   __asm__ __volatile__ ("lwsync" : : : "memory");
    1.57 +#define inlasm_eieio()    __asm__ __volatile__ ("eieio"  : : : "memory");
    1.58 +#define inlasm_isync()    __asm__ __volatile__ ("isync"  : : : "memory");
    1.59 +#define inlasm_release()  inlasm_lwsync();
    1.60 +#define inlasm_acquire()  inlasm_lwsync();
    1.61  // Use twi-isync for load_acquire (faster than lwsync).
    1.62  // ATTENTION: seems like xlC 10.1 has problems with this inline assembler macro (VerifyMethodHandles found "bad vminfo in AMH.conv"):
    1.63 -// #define inlasm_ppc_acquire_reg(X) __asm__ __volatile__ ("twi 0,%0,0\n isync\n" : : "r" (X) : "memory");
    1.64 -#define inlasm_ppc_acquire_reg(X) inlasm_ppc_lwsync();
    1.65 -#define inlasm_ppc_fence()    inlasm_ppc_sync();
    1.66 +// #define inlasm_acquire_reg(X) __asm__ __volatile__ ("twi 0,%0,0\n isync\n" : : "r" (X) : "memory");
    1.67 +#define inlasm_acquire_reg(X) inlasm_lwsync();
    1.68 +#define inlasm_fence()    inlasm_sync();
    1.69  
    1.70 -inline void     OrderAccess::loadload()   { inlasm_ppc_lwsync();  }
    1.71 -inline void     OrderAccess::storestore() { inlasm_ppc_lwsync();  }
    1.72 -inline void     OrderAccess::loadstore()  { inlasm_ppc_lwsync();  }
    1.73 -inline void     OrderAccess::storeload()  { inlasm_ppc_fence();   }
    1.74 +inline void     OrderAccess::loadload()   { inlasm_lwsync();  }
    1.75 +inline void     OrderAccess::storestore() { inlasm_lwsync();  }
    1.76 +inline void     OrderAccess::loadstore()  { inlasm_lwsync();  }
    1.77 +inline void     OrderAccess::storeload()  { inlasm_fence();   }
    1.78  
    1.79 -inline void     OrderAccess::acquire()    { inlasm_ppc_acquire(); }
    1.80 -inline void     OrderAccess::release()    { inlasm_ppc_release(); }
    1.81 -inline void     OrderAccess::fence()      { inlasm_ppc_fence();   }
    1.82 +inline void     OrderAccess::acquire()    { inlasm_acquire(); }
    1.83 +inline void     OrderAccess::release()    { inlasm_release(); }
    1.84 +inline void     OrderAccess::fence()      { inlasm_fence();   }
    1.85  
    1.86 -inline jbyte    OrderAccess::load_acquire(volatile jbyte*   p) { register jbyte t = *p;   inlasm_ppc_acquire_reg(t); return t; }
    1.87 -inline jshort   OrderAccess::load_acquire(volatile jshort*  p) { register jshort t = *p;  inlasm_ppc_acquire_reg(t); return t; }
    1.88 -inline jint     OrderAccess::load_acquire(volatile jint*    p) { register jint t = *p;    inlasm_ppc_acquire_reg(t); return t; }
    1.89 -inline jlong    OrderAccess::load_acquire(volatile jlong*   p) { register jlong t = *p;   inlasm_ppc_acquire_reg(t); return t; }
    1.90 -inline jubyte   OrderAccess::load_acquire(volatile jubyte*  p) { register jubyte t = *p;  inlasm_ppc_acquire_reg(t); return t; }
    1.91 -inline jushort  OrderAccess::load_acquire(volatile jushort* p) { register jushort t = *p; inlasm_ppc_acquire_reg(t); return t; }
    1.92 -inline juint    OrderAccess::load_acquire(volatile juint*   p) { register juint t = *p;   inlasm_ppc_acquire_reg(t); return t; }
    1.93 +inline jbyte    OrderAccess::load_acquire(volatile jbyte*   p) { register jbyte t = *p;   inlasm_acquire_reg(t); return t; }
    1.94 +inline jshort   OrderAccess::load_acquire(volatile jshort*  p) { register jshort t = *p;  inlasm_acquire_reg(t); return t; }
    1.95 +inline jint     OrderAccess::load_acquire(volatile jint*    p) { register jint t = *p;    inlasm_acquire_reg(t); return t; }
    1.96 +inline jlong    OrderAccess::load_acquire(volatile jlong*   p) { register jlong t = *p;   inlasm_acquire_reg(t); return t; }
    1.97 +inline jubyte   OrderAccess::load_acquire(volatile jubyte*  p) { register jubyte t = *p;  inlasm_acquire_reg(t); return t; }
    1.98 +inline jushort  OrderAccess::load_acquire(volatile jushort* p) { register jushort t = *p; inlasm_acquire_reg(t); return t; }
    1.99 +inline juint    OrderAccess::load_acquire(volatile juint*   p) { register juint t = *p;   inlasm_acquire_reg(t); return t; }
   1.100  inline julong   OrderAccess::load_acquire(volatile julong*  p) { return (julong)load_acquire((volatile jlong*)p); }
   1.101 -inline jfloat   OrderAccess::load_acquire(volatile jfloat*  p) { register jfloat t = *p;  inlasm_ppc_acquire(); return t; }
   1.102 -inline jdouble  OrderAccess::load_acquire(volatile jdouble* p) { register jdouble t = *p; inlasm_ppc_acquire(); return t; }
   1.103 +inline jfloat   OrderAccess::load_acquire(volatile jfloat*  p) { register jfloat t = *p;  inlasm_acquire(); return t; }
   1.104 +inline jdouble  OrderAccess::load_acquire(volatile jdouble* p) { register jdouble t = *p; inlasm_acquire(); return t; }
   1.105  
   1.106  inline intptr_t OrderAccess::load_ptr_acquire(volatile intptr_t*   p) { return (intptr_t)load_acquire((volatile jlong*)p); }
   1.107  inline void*    OrderAccess::load_ptr_acquire(volatile void*       p) { return (void*)   load_acquire((volatile jlong*)p); }
   1.108  inline void*    OrderAccess::load_ptr_acquire(const volatile void* p) { return (void*)   load_acquire((volatile jlong*)p); }
   1.109  
   1.110 -inline void     OrderAccess::release_store(volatile jbyte*   p, jbyte   v) { inlasm_ppc_release(); *p = v; }
   1.111 -inline void     OrderAccess::release_store(volatile jshort*  p, jshort  v) { inlasm_ppc_release(); *p = v; }
   1.112 -inline void     OrderAccess::release_store(volatile jint*    p, jint    v) { inlasm_ppc_release(); *p = v; }
   1.113 -inline void     OrderAccess::release_store(volatile jlong*   p, jlong   v) { inlasm_ppc_release(); *p = v; }
   1.114 -inline void     OrderAccess::release_store(volatile jubyte*  p, jubyte  v) { inlasm_ppc_release(); *p = v; }
   1.115 -inline void     OrderAccess::release_store(volatile jushort* p, jushort v) { inlasm_ppc_release(); *p = v; }
   1.116 -inline void     OrderAccess::release_store(volatile juint*   p, juint   v) { inlasm_ppc_release(); *p = v; }
   1.117 -inline void     OrderAccess::release_store(volatile julong*  p, julong  v) { inlasm_ppc_release(); *p = v; }
   1.118 -inline void     OrderAccess::release_store(volatile jfloat*  p, jfloat  v) { inlasm_ppc_release(); *p = v; }
   1.119 -inline void     OrderAccess::release_store(volatile jdouble* p, jdouble v) { inlasm_ppc_release(); *p = v; }
   1.120 +inline void     OrderAccess::release_store(volatile jbyte*   p, jbyte   v) { inlasm_release(); *p = v; }
   1.121 +inline void     OrderAccess::release_store(volatile jshort*  p, jshort  v) { inlasm_release(); *p = v; }
   1.122 +inline void     OrderAccess::release_store(volatile jint*    p, jint    v) { inlasm_release(); *p = v; }
   1.123 +inline void     OrderAccess::release_store(volatile jlong*   p, jlong   v) { inlasm_release(); *p = v; }
   1.124 +inline void     OrderAccess::release_store(volatile jubyte*  p, jubyte  v) { inlasm_release(); *p = v; }
   1.125 +inline void     OrderAccess::release_store(volatile jushort* p, jushort v) { inlasm_release(); *p = v; }
   1.126 +inline void     OrderAccess::release_store(volatile juint*   p, juint   v) { inlasm_release(); *p = v; }
   1.127 +inline void     OrderAccess::release_store(volatile julong*  p, julong  v) { inlasm_release(); *p = v; }
   1.128 +inline void     OrderAccess::release_store(volatile jfloat*  p, jfloat  v) { inlasm_release(); *p = v; }
   1.129 +inline void     OrderAccess::release_store(volatile jdouble* p, jdouble v) { inlasm_release(); *p = v; }
   1.130  
   1.131 -inline void     OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { inlasm_ppc_release(); *p = v; }
   1.132 -inline void     OrderAccess::release_store_ptr(volatile void*     p, void*    v) { inlasm_ppc_release(); *(void* volatile *)p = v; }
   1.133 +inline void     OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { inlasm_release(); *p = v; }
   1.134 +inline void     OrderAccess::release_store_ptr(volatile void*     p, void*    v) { inlasm_release(); *(void* volatile *)p = v; }
   1.135  
   1.136 -inline void     OrderAccess::store_fence(jbyte*   p, jbyte   v) { *p = v; inlasm_ppc_fence(); }
   1.137 -inline void     OrderAccess::store_fence(jshort*  p, jshort  v) { *p = v; inlasm_ppc_fence(); }
   1.138 -inline void     OrderAccess::store_fence(jint*    p, jint    v) { *p = v; inlasm_ppc_fence(); }
   1.139 -inline void     OrderAccess::store_fence(jlong*   p, jlong   v) { *p = v; inlasm_ppc_fence(); }
   1.140 -inline void     OrderAccess::store_fence(jubyte*  p, jubyte  v) { *p = v; inlasm_ppc_fence(); }
   1.141 -inline void     OrderAccess::store_fence(jushort* p, jushort v) { *p = v; inlasm_ppc_fence(); }
   1.142 -inline void     OrderAccess::store_fence(juint*   p, juint   v) { *p = v; inlasm_ppc_fence(); }
   1.143 -inline void     OrderAccess::store_fence(julong*  p, julong  v) { *p = v; inlasm_ppc_fence(); }
   1.144 -inline void     OrderAccess::store_fence(jfloat*  p, jfloat  v) { *p = v; inlasm_ppc_fence(); }
   1.145 -inline void     OrderAccess::store_fence(jdouble* p, jdouble v) { *p = v; inlasm_ppc_fence(); }
   1.146 +inline void     OrderAccess::store_fence(jbyte*   p, jbyte   v) { *p = v; inlasm_fence(); }
   1.147 +inline void     OrderAccess::store_fence(jshort*  p, jshort  v) { *p = v; inlasm_fence(); }
   1.148 +inline void     OrderAccess::store_fence(jint*    p, jint    v) { *p = v; inlasm_fence(); }
   1.149 +inline void     OrderAccess::store_fence(jlong*   p, jlong   v) { *p = v; inlasm_fence(); }
   1.150 +inline void     OrderAccess::store_fence(jubyte*  p, jubyte  v) { *p = v; inlasm_fence(); }
   1.151 +inline void     OrderAccess::store_fence(jushort* p, jushort v) { *p = v; inlasm_fence(); }
   1.152 +inline void     OrderAccess::store_fence(juint*   p, juint   v) { *p = v; inlasm_fence(); }
   1.153 +inline void     OrderAccess::store_fence(julong*  p, julong  v) { *p = v; inlasm_fence(); }
   1.154 +inline void     OrderAccess::store_fence(jfloat*  p, jfloat  v) { *p = v; inlasm_fence(); }
   1.155 +inline void     OrderAccess::store_fence(jdouble* p, jdouble v) { *p = v; inlasm_fence(); }
   1.156  
   1.157 -inline void     OrderAccess::store_ptr_fence(intptr_t* p, intptr_t v) { *p = v; inlasm_ppc_fence(); }
   1.158 -inline void     OrderAccess::store_ptr_fence(void**    p, void*    v) { *p = v; inlasm_ppc_fence(); }
   1.159 +inline void     OrderAccess::store_ptr_fence(intptr_t* p, intptr_t v) { *p = v; inlasm_fence(); }
   1.160 +inline void     OrderAccess::store_ptr_fence(void**    p, void*    v) { *p = v; inlasm_fence(); }
   1.161  
   1.162 -inline void     OrderAccess::release_store_fence(volatile jbyte*   p, jbyte   v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.163 -inline void     OrderAccess::release_store_fence(volatile jshort*  p, jshort  v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.164 -inline void     OrderAccess::release_store_fence(volatile jint*    p, jint    v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.165 -inline void     OrderAccess::release_store_fence(volatile jlong*   p, jlong   v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.166 -inline void     OrderAccess::release_store_fence(volatile jubyte*  p, jubyte  v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.167 -inline void     OrderAccess::release_store_fence(volatile jushort* p, jushort v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.168 -inline void     OrderAccess::release_store_fence(volatile juint*   p, juint   v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.169 -inline void     OrderAccess::release_store_fence(volatile julong*  p, julong  v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.170 -inline void     OrderAccess::release_store_fence(volatile jfloat*  p, jfloat  v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.171 -inline void     OrderAccess::release_store_fence(volatile jdouble* p, jdouble v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.172 +inline void     OrderAccess::release_store_fence(volatile jbyte*   p, jbyte   v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.173 +inline void     OrderAccess::release_store_fence(volatile jshort*  p, jshort  v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.174 +inline void     OrderAccess::release_store_fence(volatile jint*    p, jint    v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.175 +inline void     OrderAccess::release_store_fence(volatile jlong*   p, jlong   v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.176 +inline void     OrderAccess::release_store_fence(volatile jubyte*  p, jubyte  v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.177 +inline void     OrderAccess::release_store_fence(volatile jushort* p, jushort v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.178 +inline void     OrderAccess::release_store_fence(volatile juint*   p, juint   v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.179 +inline void     OrderAccess::release_store_fence(volatile julong*  p, julong  v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.180 +inline void     OrderAccess::release_store_fence(volatile jfloat*  p, jfloat  v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.181 +inline void     OrderAccess::release_store_fence(volatile jdouble* p, jdouble v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.182  
   1.183 -inline void     OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) { inlasm_ppc_release(); *p = v; inlasm_ppc_fence(); }
   1.184 -inline void     OrderAccess::release_store_ptr_fence(volatile void*     p, void*    v) { inlasm_ppc_release(); *(void* volatile *)p = v; inlasm_ppc_fence(); }
   1.185 +inline void     OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) { inlasm_release(); *p = v; inlasm_fence(); }
   1.186 +inline void     OrderAccess::release_store_ptr_fence(volatile void*     p, void*    v) { inlasm_release(); *(void* volatile *)p = v; inlasm_fence(); }
   1.187  
   1.188 -#undef inlasm_ppc_sync
   1.189 -#undef inlasm_ppc_lwsync
   1.190 -#undef inlasm_ppc_eieio
   1.191 -#undef inlasm_ppc_isync
   1.192 -#undef inlasm_ppc_release
   1.193 -#undef inlasm_ppc_acquire
   1.194 -#undef inlasm_ppc_fence
   1.195 +#undef inlasm_sync
   1.196 +#undef inlasm_lwsync
   1.197 +#undef inlasm_eieio
   1.198 +#undef inlasm_isync
   1.199 +#undef inlasm_release
   1.200 +#undef inlasm_acquire
   1.201 +#undef inlasm_fence
   1.202  
   1.203  #endif // OS_CPU_AIX_OJDKPPC_VM_ORDERACCESS_AIX_PPC_INLINE_HPP

mercurial