< prev index next > src/hotspot/cpu/aarch64/vm_version_aarch64.cpp
Print this page
if (FLAG_IS_DEFAULT(MaxVectorSize)) {
MaxVectorSize = _initial_sve_vector_length;
} else if (MaxVectorSize < 16) {
warning("SVE does not support vector length less than 16 bytes. Disabling SVE.");
UseSVE = 0;
- } else if (MaxVectorSize % 16 == 0) {
+ } else if ((MaxVectorSize % 16) == 0 && is_power_of_2(MaxVectorSize)) {
int new_vl = prctl(PR_SVE_SET_VL, MaxVectorSize);
_initial_sve_vector_length = new_vl;
// If MaxVectorSize is larger than system largest supported SVE vector length, above prctl()
// call will set task vector length to the system largest supported value. So, we also update
// MaxVectorSize to that largest supported value.
} else {
vm_exit_during_initialization(err_msg("Unsupported MaxVectorSize: %d", (int)MaxVectorSize));
}
}
+ if (UseSVE == 0) { // NEON
+ int min_vector_size = 8;
+ int max_vector_size = 16;
+ if (!FLAG_IS_DEFAULT(MaxVectorSize)) {
+ if (!is_power_of_2(MaxVectorSize)) {
+ vm_exit_during_initialization(err_msg("Unsupported MaxVectorSize: %d", (int)MaxVectorSize));
+ } else if (MaxVectorSize < min_vector_size) {
+ warning("MaxVectorSize must be at least %i on this platform", min_vector_size);
+ FLAG_SET_DEFAULT(MaxVectorSize, min_vector_size);
+ } else if (MaxVectorSize > max_vector_size) {
+ warning("MaxVectorSize must be at most %i on this platform", max_vector_size);
+ FLAG_SET_DEFAULT(MaxVectorSize, max_vector_size);
+ }
+ } else {
+ FLAG_SET_DEFAULT(MaxVectorSize, 16);
+ }
+ }
+
if (FLAG_IS_DEFAULT(OptoScheduling)) {
OptoScheduling = true;
}
if (FLAG_IS_DEFAULT(AlignVector)) {
< prev index next >