2017-10-21 110 views
1

我正在使用ARM966E-S RISC-CPU,並且想知道如何使用明顯可用的指令集擴展來獲得更好的DSP性能。 G。一個增強的乘數指令。如何使用ARMv5TE指令集的增強型乘法指令

我在技術參考手冊中看過這些指令集擴展可用,但我不知道如何使用/激活它們。

任何人都可以幫忙嗎?

在此先感謝!

+0

如果你編譯'資源的int64_t =(的int64_t)我*(的int64_t)會發生什麼j;'並分解結果?它會生成「SMULL」嗎?長乘法應該是正常的。但是對於飽和和並行算術,你將不得不使用內在函數,因爲它們不能很好地映射到「C」。 – NickJH

+0

使用'-march = armv5te'告訴編譯器你有'擴展'DSP指令。 'ARM ARM'(體系結構參考手冊)詳細說明了這些內容,還有'jazelle'和's'變體,'PLD','LDRD'和'MULL'是新增內容,請看[gcc's config/arm目錄](https://gcc.gnu.org/git/?p=gcc.git;f=gcc/config/arm;hb=HEAD),它定義了代碼生成。你可以找到你可能需要的選項GCC版本讓編譯器發射東西 –

+0

看一下[get gcc發出idiv指令](https://stackoverflow.com/questions/15782089/gcc-to-emit-arm-idiv-instructions)。比你想像的要複雜得多,首先可以使用指令,然後比其他指令更有效率,ARM管道和'C'語義可能/不允許使用指令。步驟是指定一個允許操作碼發射的CPU(按照舊的定時器/居民答案)。這樣做可以使用內聯彙編程序,即使'C'不會使用它。舊版gccs具有arm-cores。 d EF。 –

回答

1

爲什麼不試試呢?用gcc閱讀手冊爲您的工具鏈,例如

so.s

ldrd r0,[r2] 
ldr r2,[r2] 

測試

arm-none-eabi-as so.s -o so.o 
arm-none-eabi-as -march=armv5t so.s -o so.o 
so.s: Assembler messages: 
so.s:3: Error: selected processor does not support `ldrd r0,[r2]' in ARM mode 
arm-none-eabi-as -march=armv5te so.s -o so.o 
arm-none-eabi-objdump -D so.o 

so.o:  file format elf32-littlearm 


Disassembly of section .text: 

00000000 <.text>: 
    0: e1c200d0 ldrd r0, [r2] 
    4: e5922000 ldr r2, [r2] 
+0

但是我怎樣才能使用默認的快速指令?我的意思是,我的代碼是用C編寫的。我不想編寫彙編器。編譯器應該總是默認使用這些指令...... – Andi

+0

-march = armv5te也可以在gcc命令行上工作,然後由編譯器決定是否選擇使用它們。 –

+0

如果不是直接使用匯編語言,那麼你必須學會​​調整你的代碼來觸發編譯器生成這些指令,如果它們生成它們(grep通過gcc源代碼來查看它們是否被使用,那麼何時以及爲什麼) 。 –