以下显示了含 int16 X
缓冲器和 int16 Z
缓冲器的 MAC 示例。请注意 X
缓冲器的置换粒度为 32 位。start
和 step
参数始终围绕数据类型粒度来使用。因此对于 16 位数据,值为 2 将选中相距 2 * 16 位的值。xoffsets
参数成对使用。在偶数行中,第一个十六进制值是绝对 32 位偏移,取 2 x 16 位值(索引和索引+1)。在奇数行中,第二个十六进制值是距离第一个值的偏移 + 1(32 位偏移),取 2 x 16 位值。因此,xoffsets
中的十六进制值 0x24
会从 xbuff
中为偶数行选择索引 8 和 9,为奇数行选择索引 14 和 15,而 xoffsets
中的十六进制值 0x00
会从 xbuff
中为偶数行选择索引 0 和 1,为奇数行选择索引 2 和 3。
另有一个 xsquare
参数在完成主要置换后执行 16 位粒度旋转。例如,xsquare
值 0x2103
(从低位十六进制值到高位十六进制值)将索引 3 和 0 置于偶数行中,将索引 1 和 2 置于奇数行中。在下图中心可以看到 xsquare
参数的工作方式。
图 1. int16 x int16 类型上的 MAC8
下图显示了 int16 和 int16 的 mac16
内部函数示例。
图 2. int16 x int16 类型上的 MAC16