diff --git CMakeLists.txt CMakeLists.txt
index 06aee4d..6e42ab9 100644
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -1,6 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR)
-
-INCLUDE(GNUInstallDirs)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)
 
 # ---[ Project and semantic versioning.
 PROJECT(cpuinfo C CXX)
@@ -18,32 +16,22 @@ OPTION(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" ON)
 OPTION(CPUINFO_BUILD_BENCHMARKS "Build cpuinfo micro-benchmarks" ON)
 
 # ---[ CMake options
+INCLUDE(GNUInstallDirs)
+
 IF(CPUINFO_BUILD_UNIT_TESTS OR CPUINFO_BUILD_MOCK_TESTS)
   ENABLE_TESTING()
 ENDIF()
 
 MACRO(CPUINFO_TARGET_ENABLE_C99 target)
-  IF(${CMAKE_VERSION} VERSION_LESS "3.1")
-    IF(NOT MSVC)
-      TARGET_COMPILE_OPTIONS(${target} PRIVATE -std=c99)
-    ENDIF()
-  ELSE()
-    SET_TARGET_PROPERTIES(${target} PROPERTIES
-      C_STANDARD 99
-      C_EXTENSIONS NO)
-  ENDIF()
+  SET_TARGET_PROPERTIES(${target} PROPERTIES
+    C_STANDARD 99
+    C_EXTENSIONS NO)
 ENDMACRO()
 
 MACRO(CPUINFO_TARGET_ENABLE_CXX11 target)
-  IF(${CMAKE_VERSION} VERSION_LESS "3.1")
-    IF(NOT MSVC)
-      TARGET_COMPILE_OPTIONS(${target} PRIVATE -std=c++11)
-    ENDIF()
-  ELSE()
-    SET_TARGET_PROPERTIES(${target} PROPERTIES
-      CXX_STANDARD 11
-      CXX_EXTENSIONS NO)
-  ENDIF()
+  SET_TARGET_PROPERTIES(${target} PROPERTIES
+    CXX_STANDARD 11
+    CXX_EXTENSIONS NO)
 ENDMACRO()
 
 MACRO(CPUINFO_TARGET_RUNTIME_LIBRARY target)
diff --git include/cpuinfo.h include/cpuinfo.h
index e2e6564..cffa299 100644
--- include/cpuinfo.h
+++ include/cpuinfo.h
@@ -361,6 +361,8 @@ enum cpuinfo_uarch {
 	cpuinfo_uarch_zen         = 0x00200109,
 	/** AMD Zen 2 microarchitecture (7 nm Ryzen and EPYC CPUs). */
 	cpuinfo_uarch_zen2        = 0x0020010A,
+	/** AMD Zen 3 microarchitecture. */
+	cpuinfo_uarch_zen3        = 0x0020010B,
 
 	/** NSC Geode and AMD Geode GX and LX. */
 	cpuinfo_uarch_geode  = 0x00200200,
@@ -425,6 +427,9 @@ enum cpuinfo_uarch {
 	/** ARM Neoverse E1. */
 	cpuinfo_uarch_neoverse_e1  = 0x00300401,
 
+	/** ARM Cortex-X1. */
+	cpuinfo_uarch_cortex_x1    = 0x00300500,
+
 	/** Qualcomm Scorpion. */
 	cpuinfo_uarch_scorpion = 0x00400100,
 	/** Qualcomm Krait. */
@@ -1455,6 +1460,8 @@ static inline bool cpuinfo_has_x86_sha(void) {
 		#endif
 		#if CPUINFO_ARCH_ARM64
 			bool atomics;
+			bool sve;
+			bool sve2;
 		#endif
 		bool rdm;
 		bool fp16arith;
@@ -1770,6 +1777,22 @@ static inline bool cpuinfo_has_arm_crc32(void) {
 	#endif
 }
 
+static inline bool cpuinfo_has_arm_sve(void) {
+	#if CPUINFO_ARCH_ARM64
+		return cpuinfo_isa.sve;
+	#else
+		return false;
+	#endif
+}
+
+static inline bool cpuinfo_has_arm_sve2(void) {
+	#if CPUINFO_ARCH_ARM64
+		return cpuinfo_isa.sve2;
+	#else
+		return false;
+	#endif
+}
+
 const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_processors(void);
 const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_cores(void);
 const struct cpuinfo_cluster* CPUINFO_ABI cpuinfo_get_clusters(void);
diff --git src/arm/linux/aarch32-isa.c src/arm/linux/aarch32-isa.c
index 41f9972..df68aa1 100644
--- src/arm/linux/aarch32-isa.c
+++ src/arm/linux/aarch32-isa.c
@@ -56,24 +56,37 @@ void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo(
 		/*
 		 * NEON FP16 compute extension and VQRDMLAH/VQRDMLSH instructions are not indicated in /proc/cpuinfo.
 		 * Use a MIDR-based heuristic to whitelist processors known to support it:
-		 * - Processors with Qualcomm-modified Cortex-A55 cores
-		 * - Processors with Qualcomm-modified Cortex-A75 cores
-		 * - Processors with Qualcomm-modified Cortex-A76 cores
-		 * - Kirin 980 processor
+		 * - Processors with Cortex-A55 cores
+		 * - Processors with Cortex-A65 cores
+		 * - Processors with Cortex-A75 cores
+		 * - Processors with Cortex-A76 cores
+		 * - Processors with Cortex-A77 cores
+		 * - Processors with Exynos M4 cores
+		 * - Processors with Exynos M5 cores
+		 * - Neoverse N1 cores
 		 */
-		switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
-			case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */
-			case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */
-			case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */
-				isa->fp16arith = true;
-				isa->rdm = true;
-				break;
-			default:
-				if (chipset->series == cpuinfo_arm_chipset_series_hisilicon_kirin && chipset->model == 980) {
+		if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos && chipset->model == 9810) {
+			/* Only little cores of Exynos 9810 support FP16 & RDM */
+			cpuinfo_log_warning("FP16 arithmetics and RDM disabled: only little cores in Exynos 9810 support these extensions");
+		} else {
+			switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
+				case UINT32_C(0x4100D050): /* Cortex-A55 */
+				case UINT32_C(0x4100D060): /* Cortex-A65 */
+				case UINT32_C(0x4100D0B0): /* Cortex-A76 */
+				case UINT32_C(0x4100D0C0): /* Neoverse N1 */
+				case UINT32_C(0x4100D0D0): /* Cortex-A77 */
+				case UINT32_C(0x4100D0E0): /* Cortex-A76AE */
+				case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */
+				case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */
+				case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */
+				case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */
+				case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */
+				case UINT32_C(0x53000030): /* Exynos M4 */
+				case UINT32_C(0x53000040): /* Exynos M5 */
 					isa->fp16arith = true;
 					isa->rdm = true;
-				}
-				break;
+					break;
+			}
 		}
 
 		/*
diff --git src/arm/linux/aarch64-isa.c src/arm/linux/aarch64-isa.c
index 619cda5..2000e1a 100644
--- src/arm/linux/aarch64-isa.c
+++ src/arm/linux/aarch64-isa.c
@@ -6,6 +6,7 @@
 
 void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
 	uint32_t features,
+	uint32_t features2,
 	uint32_t midr,
 	const struct cpuinfo_arm_chipset chipset[restrict static 1],
 	struct cpuinfo_arm_isa isa[restrict static 1])
@@ -28,43 +29,56 @@ void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
 	if (features & CPUINFO_ARM_LINUX_FEATURE_ATOMICS) {
 		isa->atomics = true;
 	}
-	const uint32_t fp16arith_mask = CPUINFO_ARM_LINUX_FEATURE_FPHP | CPUINFO_ARM_LINUX_FEATURE_ASIMDHP;
-	if ((features & fp16arith_mask) == fp16arith_mask) {
-		if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos && chipset->model == 9810) {
-			/* Exynos 9810 reports that it supports FP16 compute, but in fact only little cores do */
-			cpuinfo_log_warning("FP16 arithmetics disabled: only little cores of Exynos 9810 support FP16 compute");
-		} else {
-			isa->fp16arith = true;
-		}
-	} else if (features & CPUINFO_ARM_LINUX_FEATURE_FPHP) {
-		cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for scalar operations");
-	} else if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDHP) {
-		cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for SIMD operations");
-	}
+
 	/*
-	 * Many phones ship with an old kernel configuration that doesn't report
-	 * SQRDMLAH/SQRDMLSH/UQRDMLAH/UQRDMLSH instructions.
+	 * Some phones ship with an old kernel configuration that doesn't report NEON FP16 compute extension and SQRDMLAH/SQRDMLSH/UQRDMLAH/UQRDMLSH instructions.
 	 * Use a MIDR-based heuristic to whitelist processors known to support it:
-	 * - Processors with Qualcomm-modified Cortex-A55 cores
-	 * - Processors with Qualcomm-modified Cortex-A75 cores
-	 * - Processors with Qualcomm-modified Cortex-A76 cores
-	 * - Kirin 980 processor
+	 * - Processors with Cortex-A55 cores
+	 * - Processors with Cortex-A65 cores
+	 * - Processors with Cortex-A75 cores
+	 * - Processors with Cortex-A76 cores
+	 * - Processors with Cortex-A77 cores
+	 * - Processors with Exynos M4 cores
+	 * - Processors with Exynos M5 cores
+	 * - Neoverse N1 cores
 	 */
