(intel语法)我需要在这些汇编代码下面加上哪些约束

时间:2017-05-25 13:17:18

标签: gcc x86 intel inline-assembly spinlock

/*
*       - spin lock aessembly code.
*
*   Implement spin lock in assembly level. 
*/


         #include <sys/types.h>
         #include <pthread.h>

         #include "lab2_sync_types.h"

         #define LOCK_PREFIX "lock\n\t"

         void atomic_add( int * value, int add_val) {

         asm volatile(
                LOCK_PREFIX
            "addl %1, %0      \n\t"
            : "+m"(*value)
            : "ir"(add_val)
            : /*no clobber-list*/
            ); }

        void atomic_sub( int * value, int dec_val) {

        asm volatile(
            LOCK_PREFIX
            "subl %1, %0      \n\t"
            : "+m"(*value)
            : "ir"(dec_val)
            : /*no clobber-list*/
            );

}

void atomic_inc( int * value) {

    asm volatile(
            LOCK_PREFIX
            "incl %0        \n\t"
            : "+m"(*value)
            : /* no input */
            : /*no clobber-list*/
            );

}

void atomic_dec( int * value) {

    asm volatile(
            LOCK_PREFIX
            "decl %0        \n\t"
            : "+m"(*value)
            : /* no input */
            : /*no clobber-list*/
            );

}

void lab2_spin_lock(int volatile *lock) {

    asm volatile(
            "mov eax, 1     \n\t"
            "loop:  \n\t"
            "xchg eax, %0   \n\t"
            "test eax, eax  \n\t"
            "jnz loop       \n\t"
            :"=r"(*lock)
            :
            :"eax","cc"
            );    

}

void lab2_spin_unlock(int volatile *lock) {

     asm volatile(
            "mov eax, 0   \n\t"
            "xchg eax, %0   \n\t"
            :"=r"(*lock)
            :
            :"eax"
            );

}

你好,谢谢你阅读这个问题。

我想知道什么样的约束(后面是:)我是否需要在这些代码下方使这个内联汇编功能正常。

万一你可能不遵循,这些都是装配中的自旋锁的实现。

如果你能给我一个解决方案,我将不胜感激。

0 个答案:

没有答案