295 FLAG_SET_DEFAULT(UseSHA256Intrinsics, true);
296 }
297 } else if (UseSHA256Intrinsics) {
298 warning("Intrinsics for SHA-224 and SHA-256 crypto hash functions not available on this CPU.");
299 FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
300 }
301
302 if (UseSHA && has_vshasig()) {
303 if (FLAG_IS_DEFAULT(UseSHA512Intrinsics)) {
304 FLAG_SET_DEFAULT(UseSHA512Intrinsics, true);
305 }
306 } else if (UseSHA512Intrinsics) {
307 warning("Intrinsics for SHA-384 and SHA-512 crypto hash functions not available on this CPU.");
308 FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
309 }
310
311 if (!(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics)) {
312 FLAG_SET_DEFAULT(UseSHA, false);
313 }
314
315 if (FLAG_IS_DEFAULT(UseSquareToLenIntrinsic)) {
316 UseSquareToLenIntrinsic = true;
317 }
318 if (FLAG_IS_DEFAULT(UseMulAddIntrinsic)) {
319 UseMulAddIntrinsic = true;
320 }
321 if (FLAG_IS_DEFAULT(UseMultiplyToLenIntrinsic)) {
322 UseMultiplyToLenIntrinsic = true;
323 }
324 if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
325 UseMontgomeryMultiplyIntrinsic = true;
326 }
327 if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) {
328 UseMontgomerySquareIntrinsic = true;
329 }
330
331 if (UseVectorizedMismatchIntrinsic) {
332 warning("UseVectorizedMismatchIntrinsic specified, but not available on this CPU.");
333 FLAG_SET_DEFAULT(UseVectorizedMismatchIntrinsic, false);
334 }
335
336
337 // Adjust RTM (Restricted Transactional Memory) flags.
338 if (UseRTMLocking) {
339 // If CPU or OS do not support TM:
340 // Can't continue because UseRTMLocking affects UseBiasedLocking flag
341 // setting during arguments processing. See use_biased_locking().
342 // VM_Version_init() is executed after UseBiasedLocking is used
343 // in Thread::allocate().
344 if (PowerArchitecturePPC64 < 8) {
345 vm_exit_during_initialization("RTM instructions are not available on this CPU.");
346 }
347
348 if (!has_tm()) {
349 vm_exit_during_initialization("RTM is not supported on this OS version.");
356 // RTM locking should be used only for applications with
357 // high lock contention. For now we do not use it by default.
358 vm_exit_during_initialization("UseRTMLocking flag should be only set on command line");
359 }
360 #else
361 // Only C2 does RTM locking optimization.
362 // Can't continue because UseRTMLocking affects UseBiasedLocking flag
363 // setting during arguments processing. See use_biased_locking().
364 vm_exit_during_initialization("RTM locking optimization is not supported in this VM");
365 #endif
366 } else { // !UseRTMLocking
367 if (UseRTMForStackLocks) {
368 if (!FLAG_IS_DEFAULT(UseRTMForStackLocks)) {
369 warning("UseRTMForStackLocks flag should be off when UseRTMLocking flag is off");
370 }
371 FLAG_SET_DEFAULT(UseRTMForStackLocks, false);
372 }
373 if (UseRTMDeopt) {
374 FLAG_SET_DEFAULT(UseRTMDeopt, false);
375 }
376 if (PrintPreciseRTMLockingStatistics) {
377 FLAG_SET_DEFAULT(PrintPreciseRTMLockingStatistics, false);
378 }
379 }
380
381 // This machine allows unaligned memory accesses
382 if (FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
383 FLAG_SET_DEFAULT(UseUnalignedAccesses, true);
384 }
385
386 check_virtualizations();
387 }
388
389 void VM_Version::check_virtualizations() {
390 #if defined(_AIX)
391 int rc = 0;
392 perfstat_partition_total_t pinfo;
393 rc = perfstat_partition_total(NULL, &pinfo, sizeof(perfstat_partition_total_t), 1);
394 if (rc == 1) {
395 Abstract_VM_Version::_detected_virtualization = PowerVM;
396 }
397 #else
398 const char* info_file = "/proc/ppc64/lparcfg";
|
295 FLAG_SET_DEFAULT(UseSHA256Intrinsics, true);
296 }
297 } else if (UseSHA256Intrinsics) {
298 warning("Intrinsics for SHA-224 and SHA-256 crypto hash functions not available on this CPU.");
299 FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
300 }
301
302 if (UseSHA && has_vshasig()) {
303 if (FLAG_IS_DEFAULT(UseSHA512Intrinsics)) {
304 FLAG_SET_DEFAULT(UseSHA512Intrinsics, true);
305 }
306 } else if (UseSHA512Intrinsics) {
307 warning("Intrinsics for SHA-384 and SHA-512 crypto hash functions not available on this CPU.");
308 FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
309 }
310
311 if (!(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics)) {
312 FLAG_SET_DEFAULT(UseSHA, false);
313 }
314
315 #ifdef COMPILER2
316 if (FLAG_IS_DEFAULT(UseSquareToLenIntrinsic)) {
317 UseSquareToLenIntrinsic = true;
318 }
319 if (FLAG_IS_DEFAULT(UseMulAddIntrinsic)) {
320 UseMulAddIntrinsic = true;
321 }
322 if (FLAG_IS_DEFAULT(UseMultiplyToLenIntrinsic)) {
323 UseMultiplyToLenIntrinsic = true;
324 }
325 if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
326 UseMontgomeryMultiplyIntrinsic = true;
327 }
328 if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) {
329 UseMontgomerySquareIntrinsic = true;
330 }
331 #endif
332
333 if (UseVectorizedMismatchIntrinsic) {
334 warning("UseVectorizedMismatchIntrinsic specified, but not available on this CPU.");
335 FLAG_SET_DEFAULT(UseVectorizedMismatchIntrinsic, false);
336 }
337
338
339 // Adjust RTM (Restricted Transactional Memory) flags.
340 if (UseRTMLocking) {
341 // If CPU or OS do not support TM:
342 // Can't continue because UseRTMLocking affects UseBiasedLocking flag
343 // setting during arguments processing. See use_biased_locking().
344 // VM_Version_init() is executed after UseBiasedLocking is used
345 // in Thread::allocate().
346 if (PowerArchitecturePPC64 < 8) {
347 vm_exit_during_initialization("RTM instructions are not available on this CPU.");
348 }
349
350 if (!has_tm()) {
351 vm_exit_during_initialization("RTM is not supported on this OS version.");
358 // RTM locking should be used only for applications with
359 // high lock contention. For now we do not use it by default.
360 vm_exit_during_initialization("UseRTMLocking flag should be only set on command line");
361 }
362 #else
363 // Only C2 does RTM locking optimization.
364 // Can't continue because UseRTMLocking affects UseBiasedLocking flag
365 // setting during arguments processing. See use_biased_locking().
366 vm_exit_during_initialization("RTM locking optimization is not supported in this VM");
367 #endif
368 } else { // !UseRTMLocking
369 if (UseRTMForStackLocks) {
370 if (!FLAG_IS_DEFAULT(UseRTMForStackLocks)) {
371 warning("UseRTMForStackLocks flag should be off when UseRTMLocking flag is off");
372 }
373 FLAG_SET_DEFAULT(UseRTMForStackLocks, false);
374 }
375 if (UseRTMDeopt) {
376 FLAG_SET_DEFAULT(UseRTMDeopt, false);
377 }
378 #ifdef COMPILER2
379 if (PrintPreciseRTMLockingStatistics) {
380 FLAG_SET_DEFAULT(PrintPreciseRTMLockingStatistics, false);
381 }
382 #endif
383 }
384
385 // This machine allows unaligned memory accesses
386 if (FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
387 FLAG_SET_DEFAULT(UseUnalignedAccesses, true);
388 }
389
390 check_virtualizations();
391 }
392
393 void VM_Version::check_virtualizations() {
394 #if defined(_AIX)
395 int rc = 0;
396 perfstat_partition_total_t pinfo;
397 rc = perfstat_partition_total(NULL, &pinfo, sizeof(perfstat_partition_total_t), 1);
398 if (rc == 1) {
399 Abstract_VM_Version::_detected_virtualization = PowerVM;
400 }
401 #else
402 const char* info_file = "/proc/ppc64/lparcfg";
|