-	switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
-		case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */
-		case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */
-		case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */
-			isa->rdm = true;
-			break;
-		default:
-			if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM) {
-				isa->rdm = true;
-			}
-			if (chipset->series == cpuinfo_arm_chipset_series_hisilicon_kirin && chipset->model == 980) {
+	if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos && chipset->model == 9810) {
+		/* Exynos 9810 reports that it supports FP16 compute, but in fact only little cores do */
+		cpuinfo_log_warning("FP16 arithmetics and RDM disabled: only little cores in Exynos 9810 support these extensions");
+	} else {
+		const uint32_t fp16arith_mask = CPUINFO_ARM_LINUX_FEATURE_FPHP | CPUINFO_ARM_LINUX_FEATURE_ASIMDHP;
+		switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
+			case UINT32_C(0x4100D050): /* Cortex-A55 */
+			case UINT32_C(0x4100D060): /* Cortex-A65 */
+			case UINT32_C(0x4100D0B0): /* Cortex-A76 */
+			case UINT32_C(0x4100D0C0): /* Neoverse N1 */
+			case UINT32_C(0x4100D0D0): /* Cortex-A77 */
+			case UINT32_C(0x4100D0E0): /* Cortex-A76AE */
+			case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */
+			case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */
+			case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */
+			case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */
+			case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */
+			case UINT32_C(0x53000030): /* Exynos M4 */
+			case UINT32_C(0x53000040): /* Exynos M5 */
+				isa->fp16arith = true;
 				isa->rdm = true;
-			}
-			break;
+				break;
+			default:
+				if ((features & fp16arith_mask) == fp16arith_mask) {
+					isa->fp16arith = true;
+				} else if (features & CPUINFO_ARM_LINUX_FEATURE_FPHP) {
+					cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for scalar operations");
+				} else if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDHP) {
+					cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for SIMD operations");
+				}
+				if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM) {
+					isa->rdm = true;
+				}
+				break;
+		}
 	}
