mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-03 19:48:46 +00:00
8371651: [AArch64] Populate CPU _features flag on Windows
Reviewed-by: dholmes, bstafford, aph
This commit is contained in:
parent
c76381996a
commit
52fd46d3a6
42
src/hotspot/os_cpu/windows_aarch64/sve_windows_aarch64.S
Normal file
42
src/hotspot/os_cpu/windows_aarch64/sve_windows_aarch64.S
Normal file
@ -0,0 +1,42 @@
|
||||
;
|
||||
; Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved.
|
||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
;
|
||||
; This code is free software; you can redistribute it and/or modify it
|
||||
; under the terms of the GNU General Public License version 2 only, as
|
||||
; published by the Free Software Foundation.
|
||||
;
|
||||
; This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
; version 2 for more details (a copy is included in the LICENSE file that
|
||||
; accompanied this code).
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License version
|
||||
; 2 along with this work; if not, write to the Free Software Foundation,
|
||||
; Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
;
|
||||
; Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
; or visit www.oracle.com if you need additional information or have any
|
||||
; questions.
|
||||
;
|
||||
|
||||
; Support for int get_sve_vector_length();
|
||||
;
|
||||
; Returns the current SVE vector length in bytes.
|
||||
; This function uses the INCB instruction which increments a register
|
||||
; by the number of bytes in an SVE vector register.
|
||||
;
|
||||
; Note: This function will fault if SVE is not available or enabled.
|
||||
; The caller must ensure SVE support is detected before calling.
|
||||
|
||||
ALIGN 4
|
||||
EXPORT get_sve_vector_length
|
||||
AREA sve_text, CODE
|
||||
|
||||
get_sve_vector_length
|
||||
mov x0, #0
|
||||
incb x0
|
||||
ret
|
||||
|
||||
END
|
||||
@ -26,16 +26,19 @@
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/vm_version.hpp"
|
||||
|
||||
// Assembly function to get SVE vector length using INCB instruction
|
||||
extern "C" int get_sve_vector_length();
|
||||
|
||||
int VM_Version::get_current_sve_vector_length() {
|
||||
assert(VM_Version::supports_sve(), "should not call this");
|
||||
ShouldNotReachHere();
|
||||
return 0;
|
||||
// Use assembly instruction to get the actual SVE vector length
|
||||
return VM_Version::supports_sve() ? get_sve_vector_length() : 0; // This value is in bytes
|
||||
}
|
||||
|
||||
int VM_Version::set_and_get_current_sve_vector_length(int length) {
|
||||
assert(VM_Version::supports_sve(), "should not call this");
|
||||
ShouldNotReachHere();
|
||||
return 0;
|
||||
// Use assembly instruction to get the SVE vector length
|
||||
return VM_Version::supports_sve() ? get_sve_vector_length() : 0; // This value is in bytes
|
||||
}
|
||||
|
||||
void VM_Version::get_os_cpu_info() {
|
||||
@ -47,11 +50,29 @@ void VM_Version::get_os_cpu_info() {
|
||||
set_feature(CPU_AES);
|
||||
set_feature(CPU_SHA1);
|
||||
set_feature(CPU_SHA2);
|
||||
set_feature(CPU_PMULL);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_VFP_32_REGISTERS_AVAILABLE)) {
|
||||
set_feature(CPU_ASIMD);
|
||||
}
|
||||
// No check for CPU_PMULL, CPU_SVE, CPU_SVE2
|
||||
if (IsProcessorFeaturePresent(PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_LSE);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_SVE_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_SVE);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_SVE2);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_SVEBITPERM);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_SHA3);
|
||||
}
|
||||
if (IsProcessorFeaturePresent(PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE)) {
|
||||
set_feature(CPU_SHA512);
|
||||
}
|
||||
|
||||
__int64 dczid_el0 = _ReadStatusReg(0x5807 /* ARM64_DCZID_EL0 */);
|
||||
|
||||
@ -102,8 +123,8 @@ void VM_Version::get_os_cpu_info() {
|
||||
SYSTEM_INFO si;
|
||||
GetSystemInfo(&si);
|
||||
_model = si.wProcessorLevel;
|
||||
_variant = si.wProcessorRevision / 0xFF;
|
||||
_revision = si.wProcessorRevision & 0xFF;
|
||||
_variant = (si.wProcessorRevision >> 8) & 0xFF; // Variant is the upper byte of wProcessorRevision
|
||||
_revision = si.wProcessorRevision & 0xFF; // Revision is the lower byte of wProcessorRevision
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user