以下显示了含 int16 X
缓冲器和 int16 Z
缓冲器的 MAC 示例。请注意 X
缓冲器的置换粒度为 32 位。start
和 step
参数始终围绕数据类型粒度来使用。要获取 16 位索引,需将其乘以 2。
xoffsets
参数成对使用。第一个十六进制值是绝对 32 位偏移,取偶数行中的 2 x 16 位值(索引和索引+1)。第二个十六进制值是距离第一个十六进制值的偏移 + 1(32 位偏移),取奇数行中的 2 x 16 位值。因此,xoffsets
中的十六进制值 0x24
会为偶数行选择索引 8 和 9,为奇数行选择索引 14 和 15,这些索引来自 xbuff
:
even: 2 * 4 -> get indices [8, 9]
odd: 2 * ( 2 + 4 + 1 ) -> get indices [14, 15]
同样,xoffsets
中的十六进制值 0x00
会为偶数行选择索引 0 和 1,为奇数行选择索引 2 和 3,这些索引来自 xbuff
。
另有一个 xsquare
参数在完成主要置换后执行 16 位粒度旋转。它将以 2x2 矩阵形式为索引提供额外贡献,这会在 int16 x int16 模式下由 MUL8 给定的 8x4 矩阵计算中重复出现。
例如,xsquare
值 0x2103
(从低位十六进制值到高位十六进制值)将索引 3 和 0 置于偶数行中,将索引 1 和 2 置于奇数行中。在下图中心可以看到 xsquare
参数的工作方式。
图 1. int16 x int16 类型上的 MAC8
下图显示了 int16 和 int16 的 mac16
内部函数示例。
图 2. int16 x int16 类型上的 MAC16