diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
index a8bee46a2..1f741ac02 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
@@ -238,4 +238,48 @@
32
+
+
+
+ 7
+ 0
+ 1
+ 16
+
+
+
+ 2
+ 0x00000001
+ 27
+
+
+
+ -mavx512f
+ -mavx512f
+ /arch:AVX512F
+ 64
+
+
+
+
+
+ 7
+ 0
+ 1
+ 28
+
+
+
+ 2
+ 0x00000001
+ 27
+
+
+
+ -mavx512cd
+ -mavx512cd
+ /arch:AVX512CD
+ 64
+
+
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
index e7c6eaf20..d787a6b14 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
@@ -51,4 +51,14 @@
generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx fma avx2 orc|
+
+
+generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx fma avx2 avx512f orc|
+
+
+
+
+generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx fma avx2 avx512f avx512cd orc|
+
+
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_kernel_defs.py b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_kernel_defs.py
index 9daddda73..fe03ae701 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_kernel_defs.py
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_kernel_defs.py
@@ -121,7 +121,7 @@ def flatten_section_text(sections):
class impl_class:
def __init__(self, kern_name, header, body):
#extract LV_HAVE_*
- self.deps = set(map(str.lower, re.findall('LV_HAVE_(\w+)', header)))
+ self.deps = set(res.lower() for res in re.findall('LV_HAVE_(\w+)', header))
#extract function suffix and args
body = flatten_section_text(body)
try:
@@ -153,7 +153,7 @@ def extract_lv_haves(code):
haves = list()
for line in code.splitlines():
if not line.strip().startswith('#'): continue
- have_set = set(map(str.lower, re.findall('LV_HAVE_(\w+)', line)))
+ have_set = set(res.lower() for res in re.findall('LV_HAVE_(\w+)', line))
if have_set: haves.append(have_set)
return haves
@@ -164,7 +164,7 @@ class kernel_class:
def __init__(self, kernel_file):
self.name = os.path.splitext(os.path.basename(kernel_file))[0]
self.pname = self.name.replace('volk_gnsssdr_', 'p_')
- code = open(kernel_file, 'r').read()
+ code = open(kernel_file, 'rb').read().decode("utf-8")
code = comment_remover(code)
sections = split_into_nested_ifdef_sections(code)
self._impls = list()
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.c b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.c
index 4aba13014..420b5c91d 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.c
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.c
@@ -123,6 +123,15 @@ static inline unsigned int get_avx2_enabled(void)
#endif
}
+static inline unsigned int get_avx512_enabled(void)
+{
+#if defined(VOLK_CPU_x86)
+ return __xgetbv() & 0xE6; //check for zmm, xmm and ymm regs
+#else
+ return 0;
+#endif
+}
+
//neon detection is linux specific
#if defined(__arm__) && defined(__linux__)
#include