Как вы интерпретируете эту сборку? - PullRequest
2 голосов
/ 26 мая 2011

Извлечено из nginx:

static ngx_inline ngx_atomic_uint_t
ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
ngx_atomic_uint_t set)
{
    u_char res;
    __asm__ volatile (
    NGX_SMP_LOCK
    " cmpxchgl %3, %1; "
    " sete %0; "
    : "=a" (res) : "m" (*lock), "a" (old), "r" (set) : "cc", "memory");
    return res;
}

Я не понимаю синтаксис, в котором объединены инструкции по сборке (он использует синтаксис, отличный от printf), что он вообще делает?

1 Ответ

2 голосов
/ 26 мая 2011

Учитывая это и игнорируя атомарность операций, функция эквивалентна:

 static ngx_inline ngx_atomic_uint_t
 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
 ngx_atomic_uint_t set)
 {
     u_char res;
     if (*lock == old){
         *lock = set;
         res = 1;
     } else{
         res = *lock
     }
     return res;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...