assembly 最高效的小字长乘法,适用于无硬件乘法器的处理器

yebdmbv4  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(128)

我希望使用CH32V003(一个RV32EC处理器)来做ColorChord,它广泛使用乘加来执行DFT。但是它可以在非常低的位深度下操作,16位甚至8位乘法。但是,CH32V003中的RV32EC不支持RV32乘法扩展。
我尝试过在godbolt中探索选项,请参见https://godbolt.org/z/zqTEaeecr,看看编译器在这些情况下会做什么,但它似乎只调用__mulsi3,它执行一个简单的32位乘法。
我所希望的是,有一些超高效的路线,做一些像结合乘法和移位不同的情况。
对于没有硬件乘法的架构,是否有很好的指南或讨论来执行位宽度和符号的特殊组合的极高效乘法?

uqcuzwp8

uqcuzwp81#

你有16 kB的闪存,为什么不用1 kB来存储一个“正方形/4”的表格,比如...

const uint16_t  Sqr_4[511]={0/4,1/4, 4/4, 9/4, 16/4, 25/4, ..., 260100/4};

uint16_t umul8b( uint8_t x, uint8_t y){

   return Sqr_4[(uint16_t)x+y]-((x>y)?Sqr_4[x-y]:Sqr_4[y-x]);
}

相关问题