ARM汇编无符号乘法累加(半字)

时间:2015-02-27 09:56:08

标签: assembly arm stm32

我想在我的cortex-M4(stm32f411)上用半字做无符号乘法累加长指令:

例如: 无符号乘以r0 [31:16]与r1 [15:0]并将其加到64位累加器

但是只有签名半字乘法指令SMLAL XY ,其中 X Y 选择HI和LO部分为r0和r1。

我是否真的需要执行昂贵的移位/打包指令来执行此指令的无符号版本?

  • 谢谢,Patrick

1 个答案:

答案 0 :(得分:0)

uint32 s = (a ^ b) & 1<<31;
uint32 r = smul(a,b); 
if(s) r = -r;
是的,另一种方法是测试标志。

如果您有很多MAC样本,那么您可以将它们分为正面和负面,并且有两个组,最后将它们放在一起。

return positive_mac - negative_mac;

你必须用 btst Opps查看每个样本的MSB /符号,68k tst rx,#1<<31很适合(或者你的Cortex -M位绑定,如果STM支持它。)

IOW:使用一些数学和条件。