Мне нужно получить кодировку команд для атомного приращения длинной переменной. Я думал написать некоторую встроенную сборку gcc и использовать вывод gdb дизассемблированный, чтобы получить ответ. Вот что я сделал.Инструкция кодирования для атомного приращения длинной переменной
#include <stdint.h>
int lock_inc(uint64_t *value) {
__asm__ __volatile__
(
"lock inc %0;\n"
:
: "r"(value)
: "memory"
);
}
uint64_t value = 0;
int main() {
lock_inc(&value);
}
Но когда я пытаюсь скомпилировать его, я получаю следующее сообщение об ошибке.
lockinc.c: Assembler messages: lockinc.c:5: Error: expecting lockable instruction after `lock'
Что я делаю неправильно? Кстати, если кто-то знает прямой ответ (кодирование), который тоже будет отличным. (Я имел в виду некоторые сайты для получения его напрямую, но не был уверен в ответе. Felt позволяет gcc делать это было бы проще.)
Что вы укажете в инструкции? Я не предполагаю, что вы будете проводить такую работу, не открывая и не открывая руководство для консультаций в любое время. –
Звуковое предложение. :). Думаю, я пытался найти легкий выход. – chamibuddhika
Вопрос «как это сделать», который не требует asm: stackoverflow.com/questions/2353371/how-to-do-an-atomic-increment-and-fetch-in-c –