Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/arch/sparc64/include/atomic.h

    r228666c re15e0e8  
    4646 *
    4747 * @param val Atomic variable.
    48  * @param i   Signed value to be added.
     48 * @param i Signed value to be added.
    4949 *
    5050 * @return Value of the atomic variable as it existed before addition.
    51  *
    5251 */
    53 static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
     52static inline long atomic_add(atomic_t *val, int i)
    5453{
    55         atomic_count_t a;
    56         atomic_count_t b;
    57        
     54        uint64_t a, b;
     55
    5856        do {
    59                 volatile uintptr_t ptr = (uintptr_t) &val->count;
    60                
    61                 a = *((atomic_count_t *) ptr);
     57                volatile uintptr_t x = (uint64_t) &val->count;
     58
     59                a = *((uint64_t *) x);
    6260                b = a + i;
    63                
    64                 asm volatile (
    65                         "casx %0, %2, %1\n"
    66                         : "+m" (*((atomic_count_t *) ptr)),
    67                           "+r" (b)
    68                         : "r" (a)
    69                 );
     61                asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a));
    7062        } while (a != b);
    71        
     63
    7264        return a;
    7365}
    7466
    75 static inline atomic_count_t atomic_preinc(atomic_t *val)
     67static inline long atomic_preinc(atomic_t *val)
    7668{
    7769        return atomic_add(val, 1) + 1;
    7870}
    7971
    80 static inline atomic_count_t atomic_postinc(atomic_t *val)
     72static inline long atomic_postinc(atomic_t *val)
    8173{
    8274        return atomic_add(val, 1);
    8375}
    8476
    85 static inline atomic_count_t atomic_predec(atomic_t *val)
     77static inline long atomic_predec(atomic_t *val)
    8678{
    8779        return atomic_add(val, -1) - 1;
    8880}
    8981
    90 static inline atomic_count_t atomic_postdec(atomic_t *val)
     82static inline long atomic_postdec(atomic_t *val)
    9183{
    9284        return atomic_add(val, -1);
Note: See TracChangeset for help on using the changeset viewer.