anchor.diff:  	r.mVec[2] = VecShuffle(t1, inM.mVec[2], 0,2,2,3); // 02, 12, 22, 23(=0)
   
   	// last line
  -	r.mVec[3] =							_mm_mul_ps(r.mVec[0], VecSwizzle1(inM.mVec[3], 0));
  -	r.mVec[3] = _mm_add_ps(r.mVec[3],	_mm_mul_ps(r.mVec[1], VecSwizzle1(inM.mVec[3], 1)));
  -	r.mVec[3] = _mm_add_ps(r.mVec[3],	_mm_mul_ps(r.mVec[2], VecSwizzle1(inM.mVec[3], 2)));
  +	r.mVec[3] =                       _mm_mul_ps(r.mVec[0], VecSwizzle1(inM.mVec[3], 0));
  +	r.mVec[3] = _mm_add_ps(r.mVec[3], _mm_mul_ps(r.mVec[1], VecSwizzle1(inM.mVec[3], 1)));
  +	r.mVec[3] = _mm_add_ps(r.mVec[3], _mm_mul_ps(r.mVec[2], VecSwizzle1(inM.mVec[3], 2)));
   	r.mVec[3] = _mm_sub_ps(_mm_setr_ps(0.f, 0.f, 0.f, 1.f), r.mVec[3]);
   
   	return r;
  
positive.code: 
  [source,cpp]
  ----
  #define MakeShuffleMask(x,y,z,w)			(x | (y<<2) | (z<<4) | (w<<6))
  
  // vec(0, 1, 2, 3) -> (vec[x], vec[y], vec[z], vec[w])
  #define VecSwizzle(vec, x,y,z,w)			_mm_shuffle_ps(vec, vec, MakeShuffleMask(x,y,z,w))
  #define VecSwizzle1(vec, x) 				_mm_shuffle_ps(vec, vec, MakeShuffleMask(x,x,x,x))
  // special swizzle
  #define VecSwizzle_0101(vec)				_mm_movelh_ps(vec, vec)
  #define VecSwizzle_2323(vec)				_mm_movehl_ps(vec, vec)
  #define VecSwizzle_0022(vec)				_mm_moveldup_ps(vec)
  #define VecSwizzle_1133(vec)				_mm_movehdup_ps(vec)
  
  // return (vec1[x], vec1[y], vec2[z], vec2[w])
  #define VecShuffle(vec1, vec2, x,y,z,w)		_mm_shuffle_ps(vec1, vec2, MakeShuffleMask(x,y,z,w))
  // special shuffle
  #define VecShuffle_0101(vec1, vec2)			_mm_movelh_ps(vec1, vec2)
  #define VecShuffle_2323(vec1, vec2)			_mm_movehl_ps(vec2, vec1)
  ----
  
  Here is our first function to inverse transform matrix without scaling (always unit scale).
  
negative.code: 	r.mVec[2] = _mm_mul_ps(r.mVec[2], rSizeSqr);
  
  	// last line
  	r.mVec[3] =                       _mm_mul_ps(r.mVec[0], VecSwizzle1(inM.mVec[3], 0));
  	r.mVec[3] = _mm_add_ps(r.mVec[3], _mm_mul_ps(r.mVec[1], VecSwizzle1(inM.mVec[3], 1)));
  	r.mVec[3] = _mm_add_ps(r.mVec[3], _mm_mul_ps(r.mVec[2], VecSwizzle1(inM.mVec[3], 2)));
  	r.mVec[3] = _mm_sub_ps(_mm_setr_ps(0.f, 0.f, 0.f, 1.f), r.mVec[3]);
  
  	return r;
  