< prev index next >
src/hotspot/cpu/ppc/vm_version_ppc.cpp
Print this page
*** 65,75 ****
// Test which instructions are supported and measure cache line size.
determine_features();
// If PowerArchitecturePPC64 hasn't been specified explicitly determine from features.
if (FLAG_IS_DEFAULT(PowerArchitecturePPC64)) {
! if (VM_Version::has_darn()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 9);
} else if (VM_Version::has_lqarx()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 8);
} else if (VM_Version::has_popcntw()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 7);
--- 65,77 ----
// Test which instructions are supported and measure cache line size.
determine_features();
// If PowerArchitecturePPC64 hasn't been specified explicitly determine from features.
if (FLAG_IS_DEFAULT(PowerArchitecturePPC64)) {
! if (VM_Version::has_brw()) {
! FLAG_SET_ERGO(PowerArchitecturePPC64, 10);
! } else if (VM_Version::has_darn()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 9);
} else if (VM_Version::has_lqarx()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 8);
} else if (VM_Version::has_popcntw()) {
FLAG_SET_ERGO(PowerArchitecturePPC64, 7);
*** 82,91 ****
--- 84,94 ----
}
}
bool PowerArchitecturePPC64_ok = false;
switch (PowerArchitecturePPC64) {
+ case 10: if (!VM_Version::has_brw() ) break;
case 9: if (!VM_Version::has_darn() ) break;
case 8: if (!VM_Version::has_lqarx() ) break;
case 7: if (!VM_Version::has_popcntw()) break;
case 6: if (!VM_Version::has_cmpb() ) break;
case 5: if (!VM_Version::has_popcntb()) break;
*** 140,149 ****
--- 143,155 ----
FLAG_SET_ERGO(UseCharacterCompareIntrinsics, true);
}
if (FLAG_IS_DEFAULT(UseVectorByteReverseInstructionsPPC64)) {
FLAG_SET_ERGO(UseVectorByteReverseInstructionsPPC64, true);
}
+ if (FLAG_IS_DEFAULT(UseBASE64Intrinsics)) {
+ FLAG_SET_ERGO(UseBASE64Intrinsics, true);
+ }
} else {
if (UseCountTrailingZerosInstructionsPPC64) {
warning("UseCountTrailingZerosInstructionsPPC64 specified, but needs at least Power9.");
FLAG_SET_DEFAULT(UseCountTrailingZerosInstructionsPPC64, false);
}
*** 153,169 ****
}
if (UseVectorByteReverseInstructionsPPC64) {
warning("UseVectorByteReverseInstructionsPPC64 specified, but needs at least Power9.");
FLAG_SET_DEFAULT(UseVectorByteReverseInstructionsPPC64, false);
}
}
#endif
// Create and print feature-string.
char buf[(num_features+1) * 16]; // Max 16 chars per feature.
jio_snprintf(buf, sizeof(buf),
! "ppc64%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
(has_fsqrt() ? " fsqrt" : ""),
(has_isel() ? " isel" : ""),
(has_lxarxeh() ? " lxarxeh" : ""),
(has_cmpb() ? " cmpb" : ""),
(has_popcntb() ? " popcntb" : ""),
--- 159,179 ----
}
if (UseVectorByteReverseInstructionsPPC64) {
warning("UseVectorByteReverseInstructionsPPC64 specified, but needs at least Power9.");
FLAG_SET_DEFAULT(UseVectorByteReverseInstructionsPPC64, false);
}
+ if (UseBASE64Intrinsics) {
+ warning("UseBASE64Intrinsics specified, but needs at least Power9.");
+ FLAG_SET_DEFAULT(UseCharacterCompareIntrinsics, false);
+ }
}
#endif
// Create and print feature-string.
char buf[(num_features+1) * 16]; // Max 16 chars per feature.
jio_snprintf(buf, sizeof(buf),
! "ppc64%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
(has_fsqrt() ? " fsqrt" : ""),
(has_isel() ? " isel" : ""),
(has_lxarxeh() ? " lxarxeh" : ""),
(has_cmpb() ? " cmpb" : ""),
(has_popcntb() ? " popcntb" : ""),
*** 177,187 ****
(has_vsx() ? " vsx" : ""),
(has_ldbrx() ? " ldbrx" : ""),
(has_stdbrx() ? " stdbrx" : ""),
(has_vshasig() ? " sha" : ""),
(has_tm() ? " rtm" : ""),
! (has_darn() ? " darn" : "")
// Make sure number of %s matches num_features!
);
_features_string = os::strdup(buf);
if (Verbose) {
print_features();
--- 187,198 ----
(has_vsx() ? " vsx" : ""),
(has_ldbrx() ? " ldbrx" : ""),
(has_stdbrx() ? " stdbrx" : ""),
(has_vshasig() ? " sha" : ""),
(has_tm() ? " rtm" : ""),
! (has_darn() ? " darn" : ""),
! (has_brw() ? " brw" : "")
// Make sure number of %s matches num_features!
);
_features_string = os::strdup(buf);
if (Verbose) {
print_features();
*** 833,842 ****
--- 844,854 ----
a->ldbrx(R7, R3_ARG1, R4_ARG2); // code[14] -> ldbrx
a->stdbrx(R7, R3_ARG1, R4_ARG2); // code[15] -> stdbrx
a->vshasigmaw(VR0, VR1, 1, 0xF); // code[16] -> vshasig
// rtm is determined by OS
a->darn(R7); // code[17] -> darn
+ a->brw(R5, R6); // code[18] -> brw
a->blr();
// Emit function to set one cache line to zero. Emit function descriptor and get pointer to it.
void (*zero_cacheline_func_ptr)(char*) = (void(*)(char*))(void *)a->function_entry();
a->dcbz(R3_ARG1); // R3_ARG1 = addr
*** 886,895 ****
--- 898,908 ----
if (code[feature_cntr++]) features |= ldbrx_m;
if (code[feature_cntr++]) features |= stdbrx_m;
if (code[feature_cntr++]) features |= vshasig_m;
// feature rtm_m is determined by OS
if (code[feature_cntr++]) features |= darn_m;
+ if (code[feature_cntr++]) features |= brw_m;
// Print the detection code.
if (PrintAssembly) {
ttyLocker ttyl;
tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " after execution:", p2i(code));
< prev index next >