提交 a5ace2a9 编写于 作者: K kshefov

8131778: java disables UseAES flag when using VIS=2 on sparc

Reviewed-by: iignatyev, kvn
上级 91e49be5
...@@ -286,35 +286,35 @@ void VM_Version::initialize() { ...@@ -286,35 +286,35 @@ void VM_Version::initialize() {
// SPARC T4 and above should have support for AES instructions // SPARC T4 and above should have support for AES instructions
if (has_aes()) { if (has_aes()) {
if (UseVIS > 2) { // AES intrinsics use MOVxTOd/MOVdTOx which are VIS3 if (FLAG_IS_DEFAULT(UseAES)) {
if (FLAG_IS_DEFAULT(UseAES)) { FLAG_SET_DEFAULT(UseAES, true);
FLAG_SET_DEFAULT(UseAES, true); }
} if (!UseAES) {
if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
FLAG_SET_DEFAULT(UseAESIntrinsics, true); warning("AES intrinsics require UseAES flag to be enabled. Intrinsics will be disabled.");
}
// we disable both the AES flags if either of them is disabled on the command line
if (!UseAES || !UseAESIntrinsics) {
FLAG_SET_DEFAULT(UseAES, false);
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
} }
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
} else { } else {
if (UseAES || UseAESIntrinsics) { // The AES intrinsic stubs require AES instruction support (of course)
warning("SPARC AES intrinsics require VIS3 instruction support. Intrinsics will be disabled."); // but also require VIS3 mode or higher for instructions it use.
if (UseAES) { if (UseVIS > 2) {
FLAG_SET_DEFAULT(UseAES, false); if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
} FLAG_SET_DEFAULT(UseAESIntrinsics, true);
if (UseAESIntrinsics) { }
FLAG_SET_DEFAULT(UseAESIntrinsics, false); } else {
} if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
warning("SPARC AES intrinsics require VIS3 instructions. Intrinsics will be disabled.");
} }
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
}
} }
} else if (UseAES || UseAESIntrinsics) { } else if (UseAES || UseAESIntrinsics) {
warning("AES instructions are not available on this CPU"); if (UseAES && !FLAG_IS_DEFAULT(UseAES)) {
if (UseAES) { warning("AES instructions are not available on this CPU");
FLAG_SET_DEFAULT(UseAES, false); FLAG_SET_DEFAULT(UseAES, false);
} }
if (UseAESIntrinsics) { if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
warning("AES intrinsics are not available on this CPU");
FLAG_SET_DEFAULT(UseAESIntrinsics, false); FLAG_SET_DEFAULT(UseAESIntrinsics, false);
} }
} }
......
...@@ -553,12 +553,36 @@ void VM_Version::get_processor_features() { ...@@ -553,12 +553,36 @@ void VM_Version::get_processor_features() {
// Use AES instructions if available. // Use AES instructions if available.
if (supports_aes()) { if (supports_aes()) {
if (FLAG_IS_DEFAULT(UseAES)) { if (FLAG_IS_DEFAULT(UseAES)) {
UseAES = true; FLAG_SET_DEFAULT(UseAES, true);
} }
} else if (UseAES) { if (!UseAES) {
if (!FLAG_IS_DEFAULT(UseAES)) if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
warning("AES intrinsics require UseAES flag to be enabled. Intrinsics will be disabled.");
}
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
} else {
if (UseSSE > 2) {
if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
FLAG_SET_DEFAULT(UseAESIntrinsics, true);
}
} else {
// The AES intrinsic stubs require AES instruction support (of course)
// but also require sse3 mode or higher for instructions it use.
if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
warning("X86 AES intrinsics require SSE3 instructions or higher. Intrinsics will be disabled.");
}
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
}
}
} else if (UseAES || UseAESIntrinsics) {
if (UseAES && !FLAG_IS_DEFAULT(UseAES)) {
warning("AES instructions are not available on this CPU"); warning("AES instructions are not available on this CPU");
FLAG_SET_DEFAULT(UseAES, false); FLAG_SET_DEFAULT(UseAES, false);
}
if (UseAESIntrinsics && !FLAG_IS_DEFAULT(UseAESIntrinsics)) {
warning("AES intrinsics are not available on this CPU");
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
}
} }
// Use CLMUL instructions if available. // Use CLMUL instructions if available.
...@@ -582,18 +606,6 @@ void VM_Version::get_processor_features() { ...@@ -582,18 +606,6 @@ void VM_Version::get_processor_features() {
FLAG_SET_DEFAULT(UseCRC32Intrinsics, false); FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
} }
// The AES intrinsic stubs require AES instruction support (of course)
// but also require sse3 mode for instructions it use.
if (UseAES && (UseSSE > 2)) {
if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
UseAESIntrinsics = true;
}
} else if (UseAESIntrinsics) {
if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
warning("AES intrinsics are not available on this CPU");
FLAG_SET_DEFAULT(UseAESIntrinsics, false);
}
// GHASH/GCM intrinsics // GHASH/GCM intrinsics
if (UseCLMUL && (UseSSE > 2)) { if (UseCLMUL && (UseSSE > 2)) {
if (FLAG_IS_DEFAULT(UseGHASHIntrinsics)) { if (FLAG_IS_DEFAULT(UseGHASHIntrinsics)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册