gpt4 book ai didi

c - 内联汇编的原子增量

转载 作者:行者123 更新时间:2023-11-30 15:14:11 25 4
gpt4 key购买 nike

当我尝试以原子方式递增数字时,出现此错误。 (是的,我必须使用内联汇编和命令 xaddl 来完成此操作,而不是 fetch_and_add 等)

tslock.c:23:3: error: matching constraint references invalid operand number
: "cc", "memory");
^
tslock.c:20:2: error: matching constraint references invalid operand number
__asm__ __volatile__ (
^

void atomicIncrement(int number){
int one = 1;
__asm__ __volatile__ (
"lock xaddl %1, %0;"
:: "0"(number), "m"(one)
: "cc", "memory");

printf("new value = %d\n", number);

}

最佳答案

如果使用数字作为约束(操作数旁边的字符串),则意味着“将此操作数放在与具有该数字的操作数相同的位置”。

因此,"0"(number) 表示 number 与操作数 0 位于同一位置。但在本例中,number <是操作数 0,因此实际上并没有告诉编译器将其放在哪里。

您需要对数字使用不同的约束 - 例如,如果它应该在寄存器中,则为“r”;如果它应该在内存中,则为“m”。

关于c - 内联汇编的原子增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com