+
 	/*
 	 * Many phones ship with an old kernel configuration that doesn't report UDOT/SDOT instructions.
 	 * Use a MIDR-based heuristic to whitelist processors known to support it.
@@ -98,13 +112,16 @@ void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
 	if (features & CPUINFO_ARM_LINUX_FEATURE_JSCVT) {
 		isa->jscvt = true;
 	}
-	if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM) {
-		isa->rdm = true;
-	}
 	if (features & CPUINFO_ARM_LINUX_FEATURE_JSCVT) {
 		isa->jscvt = true;
 	}
 	if (features & CPUINFO_ARM_LINUX_FEATURE_FCMA) {
 		isa->fcma = true;
 	}
+	if (features & CPUINFO_ARM_LINUX_FEATURE_SVE) {
+		isa->sve = true;
+	}
+	if (features2 & CPUINFO_ARM_LINUX_FEATURE2_SVE2) {
+		isa->sve2 = true;
+	}
 }
diff --git src/arm/linux/api.h src/arm/linux/api.h
index 2597e49..1c09f82 100644
--- src/arm/linux/api.h
+++ src/arm/linux/api.h
@@ -111,6 +111,28 @@ struct cpuinfo_arm_linux_proc_cpuinfo_cache {
 	#define CPUINFO_ARM_LINUX_FEATURE_ILRCPC   UINT32_C(0x04000000)
 	#define CPUINFO_ARM_LINUX_FEATURE_FLAGM    UINT32_C(0x08000000)
 	#define CPUINFO_ARM_LINUX_FEATURE_SSBS     UINT32_C(0x10000000)
+	#define CPUINFO_ARM_LINUX_FEATURE_SB       UINT32_C(0x20000000)
+	#define CPUINFO_ARM_LINUX_FEATURE_PACA     UINT32_C(0x40000000)
+	#define CPUINFO_ARM_LINUX_FEATURE_PACG     UINT32_C(0x80000000)
+
+	#define CPUINFO_ARM_LINUX_FEATURE2_DCPODP     UINT32_C(0x00000001)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVE2       UINT32_C(0x00000002)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEAES     UINT32_C(0x00000004)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEPMULL   UINT32_C(0x00000008)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEBITPERM UINT32_C(0x00000010)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVESHA3    UINT32_C(0x00000020)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVESM4     UINT32_C(0x00000040)
+	#define CPUINFO_ARM_LINUX_FEATURE2_FLAGM2     UINT32_C(0x00000080)
+	#define CPUINFO_ARM_LINUX_FEATURE2_FRINT      UINT32_C(0x00000100)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEI8MM    UINT32_C(0x00000200)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEF32MM   UINT32_C(0x00000400)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEF64MM   UINT32_C(0x00000800)
+	#define CPUINFO_ARM_LINUX_FEATURE2_SVEBF16    UINT32_C(0x00001000)
+	#define CPUINFO_ARM_LINUX_FEATURE2_I8MM       UINT32_C(0x00002000)
+	#define CPUINFO_ARM_LINUX_FEATURE2_BF16       UINT32_C(0x00004000)
+	#define CPUINFO_ARM_LINUX_FEATURE2_DGH        UINT32_C(0x00008000)
+	#define CPUINFO_ARM_LINUX_FEATURE2_RNG        UINT32_C(0x00010000)
+	#define CPUINFO_ARM_LINUX_FEATURE2_BTI        UINT32_C(0x00020000)
 #endif
 
 #define CPUINFO_ARM_LINUX_VALID_ARCHITECTURE UINT32_C(0x00010000)
@@ -146,9 +168,7 @@ struct cpuinfo_arm_linux_processor {
 	struct cpuinfo_arm_linux_proc_cpuinfo_cache proc_cpuinfo_cache;
 #endif
 	uint32_t features;
-#if CPUINFO_ARCH_ARM
 	uint32_t features2;
-#endif
 	/**
 	 * Main ID Register value.
 	 */
