2017-10-21 179 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源代码来查看它们是否被使用,那么何时以及为什么) 。 –