2015-05-27 87 views
2

我試圖編譯一個項目(從GitHub:link)與幾個彙編文件,這是爲ARMv8 AArch64架構編寫的。當我嘗試編譯這些文件,我得到的幾乎每一個行上同樣的錯誤,它的開頭爲:裝配未知助記符AArch64 ARMv8

authenc_ac_gcm_low.S:彙編消息:

authenc_ac_gcm_low.S:80: Error: unknown mnemonic `ld1.16b' -- `ld1.16b {v0},[x1]' 
authenc_ac_gcm_low.S:81: Error: unknown mnemonic `rbit.16b' -- `rbit.16b v0,v0' 
authenc_ac_gcm_low.S:82: Error: unknown mnemonic `st1.16b' -- `st1.16b {v0},[x0]' 
authenc_ac_gcm_low.S:90: Error: unknown mnemonic `ld1.16b' -- `ld1.16b {v24},[x0]' 
authenc_ac_gcm_low.S:92: Error: unknown mnemonic `ld1.16b' -- `ld1.16b {v0,v1,v2,v3},[x1],#64' 
authenc_ac_gcm_low.S:93: Error: unknown mnemonic `ld1.16b' -- `ld1.16b {v4,v5,v6,v7},[x1]' 

代碼的小部分: (直到87線78)

ac_gcm_convert_low: 
_ac_gcm_convert_low: 
    ld1.16b {v0}, [x1] 
    rbit.16b v0, v0 
    st1.16b {v0}, [x0] 
    ret 

ac_gcm_ghash_low: 
_ac_gcm_ghash_low: 
    cbz x3, exit //this might be the only line it doesn't error 

我使用AArch64的Linaro的交叉編譯器,編譯我利用-mcpu =皮質-A53 +加密標誌;不這樣做導致「沒有這樣的指令」錯誤。 我對Assembly的經驗很少,顯然我在這裏犯了一些錯誤,但是我找不到它。如何擺脫錯誤?

+0

我見過不同的彙編器有氖指令略有不同的助記符。如果「ld1.16b {v0},[x1]」不起作用,請嘗試「ld1 {v0.16b},[x1]」 – BitBank

回答

2

看起來就像那是一種令人毛骨悚然的蘋果語法 - GCC使用的邊長更細的architectural syntax,其中的大小說明符在每個寄存器參數上,而不是在指令本身上。

ld1 {v0.16b}, [x1] 
rbit v0.16b, v0.16b 
st1 {v0.16b}, [x0] 

我不相信AArch64的binutils有任何的方式來支持蘋果的語法,所以我認爲可用的解決方案僅限於「向上手動修改代碼」或「嘗試鏘/ LLVM代替」。

+0

是的,就是這樣,永遠不會注意到這一點。謝謝! – koldewb