Mercurial > hg > truffle
comparison src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp @ 14312:73b1030c6253
8031290: Adjust call to getisax() for additional words returned
Reviewed-by: kvn, iveresov, twisti
author | jmasa |
---|---|
date | Wed, 15 Jan 2014 07:20:04 -0800 |
parents | 00f5eff62d18 |
children | 4ca6dc0799b6 b20a35eae442 |
comparison
equal
deleted
inserted
replaced
14311:e9fc29d2e8ae | 14312:73b1030c6253 |
---|---|
73 | 73 |
74 // Check 64-bit architecture. | 74 // Check 64-bit architecture. |
75 do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m); | 75 do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m); |
76 | 76 |
77 // Extract valid instruction set extensions. | 77 // Extract valid instruction set extensions. |
78 uint_t av; | 78 uint_t avs[2]; |
79 uint_t avn = os::Solaris::getisax(&av, 1); | 79 uint_t avn = os::Solaris::getisax(avs, 2); |
80 assert(avn == 1, "should only return one av"); | 80 assert(avn <= 2, "should return two or less av's"); |
81 | 81 uint_t av = avs[0]; |
82 #ifndef PRODUCT | 82 |
83 if (PrintMiscellaneous && Verbose) | 83 #ifndef PRODUCT |
84 tty->print_cr("getisax(2) returned: " PTR32_FORMAT, av); | 84 if (PrintMiscellaneous && Verbose) { |
85 tty->print("getisax(2) returned: " PTR32_FORMAT, av); | |
86 if (avn > 1) { | |
87 tty->print(", " PTR32_FORMAT, avs[1]); | |
88 } | |
89 tty->cr(); | |
90 } | |
85 #endif | 91 #endif |
86 | 92 |
87 if (av & AV_SPARC_MUL32) features |= hardware_mul32_m; | 93 if (av & AV_SPARC_MUL32) features |= hardware_mul32_m; |
88 if (av & AV_SPARC_DIV32) features |= hardware_div32_m; | 94 if (av & AV_SPARC_DIV32) features |= hardware_div32_m; |
89 if (av & AV_SPARC_FSMULD) features |= hardware_fsmuld_m; | 95 if (av & AV_SPARC_FSMULD) features |= hardware_fsmuld_m; |
90 if (av & AV_SPARC_V8PLUS) features |= v9_instructions_m; | 96 if (av & AV_SPARC_V8PLUS) features |= v9_instructions_m; |
91 if (av & AV_SPARC_POPC) features |= hardware_popc_m; | 97 if (av & AV_SPARC_POPC) features |= hardware_popc_m; |
92 if (av & AV_SPARC_VIS) features |= vis1_instructions_m; | 98 if (av & AV_SPARC_VIS) features |= vis1_instructions_m; |
93 if (av & AV_SPARC_VIS2) features |= vis2_instructions_m; | 99 if (av & AV_SPARC_VIS2) features |= vis2_instructions_m; |
100 if (avn > 1) { | |
101 uint_t av2 = avs[1]; | |
102 #ifndef AV2_SPARC_SPARC5 | |
103 #define AV2_SPARC_SPARC5 0x00000008 /* The 29 new fp and sub instructions */ | |
104 #endif | |
105 if (av2 & AV2_SPARC_SPARC5) features |= sparc5_instructions_m; | |
106 } | |
94 | 107 |
95 // Next values are not defined before Solaris 10 | 108 // Next values are not defined before Solaris 10 |
96 // but Solaris 8 is used for jdk6 update builds. | 109 // but Solaris 8 is used for jdk6 update builds. |
97 #ifndef AV_SPARC_ASI_BLK_INIT | 110 #ifndef AV_SPARC_ASI_BLK_INIT |
98 #define AV_SPARC_ASI_BLK_INIT 0x0080 /* ASI_BLK_INIT_xxx ASI */ | 111 #define AV_SPARC_ASI_BLK_INIT 0x0080 /* ASI_BLK_INIT_xxx ASI */ |