Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset c8f70eb in mainline


Ignore:
Timestamp:
2011-08-20T17:04:52Z (10 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master
Children:
ac08cd9
Parents:
81bc309
Message:

pcc incompatible inline assembly rewritten in a more agreeable fashion.

Location:
uspace
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/dist/src/c/demos/tetris/build

    r81bc309 rc8f70eb  
    1 cc -I/inc/c -E -o scores.i scores.c
    2 cc -I/inc/c -E -o screen.i screen.c
    3 cc -I/inc/c -E -o shapes.i shapes.c
    4 cc -I/inc/c -E -o tetris.i tetris.c
     1cc -D__PCC__ -I/inc/c -E -o scores.i scores.c
     2cc -D__PCC__ -I/inc/c -E -o screen.i screen.c
     3cc -D__PCC__ -I/inc/c -E -o shapes.i shapes.c
     4cc -D__PCC__ -I/inc/c -E -o tetris.i tetris.c
    55
    66cc -S -o scores.s scores.i
  • 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;
  • 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;
  • uspace/lib/c/arch/ia32/include/ddi.h

    r81bc309 rc8f70eb  
    4444                uint8_t val;
    4545                asm volatile (
    46                         "inb %w1, %b0\n"
    47                         : "=a" (val)
    48                         : "d" (port)
     46                        "inb %w[port], %b[val]\n"
     47                        : [val] "=a" (val)
     48                        : [port] "d" (port)
    4949                );
    5050                return val;
     
    5959                uint16_t val;
    6060                asm volatile (
    61                         "inw %w1, %w0\n"
    62                         : "=a" (val)
    63                         : "d" (port)
     61                        "inw %w[port], %w[val]\n"
     62                        : [val] "=a" (val)
     63                        : [port] "d" (port)
    6464                );
    6565                return val;
     
    7474                uint32_t val;
    7575                asm volatile (
    76                         "inl %w1, %0\n"
    77                         : "=a" (val)
    78                         : "d" (port)
     76                        "inl %w[port], %[val]\n"
     77                        : [val] "=a" (val)
     78                        : [port] "d" (port)
    7979                );
    8080                return val;
     
    8888        if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
    8989                asm volatile (
    90                         "outb %b0, %w1\n"
    91                         :: "a" (val), "d" (port)
     90                        "outb %b[val], %w[port]\n"
     91                        :: [val] "a" (val), [port] "d" (port)
    9292                );     
    9393        } else {
     
    100100        if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
    101101                asm volatile (
    102                         "outw %w0, %w1\n"
    103                         :: "a" (val), "d" (port)
     102                        "outw %w[val], %w[port]\n"
     103                        :: [val] "a" (val), [port] "d" (port)
    104104                );
    105105        } else {
     
    112112        if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
    113113                asm volatile (
    114                         "outl %0, %w1\n"
    115                         :: "a" (val), "d" (port)
     114                        "outl %[val], %w[port]\n"
     115                        :: [val] "a" (val), [port] "d" (port)
    116116                );
    117117        } else {
Note: See TracChangeset for help on using the changeset viewer.