2010-09-06 74 views
0

我正在使用一周前编译的第三方库。
今天我再次坐在办公桌前,我又推了一下,然后我的头被吹了。
我一直在拍这个错误:'asm'中的不可约束条件

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; 
} 

有些神秘的事情发生......这只是我在想,现在的事情是“跆拳道? “
平台英特尔CoreDuo与W32 XP板载。

另外两个问题:

  1. 什么可以摧毁我的体型?
  2. 我想asm语法不正确,那我该如何解决?
  3. 在哪里可以找到 '酷' 的asm参考(我的意思是像一些CPP参考以上纯处理器命令列表数据表/手动)

问候 P.

UPDATE:
哈哈我感觉像转储屁股,上周我安装了草莓Perl ...安装和抛出gcc的路径和我的编译系统采取'默认'编译器....:D
但我已经修复使用:

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

但是'var << shift'确实会被编译为'rol'指令吗? – Skizz 2010-09-06 14:27:27

+0

这是图书馆的代码,不是我的。也许'<< | >>'将被编译为'roll | rorl',但我没有进入asm这么多...但是仍然不知道为什么它不会编译... – bua 2010-09-06 14:32:56

+1

@Skizz不,转动指令只能在纯C中实现,有两个班次和一个or。 C表达式'var << shift'将用'sal'指令编译。 – 2010-09-06 14:59:34

回答

4
  1. 你可能已经自动升级到新的编译器,已更改的语法
  2. This建议采用IC而不是我;我没有测试这个
  3. 不知道你的意思,一个C++的汇编参考对我来说并没有什么意义。 This是一个关于gcc和内联汇编的(旧)HOWTO,它可能是你之后的东西?
+0

ad.3我更喜欢C++参考站点,或者像“外观和感觉”这样的狮身人面像,这只是我一直在寻找的东西。 BTW。你的'老howto'链接与第2点的链接相同。 – bua 2010-09-06 14:57:14