314 bool inline_isCompileConstant();
315
316 // Vector API support
317 bool inline_vector_nary_operation(int n);
318 bool inline_vector_frombits_coerced();
319 bool inline_vector_shuffle_to_vector();
320 bool inline_vector_shuffle_iota();
321 bool inline_vector_mask_operation();
322 bool inline_vector_mem_operation(bool is_store);
323 bool inline_vector_mem_masked_operation(bool is_store);
324 bool inline_vector_gather_scatter(bool is_scatter);
325 bool inline_vector_reduction();
326 bool inline_vector_test();
327 bool inline_vector_blend();
328 bool inline_vector_rearrange();
329 bool inline_vector_compare();
330 bool inline_vector_broadcast_int();
331 bool inline_vector_convert();
332 bool inline_vector_extract();
333 bool inline_vector_insert();
334 Node* gen_call_to_svml(int vector_api_op_id, BasicType bt, int num_elem, Node* opd1, Node* opd2);
335
336 enum VectorMaskUseType {
337 VecMaskUseLoad = 1 << 0,
338 VecMaskUseStore = 1 << 1,
339 VecMaskUseAll = VecMaskUseLoad | VecMaskUseStore,
340 VecMaskUsePred = 1 << 2,
341 VecMaskNotUsed = 1 << 3
342 };
343
344 bool arch_supports_vector(int op, int num_elem, BasicType type, VectorMaskUseType mask_use_type, bool has_scalar_args = false);
345 bool arch_supports_vector_rotate(int opc, int num_elem, BasicType elem_bt, VectorMaskUseType mask_use_type, bool has_scalar_args = false);
346
347 void clear_upper_avx() {
348 #ifdef X86
349 if (UseAVX >= 2) {
350 C->set_clear_upper_avx(true);
351 }
352 #endif
353 }
|
314 bool inline_isCompileConstant();
315
316 // Vector API support
317 bool inline_vector_nary_operation(int n);
318 bool inline_vector_frombits_coerced();
319 bool inline_vector_shuffle_to_vector();
320 bool inline_vector_shuffle_iota();
321 bool inline_vector_mask_operation();
322 bool inline_vector_mem_operation(bool is_store);
323 bool inline_vector_mem_masked_operation(bool is_store);
324 bool inline_vector_gather_scatter(bool is_scatter);
325 bool inline_vector_reduction();
326 bool inline_vector_test();
327 bool inline_vector_blend();
328 bool inline_vector_rearrange();
329 bool inline_vector_compare();
330 bool inline_vector_broadcast_int();
331 bool inline_vector_convert();
332 bool inline_vector_extract();
333 bool inline_vector_insert();
334 bool inline_vector_compress_expand();
335
336 Node* gen_call_to_svml(int vector_api_op_id, BasicType bt, int num_elem, Node* opd1, Node* opd2);
337
338 enum VectorMaskUseType {
339 VecMaskUseLoad = 1 << 0,
340 VecMaskUseStore = 1 << 1,
341 VecMaskUseAll = VecMaskUseLoad | VecMaskUseStore,
342 VecMaskUsePred = 1 << 2,
343 VecMaskNotUsed = 1 << 3
344 };
345
346 bool arch_supports_vector(int op, int num_elem, BasicType type, VectorMaskUseType mask_use_type, bool has_scalar_args = false);
347 bool arch_supports_vector_rotate(int opc, int num_elem, BasicType elem_bt, VectorMaskUseType mask_use_type, bool has_scalar_args = false);
348
349 void clear_upper_avx() {
350 #ifdef X86
351 if (UseAVX >= 2) {
352 C->set_clear_upper_avx(true);
353 }
354 #endif
355 }
|