指令:嵌入式RISC中的DSP扩展
所有DSP架构都有一个特征,那就是支持整数乘法累加。
其中,乘法倾向于发生在比常规整数更短的数上面,比如16位的数相乘。
而累加则倾向于发生在更长的数字上面,比如64位数累加。
至于为什么DSP会需要乘法累加,则是因为,DSP的典型应用,比如滤波器功能的实现会有很多的乘加。
由于Thumb和MIPS16是ARM和MIPS64的子集,所以不支持这样的扩展。相应的,如果想要使用DSP扩展,应该直接使用ARM和MIPS64指令集中定义的扩展指令。
表21罗列了嵌入式RISC支持的乘加操作的乘法的位数和累加的位数,以及操作的指令名。
支持饱和操作的累加器,会将累加器的高位作为符号位,如果操作溢出,则将其设置为最大或者最小值。
ARM v.4 | Thumb | SuperH | M32R | MIPS16 | |
---|---|---|---|---|---|
相乘大小 | 32B × 32B | — | 32B × 32B, 16B × 16B | 32B × 16B, 16B × 16B | — |
累加大小 | 32B/64B | — | 32B/42B, 48B/64B | 56B | — |
累加器名 | 任意通用寄存器或者通用寄存器对 | — | MACH, MACL | ACC | — |
操作 | 32B/64B的结果和64B累加,包括有符号和无符号 | — | 32B的结果和43B/32B累加(内存中操作);64B的结果和64B/48B累加(内存中操作);清除MAC | 32B/48B的结果和64B累加,舍入,赋值 | — |
对应的指令名 | MLA,SMLAL,UMLAL | — | MAC, MACS, MAC.L,MAC.LS, CLRMAC | MACHI/MACLO,MACWHI/MACWLO,RAC, RACH,MVFACHI/MVFACLO,MVTACHI/MVTACLO | — |
表21 嵌入式RISC乘加汇总.