代码之家  ›  专栏  ›  技术社区  ›  bua

“asm”中的不可能约束

  •  0
  • bua  · 技术社区  · 15 年前

    我正在使用一周前编译的第三方库。
    今天我又坐在桌子旁,又推了一次楼,然后我的头就爆了。
    我因这个错误而中弹:

    “asm”中的不可能约束

    代码是:

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

    有些神秘的事情发生了…我现在唯一想的是 “WTF?”
    平台Intel Coreduo,带W32 XP。

    另外两个问题:

    1. 什么能摧毁我的建筑?
    2. 我认为asm语法是不正确的,那么如何修复它呢?
    3. 在哪里可以找到“cool”asm引用(我的意思是一些cpp引用,比如pure processor commands list datasheet/manual)

    当做 P.

    更新:
    哈哈,我觉得自己像个垃圾桶,上周我安装了草莓Perl,它在路径上安装并抛出gcc,我的构建系统采用“默认”编译器….:d
    不过,我已经用以下方法解决了这个问题:

    return (word << i) | (word >> (32 - i));
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   unwind    15 年前
    1. 您可能已经自动升级到一个新的编译器,它改变了语法
    2. This 建议使用IC而不是I;我没有测试这个
    3. 不确定你的意思,汇编的C++引用对我来说没什么意义。 这个 在GCC和内联组件上有一个(旧的)howto,这可能是您想要的?
    推荐文章