src/hotspot/os_cpu/aix_ppc/atomic_aix_ppc.hpp
changeset 47552 8a3599d60996
parent 47216 71c04702a3d5
child 47578 09c41c4913d9
equal deleted inserted replaced
47551:4d034d861e13 47552:8a3599d60996
   147 
   147 
   148   return result;
   148   return result;
   149 }
   149 }
   150 
   150 
   151 
   151 
   152 inline void Atomic::inc    (volatile jint*     dest) {
       
   153 
       
   154   unsigned int temp;
       
   155 
       
   156   __asm__ __volatile__ (
       
   157     strasm_nobarrier
       
   158     "1: lwarx   %0,  0, %2    \n"
       
   159     "   addic   %0, %0,  1    \n"
       
   160     "   stwcx.  %0,  0, %2    \n"
       
   161     "   bne-    1b            \n"
       
   162     strasm_nobarrier
       
   163     : /*%0*/"=&r" (temp), "=m" (*dest)
       
   164     : /*%2*/"r" (dest), "m" (*dest)
       
   165     : "cc" strasm_nobarrier_clobber_memory);
       
   166 
       
   167 }
       
   168 
       
   169 inline void Atomic::inc_ptr(volatile intptr_t* dest) {
       
   170 
       
   171   long temp;
       
   172 
       
   173   __asm__ __volatile__ (
       
   174     strasm_nobarrier
       
   175     "1: ldarx   %0,  0, %2    \n"
       
   176     "   addic   %0, %0,  1    \n"
       
   177     "   stdcx.  %0,  0, %2    \n"
       
   178     "   bne-    1b            \n"
       
   179     strasm_nobarrier
       
   180     : /*%0*/"=&r" (temp), "=m" (*dest)
       
   181     : /*%2*/"r" (dest), "m" (*dest)
       
   182     : "cc" strasm_nobarrier_clobber_memory);
       
   183 
       
   184 }
       
   185 
       
   186 inline void Atomic::inc_ptr(volatile void*     dest) {
       
   187   inc_ptr((volatile intptr_t*)dest);
       
   188 }
       
   189 
       
   190 
       
   191 inline void Atomic::dec    (volatile jint*     dest) {
       
   192 
       
   193   unsigned int temp;
       
   194 
       
   195   __asm__ __volatile__ (
       
   196     strasm_nobarrier
       
   197     "1: lwarx   %0,  0, %2    \n"
       
   198     "   addic   %0, %0, -1    \n"
       
   199     "   stwcx.  %0,  0, %2    \n"
       
   200     "   bne-    1b            \n"
       
   201     strasm_nobarrier
       
   202     : /*%0*/"=&r" (temp), "=m" (*dest)
       
   203     : /*%2*/"r" (dest), "m" (*dest)
       
   204     : "cc" strasm_nobarrier_clobber_memory);
       
   205 
       
   206 }
       
   207 
       
   208 inline void Atomic::dec_ptr(volatile intptr_t* dest) {
       
   209 
       
   210   long temp;
       
   211 
       
   212   __asm__ __volatile__ (
       
   213     strasm_nobarrier
       
   214     "1: ldarx   %0,  0, %2    \n"
       
   215     "   addic   %0, %0, -1    \n"
       
   216     "   stdcx.  %0,  0, %2    \n"
       
   217     "   bne-    1b            \n"
       
   218     strasm_nobarrier
       
   219     : /*%0*/"=&r" (temp), "=m" (*dest)
       
   220     : /*%2*/"r" (dest), "m" (*dest)
       
   221     : "cc" strasm_nobarrier_clobber_memory);
       
   222 
       
   223 }
       
   224 
       
   225 inline void Atomic::dec_ptr(volatile void*     dest) {
       
   226   dec_ptr((volatile intptr_t*)dest);
       
   227 }
       
   228 
       
   229 inline jint Atomic::xchg(jint exchange_value, volatile jint* dest) {
   152 inline jint Atomic::xchg(jint exchange_value, volatile jint* dest) {
   230 
   153 
   231   // Note that xchg_ptr doesn't necessarily do an acquire
   154   // Note that xchg_ptr doesn't necessarily do an acquire
   232   // (see synchronizer.cpp).
   155   // (see synchronizer.cpp).
   233 
   156