_asm
{
movq mm0,[esi]
movq mm1,[esi+2*ebx]
movq mm4,[mm0]
punpacklwd mm0,mm1
movq mm2,[esi+4*ebx]
punpackhwd mm4,mm1
movq mm3,[esi+6*ebx]
movq mm5,mm2
punpacklwd mm2,mm3
movq mm6,mm0
punpackhwd mm5,mm3
movq mm7,mm4
punpackldq mm0,mm2
movq [edi+2*eax],mm6
punpackldq mm4,mm5
movq [edi+4*eax],mm4
punpackhdq mm7,mm5
movq [edi+6*eax],mm7
emms
}
{
movq mm0,[esi]
movq mm1,[esi+2*ebx]
movq mm4,[mm0]
punpacklwd mm0,mm1
movq mm2,[esi+4*ebx]
punpackhwd mm4,mm1
movq mm3,[esi+6*ebx]
movq mm5,mm2
punpacklwd mm2,mm3
movq mm6,mm0
punpackhwd mm5,mm3
movq mm7,mm4
punpackldq mm0,mm2
movq [edi+2*eax],mm6
punpackldq mm4,mm5
movq [edi+4*eax],mm4
punpackhdq mm7,mm5
movq [edi+6*eax],mm7
emms
}
算法说明:
这种算法适用于行列均为4的倍数的矩阵转换,对于其他大小的矩阵要做额外的处理工作。例如,可以将行列数填充0的方式扩展4的倍数,然后安照上述算法进行转置,上面的算法是针对16bit数据的。