Pha*_*ate 2 linux assembly gcc x86-64
我必须在64位架构上编译库,无论如何我得到了这个错误.受错误影响的代码行是汇编程序,这是一个例子(它们都非常相似):
//=== get the index to write ===///
__asm__ __volatile__ ("lock; xaddl %0,%1"
: "=r" (indexToWrite), "=m" ( indexTable[entityId] )
: "0" (1), "m" ( indexTable[entityId] ));
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
我在linux 64bit(ubuntu)下,我正在使用gcc.
使用k操作数修饰符选择32位子寄存器:xaddl %k0,%1.
语法:xaddl %k0,%k1也是无害的,因为%1无论如何都是mem addr.8,16,32,和64位操作数改进剂是b,w,k,q分别.
"m"输入列表中的第二个似乎对我很怀疑.我可能错了,但我认为它应该是:
"1" (indexTable[entityId])
随着xadd我不认为它很重要,但是这在技术上是争论%3否则.就个人而言,我会选择:
: "=r" (indexToWrite), "+m" (indexTable[entityId]) : "0" (1)
Run Code Online (Sandbox Code Playgroud)
是的,"+m"完全合法.它已经很长一段时间了,最近才被纠正为gcc 文档中的一个错误!
| 归档时间: |
|
| 查看次数: |
2778 次 |
| 最近记录: |