对于没有硬件乘法器的处理器来说是最有效的小单词乘数



我希望使用CH32V003 (RV32EC处理器)来做ColorChord,它广泛使用乘法加来执行dft。但它可以在非常低的位深度下运行,16位甚至8位乘法。但是,CH32V003中的RV32EC不支持RV32乘法扩展。

我已经尝试在godbolt中探索选项,请参阅https://godbolt.org/z/zqTEaeecr以查看编译器在这些情况下会做什么,但它似乎只调用__mulsi3,它执行幼稚的32位乘法。https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/epiphany/mulsi3.c

我希望的是有一些超高效的方法来做一些事情,比如在不同的情况下组合乘法和移位。

对于没有硬件乘法的体系结构,是否有很好的指导或讨论围绕执行非常有效的位宽度和符号的特殊组合的乘法?

你有16kB的闪存可用。为什么不使用1kB来存储一个"squares/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]);
}

最新更新