mat proc kernel std tamplate is ok, merging old decl
This commit is contained in:
@@ -3,14 +3,17 @@
|
||||
#if SN_IS_ARCH(SN_ARCH_X86_64)
|
||||
|
||||
#include "sn_intrinsic.h"
|
||||
#include "sn_intrincontext.x86.h"
|
||||
#include "sn_intrinsic.context.x86.h"
|
||||
#include "sn_intrinsic.std.h"
|
||||
|
||||
#define _FMA_SELECT(i) _MM_SHUFFLE(i, i, i, i)
|
||||
|
||||
// float
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, sse, , fma)
|
||||
SN_MK_PROC_DECL_STD(float, sse, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
const __m128 a0 = _mm_load_ps((float *)&left->f32_x[0]);
|
||||
const __m128 a1 = _mm_load_ps((float *)&left->f32_x[1]);
|
||||
const __m128 a2 = _mm_load_ps((float *)&left->f32_x[2]);
|
||||
@@ -57,8 +60,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, sse, , fma)
|
||||
_mm_store_ps((float *)&ans->f32_x[3], c3);
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, avx, , fma)
|
||||
SN_MK_PROC_DECL_STD(float, avx, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
static const __m256i b01_shift = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } };
|
||||
static const __m256i b23_shift = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } };
|
||||
|
||||
@@ -103,8 +108,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, avx, , fma)
|
||||
ans->f32_y[1] = c23;
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, avx, _fma, fma)
|
||||
SN_MK_PROC_DECL_STD(float, avx, _fma, fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
static const __m256i b01_shift = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } };
|
||||
static const __m256i b23_shift = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } };
|
||||
|
||||
@@ -149,8 +156,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, avx, _fma, fma)
|
||||
ans->f32_y[1] = c23;
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, 512, , fma)
|
||||
SN_MK_PROC_DECL_STD(float, 512, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
static const __m512i b_shift = { .m512i_i32 = {
|
||||
// shuff order
|
||||
0, 1, 2, 3, // col0
|
||||
@@ -185,8 +194,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(float, 512, , fma)
|
||||
|
||||
// double
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, sse, , fma)
|
||||
SN_MK_PROC_DECL_STD(double, sse, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
for (int col = 0; col < 4; ++col) {
|
||||
/* current answer column (two chunks: rows 0-1 and 2-3) */
|
||||
register __m128d c_lo = _mm_load_pd(ans->f64_x + (col * 2 + 0));
|
||||
@@ -229,8 +240,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, sse, , fma)
|
||||
}
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, , fma)
|
||||
SN_MK_PROC_DECL_STD(double, avx, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
const __m256d a0 = _mm256_load_pd((double *)&left->f64_y[0]);
|
||||
const __m256d a1 = _mm256_load_pd((double *)&left->f64_y[1]);
|
||||
const __m256d a2 = _mm256_load_pd((double *)&left->f64_y[2]);
|
||||
@@ -273,8 +286,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, , fma)
|
||||
_mm256_store_pd((double *)&ans->f64_y[3], ccol);
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, _fma, fma)
|
||||
SN_MK_PROC_DECL_STD(double, avx, _fma, fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
const __m256d a0 = _mm256_load_pd((double *)&left->f64_y[0]);
|
||||
const __m256d a1 = _mm256_load_pd((double *)&left->f64_y[1]);
|
||||
const __m256d a2 = _mm256_load_pd((double *)&left->f64_y[2]);
|
||||
@@ -317,8 +332,10 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, _fma, fma)
|
||||
_mm256_store_pd((double *)&ans->f64_y[3], ccol);
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, 512, , fma)
|
||||
SN_MK_PROC_DECL_STD(double, 512, , fma)
|
||||
{
|
||||
__mk_param_std(KERNEL, LEFT_RIGHT_ANS, float);
|
||||
|
||||
static const __m512i b01_shift = { .m512i_i64 = { 0, 1, 2, 3, 5, 6, 7, 4 } };
|
||||
static const __m512i b23_shift = { .m512i_i64 = { 2, 3, 0, 1, 7, 4, 5, 6 } };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user