@@ -282,9 +302,13 @@ CPUINFO_INTERNAL bool cpuinfo_arm_linux_parse_proc_cpuinfo(
 		const struct cpuinfo_arm_chipset chipset[restrict static 1],
 		struct cpuinfo_arm_isa isa[restrict static 1]);
 #elif CPUINFO_ARCH_ARM64
-	CPUINFO_INTERNAL uint32_t cpuinfo_arm_linux_hwcap_from_getauxval(void);
+	CPUINFO_INTERNAL void cpuinfo_arm_linux_hwcap_from_getauxval(
+		uint32_t hwcap[restrict static 1],
+		uint32_t hwcap2[restrict static 1]);
+
 	CPUINFO_INTERNAL void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
 		uint32_t features,
+		uint32_t features2,
 		uint32_t midr,
 		const struct cpuinfo_arm_chipset chipset[restrict static 1],
 		struct cpuinfo_arm_isa isa[restrict static 1]);
diff --git src/arm/linux/hwcap.c src/arm/linux/hwcap.c
index 36d0d91..35e9994 100644
--- src/arm/linux/hwcap.c
+++ src/arm/linux/hwcap.c
@@ -29,12 +29,10 @@
 		mock_hwcap = hwcap;
 	}
 
-	#if CPUINFO_ARCH_ARM
-		static uint32_t mock_hwcap2 = 0;
-		void cpuinfo_set_hwcap2(uint32_t hwcap2) {
-			mock_hwcap2 = hwcap2;
-		}
-	#endif
+	static uint32_t mock_hwcap2 = 0;
+	void cpuinfo_set_hwcap2(uint32_t hwcap2) {
+		mock_hwcap2 = hwcap2;
+	}
 #endif
 
 
