daily update on 20241129 by nitload youmu, frameworkDialogue added
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#ifdef _MSC_VER
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifndef SSC_INTRIN
|
||||
#define SSC_INTRIN
|
||||
|
||||
#include "StgSharpC.h"
|
||||
#include <immintrin.h>
|
||||
|
||||
typedef union column_2 {
|
||||
__m256 stream[1];
|
||||
__m128 column[2];
|
||||
float m[4][2];
|
||||
} __2_columnset;
|
||||
|
||||
typedef struct column_3 {
|
||||
__m256 part;
|
||||
__m128 column[3];
|
||||
float m[4][3];
|
||||
} __3_columnset;
|
||||
|
||||
typedef union column_4 {
|
||||
__m512 stream;
|
||||
__m256 half[2];
|
||||
__m128 column[4];
|
||||
float m[4][4];
|
||||
} __4_columnset;
|
||||
|
||||
typedef void (SSCDECL *VECTORNORMALIZEPROC)(__m128 *source, __m128 *target);
|
||||
typedef void (SSCDECL *MATRIXTRANSPOSEPROC)(void *source, void *target);
|
||||
typedef void (SSCDECL *MATRIXDETPROC)(void *mat, void *transpose);
|
||||
typedef void (SSCDECL *MATARITHMETIC)(void* left, void* right, void* ans);
|
||||
typedef void (SSCDECL *SCALERMATARITHMETIC)(void* left, void* right, void* ans);
|
||||
|
||||
#pragma region matix function
|
||||
|
||||
INTERNAL void normalize(__m128 *source, __m128 *target);
|
||||
|
||||
INTERNAL void SSCDECL addmatrix2_sse(__2_columnset* left, __2_columnset* right, __2_columnset* ans);
|
||||
INTERNAL void SSCDECL addmatrix2_avx(__2_columnset* left, __2_columnset* right, __2_columnset* ans);
|
||||
INTERNAL void SSCDECL transpose23(__2_columnset *source, __3_columnset *target);
|
||||
INTERNAL void SSCDECL transpose24(__2_columnset *source, __4_columnset *target);
|
||||
|
||||
|
||||
INTERNAL void SSCDECL addmatrix3_sse(__3_columnset* left, __3_columnset* right, __3_columnset* ans);
|
||||
INTERNAL void SSCDECL addmatrix3_avx(__3_columnset* left, __3_columnset* right, __3_columnset* ans);
|
||||
INTERNAL void SSCDECL addmatrix3_512(__3_columnset* left, __3_columnset* right, __3_columnset* ans);
|
||||
INTERNAL void SSCDECL transpose32(__3_columnset *source, __2_columnset *target);
|
||||
INTERNAL void SSCDECL transpose33(__3_columnset *source, __3_columnset *target);
|
||||
INTERNAL void SSCDECL transpose34(__3_columnset *source, __4_columnset *target);
|
||||
INTERNAL float SSCDECL det_mat3(__3_columnset *matrix, __3_columnset *tranpose);
|
||||
|
||||
INTERNAL void SSCDECL transpose42(__4_columnset *source, __2_columnset *target);
|
||||
INTERNAL void SSCDECL transpose43(__4_columnset *source, __3_columnset *target);
|
||||
INTERNAL void SSCDECL transpose44(__4_columnset *matrix, __4_columnset *target);
|
||||
INTERNAL float SSCDECL det_mat4(__4_columnset *matrix, __4_columnset *transpose);
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region quick_hash
|
||||
|
||||
INTERNAL int quick_string_hash(byte *str, int length);
|
||||
|
||||
#pragma endregion
|
||||
|
||||
typedef struct ssc_intrinsic {
|
||||
MATARITHMETIC add_m2;
|
||||
MATARITHMETIC add_m3;
|
||||
MATARITHMETIC add_m4;
|
||||
MATRIXDETPROC det_matrix33;
|
||||
MATRIXDETPROC det_matrix44;
|
||||
VECTORNORMALIZEPROC normalize_3;
|
||||
int (*string_quick_hash)(char *str, int length);
|
||||
MATRIXTRANSPOSEPROC transpose_23;
|
||||
MATRIXTRANSPOSEPROC transpose_24;
|
||||
MATRIXTRANSPOSEPROC transpose_32;
|
||||
MATRIXTRANSPOSEPROC transpose_33;
|
||||
MATRIXTRANSPOSEPROC transpose_34;
|
||||
MATRIXTRANSPOSEPROC transpose_42;
|
||||
MATRIXTRANSPOSEPROC transpose_43;
|
||||
MATRIXTRANSPOSEPROC transpose_44;
|
||||
} ssc_intrinsic;
|
||||
|
||||
enum most_advance_instruction
|
||||
{
|
||||
SSE,
|
||||
AVX,
|
||||
AVX512,
|
||||
NEON
|
||||
};
|
||||
|
||||
#endif // !SSC_INTRIN
|
||||
Reference in New Issue
Block a user