daily update on 20241228 by nitload youmu, better dot in checking

This commit is contained in:
Nitload
2024-12-29 04:30:40 +08:00
parent 592ad55d57
commit 63c3cd17e2
45 changed files with 7193 additions and 4884 deletions
+40 -14
View File
@@ -13,6 +13,17 @@
#include <isa_availability.h>
#endif
#define LASTTWO(x) (x & 3)
#define LAST(x) (x & 3)
#define SSE_INSERT(source, target, reset3, reset2, reset1, reset0) \
(LASTTWO(source - 1) << 6) | (LASTTWO(target - 1) << 4) | (LAST(reset3) << 3) | \
(LAST(reset2) << 2) | (LAST(reset1) << 1) | LAST(reset0)
#define SSE_INSERT_SIMPLE(source, target) SSE_INSERT(source, target, 0, 0, 0, 0)
#define M256_PERMUTE(s3, s2, s1, s0) (LASTTWO(s3) << 6) | (LASTTWO(s2) << 4) | (LASTTWO(s1) << 2) | (LASTTWO(s0)
typedef union column_2 {
__m256 stream[1];
__m128 column[2];
@@ -32,25 +43,25 @@ typedef union 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);
typedef void(SSCDECL *VECTORNORMALIZEPROC)(__m128 *source, __m128 *target);
typedef void(SSCDECL *DOTPROC)(void *transpose, __m128 *vector, __m128 *ans);
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 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 const *source, __3_columnset *target);
INTERNAL void SSCDECL transpose24(__2_columnset const *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 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 const *source, __2_columnset *target);
INTERNAL void SSCDECL transpose33(__3_columnset const *source, __3_columnset *target);
INTERNAL void SSCDECL transpose34(__3_columnset const *source, __4_columnset *target);
@@ -66,6 +77,18 @@ INTERNAL float SSCDECL det_mat4(__4_columnset *matrix, __4_columnset *transpose)
#pragma endregion
#pragma region dot
INTERNAL void SSCDECL dot_41_sse(__4_columnset *transpose, __m128 *vector, __m128 *ans);
INTERNAL void SSCDECL dot_31_sse(__3_columnset *transpose, __m128 *vector, __m128 *ans);
INTERNAL void SSCDECL dot_42_sse(__4_columnset *transpose, __m128 *vector, __m128 *ans);
INTERNAL void SSCDECL dot_32_sse(__3_columnset *transpose, __m128 *vector, __m128 *ans);
INTERNAL void SSCDECL dot_42_avx(__4_columnset *transpose, __m128 *vector, __m128 *ans);
INTERNAL void SSCDECL dot_32_avx(__3_columnset *transpose, __m128 *vector, __m128 *ans);
#pragma endregion
#pragma region quick_hash
INTERNAL int quick_string_hash(byte *str, int length);
@@ -78,6 +101,10 @@ typedef struct ssc_intrinsic {
MATARITHMETIC add_m4;
MATRIXDETPROC det_matrix33;
MATRIXDETPROC det_matrix44;
DOTPROC dot_31;
DOTPROC dot_32;
DOTPROC dot_41;
DOTPROC dot_42;
VECTORNORMALIZEPROC normalize_3;
int (*string_quick_hash)(char *str, int length);
MATRIXTRANSPOSEPROC transpose_23;
@@ -90,8 +117,7 @@ typedef struct ssc_intrinsic {
MATRIXTRANSPOSEPROC transpose_44;
} ssc_intrinsic;
typedef enum most_advanced_instruction
{
typedef enum most_advanced_instruction {
#ifdef _MSC_VER
SSE = __IA_SUPPORT_SSE42,
AVX256 = __IA_SUPPORT_VECTOR256,
@@ -103,6 +129,6 @@ typedef enum most_advanced_instruction
AVX512,
NEON
#endif
}most_advanced_instruction;
} most_advanced_instruction;
#endif // !SSC_INTRIN