< prev index next >
src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp
Print this page
*** 378,388 ****
if (av & AV_SPARC_PAUSE) features |= ISA_pause_msk;
if (av & AV_SPARC_CBCOND) features |= ISA_cbcond_msk;
if (av & AV_SPARC_CRC32C) features |= ISA_crc32c_msk;
#ifndef AV2_SPARC_FJATHPLUS
! #define AV2_SPARC_FJATHPLUS 0x00000001 // Fujitsu Athena+
#endif
#ifndef AV2_SPARC_VIS3B
#define AV2_SPARC_VIS3B 0x00000002 // VIS3 present on multiple chips
#endif
#ifndef AV2_SPARC_ADI
--- 378,388 ----
if (av & AV_SPARC_PAUSE) features |= ISA_pause_msk;
if (av & AV_SPARC_CBCOND) features |= ISA_cbcond_msk;
if (av & AV_SPARC_CRC32C) features |= ISA_crc32c_msk;
#ifndef AV2_SPARC_FJATHPLUS
! #define AV2_SPARC_FJATHPLUS 0x00000001 // Fujitsu Athena+ insns
#endif
#ifndef AV2_SPARC_VIS3B
#define AV2_SPARC_VIS3B 0x00000002 // VIS3 present on multiple chips
#endif
#ifndef AV2_SPARC_ADI
*** 405,414 ****
--- 405,442 ----
#endif
#ifndef AV2_SPARC_VAMASK
#define AV2_SPARC_VAMASK 0x00000100 // Virtual Address masking
#endif
+ #ifndef AV2_SPARC_SPARC6
+ #define AV2_SPARC_SPARC6 0x00000200 // REVB*, FPSLL*, RDENTROPY, LDM* and STM*
+ #endif
+ #ifndef AV2_SPARC_DICTUNP
+ #define AV2_SPARC_DICTUNP 0x00002000 // Dictionary unpack instruction
+ #endif
+ #ifndef AV2_SPARC_FPCMPSHL
+ #define AV2_SPARC_FPCMPSHL 0x00004000 // Partition compare with shifted result
+ #endif
+ #ifndef AV2_SPARC_RLE
+ #define AV2_SPARC_RLE 0x00008000 // Run-length encoded burst and length
+ #endif
+ #ifndef AV2_SPARC_SHA3
+ #define AV2_SPARC_SHA3 0x00010000 // SHA3 instructions
+ #endif
+ #ifndef AV2_SPARC_FJATHPLUS2
+ #define AV2_SPARC_FJATHPLUS2 0x00020000 // Fujitsu Athena++ insns
+ #endif
+ #ifndef AV2_SPARC_VIS3C
+ #define AV2_SPARC_VIS3C 0x00040000 // Subset of VIS3 insns provided by Athena++
+ #endif
+ #ifndef AV2_SPARC_SPARC5B
+ #define AV2_SPARC_SPARC5B 0x00080000 // subset of SPARC5 insns (fpadd8, fpsub8)
+ #endif
+ #ifndef AV2_SPARC_MME
+ #define AV2_SPARC_MME 0x00100000 // Misaligned Mitigation Enable
+ #endif
+
if (avn > 1) {
uint32_t av2 = avs[AV_HW2_IDX];
if (av2 & AV2_SPARC_FJATHPLUS) features |= ISA_fjathplus_msk;
if (av2 & AV2_SPARC_VIS3B) features |= ISA_vis3b_msk;
*** 417,439 ****
if (av2 & AV2_SPARC_MWAIT) features |= ISA_mwait_msk;
if (av2 & AV2_SPARC_XMPMUL) features |= ISA_xmpmul_msk;
if (av2 & AV2_SPARC_XMONT) features |= ISA_xmont_msk;
if (av2 & AV2_SPARC_PAUSE_NSEC) features |= ISA_pause_nsec_msk;
if (av2 & AV2_SPARC_VAMASK) features |= ISA_vamask_msk;
}
_features = features; // ISA feature set completed, update state.
Sysinfo machine(SI_MACHINE);
! bool is_sun4v = machine.match("sun4v"); // All Oracle SPARC + Fujitsu Athena+
bool is_sun4u = machine.match("sun4u"); // All other Fujitsu
! // Handle Athena+ conservatively (simply because we are lacking info.).
! bool do_sun4v = is_sun4v && !has_athena_plus();
! bool do_sun4u = is_sun4u || has_athena_plus();
uint64_t synthetic = 0;
if (do_sun4v) {
// Indirect and direct branches are equally fast.
--- 445,478 ----
if (av2 & AV2_SPARC_MWAIT) features |= ISA_mwait_msk;
if (av2 & AV2_SPARC_XMPMUL) features |= ISA_xmpmul_msk;
if (av2 & AV2_SPARC_XMONT) features |= ISA_xmont_msk;
if (av2 & AV2_SPARC_PAUSE_NSEC) features |= ISA_pause_nsec_msk;
if (av2 & AV2_SPARC_VAMASK) features |= ISA_vamask_msk;
+
+ if (av2 & AV2_SPARC_SPARC6) features |= ISA_sparc6_msk;
+ if (av2 & AV2_SPARC_DICTUNP) features |= ISA_dictunp_msk;
+ if (av2 & AV2_SPARC_FPCMPSHL) features |= ISA_fpcmpshl_msk;
+ if (av2 & AV2_SPARC_RLE) features |= ISA_rle_msk;
+ if (av2 & AV2_SPARC_SHA3) features |= ISA_sha3_msk;
+ if (av2 & AV2_SPARC_FJATHPLUS2) features |= ISA_fjathplus2_msk;
+ if (av2 & AV2_SPARC_VIS3C) features |= ISA_vis3c_msk;
+ if (av2 & AV2_SPARC_SPARC5B) features |= ISA_sparc5b_msk;
+ if (av2 & AV2_SPARC_MME) features |= ISA_mme_msk;
}
_features = features; // ISA feature set completed, update state.
Sysinfo machine(SI_MACHINE);
! bool is_sun4v = machine.match("sun4v"); // All Oracle SPARC + Fujitsu Athena+/++
bool is_sun4u = machine.match("sun4u"); // All other Fujitsu
! // Handle Athena+/++ conservatively (simply because we are lacking info.).
! bool an_athena = has_athena_plus() || has_athena_plus2();
! bool do_sun4v = is_sun4v && !an_athena;
! bool do_sun4u = is_sun4u || an_athena;
uint64_t synthetic = 0;
if (do_sun4v) {
// Indirect and direct branches are equally fast.
< prev index next >