@@ -145,11 +143,17 @@
 		}
 	#endif /* __ANDROID__ */
 #elif CPUINFO_ARCH_ARM64
-	uint32_t cpuinfo_arm_linux_hwcap_from_getauxval(void) {
+	void cpuinfo_arm_linux_hwcap_from_getauxval(
+		uint32_t hwcap[restrict static 1],
+		uint32_t hwcap2[restrict static 1])
+	{
 		#if CPUINFO_MOCK
-			return mock_hwcap;
+			*hwcap  = mock_hwcap;
+			*hwcap2 = mock_hwcap2;
 		#else
-			return (uint32_t) getauxval(AT_HWCAP);
+			*hwcap  = (uint32_t) getauxval(AT_HWCAP);
+			*hwcap2 = (uint32_t) getauxval(AT_HWCAP2);
+			return ;
 		#endif
 	}
 #endif
diff --git src/arm/linux/init.c src/arm/linux/init.c
index 89d957e..23d8439 100644
--- src/arm/linux/init.c
+++ src/arm/linux/init.c
@@ -277,10 +277,11 @@ void cpuinfo_arm_linux_init(void) {
 			last_midr, last_architecture_version, last_architecture_flags,
 			&chipset, &cpuinfo_isa);
 	#elif CPUINFO_ARCH_ARM64
+		uint32_t isa_features = 0, isa_features2 = 0;
 		/* getauxval is always available on ARM64 Android */
-		const uint32_t isa_features = cpuinfo_arm_linux_hwcap_from_getauxval();
+		cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2);
 		cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
-			isa_features, last_midr, &chipset, &cpuinfo_isa);
+			isa_features, isa_features2, last_midr, &chipset, &cpuinfo_isa);
 	#endif
 
 	/* Detect min/max frequency and package ID */
diff --git src/arm/mach/init.c src/arm/mach/init.c
index d820744..dbea578 100644
--- src/arm/mach/init.c
+++ src/arm/mach/init.c
@@ -24,7 +24,6 @@
 #ifndef CPUFAMILY_ARM_LIGHTNING_THUNDER
 	#define CPUFAMILY_ARM_LIGHTNING_THUNDER 0x462504D2
 #endif
-
 #ifndef CPUFAMILY_ARM_FIRESTORM_ICESTORM
 	#define CPUFAMILY_ARM_FIRESTORM_ICESTORM 0x1B588BB3
 #endif
