下图显示了对 int8 X
缓冲器和 int8 Z
缓冲器执行的 MAC 运算。第一张图显示了如何进行数据置换,第二张图显示了如何进行系数置换。请注意,X
缓冲器和 Z
缓冲器的置换粒度分别为 32 位和 16 位。xoffsets
参数成对使用。第一个十六进制值是绝对 32 位偏移,取 4 x 8 位值(索引、索引+1、索引+2 和索引+3)。第二个十六进制值是距离第一个值的偏移 + 1(32 位偏移),取 4 x 8 位值。例如,0x00
选择索引 0、1、2、3 及 4、5、6、7,而 0x24
选择索引 16、17、18、19 及 28、29、30、31。
另有一个 xsquare
参数在完成主要置换后执行 8 位粒度旋转。在下图中心可以看到此示例中的 xsquare
参数的工作方式。
start
参数(xstart
和 zstart
)和 step
参数(xstep
和 zstep
)始终围绕数据类型粒度来使用。因此,对于 16 位,如果值为 2 则表示相距 2 * 16 位,对于 8 位,值为 2 则表示相距 2 * 8 位。step
参数适用于所选数据的下一个块。因此,如果成对 offset
参数选择 2 * 2 块,那么阶跃适用于下一个 2 * 2 块。添加到索引值的阶跃必须与置换粒度对齐(对于数据,采用 32 位;对于系数则采用 16 位)。例如,处理 8 位数据时,xstep
需为 4 的倍数。处理 8 位系数时,zstep
需为 2 的倍数。以下两张图分别显示了适用于数据和系数的 step
的工作方式。
请注意,对于 int8 * int8 类型的系数,会通过复制 2 * 2 索引块来构造一个 4 * 2 块。如需了解索引 0、1、2 和 3 的复制方式,请参阅 图 2。