refactor Linux hybrid core-type fallback
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h
index 5eb5169..a75d3f9 100644
--- a/xbyak/xbyak_util.h
+++ b/xbyak/xbyak_util.h
@@ -1534,6 +1534,15 @@
 	return setStr(mask, buf);
 }
 
+inline CoreType setAffinityAndGetCoreType(uint32_t cpu)
+{
+	cpu_set_t cpuMask;
+	CPU_ZERO(&cpuMask);
+	CPU_SET(cpu, &cpuMask);
+	if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuMask)) return Standard;
+	return impl::getCoreType();
+}
+
 inline bool initCpuTopology(CpuTopology& cpuTopo)
 {
 	const uint32_t logicalCpuNum = sysconf(_SC_NPROCESSORS_ONLN);
@@ -1654,20 +1663,12 @@
 		if (!hasPCoreSysfs || !hasECoreSysfs) {
 			cpu_set_t originalMask;
 			CPU_ZERO(&originalMask);
-			if (sched_getaffinity(0, sizeof(cpu_set_t), &originalMask) != 0) goto SKIP_FALLBACK;
-
-			for (uint32_t cpu = 0; cpu < logicalCpuNum; cpu++) {
-				cpu_set_t cpuMask;
-				CPU_ZERO(&cpuMask);
-				CPU_SET(cpu, &cpuMask);
-				if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuMask) == 0) {
-					cpuTopo.logicalCpus_[cpu].coreType = impl::getCoreType();
+			if (sched_getaffinity(0, sizeof(cpu_set_t), &originalMask) == 0) {
+				for (uint32_t cpu = 0; cpu < logicalCpuNum; cpu++) {
+					cpuTopo.logicalCpus_[cpu].coreType = impl::setAffinityAndGetCoreType(cpu);
 				}
+				sched_setaffinity(0, sizeof(cpu_set_t), &originalMask);
 			}
-
-			// Restore the original CPU affinity mask
-			sched_setaffinity(0, sizeof(cpu_set_t), &originalMask);
-		SKIP_FALLBACK:;
 		}
 	}