< 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 >