2010-09-06 110 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