1303233Sdim/*===------------- avx512ifmaintrin.h - IFMA intrinsics ------------------=== 2303233Sdim * 3303233Sdim * 4353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5353358Sdim * See https://llvm.org/LICENSE.txt for license information. 6353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7303233Sdim * 8303233Sdim *===-----------------------------------------------------------------------=== 9303233Sdim */ 10303233Sdim#ifndef __IMMINTRIN_H 11303233Sdim#error "Never use <avx512ifmaintrin.h> directly; include <immintrin.h> instead." 12303233Sdim#endif 13303233Sdim 14303233Sdim#ifndef __IFMAINTRIN_H 15303233Sdim#define __IFMAINTRIN_H 16303233Sdim 17303233Sdim/* Define the default attributes for the functions in this file. */ 18341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma"), __min_vector_width__(512))) 19303233Sdim 20303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 21303233Sdim_mm512_madd52hi_epu64 (__m512i __X, __m512i __Y, __m512i __Z) 22303233Sdim{ 23341825Sdim return (__m512i)__builtin_ia32_vpmadd52huq512((__v8di) __X, (__v8di) __Y, 24341825Sdim (__v8di) __Z); 25303233Sdim} 26303233Sdim 27303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 28341825Sdim_mm512_mask_madd52hi_epu64 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) 29303233Sdim{ 30341825Sdim return (__m512i)__builtin_ia32_selectq_512(__M, 31341825Sdim (__v8di)_mm512_madd52hi_epu64(__W, __X, __Y), 32341825Sdim (__v8di)__W); 33303233Sdim} 34303233Sdim 35303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 36303233Sdim_mm512_maskz_madd52hi_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) 37303233Sdim{ 38341825Sdim return (__m512i)__builtin_ia32_selectq_512(__M, 39341825Sdim (__v8di)_mm512_madd52hi_epu64(__X, __Y, __Z), 40341825Sdim (__v8di)_mm512_setzero_si512()); 41303233Sdim} 42303233Sdim 43303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 44303233Sdim_mm512_madd52lo_epu64 (__m512i __X, __m512i __Y, __m512i __Z) 45303233Sdim{ 46341825Sdim return (__m512i)__builtin_ia32_vpmadd52luq512((__v8di) __X, (__v8di) __Y, 47341825Sdim (__v8di) __Z); 48303233Sdim} 49303233Sdim 50303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 51341825Sdim_mm512_mask_madd52lo_epu64 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) 52303233Sdim{ 53341825Sdim return (__m512i)__builtin_ia32_selectq_512(__M, 54341825Sdim (__v8di)_mm512_madd52lo_epu64(__W, __X, __Y), 55341825Sdim (__v8di)__W); 56303233Sdim} 57303233Sdim 58303233Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS 59303233Sdim_mm512_maskz_madd52lo_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) 60303233Sdim{ 61341825Sdim return (__m512i)__builtin_ia32_selectq_512(__M, 62341825Sdim (__v8di)_mm512_madd52lo_epu64(__X, __Y, __Z), 63341825Sdim (__v8di)_mm512_setzero_si512()); 64303233Sdim} 65303233Sdim 66303233Sdim#undef __DEFAULT_FN_ATTRS 67303233Sdim 68303233Sdim#endif 69