2014-01-17 2 views
0

ССАГПЗ __sync_fetch_and_add является встроенной реализацией x86 встроенного ассемблера:Встроенный ассемблер __sync_fetch_and_add и __sync_add_and_fetch

asm("lock; xaddl %%eax, %2;" 
     :"=a" (val) 
     : "a" (val), "m" (*ptr) :) 

Как я могу реализовать эту ассемблерные используя addl инструкции вместо xaddl?

И еще один вопрос, который у меня есть, как будет встроенная сборка x86 встроенного __sync_add_and_fetch?

Спасибо.

ответ

0

Встроенные элементы не обязательно соответствуют одному четко определенному блоку кода сборки. В частности, как __sync_add_and_fetch и __sync_fetch_and_add будет генерировать lock addl вместо lock xaddl, если результат не живут из встроенных команд, и они могут генерировать lock incl если результат не жить, а второй аргумент, как известно, имеют значение 1.

Непонятно, что вы подразумеваете под «как я могу реализовать эту встроенную сборку». Сборка - это то, что вы пишете или генерируете, а не то, что вы реализуете (если вы не пишете ассемблер).

+0

«Как я могу реализовать». Я имею в виду, как я могу написать эту инструкцию в встроенной сборке. – robertog8

+0

См. Gcc docs на встроенной сборке по адресу http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html. – gsg