c - 'asm' 中不可能的约束

标签 c assembly

我正在使用一周前编译的第三方库。
今天我又坐在办公 table 前,我又推了build,然后我的头就炸了。
我遇到了这个错误:

impossible constraint in 'asm'

代码是:

static inline unsigned ROLc(unsigned word, const int i)
{
   asm ("roll %2,%0"
      :"=r" (word)
      :"0" (word),"I" (i));
   return word;
}

一些神秘的事情发生了......我现在唯一想的是'WTF?'
板载 W32 XP 的 Intel CoreDuo 平台。

另外两个问题:

  1. 什么会破坏我的构建?
  2. 我想 asm 语法不正确,那么我该如何解决呢?
  3. 我在哪里可以找到“很酷”的 asm 引用(我的意思是一些 cpp 引用,比如纯处理器命令列表数据表/手册)

问候

更新:
哈哈,我觉得自己很笨,上周我安装了 strawberry perl...它在路径上安装并抛出 gcc,我的构建系统采用“默认”编译器....:D
但是我已经解决了这个问题:

return (word << i) | (word >> (32 - i));

最佳答案

  1. 你可能已经自动升级到一个新的编译器,它改变了语法
  2. This建议使用 I 而不是 I;我没有测试这个
  3. 不确定你的意思,汇编的 C++ 引用对我来说意义不大。 This是关于 gcc 和内联汇编的(旧)HOWTO,它可能是您想要的?

关于c - 'asm' 中不可能的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3652153/

相关文章:

windows - nasm win32 编程 "undefined reference to..."

assembly - 如何在 ARM7 汇编程序中有效地右移 64 位值?

c - 不相交动态内存释放分配内存问题

c - 解释 fread() 中的数据

assembly - 我的 MIPS 程序是否正确?

assembly - 构建带有递归函数的.so

c - 在应用加载和运行程序中

c - 不重复地随机选择 N 个不同的数字

c - 无法读取 C 中的 EOF 字符

找不到错误,简单但卡住了