25
25
26
26
#include " precompiled.hpp"
27
27
#include " pauth_aarch64.hpp"
28
+ #include " register_aarch64.hpp"
28
29
#include " runtime/arguments.hpp"
29
30
#include " runtime/globals_extension.hpp"
30
31
#include " runtime/java.hpp"
@@ -44,6 +45,7 @@ int VM_Version::_zva_length;
44
45
int VM_Version::_dcache_line_size;
45
46
int VM_Version::_icache_line_size;
46
47
int VM_Version::_initial_sve_vector_length;
48
+ int VM_Version::_max_supported_sve_vector_length;
47
49
bool VM_Version::_rop_protection;
48
50
uintptr_t VM_Version::_pac_mask;
49
51
@@ -507,30 +509,37 @@ void VM_Version::initialize() {
507
509
if (UseSVE > 0 ) {
508
510
if (FLAG_IS_DEFAULT (MaxVectorSize)) {
509
511
MaxVectorSize = _initial_sve_vector_length;
510
- } else if (MaxVectorSize < 16 ) {
511
- warning (" SVE does not support vector length less than 16 bytes. Disabling SVE." );
512
+ } else if (MaxVectorSize < FloatRegister::sve_vl_min) {
513
+ warning (" SVE does not support vector length less than %d bytes. Disabling SVE." ,
514
+ FloatRegister::sve_vl_min);
512
515
UseSVE = 0 ;
513
- } else if ((MaxVectorSize % 16 ) == 0 && is_power_of_2 (MaxVectorSize)) {
514
- int new_vl = set_and_get_current_sve_vector_length (MaxVectorSize);
515
- _initial_sve_vector_length = new_vl;
516
- // Update MaxVectorSize to the largest supported value.
517
- if (new_vl < 0 ) {
518
- vm_exit_during_initialization (
519
- err_msg (" Current system does not support SVE vector length for MaxVectorSize: %d" ,
520
- (int )MaxVectorSize));
521
- } else if (new_vl != MaxVectorSize) {
522
- warning (" Current system only supports max SVE vector length %d. Set MaxVectorSize to %d" ,
523
- new_vl, new_vl);
524
- }
525
- MaxVectorSize = new_vl;
526
- } else {
516
+ } else if (!((MaxVectorSize % FloatRegister::sve_vl_min) == 0 && is_power_of_2 (MaxVectorSize))) {
527
517
vm_exit_during_initialization (err_msg (" Unsupported MaxVectorSize: %d" , (int )MaxVectorSize));
528
518
}
519
+
520
+ if (UseSVE > 0 ) {
521
+ // Acquire the largest supported vector length of this machine
522
+ _max_supported_sve_vector_length = set_and_get_current_sve_vector_length (FloatRegister::sve_vl_max);
523
+
524
+ if (MaxVectorSize != _max_supported_sve_vector_length) {
525
+ int new_vl = set_and_get_current_sve_vector_length (MaxVectorSize);
526
+ if (new_vl < 0 ) {
527
+ vm_exit_during_initialization (
528
+ err_msg (" Current system does not support SVE vector length for MaxVectorSize: %d" ,
529
+ (int )MaxVectorSize));
530
+ } else if (new_vl != MaxVectorSize) {
531
+ warning (" Current system only supports max SVE vector length %d. Set MaxVectorSize to %d" ,
532
+ new_vl, new_vl);
533
+ }
534
+ MaxVectorSize = new_vl;
535
+ }
536
+ _initial_sve_vector_length = MaxVectorSize;
537
+ }
529
538
}
530
539
531
540
if (UseSVE == 0 ) { // NEON
532
541
int min_vector_size = 8 ;
533
- int max_vector_size = 16 ;
542
+ int max_vector_size = FloatRegister::neon_vl ;
534
543
if (!FLAG_IS_DEFAULT (MaxVectorSize)) {
535
544
if (!is_power_of_2 (MaxVectorSize)) {
536
545
vm_exit_during_initialization (err_msg (" Unsupported MaxVectorSize: %d" , (int )MaxVectorSize));
@@ -542,11 +551,11 @@ void VM_Version::initialize() {
542
551
FLAG_SET_DEFAULT (MaxVectorSize, max_vector_size);
543
552
}
544
553
} else {
545
- FLAG_SET_DEFAULT (MaxVectorSize, 16 );
554
+ FLAG_SET_DEFAULT (MaxVectorSize, FloatRegister::neon_vl );
546
555
}
547
556
}
548
557
549
- int inline_size = (UseSVE > 0 && MaxVectorSize >= 16 ) ? MaxVectorSize : 0 ;
558
+ int inline_size = (UseSVE > 0 && MaxVectorSize >= FloatRegister::sve_vl_min ) ? MaxVectorSize : 0 ;
550
559
if (FLAG_IS_DEFAULT (ArrayOperationPartialInlineSize)) {
551
560
FLAG_SET_DEFAULT (ArrayOperationPartialInlineSize, inline_size);
552
561
} else if (ArrayOperationPartialInlineSize != 0 && ArrayOperationPartialInlineSize != inline_size) {
0 commit comments