【发布时间】:2012-11-09 02:44:06
【问题描述】:
我得到了以下 2 个定义,使用 XCode LLVM-GCC 编译器编译(和工作)就好了:
#define SAVE_STACK(v)__asm { mov v, ESP }
#define RESTORE_STACK __asm {sub ESP, s }
但是,当我将编译器更改为 Apple LLVM 时,出现以下错误:
Expected '(' after 'asm'
我将 {} 替换为 () 但这不起作用,我在谷歌上搜索该错误找不到任何有用的东西......有人吗?
【问题讨论】:
-
您需要使用
__asm__("asm code goes here"),并且需要使用AT&T assembly syntax 而不是Intel 语法(以及GCC 的extended asm syntax 用于访问命名变量)。 -
@ildjarn 或者只使用标准的 asm 关键字。此外,我认为 clang 确实有一些支持英特尔风格的内联汇编,但我找不到我认为的内容。后端确实支持生成 intel 样式的汇编文件 (
-mllvm -x86-asm-syntax=intel),如果您只是让 clang 生成汇编文件 (-S),它会很乐意将您想要的 asm 语句中的任何文本插入到汇编结果中。 -
@bames53 :
asm仅支持 gnu* 模式;所有模式都支持__asm__。 -
@ildjarn 啊,这只是在 C 中的情况。
asm是 ISO C++ 的一部分,clang 在任何 C++ 模式下都支持它,包括 GNU 寄存器扩展。 -
@bames53 :啊,这就是我浏览文档时得到的。谢谢,很高兴知道。 :-]
标签: c++ c llvm xcode4.5 llvm-gcc