
SIMD Computing 103
void Transpose ( m128 const∗ mat , m128∗ trn )
{
// ro ws : ( m00 , m01 , m10 , m11 ) , c o l s : ( m00 , m10 , m01 , m11)
m128 s0 = mm shuffle ps(mat[0] , mat[1] , MM SHUFFLE ( 1 , 0 , 1 , 0 ) ) ;
// ro ws : ( m20 , m21 , m30 , m31 ) , c o l s : ( m02 , m12 , m03 , m13)
m128 s1 = mm shuffle ps(mat[2] , mat[3] , MM SHUFFLE ( 1 , 0 , 1 , 0 ) ) ;
// ro ws : ( m02 , m03 , m12 , m13 ) , c o l s : ( m20 , m30 , m21 , m31)
m128 s2 = mm shuffle ps(mat[0] , mat[1] , MM SHUFFLE ( 3 , 2 , 3 , 2 ) ) ;
// ro ws : ( m22 , m23 , m32 , m33 ) , c o l s : ( m22 , m32 , m23 , m33)
m128 s3 = mm shuffle ps(mat[2] , mat[3] , MM SHUFFLE ( 3 , 2 , 3 , 2