8297092: [macos_aarch64] Add support for SHA feature detection
Reviewed-by: njian, aph, gziemski
This commit is contained in:
parent
f52f6e65fb
commit
240830df7e
@ -342,10 +342,14 @@ void VM_Version::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (UseSHA && VM_Version::supports_sha3()) {
|
if (UseSHA && VM_Version::supports_sha3()) {
|
||||||
// Do not auto-enable UseSHA3Intrinsics until it has been fully tested on hardware
|
// Auto-enable UseSHA3Intrinsics on hardware with performance benefit.
|
||||||
// if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) {
|
// Note that the evaluation of UseSHA3Intrinsics shows better performance
|
||||||
// FLAG_SET_DEFAULT(UseSHA3Intrinsics, true);
|
// on Apple silicon but worse performance on Neoverse V1 and N2.
|
||||||
// }
|
if (_cpu == CPU_APPLE) { // Apple silicon
|
||||||
|
if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) {
|
||||||
|
FLAG_SET_DEFAULT(UseSHA3Intrinsics, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (UseSHA3Intrinsics) {
|
} else if (UseSHA3Intrinsics) {
|
||||||
warning("Intrinsics for SHA3-224, SHA3-256, SHA3-384 and SHA3-512 crypto hash functions not available on this CPU.");
|
warning("Intrinsics for SHA3-224, SHA3-256, SHA3-384 and SHA3-512 crypto hash functions not available on this CPU.");
|
||||||
FLAG_SET_DEFAULT(UseSHA3Intrinsics, false);
|
FLAG_SET_DEFAULT(UseSHA3Intrinsics, false);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2006, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2014, 2019, Red Hat Inc. All rights reserved.
|
* Copyright (c) 2014, 2019, Red Hat Inc. All rights reserved.
|
||||||
* Copyright (c) 2021, Azul Systems, Inc. All rights reserved.
|
* Copyright (c) 2021, Azul Systems, Inc. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
@ -53,20 +53,46 @@ static bool cpu_has(const char* optional) {
|
|||||||
void VM_Version::get_os_cpu_info() {
|
void VM_Version::get_os_cpu_info() {
|
||||||
size_t sysctllen;
|
size_t sysctllen;
|
||||||
|
|
||||||
// hw.optional.floatingpoint always returns 1, see
|
// cpu_has() uses sysctlbyname function to check the existence of CPU
|
||||||
// https://github.com/apple/darwin-xnu/blob/master/bsd/kern/kern_mib.c#L416.
|
// features. References: Apple developer document [1] and XNU kernel [2].
|
||||||
// ID_AA64PFR0_EL1 describes AdvSIMD always equals to FP field.
|
// [1] https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics
|
||||||
assert(cpu_has("hw.optional.floatingpoint"), "should be");
|
// [2] https://github.com/apple-oss-distributions/xnu/blob/main/bsd/kern/kern_mib.c
|
||||||
assert(cpu_has("hw.optional.neon"), "should be");
|
//
|
||||||
|
// Note that for some features (e.g., LSE, SHA512 and SHA3) there are two
|
||||||
|
// parameters for sysctlbyname, which are invented at different times.
|
||||||
|
// Considering backward compatibility, we check both here.
|
||||||
|
//
|
||||||
|
// Floating-point and Advance SIMD features are standard in Apple processors
|
||||||
|
// beginning with M1 and A7, and don't need to be checked [1].
|
||||||
|
// 1) hw.optional.floatingpoint always returns 1 [2].
|
||||||
|
// 2) ID_AA64PFR0_EL1 describes AdvSIMD always equals to FP field.
|
||||||
|
// See the Arm ARM, section "ID_AA64PFR0_EL1, AArch64 Processor Feature
|
||||||
|
// Register 0".
|
||||||
_features = CPU_FP | CPU_ASIMD;
|
_features = CPU_FP | CPU_ASIMD;
|
||||||
|
|
||||||
// All Apple-darwin Arm processors have AES and PMULL.
|
// All Apple-darwin Arm processors have AES, PMULL, SHA1 and SHA2.
|
||||||
_features |= CPU_AES | CPU_PMULL;
|
// See https://github.com/apple-oss-distributions/xnu/blob/main/osfmk/arm/commpage/commpage.c#L412
|
||||||
|
assert(cpu_has("hw.optional.arm.FEAT_AES"), "should be");
|
||||||
|
assert(cpu_has("hw.optional.arm.FEAT_PMULL"), "should be");
|
||||||
|
assert(cpu_has("hw.optional.arm.FEAT_SHA1"), "should be");
|
||||||
|
assert(cpu_has("hw.optional.arm.FEAT_SHA256"), "should be");
|
||||||
|
_features |= CPU_AES | CPU_PMULL | CPU_SHA1 | CPU_SHA2;
|
||||||
|
|
||||||
// Only few features are available via sysctl, see line 614
|
if (cpu_has("hw.optional.armv8_crc32")) {
|
||||||
// https://opensource.apple.com/source/xnu/xnu-6153.141.1/bsd/kern/kern_mib.c.auto.html
|
_features |= CPU_CRC32;
|
||||||
if (cpu_has("hw.optional.armv8_crc32")) _features |= CPU_CRC32;
|
}
|
||||||
if (cpu_has("hw.optional.armv8_1_atomics")) _features |= CPU_LSE;
|
if (cpu_has("hw.optional.arm.FEAT_LSE") ||
|
||||||
|
cpu_has("hw.optional.armv8_1_atomics")) {
|
||||||
|
_features |= CPU_LSE;
|
||||||
|
}
|
||||||
|
if (cpu_has("hw.optional.arm.FEAT_SHA512") ||
|
||||||
|
cpu_has("hw.optional.armv8_2_sha512")) {
|
||||||
|
_features |= CPU_SHA512;
|
||||||
|
}
|
||||||
|
if (cpu_has("hw.optional.arm.FEAT_SHA3") ||
|
||||||
|
cpu_has("hw.optional.armv8_2_sha3")) {
|
||||||
|
_features |= CPU_SHA3;
|
||||||
|
}
|
||||||
|
|
||||||
int cache_line_size;
|
int cache_line_size;
|
||||||
int hw_conf_cache_line[] = { CTL_HW, HW_CACHELINE };
|
int hw_conf_cache_line[] = { CTL_HW, HW_CACHELINE };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user