如何使用ARMv5TE指令集的增强型乘法指令
我正在使用ARM966E-S RISC-CPU,并且想知道如何使用明显可用的指令集扩展来获得更好的DSP性能。 G。一个增强的乘数指令。如何使用ARMv5TE指令集的增强型乘法指令
我在技术参考手册中看过这些指令集扩展可用,但我不知道如何使用/激活它们。
任何人都可以帮忙吗?
在此先感谢!
为什么不试试呢?用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]
但是我怎样才能使用默认的快速指令?我的意思是,我的代码是用C编写的。我不想编写汇编器。编译器应该总是默认使用这些指令...... – Andi
-march = armv5te也可以在gcc命令行上工作,然后由编译器决定是否选择使用它们。 –
如果不是直接使用汇编语言,那么你必须学会调整你的代码来触发编译器生成这些指令,如果它们生成它们(grep通过gcc源代码来查看它们是否被使用,那么何时以及为什么) 。 –
如果你编译'资源的int64_t =(的int64_t)我*(的int64_t)会发生什么j;'并分解结果?它会生成“SMULL”吗?长乘法应该是正常的。但是对于饱和和并行算术,你将不得不使用内在函数,因为它们不能很好地映射到“C”。 – NickJH
使用'-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版本让编译器发射东西 –
看一下[get gcc发出idiv指令](https://stackoverflow.com/questions/15782089/gcc-to-emit-arm-idiv-instructions)。比你想像的要复杂得多,首先可以使用指令,然后比其他指令更有效率,ARM管道和'C'语义可能/不允许使用指令。步骤是指定一个允许操作码发射的CPU(按照旧的定时器/居民答案)。这样做可以使用内联汇编程序,即使'C'不会使用它。旧版gccs具有arm-cores。 d EF。 –