我一直在将Linux应用程序移植到Windows平台。
这是linux代码,
__asm__ __volatile__ ("lock; cmpxchgl %1, %2"
: "=a" (prev)
: "q" (new_value), "m" (*ptr), "0" (old_value)
: "memory");
我尝试使用_asm volatile,但是我在Visual Studio 2012中收到错误提示“操作码中的内联汇编语法错误”;找到“数据类型”。
我需要一些Windows等效代码。 任何信息/建议请。
答案 0 :(得分:1)
一般来说,我更喜欢外部装配模块来内联装配 - 它更便携(是的,便携式和装配在同一个句子中使用)。像nasm和yasm这样的汇编程序可用于多个平台,并且可以生成多种目标文件格式。
外部汇编模块不适合像您的代码那样对性能至关重要的单行代码 - 考虑使用编译器内在函数而不是内联汇编。您可能需要查看Portable Compare And Swap。
答案 1 :(得分:0)
我认为这里的主要问题是Visual Studio使用英特尔风格的内联汇编语言,你没有使用它。
检查一下: http://msdn.microsoft.com/en-us/library/4ks26t93%28v=vs.80%29.aspx
关于volatile说明符和重新排序,即使使用o2优化,我还没有看到VS 2010或2012重新排序__asm块。
问候, 安迪