繁体   English   中英

没有硬件乘法器的处理器最有效的小字长乘法

[英]Most efficient small-word-size multiply for processors without a hardware multiplier

我希望使用 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 的 flash 可用。 为什么不使用 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]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM