gpt4 book ai didi

c++ - 内联 asm 中 cmpxchg 的段错误

转载 作者:行者123 更新时间:2023-11-28 06:56:15 27 4
gpt4 key购买 nike

我正在使用内联汇编编写 my_simple_mutex。下面被注释掉的代码部分工作正常,但是,带有 cmpxchg 的版本以段错误终止。我在 cygwin 中使用 g++ 4.8.2。

void simple_mutex::spin_lock(){
/*asm ("spin_lock:\n\t"
"rep; nop;\n\t"
"lock; bts $0x00, %0;\n\t"
"jc spin_lock;\n\t"
:"=m"(lock)
:"m"(lock)
:
);
*/

asm ("spin_lock:\n\t"
"rep; nop;\n\t"
"movl $0x00, %%eax\n\t"
"movl $0x01, %%edx\n\t"
"lock; cmpxchg %%edx, %0\n\t"
"jnz spin_lock;\n\t"
:"=m"(lock)
:"m"(lock)
:
);

}

变量lock 的类型是int。知道我做错了什么吗?

最佳答案

可能错误在别处,因为您忘记告诉编译器您修改了 eaxedx。解决方法是将它们列为 clobbers(第 3 个冒号之后的部分)。除非您被迫使用内联汇编,否则请改用原子内置函数。

关于c++ - 内联 asm 中 cmpxchg 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136847/

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