170 }
171
172 // Some microarchitectures have mask registers used on vectors
173 static const bool has_predicated_vectors(void) {
174 return VM_Version::supports_evex();
175 }
176
177 // true means we have fast l2f conversion
178 // false means that conversion is done by runtime call
179 static constexpr bool convL2FSupported(void) {
180 return true;
181 }
182
183 // Implements a variant of EncodeISOArrayNode that encode ASCII only
184 static const bool supports_encode_ascii_array = true;
185
186 // Returns pre-selection estimated size of a vector operation.
187 static int vector_op_pre_select_sz_estimate(int vopc, BasicType ety, int vlen) {
188 switch(vopc) {
189 default: return 0;
190 case Op_PopCountVI: return VM_Version::supports_avx512_vpopcntdq() ? 0 : 50;
191 case Op_PopCountVL: return VM_Version::supports_avx512_vpopcntdq() ? 0 : 40;
192 case Op_RoundVF: // fall through
193 case Op_RoundVD: {
194 return 30;
195 }
196 }
197 }
198 // Returns pre-selection estimated size of a scalar operation.
199 static int scalar_op_pre_select_sz_estimate(int vopc, BasicType ety) {
200 switch(vopc) {
201 default: return 0;
202 case Op_RoundF: // fall through
203 case Op_RoundD: {
204 return 30;
205 }
206 }
207 }
208
209 #endif // CPU_X86_MATCHER_X86_HPP
|
170 }
171
172 // Some microarchitectures have mask registers used on vectors
173 static const bool has_predicated_vectors(void) {
174 return VM_Version::supports_evex();
175 }
176
177 // true means we have fast l2f conversion
178 // false means that conversion is done by runtime call
179 static constexpr bool convL2FSupported(void) {
180 return true;
181 }
182
183 // Implements a variant of EncodeISOArrayNode that encode ASCII only
184 static const bool supports_encode_ascii_array = true;
185
186 // Returns pre-selection estimated size of a vector operation.
187 static int vector_op_pre_select_sz_estimate(int vopc, BasicType ety, int vlen) {
188 switch(vopc) {
189 default: return 0;
190 case Op_CountTrailingZerosV:
191 case Op_CountLeadingZerosV:
192 return VM_Version::supports_avx512cd() && (ety == T_INT || ety == T_LONG) ? 0 : 40;
193 case Op_PopCountVI:
194 return ((ety == T_INT && VM_Version::supports_avx512_vpopcntdq()) ||
195 (is_subword_type(ety) && VM_Version::supports_avx512_bitalg())) ? 0 : 50;
196 case Op_PopCountVL:
197 return VM_Version::supports_avx512_vpopcntdq() ? 0 : 40;
198 case Op_ReverseV: return VM_Version::supports_gfni() ? 0 : 30;
199 case Op_RoundVF: // fall through
200 case Op_RoundVD: {
201 return 30;
202 }
203 }
204 }
205
206 // Returns pre-selection estimated size of a scalar operation.
207 static int scalar_op_pre_select_sz_estimate(int vopc, BasicType ety) {
208 switch(vopc) {
209 default: return 0;
210 case Op_RoundF: // fall through
211 case Op_RoundD: {
212 return 30;
213 }
214 }
215 }
216
217 #endif // CPU_X86_MATCHER_X86_HPP
|