Subversion Repositories HelenOS

Rev

Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2071 Rev 2082
Line 34... Line 34...
34
 
34
 
35
#ifndef LIBC_ia32_ATOMIC_H_
35
#ifndef LIBC_ia32_ATOMIC_H_
36
#define LIBC_ia32_ATOMIC_H_
36
#define LIBC_ia32_ATOMIC_H_
37
 
37
 
38
static inline void atomic_inc(atomic_t *val) {
38
static inline void atomic_inc(atomic_t *val) {
39
    __asm__ volatile ("lock incl %0\n" : "=m" (val->count));
39
    asm volatile ("lock incl %0\n" : "=m" (val->count));
40
}
40
}
41
 
41
 
42
static inline void atomic_dec(atomic_t *val) {
42
static inline void atomic_dec(atomic_t *val) {
43
    __asm__ volatile ("lock decl %0\n" : "=m" (val->count));
43
    asm volatile ("lock decl %0\n" : "=m" (val->count));
44
}
44
}
45
 
45
 
46
static inline long atomic_postinc(atomic_t *val)
46
static inline long atomic_postinc(atomic_t *val)
47
{
47
{
48
    long r;
48
    long r;
49
 
49
 
50
    __asm__ volatile (
50
    asm volatile (
51
        "movl $1, %0\n"
51
        "movl $1, %0\n"
52
        "lock xaddl %0, %1\n"
52
        "lock xaddl %0, %1\n"
53
        : "=r" (r), "=m" (val->count)
53
        : "=r" (r), "=m" (val->count)
54
    );
54
    );
55
 
55
 
Line 58... Line 58...
58
 
58
 
59
static inline long atomic_postdec(atomic_t *val)
59
static inline long atomic_postdec(atomic_t *val)
60
{
60
{
61
    long r;
61
    long r;
62
   
62
   
63
    __asm__ volatile (
63
    asm volatile (
64
        "movl $-1, %0\n"
64
        "movl $-1, %0\n"
65
        "lock xaddl %0, %1\n"
65
        "lock xaddl %0, %1\n"
66
        : "=r" (r), "=m" (val->count)
66
        : "=r" (r), "=m" (val->count)
67
    );
67
    );
68
   
68