第四篇 GD32VF103C START RISC-V和Corex-M3指令测试
[复制链接]
第四篇 GD32VF103C START RISC-V和Corex-M3指令测试
加减乘除运算应该是每个人编程都会用得到,本篇就想看看RSIC-V和M3的加减乘除取余等等运算有什么区别。
乘法运算:
M3
RSIC-V
简单的例子反汇编:
RSIC-V反汇编
除法运算:
长期以来, ARM-32 只有乘法而无除法指令。直到第一台 ARM 处理器诞生的大约 20 年后(2005 年),除法指令才成为 ARM 的必要组成部分
Cortex-M3包含两个硬件除法指令, SDIV 和 UDIV(Thumb-2 指令)
RSIC-V带除法指令,
M3 整型除法汇编
RSIC-V 浮点数除法汇编运算
取余运算:
RV32M 具有有符号和无符号整数的除法指令: divide(div)和 divide unsigned(divu),它们将商放入目标寄存器。在少数情况下,程序员需要余数而不是商,因此 RV32M 提供
remainder(rem)和 remainder unsigned(remu),它们在目标寄存器写入余数,而不是商。
而M3是没有取余的,需要通过乘法和加减一起来实现。
试验跑起来
由于我逻辑分析仪是20M采样率,我把RSIC-V和M3的主频都设置在了24MHZ,否则测的不会很准,毕竟乘除法可能只是几个指令周期的活。
(1)num=i*j+i*k 乘法 I j 整型数据
(2)num=i*j 乘法 I j float型数据
(3)num = i/j +i/k除法 I j是整型数据
M3是硬件除法器,在整型除法里耗时比RISC-V要短。
(4)num = i/j+I/K 除法 I j是float型数据
在浮点数除法运算力,RISC-V的表现是快了一半
(5)i%j+i%k整数取余
虽然RISC-V的取余是直接得到,和M3不一样,但是耗时却更加长了,不知道改的意义在哪里???
总体来说,RISC-V和Cortex-M3在同等频率、同等运算下进行测试,很多运算指令执行速度要相对快一些。
|