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/ia32/include/atomic.h

    r81bc309 rc8f70eb  
    4242static inline void atomic_inc(atomic_t *val)
    4343{
     44#ifdef __PCC__
    4445        asm volatile (
    4546                "lock incl %0\n"
    4647                : "+m" (val->count)
    4748        );
     49#else
     50        asm volatile (
     51                "lock incl %[count]\n"
     52                : [count] "+m" (val->count)
     53        );
     54#endif
    4855}
    4956
    5057static inline void atomic_dec(atomic_t *val)
    5158{
     59#ifdef __PCC__
    5260        asm volatile (
    5361                "lock decl %0\n"
    5462                : "+m" (val->count)
    5563        );
     64#else
     65        asm volatile (
     66                "lock decl %[count]\n"
     67                : [count] "+m" (val->count)
     68        );
     69#endif
    5670}
    5771
     
    6074        atomic_count_t r = 1;
    6175       
     76#ifdef __PCC__
    6277        asm volatile (
    6378                "lock xaddl %1, %0\n"
     
    6580                  "+r" (r)
    6681        );
     82#else
     83        asm volatile (
     84                "lock xaddl %[r], %[count]\n"
     85                : [count] "+m" (val->count),
     86                  [r] "+r" (r)
     87        );
     88#endif
    6789       
    6890        return r;
     
    7395        atomic_count_t r = -1;
    7496       
     97#ifdef __PCC__
    7598        asm volatile (
    7699                "lock xaddl %1, %0\n"
     
    78101                  "+r" (r)
    79102        );
     103#else
     104        asm volatile (
     105                "lock xaddl %[r], %[count]\n"
     106                : [count] "+m" (val->count),
     107                  [r] "+r" (r)
     108        );
     109#endif
    80110       
    81111        return r;
Note: See TracChangeset for help on using the changeset viewer.