我正在使用一周前编译的第三方库。
今天我又坐在桌子旁,又推了一次楼,然后我的头就爆了。
我因这个错误而中弹:
“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。
另外两个问题:
-
什么能摧毁我的建筑?
-
我认为asm语法是不正确的,那么如何修复它呢?
-
在哪里可以找到“cool”asm引用(我的意思是一些cpp引用,比如pure processor commands list datasheet/manual)
当做
P.
更新:
哈哈,我觉得自己像个垃圾桶,上周我安装了草莓Perl,它在路径上安装并抛出gcc,我的构建系统采用“默认”编译器….:d
不过,我已经用以下方法解决了这个问题:
return (word << i) | (word >> (32 - i));