“asm”错误中的不可能约束和没有“*”警告的间接调用

时间:2016-01-16 15:38:34

标签: c gcc assembly

Seoul Virtual Machine Monitor project中,我遇到了这个内联汇编代码

asm volatile ("call %P0; 1:" : : "i"(foo))

使用-O2进行优化时编译并运行良好;但无法使用-O0优化进行编译,产生此错误:

  

错误:'asm'中不可能的约束

foo是32位int,作为调用指令的立即值。

当我用Google搜索时,this建议我用“ic”代替“i”约束,我做了;现在代码编译但是:

  

警告:没有«*»

的间接通话

如何避免此警告?

注意:

  • gcc版本是4.9.2
  • asm%P修饰符是为了防止GCC在int值前面附加$。那就是生成“call foo”而不是“call $ foo”。

0 个答案:

没有答案