From b121d77de182cf0e9406da9ba28669bf2fa83846 Mon Sep 17 00:00:00 2001 From: x Date: Fri, 20 Dec 2019 20:04:05 +0100 Subject: [PATCH] Transform: Byte+Nibble Transpose/Shuffle --- transpose.c | 51 +++++++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/transpose.c b/transpose.c index 4d67f89..9b964e2 100644 --- a/transpose.c +++ b/transpose.c @@ -170,17 +170,17 @@ static inline uint64_t xgetbv (int ctr) { } #endif -#define AVX512F 0x000 -#define AVX512DQ 0x001 -#define AVX512IFMA 0x002 -#define AVX512PF 0x004 -#define AVX512ER 0x008 -#define AVX512CD 0x010 -#define AVX512BW 0x020 -#define AVX512VL 0x040 -#define AVX512VNNI 0x080 -#define AVX512VBMI 0x100 -#define AVX512VBMI2 0x200 +#define AVX512F 0x001 +#define AVX512DQ 0x002 +#define AVX512IFMA 0x004 +#define AVX512PF 0x008 +#define AVX512ER 0x010 +#define AVX512CD 0x020 +#define AVX512BW 0x040 +#define AVX512VL 0x080 +#define AVX512VNNI 0x100 +#define AVX512VBMI 0x200 +#define AVX512VBMI2 0x400 #define IS_SSE 0x10 #define IS_SSE2 0x20 @@ -253,21 +253,20 @@ unsigned cpuini(unsigned cpuisa) { if(cpuisa) _cpuisa = cpuisa; return _cpuisa; char *cpustr(unsigned cpuisa) { if(!cpuisa) cpuisa = _cpuisa; #if defined(__i386__) || defined(__x86_64__) - if(cpuisa >= IS_AVX512) - switch(cpuisa & 0x7ff) { - case AVX512VBMI2:return "avx512vbmi2"; - case AVX512VBMI: return "avx512vbmi"; - case AVX512VNNI: return "avx512vnni"; - case AVX512VL: return "avx512vl"; - case AVX512BW: return "avx512bw"; - case AVX512CD: return "avx512cd"; - case AVX512ER: return "avx512er"; - case AVX512PF: return "avx512pf"; - case AVX512IFMA: return "avx512ifma"; - case AVX512DQ: return "avx512dq"; - case AVX512F: return "avx512f"; - default: return "avx512"; - } + if(cpuisa >= IS_AVX512) { + if(cpuisa & AVX512VBMI2) return "avx512vbmi2"; + if(cpuisa & AVX512VBMI) return "avx512vbmi"; + if(cpuisa & AVX512VNNI) return "avx512vnni"; + if(cpuisa & AVX512VL) return "avx512vl"; + if(cpuisa & AVX512BW) return "avx512bw"; + if(cpuisa & AVX512CD) return "avx512cd"; + if(cpuisa & AVX512ER) return "avx512er"; + if(cpuisa & AVX512PF) return "avx512pf"; + if(cpuisa & AVX512IFMA) return "avx512ifma"; + if(cpuisa & AVX512DQ) return "avx512dq"; + if(cpuisa & AVX512F) return "avx512f"; + return "avx512"; + } else if(cpuisa >= IS_AVX2) return "avx2"; else if(cpuisa >= IS_AVX) switch(cpuisa&0xf) {