#include "StgSharpGraphic.h" #include float det_mat3_internal(__m128 const c0, __m128 const c1, __m128 const c2) { //let adding row aligned __m128 addc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 0, 2, 1)); __m128 addc2 = _mm_shuffle_ps(c2, c1, _MM_SHUFFLE(3, 1, 0, 2)); printf("%f\t%f\t%f\n", addc1.m128_f32[0], addc1.m128_f32[1], addc1.m128_f32[2]); printf("%f\t%f\t%f\n\n", addc2.m128_f32[0], addc2.m128_f32[1], addc2.m128_f32[2]); //let sub row aligned __m128 subc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 1, 0, 2)); __m128 subc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 0, 2, 1)); //multple all add row __m128 cache = _mm_mul_ps(c0,addc1); cache = _mm_mul_ps(cache,addc2); printf("%f\t%f\t%f\n\n", cache.m128_f32[0], cache.m128_f32[1], cache.m128_f32[2]); //multiple all sub row __m128 sub = _mm_mul_ps(c0, subc1); sub = _mm_mul_ps(sub, subc1); printf("%f\t%f\t%f\n\n", sub.m128_f32[0], sub.m128_f32[1], sub.m128_f32[2]); //main-corner sub sub-corner cache = _mm_sub_ps(cache,sub); __m128 ret = _mm_hadd_ps(cache,cache); //element 1 add element 2 ret = _mm_add_ps(ret, cache); //(e1 add e2) add element 3 int a = *(int*)0; //for debug, all an excepotion return ret.m128_f32[3] + a; }