@@ -349,6 +348,7 @@ void cpuinfo_arm_mach_init(void) {
 		case CPUFAMILY_ARM_MONSOON_MISTRAL:
 		case CPUFAMILY_ARM_VORTEX_TEMPEST:
 		case CPUFAMILY_ARM_LIGHTNING_THUNDER:
+		case CPUFAMILY_ARM_FIRESTORM_ICESTORM:
 			#if CPUINFO_ARCH_ARM64
 				cpuinfo_isa.atomics = true;
 			#endif
@@ -360,8 +360,10 @@ void cpuinfo_arm_mach_init(void) {
 	 * ARMv8.2 optional dot-product instructions, so we currently whitelist CPUs
 	 * known to support these instruction.
 	 */
-	if (cpu_family == CPUFAMILY_ARM_LIGHTNING_THUNDER) {
-		cpuinfo_isa.dot = true;
+	switch (cpu_family) {
+		case CPUFAMILY_ARM_LIGHTNING_THUNDER:
+		case CPUFAMILY_ARM_FIRESTORM_ICESTORM:
+			cpuinfo_isa.dot = true;
 	}
 
 	uint32_t num_clusters = 1;
diff --git src/arm/midr.h src/arm/midr.h
index 2638517..739dc19 100644
--- src/arm/midr.h
+++ src/arm/midr.h
@@ -171,9 +171,10 @@ inline static bool midr_is_kryo_gold(uint32_t midr) {
 inline static uint32_t midr_score_core(uint32_t midr) {
 	const uint32_t core_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
 	switch (midr & core_mask) {
-		case UINT32_C(0x53000040): /* Exynos M5 */
 		case UINT32_C(0x53000030): /* Exynos M4 */
-			/* These cores are in big role w.r.t Cortex-A75 or Cortex-A76 */
+		case UINT32_C(0x53000040): /* Exynos M5 */
+		case UINT32_C(0x4100D440): /* Cortex-X1 */
+			/* These cores are in big role w.r.t Cortex-A75/-A76/-A77/-A78 */
 			return 6;
 		case UINT32_C(0x4E000030): /* Denver 2 */
 		case UINT32_C(0x53000010): /* Exynos M1 and Exynos M2 */
diff --git src/arm/uarch.c src/arm/uarch.c
index 0d7a7d7..8b5362b 100644
--- src/arm/uarch.c
+++ src/arm/uarch.c
@@ -94,6 +94,9 @@ void cpuinfo_arm_decode_vendor_uarch(
 				case 0xD41: /* Cortex-A78 */
 					*uarch = cpuinfo_uarch_cortex_a78;
 					break;
+				case 0xD44: /* Cortex-X1 */
+					*uarch = cpuinfo_uarch_cortex_x1;
+					break;
 #if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__)
 				case 0xD4A:
 					*uarch = cpuinfo_uarch_neoverse_e1;
diff --git src/init.c src/init.c
index f703e8e..d61e7be 100644
--- src/init.c
+++ src/init.c
@@ -35,8 +35,6 @@ bool CPUINFO_ABI cpuinfo_initialize(void) {
 #elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64
 	#if defined(__linux__)
 		pthread_once(&init_guard, &cpuinfo_arm_linux_init);
-	#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
-		pthread_once(&init_guard, &cpuinfo_arm_mach_init);
 	#elif defined(__MACH__) && defined(__APPLE__)
 		pthread_once(&init_guard, &cpuinfo_arm_mach_init);
 	#else
diff --git src/x86/uarch.c src/x86/uarch.c
index ecaa762..3705499 100644
--- src/x86/uarch.c
+++ src/x86/uarch.c
@@ -209,9 +209,23 @@ enum cpuinfo_uarch cpuinfo_x86_decode_uarch(
 							return cpuinfo_uarch_zen;
 						case 0x31: // Rome, Castle Peak
 						case 0x60: // Renoir
+						case 0x68: // Lucienne
 						case 0x71: // Matisse
+						case 0x90: // Van Gogh
+						case 0x98: // Mero
 							return cpuinfo_uarch_zen2;
 					}
+					break;
+				case 0x19:
+					switch (model_info->model) {
+						case 0x01: // Genesis
+						case 0x21: // Vermeer
+						case 0x30: // Badami, Trento
+						case 0x40: // Rembrandt
+						case 0x50: // Cezanne
+							return cpuinfo_uarch_zen3;
+					}
+					break;
 			}
 			break;
 		case cpuinfo_vendor_hygon:
diff --git src/x86/windows/init.c src/x86/windows/init.c
index 9a23bd7..274075c 100644
--- src/x86/windows/init.c
+++ src/x86/windows/init.c
@@ -95,6 +95,15 @@ static void cpuinfo_x86_count_caches(
 	*l4_count_ptr  = l4_count;
 }
 
+static bool cpuinfo_x86_windows_is_wine(void) {
+	HMODULE ntdll = GetModuleHandleW(L"ntdll.dll");
+	if (ntdll == NULL) {
+		return false;
+	}
+
+	return GetProcAddress(ntdll, "wine_get_version") != NULL;
+}
+
 BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
 	struct cpuinfo_processor* processors = NULL;
 	struct cpuinfo_core* cores = NULL;
@@ -108,6 +117,7 @@ BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PV
 	PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX processor_infos = NULL;
 
 	HANDLE heap = GetProcessHeap();
+	const bool is_wine = cpuinfo_x86_windows_is_wine();
 
 	struct cpuinfo_x86_processor x86_processor;
 	ZeroMemory(&x86_processor, sizeof(x86_processor));
@@ -121,7 +131,8 @@ BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PV
 		x86_processor.topology.thread_bits_offset + x86_processor.topology.thread_bits_length,
 		x86_processor.topology.core_bits_offset + x86_processor.topology.core_bits_length);
 
-	const uint32_t max_group_count = (uint32_t) GetMaximumProcessorGroupCount();
+	/* WINE doesn't implement GetMaximumProcessorGroupCount and aborts when calling it */
+	const uint32_t max_group_count = is_wine ? 1 : (uint32_t) GetMaximumProcessorGroupCount();
 	cpuinfo_log_debug("detected %"PRIu32" processor groups", max_group_count);
 
 	uint32_t processors_count = 0;
diff --git test/mock/galaxy-s9-us.cc test/mock/galaxy-s9-us.cc
index ceea969..91c4868 100644
--- test/mock/galaxy-s9-us.cc
+++ test/mock/galaxy-s9-us.cc
@@ -817,4 +817,4 @@ int main(int argc, char* argv[]) {
 	cpuinfo_initialize();
 	::testing::InitGoogleTest(&argc, argv);
 	return RUN_ALL_TESTS();
-}
+}
\ No newline at end of file
diff --git tools/cpu-info.c tools/cpu-info.c
index 55d654f..30ec633 100644
--- tools/cpu-info.c
+++ tools/cpu-info.c
@@ -129,6 +129,8 @@ static const char* uarch_to_string(enum cpuinfo_uarch uarch) {
 			return "Zen";
 		case cpuinfo_uarch_zen2:
 			return "Zen 2";
+		case cpuinfo_uarch_zen3:
+			return "Zen 3";
 		case cpuinfo_uarch_geode:
 			return "Geode";
 		case cpuinfo_uarch_bobcat:
@@ -185,6 +187,8 @@ static const char* uarch_to_string(enum cpuinfo_uarch uarch) {
 			return "Cortex-A77";
 		case cpuinfo_uarch_cortex_a78:
 			return "Cortex-A78";
+		case cpuinfo_uarch_cortex_x1:
+			return "Cortex-X1";
 		case cpuinfo_uarch_scorpion:
 			return "Scorpion";
 		case cpuinfo_uarch_krait:
diff --git tools/isa-info.c tools/isa-info.c
index 8365846..92abb57 100644
--- tools/isa-info.c
+++ tools/isa-info.c
@@ -161,6 +161,10 @@ int main(int argc, char** argv) {
 		printf("\tARM v8.3 JS conversion: %s\n", cpuinfo_has_arm_jscvt() ? "yes" : "no");
 		printf("\tARM v8.3 complex: %s\n", cpuinfo_has_arm_fcma() ? "yes" : "no");
 
+	printf("SIMD extensions:\n");
+		printf("\tARM SVE: %s\n", cpuinfo_has_arm_sve() ? "yes" : "no");
+		printf("\tARM SVE 2: %s\n", cpuinfo_has_arm_sve2() ? "yes" : "no");
+
 	printf("Cryptography extensions:\n");
 		printf("\tAES: %s\n", cpuinfo_has_arm_aes() ? "yes" : "no");
 		printf("\tSHA1: %s\n", cpuinfo_has_arm_sha1() ? "yes" : "no");
