< prev index next >

src/os_cpu/solaris_sparc/vm/atomic_solaris_sparc.hpp

Print this page
rev 13030 : [mq]: add_const


  35 inline void Atomic::store_ptr(intptr_t store_value, intptr_t* dest) { *dest = store_value; }
  36 inline void Atomic::store_ptr(void*    store_value, void*     dest) { *(void**)dest = store_value; }
  37 
  38 inline void Atomic::store    (jbyte    store_value, volatile jbyte*    dest) { *dest = store_value; }
  39 inline void Atomic::store    (jshort   store_value, volatile jshort*   dest) { *dest = store_value; }
  40 inline void Atomic::store    (jint     store_value, volatile jint*     dest) { *dest = store_value; }
  41 inline void Atomic::store_ptr(intptr_t store_value, volatile intptr_t* dest) { *dest = store_value; }
  42 inline void Atomic::store_ptr(void*    store_value, volatile void*     dest) { *(void* volatile *)dest = store_value; }
  43 
  44 inline void Atomic::inc    (volatile jint*     dest) { (void)add    (1, dest); }
  45 inline void Atomic::inc_ptr(volatile intptr_t* dest) { (void)add_ptr(1, dest); }
  46 inline void Atomic::inc_ptr(volatile void*     dest) { (void)add_ptr(1, dest); }
  47 
  48 inline void Atomic::dec    (volatile jint*     dest) { (void)add    (-1, dest); }
  49 inline void Atomic::dec_ptr(volatile intptr_t* dest) { (void)add_ptr(-1, dest); }
  50 inline void Atomic::dec_ptr(volatile void*     dest) { (void)add_ptr(-1, dest); }
  51 
  52 
  53 inline void Atomic::store(jlong store_value, jlong* dest) { *dest = store_value; }
  54 inline void Atomic::store(jlong store_value, volatile jlong* dest) { *dest = store_value; }
  55 inline jlong Atomic::load(volatile jlong* src) { return *src; }
  56 
  57 #ifdef _GNU_SOURCE
  58 
  59 inline jint     Atomic::add    (jint     add_value, volatile jint*     dest) {
  60   intptr_t rv;
  61   __asm__ volatile(
  62     "1: \n\t"
  63     " ld     [%2], %%o2\n\t"
  64     " add    %1, %%o2, %%o3\n\t"
  65     " cas    [%2], %%o2, %%o3\n\t"
  66     " cmp    %%o2, %%o3\n\t"
  67     " bne    1b\n\t"
  68     "  nop\n\t"
  69     " add    %1, %%o2, %0\n\t"
  70     : "=r" (rv)
  71     : "r" (add_value), "r" (dest)
  72     : "memory", "o2", "o3");
  73   return rv;
  74 }
  75 




  35 inline void Atomic::store_ptr(intptr_t store_value, intptr_t* dest) { *dest = store_value; }
  36 inline void Atomic::store_ptr(void*    store_value, void*     dest) { *(void**)dest = store_value; }
  37 
  38 inline void Atomic::store    (jbyte    store_value, volatile jbyte*    dest) { *dest = store_value; }
  39 inline void Atomic::store    (jshort   store_value, volatile jshort*   dest) { *dest = store_value; }
  40 inline void Atomic::store    (jint     store_value, volatile jint*     dest) { *dest = store_value; }
  41 inline void Atomic::store_ptr(intptr_t store_value, volatile intptr_t* dest) { *dest = store_value; }
  42 inline void Atomic::store_ptr(void*    store_value, volatile void*     dest) { *(void* volatile *)dest = store_value; }
  43 
  44 inline void Atomic::inc    (volatile jint*     dest) { (void)add    (1, dest); }
  45 inline void Atomic::inc_ptr(volatile intptr_t* dest) { (void)add_ptr(1, dest); }
  46 inline void Atomic::inc_ptr(volatile void*     dest) { (void)add_ptr(1, dest); }
  47 
  48 inline void Atomic::dec    (volatile jint*     dest) { (void)add    (-1, dest); }
  49 inline void Atomic::dec_ptr(volatile intptr_t* dest) { (void)add_ptr(-1, dest); }
  50 inline void Atomic::dec_ptr(volatile void*     dest) { (void)add_ptr(-1, dest); }
  51 
  52 
  53 inline void Atomic::store(jlong store_value, jlong* dest) { *dest = store_value; }
  54 inline void Atomic::store(jlong store_value, volatile jlong* dest) { *dest = store_value; }
  55 inline jlong Atomic::load(const volatile jlong* src) { return *src; }
  56 
  57 #ifdef _GNU_SOURCE
  58 
  59 inline jint     Atomic::add    (jint     add_value, volatile jint*     dest) {
  60   intptr_t rv;
  61   __asm__ volatile(
  62     "1: \n\t"
  63     " ld     [%2], %%o2\n\t"
  64     " add    %1, %%o2, %%o3\n\t"
  65     " cas    [%2], %%o2, %%o3\n\t"
  66     " cmp    %%o2, %%o3\n\t"
  67     " bne    1b\n\t"
  68     "  nop\n\t"
  69     " add    %1, %%o2, %0\n\t"
  70     : "=r" (rv)
  71     : "r" (add_value), "r" (dest)
  72     : "memory", "o2", "o3");
  73   return rv;
  74 }
  75 


< prev index next >