Skip to content

Commit 9b48aa2

Browse files
committed
[compiler-rt][builtins][FMV] Early exit in the Apple __init_cpu_features_resolver(). NFC
1 parent 15c04d5 commit 9b48aa2

File tree

1 file changed

+46
-45
lines changed
  • compiler-rt/lib/builtins/cpu_model/aarch64/fmv

1 file changed

+46
-45
lines changed

compiler-rt/lib/builtins/cpu_model/aarch64/fmv/apple.inc

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,55 +17,56 @@ void __init_cpu_features_resolver(void) {
1717
// ELF platforms, where IFuncs are resolved serially at load time). This
1818
// function's effect on __aarch64_cpu_features must be idempotent.
1919

20-
if (!__atomic_load_n(&__aarch64_cpu_features.features, __ATOMIC_RELAXED)) {
21-
uint64_t features = 0;
20+
if (__atomic_load_n(&__aarch64_cpu_features.features, __ATOMIC_RELAXED))
21+
return;
2222

23-
// https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics
24-
static const struct {
25-
const char *sysctl_name;
26-
enum CPUFeatures feature;
27-
} feature_checks[] = {
28-
{"hw.optional.arm.FEAT_FlagM", FEAT_FLAGM},
29-
{"hw.optional.arm.FEAT_FlagM2", FEAT_FLAGM2},
30-
{"hw.optional.arm.FEAT_FHM", FEAT_FP16FML},
31-
{"hw.optional.arm.FEAT_DotProd", FEAT_DOTPROD},
32-
{"hw.optional.arm.FEAT_RDM", FEAT_RDM},
33-
{"hw.optional.arm.FEAT_LSE", FEAT_LSE},
34-
{"hw.optional.floatingpoint", FEAT_FP},
35-
{"hw.optional.AdvSIMD", FEAT_SIMD},
36-
{"hw.optional.armv8_crc32", FEAT_CRC},
37-
{"hw.optional.arm.FEAT_SHA1", FEAT_SHA1},
38-
{"hw.optional.arm.FEAT_SHA256", FEAT_SHA2},
39-
{"hw.optional.arm.FEAT_SHA3", FEAT_SHA3},
40-
{"hw.optional.arm.FEAT_AES", FEAT_AES},
41-
{"hw.optional.arm.FEAT_PMULL", FEAT_PMULL},
42-
{"hw.optional.arm.FEAT_FP16", FEAT_FP16},
43-
{"hw.optional.arm.FEAT_DIT", FEAT_DIT},
44-
{"hw.optional.arm.FEAT_DPB", FEAT_DPB},
45-
{"hw.optional.arm.FEAT_DPB2", FEAT_DPB2},
46-
{"hw.optional.arm.FEAT_JSCVT", FEAT_JSCVT},
47-
{"hw.optional.arm.FEAT_FCMA", FEAT_FCMA},
48-
{"hw.optional.arm.FEAT_LRCPC", FEAT_RCPC},
49-
{"hw.optional.arm.FEAT_LRCPC2", FEAT_RCPC2},
50-
{"hw.optional.arm.FEAT_FRINTTS", FEAT_FRINTTS},
51-
{"hw.optional.arm.FEAT_I8MM", FEAT_I8MM},
52-
{"hw.optional.arm.FEAT_BF16", FEAT_BF16},
53-
{"hw.optional.arm.FEAT_SB", FEAT_SB},
54-
{"hw.optional.arm.FEAT_SPECRES", FEAT_PREDRES},
55-
{"hw.optional.arm.FEAT_SSBS", FEAT_SSBS2},
56-
{"hw.optional.arm.FEAT_BTI", FEAT_BTI},
57-
};
23+
uint64_t features = 0;
5824

59-
for (size_t I = 0, E = sizeof(feature_checks) / sizeof(feature_checks[0]);
60-
I != E; ++I)
61-
if (isKnownAndSupported(feature_checks[I].sysctl_name))
62-
features |= (1ULL << feature_checks[I].feature);
25+
// https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics
26+
static const struct {
27+
const char *sysctl_name;
28+
enum CPUFeatures feature;
29+
} feature_checks[] = {
30+
{"hw.optional.arm.FEAT_FlagM", FEAT_FLAGM},
31+
{"hw.optional.arm.FEAT_FlagM2", FEAT_FLAGM2},
32+
{"hw.optional.arm.FEAT_FHM", FEAT_FP16FML},
33+
{"hw.optional.arm.FEAT_DotProd", FEAT_DOTPROD},
34+
{"hw.optional.arm.FEAT_RDM", FEAT_RDM},
35+
{"hw.optional.arm.FEAT_LSE", FEAT_LSE},
36+
{"hw.optional.floatingpoint", FEAT_FP},
37+
{"hw.optional.AdvSIMD", FEAT_SIMD},
38+
{"hw.optional.armv8_crc32", FEAT_CRC},
39+
{"hw.optional.arm.FEAT_SHA1", FEAT_SHA1},
40+
{"hw.optional.arm.FEAT_SHA256", FEAT_SHA2},
41+
{"hw.optional.arm.FEAT_SHA3", FEAT_SHA3},
42+
{"hw.optional.arm.FEAT_AES", FEAT_AES},
43+
{"hw.optional.arm.FEAT_PMULL", FEAT_PMULL},
44+
{"hw.optional.arm.FEAT_FP16", FEAT_FP16},
45+
{"hw.optional.arm.FEAT_DIT", FEAT_DIT},
46+
{"hw.optional.arm.FEAT_DPB", FEAT_DPB},
47+
{"hw.optional.arm.FEAT_DPB2", FEAT_DPB2},
48+
{"hw.optional.arm.FEAT_JSCVT", FEAT_JSCVT},
49+
{"hw.optional.arm.FEAT_FCMA", FEAT_FCMA},
50+
{"hw.optional.arm.FEAT_LRCPC", FEAT_RCPC},
51+
{"hw.optional.arm.FEAT_LRCPC2", FEAT_RCPC2},
52+
{"hw.optional.arm.FEAT_FRINTTS", FEAT_FRINTTS},
53+
{"hw.optional.arm.FEAT_I8MM", FEAT_I8MM},
54+
{"hw.optional.arm.FEAT_BF16", FEAT_BF16},
55+
{"hw.optional.arm.FEAT_SB", FEAT_SB},
56+
{"hw.optional.arm.FEAT_SPECRES", FEAT_PREDRES},
57+
{"hw.optional.arm.FEAT_SSBS", FEAT_SSBS2},
58+
{"hw.optional.arm.FEAT_BTI", FEAT_BTI},
59+
};
6360

64-
features |= (1ULL << FEAT_INIT);
61+
for (size_t I = 0, E = sizeof(feature_checks) / sizeof(feature_checks[0]);
62+
I != E; ++I)
63+
if (isKnownAndSupported(feature_checks[I].sysctl_name))
64+
features |= (1ULL << feature_checks[I].feature);
6565

66-
__atomic_store(&__aarch64_cpu_features.features, &features,
67-
__ATOMIC_RELAXED);
68-
}
66+
features |= (1ULL << FEAT_INIT);
67+
68+
__atomic_store(&__aarch64_cpu_features.features, &features,
69+
__ATOMIC_RELAXED);
6970
}
7071

7172
#endif // TARGET_OS_OSX || TARGET_OS_IPHONE

0 commit comments

Comments
 (0)