daily update on 20241226 by nitload youmu
This commit is contained in:
+21
-37
@@ -2,51 +2,38 @@
|
||||
#include "ssc_intrinsic.h"
|
||||
#include <stdio.h>
|
||||
|
||||
INTERNAL void _cdecl transpose32(__3_columnset *source,
|
||||
__2_columnset *target)
|
||||
INTERNAL void _cdecl transpose32(__3_columnset *source, __2_columnset *target)
|
||||
{
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]),
|
||||
ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec,
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0));
|
||||
|
||||
target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0));
|
||||
target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1));
|
||||
}
|
||||
|
||||
INTERNAL void _cdecl transpose33(__3_columnset *source,
|
||||
__3_columnset *target)
|
||||
INTERNAL void _cdecl transpose33(__3_columnset *source, __3_columnset *target)
|
||||
{
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]),
|
||||
ALIGN(source->column[1]),
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]),
|
||||
ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(3, 2, 3, 2));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec,
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec,
|
||||
__m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(3, 2, 3, 2));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, _MM_SHUFFLE(3, 2, 3, 2));
|
||||
|
||||
target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0));
|
||||
target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1));
|
||||
target->column[2] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(2, 0, 2, 0));
|
||||
}
|
||||
|
||||
INTERNAL void _cdecl transpose34(__3_columnset *source,
|
||||
__4_columnset *target)
|
||||
INTERNAL void _cdecl transpose34(__3_columnset *source, __4_columnset *target)
|
||||
{
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]),
|
||||
ALIGN(source->column[1]),
|
||||
__m128 t0 = _mm_shuffle_ps(ALIGN(source->column[0]), ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]),
|
||||
ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(3, 2, 3, 2));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec,
|
||||
_MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec,
|
||||
__m128 t1 = _mm_shuffle_ps(ALIGN(source->column[0]), ALIGN(source->column[1]),
|
||||
_MM_SHUFFLE(3, 2, 3, 2));
|
||||
__m128 t2 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, _MM_SHUFFLE(1, 0, 1, 0));
|
||||
__m128 t3 = _mm_shuffle_ps(ALIGN(source->column[2]), zeroVec, _MM_SHUFFLE(3, 2, 3, 2));
|
||||
|
||||
target->column[0] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(2, 0, 2, 0));
|
||||
target->column[1] = _mm_shuffle_ps(t0, t2, _MM_SHUFFLE(3, 1, 3, 1));
|
||||
@@ -54,9 +41,7 @@ INTERNAL void _cdecl transpose34(__3_columnset *source,
|
||||
target->column[3] = _mm_shuffle_ps(t1, t3, _MM_SHUFFLE(3, 1, 3, 1));
|
||||
}
|
||||
|
||||
INTERNAL float _cdecl det_mat3_internal(__m128 const c0,
|
||||
__m128 const c1,
|
||||
__m128 const c2)
|
||||
INTERNAL float _cdecl 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));
|
||||
@@ -83,16 +68,14 @@ INTERNAL float _cdecl det_mat3_internal(__m128 const c0,
|
||||
return ret.m128_f32[2];
|
||||
}
|
||||
|
||||
INTERNAL float _cdecl det_mat3(__3_columnset *source,
|
||||
__3_columnset *transpose)
|
||||
INTERNAL float _cdecl det_mat3(__3_columnset *source, __3_columnset *transpose)
|
||||
{
|
||||
return det_mat3_internal(source->column[0], source->column[1],
|
||||
source->column[2]);
|
||||
return det_mat3_internal(source->column[0], source->column[1], source->column[2]);
|
||||
}
|
||||
|
||||
#pragma region add
|
||||
|
||||
INTERNAL void __cdecl addmatrix3_sse(__3_columnset* left, __3_columnset* right, __3_columnset* ans)
|
||||
INTERNAL void __cdecl addmatrix3_sse(__3_columnset *left, __3_columnset *right, __3_columnset *ans)
|
||||
{
|
||||
__m128 temp0 = _mm_add_ps(ALIGN(left->column[0]), ALIGN(right->column[0]));
|
||||
__m128 temp1 = _mm_add_ps(ALIGN(left->column[1]), ALIGN(right->column[1]));
|
||||
@@ -103,7 +86,7 @@ INTERNAL void __cdecl addmatrix3_sse(__3_columnset* left, __3_columnset* right,
|
||||
_mm_storeu_ps(&ans->m[0][2], temp2);
|
||||
}
|
||||
|
||||
INTERNAL void __cdecl addmatrix3_sse(__3_columnset* left, __3_columnset* right, __3_columnset* ans)
|
||||
INTERNAL void __cdecl addmatrix3_avx(__3_columnset *left, __3_columnset *right, __3_columnset *ans)
|
||||
{
|
||||
__m256 temp0 = _mm256_add_ps(ALIGN256(left->part), ALIGN256(right->part));
|
||||
__m128 temp1 = _mm_add_ps(ALIGN(left->column[2]), ALIGN(right->column[2]));
|
||||
@@ -112,9 +95,10 @@ INTERNAL void __cdecl addmatrix3_sse(__3_columnset* left, __3_columnset* right,
|
||||
_mm_storeu_ps(&ans->m[0][2], temp1);
|
||||
}
|
||||
|
||||
INTERNAL void __cdecl addmatrix3_sse(__3_columnset* left, __3_columnset* right, __3_columnset* ans)
|
||||
INTERNAL void __cdecl addmatrix3_512(__3_columnset *left, __3_columnset *right, __3_columnset *ans)
|
||||
{
|
||||
__m512
|
||||
__m512 temp = _mm512_add_ps(_mm512_loadu_ps(left), _mm512_loadu_ps(right));
|
||||
_mm512_mask_store_ps(ans, 0x0fff, temp);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
Reference in New Issue
Block a user