Chinaunix首页 | 论坛 | 博客
  • 博客访问: 665638
  • 博文数量: 156
  • 博客积分: 4833
  • 博客等级: 上校
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-21 19:36
文章分类

全部博文(156)

文章存档

2016年(2)

2013年(1)

2012年(13)

2011年(30)

2010年(46)

2009年(29)

2008年(23)

2007年(12)

分类: LINUX

2011-12-29 20:34:16

MIPS:
static inline void _raw_spin_lock(spinlock_t *lock)
{
    unsigned int tmp;
       __asm__ __volatile__(
        "    .set    noreorder    # _raw_spin_lock    \n"
        "1:    ll    %1, %2                    \n"
        "    bnez    %1, 1b                    \n"
        "     li    %1, 1                    \n"
        "    sc    %1, %0                    \n"
        "    beqz    %1, 1b                    \n"
        "     sync                        \n"
        "    .set    reorder                    \n"
        : "=m" (lock->lock), "=&r" (tmp)
        : "m" (lock->lock)
        : "memory");
}

ARM:
static inline void _raw_spin_lock(spinlock_t *lock)
{
    unsigned long tmp;

    __asm__ __volatile__(
"1:  ldrex    %0, [%1]\n"
"    teq    %0, #0\n"
"    strexeq    %0, %2, [%1]\n"
"    teqeq    %0, #0\n"
"    bne    1b"
    : "=&r" (tmp)
    : "r" (&lock->lock), "r" (1)
    : "cc", "memory");
}

Powerpc:
static inline unsigned long __spin_trylock(raw_spinlock_t *lock)
{
    unsigned long tmp, token;

    token = LOCK_TOKEN;
    __asm__ __volatile__(
"1:    lwarx        %0,0,%2\n\
    cmpwi        0,%0,0\n\
    bne-        2f\n\
    stwcx.        %1,0,%2\n\
    bne-        1b\n\
    isync\n\
2:"    : "=&r" (tmp)
    : "r" (token), "r" (&lock->slock)
    : "cr0", "memory");

    return tmp;
}

X86:
static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock)
{
    short inc = 0x0100;

    asm volatile (
        LOCK_PREFIX "xaddw %w0, %1\n"
        "1:\t"
        "cmpb %h0, %b0\n\t"
        "je 2f\n\t"
        "rep ; nop\n\t"
        "movb %1, %b0\n\t"
        /* don't need lfence here, because loads are in-order */
        "jmp 1b\n"
        "2:"
        : "+Q" (inc), "+m" (lock->slock)
        :
        : "memory", "cc");
}



阅读(906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~