Ignore:
Timestamp:
2011-08-20T17:04:52Z (13 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ac08cd9
Parents:
81bc309
Message:

pcc incompatible inline assembly rewritten in a more agreeable fashion.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/arch/amd64/include/atomic.h

    r81bc309 rc8f70eb  
    4444static inline void atomic_inc(atomic_t *val)
    4545{
     46#ifdef __PCC__
    4647        asm volatile (
    4748                "lock incq %0\n"
    4849                : "+m" (val->count)
    4950        );
     51#else
     52        asm volatile (
     53                "lock incq %[count]\n"
     54                : [count] "+m" (val->count)
     55        );
     56#endif
    5057}
    5158
    5259static inline void atomic_dec(atomic_t *val)
    5360{
     61#ifdef __PCC__
    5462        asm volatile (
    5563                "lock decq %0\n"
    5664                : "+m" (val->count)
    5765        );
     66#else
     67        asm volatile (
     68                "lock decq %[count]\n"
     69                : [count] "+m" (val->count)
     70        );
     71#endif
    5872}
    5973
     
    6276        atomic_count_t r = 1;
    6377       
     78#ifdef __PCC__
    6479        asm volatile (
    6580                "lock xaddq %1, %0\n"
     
    6782                  "+r" (r)
    6883        );
     84#else
     85        asm volatile (
     86                "lock xaddq %[r], %[count]\n"
     87                : [count] "+m" (val->count),
     88                  [r] "+r" (r)
     89        );
     90#endif
    6991       
    7092        return r;
     
    7597        atomic_count_t r = -1;
    7698       
     99#ifdef __PCC__
    77100        asm volatile (
    78101                "lock xaddq %1, %0\n"
     
    80103                  "+r" (r)
    81104        );
     105#else
     106        asm volatile (
     107                "lock xaddq %[r], %[count]\n"
     108                : [count] "+m" (val->count),
     109                  [r] "+r" (r)
     110        );
     111#endif
    82112       
    83113        return r;
Note: See TracChangeset for help on using the changeset viewer.