1 1.1 joerg /*===------------- avx512ifmavlintrin.h - IFMA intrinsics ------------------=== 2 1.1 joerg * 3 1.1 joerg * 4 1.1 joerg * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 1.1 joerg * See https://llvm.org/LICENSE.txt for license information. 6 1.1 joerg * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 1.1 joerg * 8 1.1 joerg *===-----------------------------------------------------------------------=== 9 1.1 joerg */ 10 1.1 joerg #ifndef __IMMINTRIN_H 11 1.1 joerg #error "Never use <avx512ifmavlintrin.h> directly; include <immintrin.h> instead." 12 1.1 joerg #endif 13 1.1 joerg 14 1.1 joerg #ifndef __IFMAVLINTRIN_H 15 1.1 joerg #define __IFMAVLINTRIN_H 16 1.1 joerg 17 1.1 joerg /* Define the default attributes for the functions in this file. */ 18 1.1 joerg #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma,avx512vl"), __min_vector_width__(128))) 19 1.1 joerg #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma,avx512vl"), __min_vector_width__(256))) 20 1.1 joerg 21 1.1 joerg 22 1.1 joerg 23 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 24 1.1 joerg _mm_madd52hi_epu64 (__m128i __X, __m128i __Y, __m128i __Z) 25 1.1 joerg { 26 1.1 joerg return (__m128i)__builtin_ia32_vpmadd52huq128((__v2di) __X, (__v2di) __Y, 27 1.1 joerg (__v2di) __Z); 28 1.1 joerg } 29 1.1 joerg 30 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 31 1.1 joerg _mm_mask_madd52hi_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) 32 1.1 joerg { 33 1.1 joerg return (__m128i)__builtin_ia32_selectq_128(__M, 34 1.1 joerg (__v2di)_mm_madd52hi_epu64(__W, __X, __Y), 35 1.1 joerg (__v2di)__W); 36 1.1 joerg } 37 1.1 joerg 38 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 39 1.1 joerg _mm_maskz_madd52hi_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) 40 1.1 joerg { 41 1.1 joerg return (__m128i)__builtin_ia32_selectq_128(__M, 42 1.1 joerg (__v2di)_mm_madd52hi_epu64(__X, __Y, __Z), 43 1.1 joerg (__v2di)_mm_setzero_si128()); 44 1.1 joerg } 45 1.1 joerg 46 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 47 1.1 joerg _mm256_madd52hi_epu64 (__m256i __X, __m256i __Y, __m256i __Z) 48 1.1 joerg { 49 1.1 joerg return (__m256i)__builtin_ia32_vpmadd52huq256((__v4di)__X, (__v4di)__Y, 50 1.1 joerg (__v4di)__Z); 51 1.1 joerg } 52 1.1 joerg 53 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 54 1.1 joerg _mm256_mask_madd52hi_epu64 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) 55 1.1 joerg { 56 1.1 joerg return (__m256i)__builtin_ia32_selectq_256(__M, 57 1.1 joerg (__v4di)_mm256_madd52hi_epu64(__W, __X, __Y), 58 1.1 joerg (__v4di)__W); 59 1.1 joerg } 60 1.1 joerg 61 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 62 1.1 joerg _mm256_maskz_madd52hi_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) 63 1.1 joerg { 64 1.1 joerg return (__m256i)__builtin_ia32_selectq_256(__M, 65 1.1 joerg (__v4di)_mm256_madd52hi_epu64(__X, __Y, __Z), 66 1.1 joerg (__v4di)_mm256_setzero_si256()); 67 1.1 joerg } 68 1.1 joerg 69 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 70 1.1 joerg _mm_madd52lo_epu64 (__m128i __X, __m128i __Y, __m128i __Z) 71 1.1 joerg { 72 1.1 joerg return (__m128i)__builtin_ia32_vpmadd52luq128((__v2di)__X, (__v2di)__Y, 73 1.1 joerg (__v2di)__Z); 74 1.1 joerg } 75 1.1 joerg 76 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 77 1.1 joerg _mm_mask_madd52lo_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) 78 1.1 joerg { 79 1.1 joerg return (__m128i)__builtin_ia32_selectq_128(__M, 80 1.1 joerg (__v2di)_mm_madd52lo_epu64(__W, __X, __Y), 81 1.1 joerg (__v2di)__W); 82 1.1 joerg } 83 1.1 joerg 84 1.1 joerg static __inline__ __m128i __DEFAULT_FN_ATTRS128 85 1.1 joerg _mm_maskz_madd52lo_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) 86 1.1 joerg { 87 1.1 joerg return (__m128i)__builtin_ia32_selectq_128(__M, 88 1.1 joerg (__v2di)_mm_madd52lo_epu64(__X, __Y, __Z), 89 1.1 joerg (__v2di)_mm_setzero_si128()); 90 1.1 joerg } 91 1.1 joerg 92 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 93 1.1 joerg _mm256_madd52lo_epu64 (__m256i __X, __m256i __Y, __m256i __Z) 94 1.1 joerg { 95 1.1 joerg return (__m256i)__builtin_ia32_vpmadd52luq256((__v4di)__X, (__v4di)__Y, 96 1.1 joerg (__v4di)__Z); 97 1.1 joerg } 98 1.1 joerg 99 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 100 1.1 joerg _mm256_mask_madd52lo_epu64 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) 101 1.1 joerg { 102 1.1 joerg return (__m256i)__builtin_ia32_selectq_256(__M, 103 1.1 joerg (__v4di)_mm256_madd52lo_epu64(__W, __X, __Y), 104 1.1 joerg (__v4di)__W); 105 1.1 joerg } 106 1.1 joerg 107 1.1 joerg static __inline__ __m256i __DEFAULT_FN_ATTRS256 108 1.1 joerg _mm256_maskz_madd52lo_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) 109 1.1 joerg { 110 1.1 joerg return (__m256i)__builtin_ia32_selectq_256(__M, 111 1.1 joerg (__v4di)_mm256_madd52lo_epu64(__X, __Y, __Z), 112 1.1 joerg (__v4di)_mm256_setzero_si256()); 113 1.1 joerg } 114 1.1 joerg 115 1.1 joerg 116 1.1 joerg #undef __DEFAULT_FN_ATTRS128 117 1.1 joerg #undef __DEFAULT_FN_ATTRS256 118 1.1 joerg 119 1.1 joerg #endif 120