2015-04-28 54 views
2

我正在嘗試優化Armv8架構的Arm處理器(Corte-A53)以達到加密目的。gcc; Aarch64; Armv8;啓用加密; -mcpu = cortex-a53 + crypto

問題是,然而編譯器接受-mcpu=cortex-a53+crypto等它不會改變輸出(我檢查了組件輸出)。

更改mfpu,mcpu添加像crypto或simd期貨,沒關係,它完全被忽略。

要啓用霓虹燈代碼--ftree - 矢量化是必要的,如何使用加密?

(我檢查了-O(1,2,3)標誌,它不會幫助)。

編輯:我意識到我犯了一個錯誤,認爲加密標誌像編譯器解決的優化標誌一樣工作。我的錯。

+0

你爲什麼期望編譯器發出加密指令?編譯器標誌可能僅用於檢查可選行爲。 – auselen

+1

你正在編譯的代碼是什麼?除非你真的在建造例如一個包含一些使用加密指令的程序集的加密庫,只是簡單地使用它們而不是自己做很多事情。我不相信GCC足夠聰明地說:「嘿,這個隨機的C代碼 - 看起來像一個SHA-1實現,讓我們優化它吧!」全部由它自己... – Notlikethat

+0

該代碼使用c實現的AES指令,我期望(希望)編譯器會對它做任何事情,如優化標誌。我還沒有找到有用的文檔(或實現)。你認爲國旗只是一張支票?所以所有的代碼都應該寫成內聯彙編? – koldewb

回答

2

你有兩個問題...

爲什麼-mcpu=cortex-a53+crypto不改變代碼的輸出?

加密擴展是ARMv8-A的AArch64狀態下的可選功能。功能標誌+crypto向編譯器指示這些指令可用。從實踐的角度,在GCC 4.8/4.9/5.1,這定義了宏__ARM_FEATURE_CRYPTO,並控制你是否可以使用在ACLE定義的密碼內在函數,例如:

uint8x16_t vaeseq_u8 (uint8x16_t data, uint8x16_t key)

沒有優化在當前的GCC中,它將自動轉換一系列C代碼以使用加密指令。如果你想進行這種轉換,你必須手工完成(並通過適當的特性宏來保護它)。

爲什麼+fpu+simd標誌不改變代碼輸出?

對於-mcpu=cortex-a53+fp+simd標誌由默認隱含(對於GCC +crypto的一些配置中,也可以通過默認暗示)。因此添加這些功能標誌不會改變代碼生成。