1 /*
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
107
108 // Instruction support
109 static bool has_v8() { return (_features & v8_instructions_m) != 0; }
110 static bool has_v9() { return (_features & v9_instructions_m) != 0; }
111 static bool has_hardware_mul32() { return (_features & hardware_mul32_m) != 0; }
112 static bool has_hardware_div32() { return (_features & hardware_div32_m) != 0; }
113 static bool has_hardware_fsmuld() { return (_features & hardware_fsmuld_m) != 0; }
114 static bool has_hardware_popc() { return (_features & hardware_popc_m) != 0; }
115 static bool has_vis1() { return (_features & vis1_instructions_m) != 0; }
116 static bool has_vis2() { return (_features & vis2_instructions_m) != 0; }
117 static bool has_vis3() { return (_features & vis3_instructions_m) != 0; }
118 static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; }
119 static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; }
120
121 static bool supports_compare_and_exchange()
122 { return has_v9(); }
123
124 // Returns true if the platform is in the niagara line (T series)
125 // and newer than the niagara1.
126 static bool is_niagara_plus() { return is_T_family(_features) && !is_T1_model(_features); }
127 static bool is_T4() { return is_T_family(_features) && has_cbcond(); }
128
129 // Fujitsu SPARC64
130 static bool is_sparc64() { return (_features & sparc64_family_m) != 0; }
131
132 static bool is_sun4v() { return (_features & sun4v_m) != 0; }
133 static bool is_ultra3() { return (_features & ultra3_m) == ultra3_m && !is_sun4v() && !is_sparc64(); }
134
135 static bool has_fast_fxtof() { return is_niagara() || is_sparc64() || has_v9() && !is_ultra3(); }
136 static bool has_fast_idiv() { return is_niagara_plus() || is_sparc64(); }
137
138 // T4 and newer Sparc have fast RDPC instruction.
139 static bool has_fast_rdpc() { return is_T4(); }
140
141 // On T4 and newer Sparc BIS to the beginning of cache line always zeros it.
142 static bool has_block_zeroing() { return has_blk_init() && is_T4(); }
143
144 static const char* cpu_features() { return _features_str; }
145
146 static intx prefetch_data_size() {
|
1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
107
108 // Instruction support
109 static bool has_v8() { return (_features & v8_instructions_m) != 0; }
110 static bool has_v9() { return (_features & v9_instructions_m) != 0; }
111 static bool has_hardware_mul32() { return (_features & hardware_mul32_m) != 0; }
112 static bool has_hardware_div32() { return (_features & hardware_div32_m) != 0; }
113 static bool has_hardware_fsmuld() { return (_features & hardware_fsmuld_m) != 0; }
114 static bool has_hardware_popc() { return (_features & hardware_popc_m) != 0; }
115 static bool has_vis1() { return (_features & vis1_instructions_m) != 0; }
116 static bool has_vis2() { return (_features & vis2_instructions_m) != 0; }
117 static bool has_vis3() { return (_features & vis3_instructions_m) != 0; }
118 static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; }
119 static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; }
120
121 static bool supports_compare_and_exchange()
122 { return has_v9(); }
123
124 // Returns true if the platform is in the niagara line (T series)
125 // and newer than the niagara1.
126 static bool is_niagara_plus() { return is_T_family(_features) && !is_T1_model(_features); }
127
128 static bool is_M_series() { return is_M_family(_features); }
129 static bool is_T4() { return is_T_family(_features) && has_cbcond(); }
130
131 // Fujitsu SPARC64
132 static bool is_sparc64() { return (_features & sparc64_family_m) != 0; }
133
134 static bool is_sun4v() { return (_features & sun4v_m) != 0; }
135 static bool is_ultra3() { return (_features & ultra3_m) == ultra3_m && !is_sun4v() && !is_sparc64(); }
136
137 static bool has_fast_fxtof() { return is_niagara() || is_sparc64() || has_v9() && !is_ultra3(); }
138 static bool has_fast_idiv() { return is_niagara_plus() || is_sparc64(); }
139
140 // T4 and newer Sparc have fast RDPC instruction.
141 static bool has_fast_rdpc() { return is_T4(); }
142
143 // On T4 and newer Sparc BIS to the beginning of cache line always zeros it.
144 static bool has_block_zeroing() { return has_blk_init() && is_T4(); }
145
146 static const char* cpu_features() { return _features_str; }
147
148 static intx prefetch_data_size() {
|