00001 #include "config.h"
00002 #include <atomic.h>
00003
00004 #ifdef CONF_ATOMIC
00005
00012 void atomic_inc(atomic_t* counter);
00013 __asm__("\n\
00014 .text\n\
00015 .globl _atomic_inc\n\
00016 _atomic_inc:\n\
00017 stc ccr, r1h ; save flags\n\
00018 orc #0x80, ccr ; disable all but NMI\n\
00019 mov.b @r0, r1l\n\
00020 inc r1l\n\
00021 mov.b r1l, @r0\n\
00022 ldc r1h, ccr ; restore flags\n\
00023 rts\n\
00024 ");
00025
00033 void atomic_dec(atomic_t* counter);
00034 __asm__("\n\
00035 .text\n\
00036 .globl _atomic_dec\n\
00037 _atomic_dec:\n\
00038 stc ccr, r1h\n\
00039 orc #0x80, ccr\n\
00040 mov.b @r0, r1l\n\
00041 dec r1l\n\
00042 mov.b r1l, @r0\n\
00043 ldc r1h, ccr\n\
00044 rts\n\
00045 ");
00046 #endif