2015-12-03 52 views
-4

我想通過使用內部函數來優化代碼。有人可以爲此進行指導。由於我的代碼包含MAC(乘法和加法)語句,我想用SMLAxy指令代替。我試過,但得到鏈接錯誤。我用armintr.h頭文件,但得到:手臂上的固有功能實現

error:armintr.h :No such file or directory 

我使用的是英特爾的Ubuntu桌面的主機和我的目標是ARM的Cortex-A8。我使用arm-none-linux-gnueabi-gcc編譯器和-O3 -mcpu=cortex-a8 -Wall選項標誌。

+3

錯誤很明顯。但是你還沒有給出任何有關哪個編譯器,哪個平臺等的信息,以便任何人都可以以任何方式幫助你。 –

+1

我使用arm-none-linux-gnueabi-gcc編譯器和arm-cortex-a8 –

+1

它看起來像'armintr.h'是一個MSVC頭,而不是GCC頭。 –

回答

1

error:armintr.h :No such file or directory

通常,如果在指定路徑中沒有特定的頭文件,就會出現此錯誤。或者你需要給這個頭文件適當的路徑。

在你的情況下,你沒有啓用內在指令,所以你得到錯誤。

要啓用內部指定編譯器option例如--fpu=name

+0

--fpu = name用您的拱門替換名字...並查看ans中給出的鏈接。如果你真的想優化代碼去尋找Neon的內在。 – Mohan

+0

Mohan ....剛纔我才知道gcc不支持內在函數。這是嗎? http://stackoverflow.com/questions/14188262/how-to-enable-intrinsics-in-compiler –

+0

@ChethanShetty這個問題是關於android ......我認爲你需要編輯你的問題與主機操作系統的細節,目標操作系統,在您開發代碼的地方,如果可能的話發佈您的代碼或其中導致問題的一部分。以及您如何決定使用該頭文件?所以人們可以幫助你...... – Mohan

1

我希望GCC在不使用內在函數的情況下爲您生成SMLAL指令。

long long Acc; 
long a; 
long b; 

Acc += ((long long)a*b); 

這是否不會爲您生成說明。

+0

Mr.colin,我正在優化代碼,我想使用匯編指令 –

+0

事實上,GCC通常會生成'SMULL' /'SMLAL'/etc。正好。雖然,我試過的GCC 4.8似乎沒有優化(雖然[顯然是Clang做的](https://www.microsoft.com/downloads/details.aspx? //goo.gl/SrQ60y))。 – Notlikethat

+0

@ Nototkethat我似乎記得gcc在某些情況下發射這些。編譯器通常很難做到這一點,因爲在'C'中的溢出映射和其他情況下的吊墜映射。可能至少''安裝數學'是有幫助/需要的?至少在[arm.md]中(https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm.md;h=5782b357aa2c3e02b1aecf93576cd6561d7d08d8; hb = HEAD#l1780),所以應該在某些情況下發射。 –