From: Elena Demikhovsky Date: Tue, 28 Apr 2015 13:28:01 +0000 (+0000) Subject: AVX-512: added intrinsics for KNL and SKX X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1b09159412646a7eaf90aa333c8eae619de2c1bf;p=clang AVX-512: added intrinsics for KNL and SKX by Asaf Badouh (asaf.badouh@intel.com) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235986 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index b99e0f491a..0f0b724d30 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -966,4 +966,57 @@ BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIcUs", "") BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIcUc", "") BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIcUi", "") +BUILTIN(__builtin_ia32_paddd256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_paddq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_psubd256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_psubq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_paddd128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_paddq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_psubd128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_psubq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_pmuldq256_mask, "V4LLiV8iV8iV4LLiUc", "") +BUILTIN(__builtin_ia32_pmuldq128_mask, "V2LLiV4iV4iV2LLiUc", "") +BUILTIN(__builtin_ia32_pmuludq256_mask, "V4LLiV8iV8iV4LLiUc", "") +BUILTIN(__builtin_ia32_pmuludq128_mask, "V2LLiV4iV4iV2LLiUc", "") +BUILTIN(__builtin_ia32_pmulld256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_pmulld128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_pandd256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_pandd128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_pandnd256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_pandnd128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_pord256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_pord128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_pxord256_mask, "V8iV8iV8iV8iUc", "") +BUILTIN(__builtin_ia32_pxord128_mask, "V4iV4iV4iV4iUc", "") +BUILTIN(__builtin_ia32_pandq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_pandq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_pandnq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_pandnq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_porq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_porq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_pxorq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") +BUILTIN(__builtin_ia32_pxorq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") +BUILTIN(__builtin_ia32_paddb512_mask, "V64cV64cV64cV64cULLi", "") +BUILTIN(__builtin_ia32_psubb512_mask, "V64cV64cV64cV64cULLi", "") +BUILTIN(__builtin_ia32_paddw512_mask, "V32sV32sV32sV32sUi", "") +BUILTIN(__builtin_ia32_psubw512_mask, "V32sV32sV32sV32sUi", "") +BUILTIN(__builtin_ia32_pmullw512_mask, "V32sV32sV32sV32sUi", "") +BUILTIN(__builtin_ia32_paddb256_mask, "V32cV32cV32cV32cUi", "") +BUILTIN(__builtin_ia32_paddw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_psubb256_mask, "V32cV32cV32cV32cUi", "") +BUILTIN(__builtin_ia32_psubw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_paddb128_mask, "V16cV16cV16cV16cUs", "") +BUILTIN(__builtin_ia32_paddw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_psubb128_mask, "V16cV16cV16cV16cUs", "") +BUILTIN(__builtin_ia32_psubw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_pmullw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_pmullw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_pandnd512_mask, "V16iV16iV16iV16iUs", "") +BUILTIN(__builtin_ia32_pandnq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") +BUILTIN(__builtin_ia32_paddq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") +BUILTIN(__builtin_ia32_psubq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") +BUILTIN(__builtin_ia32_paddd512_mask, "V16iV16iV16iV16iUs", "") +BUILTIN(__builtin_ia32_psubd512_mask, "V16iV16iV16iV16iUs", "") +BUILTIN(__builtin_ia32_pmulld512_mask, "V16iV16iV16iV16iUs", "") + #undef BUILTIN diff --git a/lib/Headers/avx512bwintrin.h b/lib/Headers/avx512bwintrin.h index acc3da233f..d0591e406f 100644 --- a/lib/Headers/avx512bwintrin.h +++ b/lib/Headers/avx512bwintrin.h @@ -33,6 +33,25 @@ typedef unsigned long long __mmask64; typedef char __v64qi __attribute__ ((__vector_size__ (64))); typedef short __v32hi __attribute__ ((__vector_size__ (64))); +static __inline __v64qi __attribute__ ((__always_inline__, __nodebug__)) +_mm512_setzero_qi (void) { + return (__v64qi){ 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; +} + +static __inline __v32hi __attribute__ ((__always_inline__, __nodebug__)) +_mm512_setzero_hi (void) { + return (__v32hi){ 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; +} /* Integer compare */ @@ -324,6 +343,116 @@ _mm512_mask_cmpneq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { __u); } +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_add_epi8 (__m512i __A, __m512i __B) { + return (__m512i) ((__v64qi) __A + (__v64qi) __B); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A, + (__v64qi) __B, + (__v64qi) __W, + (__mmask64) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A, + (__v64qi) __B, + (__v64qi) + _mm512_setzero_qi (), + (__mmask64) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_sub_epi8 (__m512i __A, __m512i __B) { + return (__m512i) ((__v64qi) __A - (__v64qi) __B); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A, + (__v64qi) __B, + (__v64qi) __W, + (__mmask64) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A, + (__v64qi) __B, + (__v64qi) + _mm512_setzero_qi (), + (__mmask64) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_add_epi16 (__m512i __A, __m512i __B) { + return (__m512i) ((__v32hi) __A + (__v32hi) __B); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) __W, + (__mmask32) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) + _mm512_setzero_hi (), + (__mmask32) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_sub_epi16 (__m512i __A, __m512i __B) { + return (__m512i) ((__v32hi) __A - (__v32hi) __B); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) __W, + (__mmask32) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) + _mm512_setzero_hi (), + (__mmask32) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mullo_epi16 (__m512i __A, __m512i __B) { + return (__m512i) ((__v32hi) __A * (__v32hi) __B); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) __W, + (__mmask32) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) + _mm512_setzero_hi (), + (__mmask32) __U); +} + #define _mm512_cmp_epi8_mask(a, b, p) __extension__ ({ \ (__mmask16)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \ (__v64qi)(__m512i)(b), \ diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index 72af2811b7..d299704d9b 100644 --- a/lib/Headers/avx512fintrin.h +++ b/lib/Headers/avx512fintrin.h @@ -211,6 +211,62 @@ _mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b) (__mmask8) __k); } +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_andnot_epi32 (__m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + (__mmask16) -1); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_andnot_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, + (__mmask16) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_andnot_epi32 (__mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + (__mmask16) __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_andnot_epi64 (__m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + (__mmask8) -1); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_mask_andnot_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, __U); +} + +static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) +_mm512_maskz_andnot_epi64 (__mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_pd (), + __U); +} static __inline__ __m512i __attribute__((__always_inline__, __nodebug__)) _mm512_or_epi32(__m512i __a, __m512i __b) { @@ -362,6 +418,106 @@ _mm512_sub_ps(__m512 __a, __m512 __b) return __a - __b; } +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_add_epi64 (__m512i __A, __m512i __B) +{ + return (__m512i) ((__v8di) __A + (__v8di) __B); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_add_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, + (__mmask8) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_add_epi64 (__mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + (__mmask8) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_sub_epi64 (__m512i __A, __m512i __B) +{ + return (__m512i) ((__v8di) __A - (__v8di) __B); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_sub_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, + (__mmask8) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_sub_epi64 (__mmask8 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + (__mmask8) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_add_epi32 (__m512i __A, __m512i __B) +{ + return (__m512i) ((__v16si) __A + (__v16si) __B); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_add_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, + (__mmask16) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_add_epi32 (__mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + (__mmask16) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_sub_epi32 (__m512i __A, __m512i __B) +{ + return (__m512i) ((__v16si) __A - (__v16si) __B); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_sub_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, + (__mmask16) __U); +} + +static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_sub_epi32 (__mmask16 __U, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + (__mmask16) __U); +} + static __inline__ __m512d __attribute__((__always_inline__, __nodebug__)) _mm512_max_pd(__m512d __A, __m512d __B) { @@ -498,6 +654,24 @@ _mm512_mul_epi32(__m512i __X, __m512i __Y) (__mmask8) -1); } +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_mul_epi32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) +{ + return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X, + (__v16si) __Y, + (__v8di) __W, __M); +} + +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_mul_epi32 (__mmask8 __M, __m512i __X, __m512i __Y) +{ + return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X, + (__v16si) __Y, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) _mm512_mul_epu32(__m512i __X, __m512i __Y) { @@ -508,6 +682,48 @@ _mm512_mul_epu32(__m512i __X, __m512i __Y) (__mmask8) -1); } +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_mul_epu32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) +{ + return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X, + (__v16si) __Y, + (__v8di) __W, __M); +} + +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_mul_epu32 (__mmask8 __M, __m512i __X, __m512i __Y) +{ + return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X, + (__v16si) __Y, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mullo_epi32 (__m512i __A, __m512i __B) +{ + return (__m512i) ((__v16si) __A * (__v16si) __B); +} + +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_maskz_mullo_epi32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + __M); +} + +static __inline __m512i __attribute__ ((__always_inline__, __nodebug__)) +_mm512_mask_mullo_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, __M); +} + static __inline__ __m512d __attribute__((__always_inline__, __nodebug__)) _mm512_sqrt_pd(__m512d a) { diff --git a/lib/Headers/avx512vlbwintrin.h b/lib/Headers/avx512vlbwintrin.h index 0746f4394a..c3b087e303 100644 --- a/lib/Headers/avx512vlbwintrin.h +++ b/lib/Headers/avx512vlbwintrin.h @@ -606,6 +606,174 @@ _mm256_mask_cmpneq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { __u); } +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_add_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B){ + return (__m256i) __builtin_ia32_paddb256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) __W, + (__mmask32) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_add_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_paddb256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) + _mm256_setzero_si256 (), + (__mmask32) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_add_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_paddw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_add_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_paddw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) + _mm256_setzero_si256 (), + (__mmask16) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_sub_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_psubb256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) __W, + (__mmask32) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_sub_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_psubb256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) + _mm256_setzero_si256 (), + (__mmask32) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_sub_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_psubw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_sub_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_psubw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) + _mm256_setzero_si256 (), + (__mmask16) __U); +} +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_add_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_paddb128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) __W, + (__mmask16) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_add_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_paddb128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) + _mm_setzero_si128 (), + (__mmask16) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_add_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_paddw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_add_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_paddw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_sub_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_psubb128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) __W, + (__mmask16) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_sub_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_psubb128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) + _mm_setzero_si128 (), + (__mmask16) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_sub_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_psubw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_sub_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_psubw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_mullo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmullw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_mullo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmullw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) + _mm256_setzero_si256 (), + (__mmask16) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_mullo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_pmullw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_mullo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_pmullw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) + _mm_setzero_si128 (), + (__mmask8) __U); +} #define _mm_cmp_epi8_mask(a, b, p) __extension__ ({ \ (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \ (__v16qi)(__m128i)(b), \ diff --git a/lib/Headers/avx512vlintrin.h b/lib/Headers/avx512vlintrin.h index b460992a2a..e28025ba7a 100644 --- a/lib/Headers/avx512vlintrin.h +++ b/lib/Headers/avx512vlintrin.h @@ -610,6 +610,593 @@ _mm256_mask_cmpneq_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { __u); } +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_add_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_paddd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_add_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_paddd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_add_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_paddq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_add_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_paddq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_sub_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_psubd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_sub_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_psubd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_sub_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_psubq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_sub_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_psubq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_add_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_paddd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_add_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_paddd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_add_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_paddq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_add_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_paddq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_sub_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_psubd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_sub_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_psubd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_sub_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_psubq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_sub_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_psubq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_mul_epi32 (__m256i __W, __mmask8 __M, __m256i __X, + __m256i __Y) +{ + return (__m256i) __builtin_ia32_pmuldq256_mask ((__v8si) __X, + (__v8si) __Y, + (__v4di) __W, __M); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_mul_epi32 (__mmask8 __M, __m256i __X, __m256i __Y) +{ + return (__m256i) __builtin_ia32_pmuldq256_mask ((__v8si) __X, + (__v8si) __Y, + (__v4di) + _mm256_setzero_si256 (), + __M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_mul_epi32 (__m128i __W, __mmask8 __M, __m128i __X, + __m128i __Y) +{ + return (__m128i) __builtin_ia32_pmuldq128_mask ((__v4si) __X, + (__v4si) __Y, + (__v2di) __W, __M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_mul_epi32 (__mmask8 __M, __m128i __X, __m128i __Y) +{ + return (__m128i) __builtin_ia32_pmuldq128_mask ((__v4si) __X, + (__v4si) __Y, + (__v2di) + _mm_setzero_si128 (), + __M); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mask_mul_epu32 (__m256i __W, __mmask8 __M, __m256i __X, + __m256i __Y) +{ + return (__m256i) __builtin_ia32_pmuludq256_mask ((__v8si) __X, + (__v8si) __Y, + (__v4di) __W, __M); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskz_mul_epu32 (__mmask8 __M, __m256i __X, __m256i __Y) +{ + return (__m256i) __builtin_ia32_pmuludq256_mask ((__v8si) __X, + (__v8si) __Y, + (__v4di) + _mm256_setzero_si256 (), + __M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mask_mul_epu32 (__m128i __W, __mmask8 __M, __m128i __X, + __m128i __Y) +{ + return (__m128i) __builtin_ia32_pmuludq128_mask ((__v4si) __X, + (__v4si) __Y, + (__v2di) __W, __M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskz_mul_epu32 (__mmask8 __M, __m128i __X, __m128i __Y) +{ + return (__m128i) __builtin_ia32_pmuludq128_mask ((__v4si) __X, + (__v4si) __Y, + (__v2di) + _mm_setzero_si128 (), + __M); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_mullo_epi32 (__mmask8 __M, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pmulld256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + __M); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_mullo_epi32 (__m256i __W, __mmask8 __M, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pmulld256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, __M); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pmulld128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + __M); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_mullo_epi32 (__m128i __W, __mmask16 __M, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pmulld128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, __M); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_and_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pandd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_and_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pandd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_and_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pandd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_and_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pandd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_andnot_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pandnd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_andnot_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pandnd256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_andnot_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pandnd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_andnot_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pandnd128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_or_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pord256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_or_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pord256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_or_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pord128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_or_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pord128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_xor_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pxord256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_xor_epi32 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pxord256_mask ((__v8si) __A, + (__v8si) __B, + (__v8si) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_xor_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pxord128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_xor_epi32 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pxord128_mask ((__v4si) __A, + (__v4si) __B, + (__v4si) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_and_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pandq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_and_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pandq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_pd (), + __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_and_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pandq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_and_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pandq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_pd (), + __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_andnot_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pandnq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_andnot_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pandnq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_pd (), + __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_andnot_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pandnq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_andnot_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pandnq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_pd (), + __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_or_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_porq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_or_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_porq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_or_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_porq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_or_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_porq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_si128 (), + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_mask_xor_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) +{ + return (__m256i) __builtin_ia32_pxorq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __attribute__ ((__always_inline__, __nodebug__)) +_mm256_maskz_xor_epi64 (__mmask8 __U, __m256i __A, __m256i __B) +{ + return (__m256i) __builtin_ia32_pxorq256_mask ((__v4di) __A, + (__v4di) __B, + (__v4di) + _mm256_setzero_si256 (), + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_mask_xor_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) +{ + return (__m128i) __builtin_ia32_pxorq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __attribute__ ((__always_inline__, __nodebug__)) +_mm_maskz_xor_epi64 (__mmask8 __U, __m128i __A, __m128i __B) +{ + return (__m128i) __builtin_ia32_pxorq128_mask ((__v2di) __A, + (__v2di) __B, + (__v2di) + _mm_setzero_si128 (), + (__mmask8) __U); +} + #define _mm_cmp_epi32_mask(a, b, p) __extension__ ({ \ (__mmask8)__builtin_ia32_cmpd128_mask((__v4si)(__m128i)(a), \ (__v4si)(__m128i)(b), \ diff --git a/test/CodeGen/avx512bw-builtins.c b/test/CodeGen/avx512bw-builtins.c index f34c51ed5e..143a2e9346 100644 --- a/test/CodeGen/avx512bw-builtins.c +++ b/test/CodeGen/avx512bw-builtins.c @@ -337,3 +337,93 @@ __mmask32 test_mm512_mask_cmp_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b // CHECK: @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> {{.*}}, <32 x i16> {{.*}}, i8 7, i32 {{.*}}) return (__mmask32)_mm512_mask_cmp_epu16_mask(__u, __a, __b, 7); } + +__m512i test_mm512_add_epi8 (__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_add_epi8 + //CHECK: add <64 x i8> + return _mm512_add_epi8(__A,__B); +} + +__m512i test_mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mask_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.512 + return _mm512_mask_add_epi8(__W, __U, __A, __B); +} + +__m512i test_mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.512 + return _mm512_maskz_add_epi8(__U, __A, __B); +} + +__m512i test_mm512_sub_epi8 (__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_sub_epi8 + //CHECK: sub <64 x i8> + return _mm512_sub_epi8(__A, __B); +} + +__m512i test_mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mask_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.512 + return _mm512_mask_sub_epi8(__W, __U, __A, __B); +} + +__m512i test_mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.512 + return _mm512_maskz_sub_epi8(__U, __A, __B); +} + +__m512i test_mm512_add_epi16 (__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_add_epi16 + //CHECK: add <32 x i16> + return _mm512_add_epi16(__A, __B); +} + +__m512i test_mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mask_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.512 + return _mm512_mask_add_epi16(__W, __U, __A, __B); +} + +__m512i test_mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.512 + return _mm512_maskz_add_epi16(__U, __A, __B); +} + +__m512i test_mm512_sub_epi16 (__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_sub_epi16 + //CHECK: sub <32 x i16> + return _mm512_sub_epi16(__A, __B); +} + +__m512i test_mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mask_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.512 + return _mm512_mask_sub_epi16(__W, __U, __A, __B); +} + +__m512i test_mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.512 + return _mm512_maskz_sub_epi16(__U, __A, __B); +} + +__m512i test_mm512_mullo_epi16 (__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mullo_epi16 + //CHECK: mul <32 x i16> + return _mm512_mullo_epi16(__A, __B); +} + +__m512i test_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mask_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.512 + return _mm512_mask_mullo_epi16(__W, __U, __A, __B); +} + +__m512i test_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.512 + return _mm512_maskz_mullo_epi16(__U, __A, __B); +} diff --git a/test/CodeGen/avx512f-builtins.c b/test/CodeGen/avx512f-builtins.c index 340beb8f01..05b861b219 100644 --- a/test/CodeGen/avx512f-builtins.c +++ b/test/CodeGen/avx512f-builtins.c @@ -742,3 +742,160 @@ __m512i test_mm512_xor_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __ return _mm512_xor_epi64(__a, __b); } +__m512i test_mm512_maskz_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B){ + //CHECK-LABEL: @test_mm512_maskz_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_maskz_andnot_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_mask_andnot_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_andnot_epi32(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_andnot_epi32(__A,__B); +} + +__m512i test_mm512_maskz_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_maskz_andnot_epi64(__k,__A,__B); +} + +__m512i test_mm512_mask_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_mask_andnot_epi64(__src,__k,__A,__B); +} + +__m512i test_mm512_andnot_epi64(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_andnot_epi64(__A,__B); +} + +__m512i test_mm512_maskz_sub_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.512 + return _mm512_maskz_sub_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_sub_epi32 (__mmask16 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.512 + return _mm512_mask_sub_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_sub_epi32(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_sub_epi32 + //CHECK: sub <16 x i32> + return _mm512_sub_epi32(__A,__B); +} + +__m512i test_mm512_maskz_sub_epi64 (__mmask8 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.512 + return _mm512_maskz_sub_epi64(__k,__A,__B); +} + +__m512i test_mm512_mask_sub_epi64 (__mmask8 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.512 + return _mm512_mask_sub_epi64(__src,__k,__A,__B); +} + +__m512i test_mm512_sub_epi64(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_sub_epi64 + //CHECK: sub <8 x i64> + return _mm512_sub_epi64(__A,__B); +} + +__m512i test_mm512_maskz_add_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.512 + return _mm512_maskz_add_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_add_epi32 (__mmask16 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.512 + return _mm512_mask_add_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_add_epi32(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_add_epi32 + //CHECK: add <16 x i32> + return _mm512_add_epi32(__A,__B); +} + +__m512i test_mm512_maskz_add_epi64 (__mmask8 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.512 + return _mm512_maskz_add_epi64(__k,__A,__B); +} + +__m512i test_mm512_mask_add_epi64 (__mmask8 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.512 + return _mm512_mask_add_epi64(__src,__k,__A,__B); +} + +__m512i test_mm512_add_epi64(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_add_epi64 + //CHECK: add <8 x i64> + return _mm512_add_epi64(__A,__B); +} + +__m512i test_mm512_maskz_mul_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.512 + return _mm512_maskz_mul_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_mul_epi32 (__mmask16 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.512 + return _mm512_mask_mul_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_maskz_mul_epu32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.512 + return _mm512_maskz_mul_epu32(__k,__A,__B); +} + +__m512i test_mm512_mask_mul_epu32 (__mmask16 __k,__m512i __A, __m512i __B, + __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.512 + return _mm512_mask_mul_epu32(__src,__k,__A,__B); +} + +__m512i test_mm512_maskz_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.512 + return _mm512_maskz_mullo_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B, __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.512 + return _mm512_mask_mullo_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_mullo_epi32(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_mullo_epi32 + //CHECK: mul <16 x i32> + return _mm512_mullo_epi32(__A,__B); +} \ No newline at end of file diff --git a/test/CodeGen/avx512vl-builtins.c b/test/CodeGen/avx512vl-builtins.c index 5bdcbad9e5..99cab9100a 100644 --- a/test/CodeGen/avx512vl-builtins.c +++ b/test/CodeGen/avx512vl-builtins.c @@ -649,3 +649,428 @@ __mmask8 test_mm256_mask_cmp_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) // CHECK: @llvm.x86.avx512.mask.ucmp.q.256(<4 x i64> {{.*}}, <4 x i64> {{.*}}, i8 7, i8 {{.*}}) return (__mmask8)_mm256_mask_cmp_epu64_mask(__u, __a, __b, 7); } + +__m512i test_mm512_maskz_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_maskz_andnot_epi32(__k,__A,__B); +} + +__m512i test_mm512_mask_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B, __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_mask_andnot_epi32(__src,__k,__A,__B); +} + +__m512i test_mm512_andnot_epi32(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.512 + return _mm512_andnot_epi32(__A,__B); +} + +__m512i test_mm512_maskz_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_maskz_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_maskz_andnot_epi64(__k,__A,__B); +} + +__m512i test_mm512_mask_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B, __m512i __src) { + //CHECK-LABEL: @test_mm512_mask_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_mask_andnot_epi64(__src,__k,__A,__B); +} + +__m512i test_mm512_andnot_epi64(__m512i __A, __m512i __B) { + //CHECK-LABEL: @test_mm512_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.512 + return _mm512_andnot_epi64(__A,__B); +} + +__m256i test_mm256_mask_add_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.256 + return _mm256_mask_add_epi32(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_add_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.256 + return _mm256_maskz_add_epi32(__U, __A, __B); +} + +__m256i test_mm256_mask_add_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.256 + return _mm256_mask_add_epi64(__W,__U,__A,__B); +} + +__m256i test_mm256_maskz_add_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.256 + return _mm256_maskz_add_epi64 (__U,__A,__B); +} + +__m256i test_mm256_mask_sub_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.256 + return _mm256_mask_sub_epi32 (__W,__U,__A,__B); +} + +__m256i test_mm256_maskz_sub_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.256 + return _mm256_maskz_sub_epi32 (__U,__A,__B); +} + +__m256i test_mm256_mask_sub_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.256 + return _mm256_mask_sub_epi64 (__W,__U,__A,__B); +} + +__m256i test_mm256_maskz_sub_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.256 + return _mm256_maskz_sub_epi64 (__U,__A,__B); +} + +__m128i test_mm_mask_add_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.128 + return _mm_mask_add_epi32(__W,__U,__A,__B); +} + + +__m128i test_mm_maskz_add_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_add_epi32 + //CHECK: @llvm.x86.avx512.mask.padd.d.128 + return _mm_maskz_add_epi32 (__U,__A,__B); +} + +__m128i test_mm_mask_add_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { +//CHECK-LABEL: @test_mm_mask_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.128 + return _mm_mask_add_epi64 (__W,__U,__A,__B); +} + +__m128i test_mm_maskz_add_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_add_epi64 + //CHECK: @llvm.x86.avx512.mask.padd.q.128 + return _mm_maskz_add_epi64 (__U,__A,__B); +} + +__m128i test_mm_mask_sub_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.128 + return _mm_mask_sub_epi32(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_sub_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_sub_epi32 + //CHECK: @llvm.x86.avx512.mask.psub.d.128 + return _mm_maskz_sub_epi32(__U, __A, __B); +} + +__m128i test_mm_mask_sub_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.128 + return _mm_mask_sub_epi64 (__W, __U, __A, __B); +} + +__m128i test_mm_maskz_sub_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_sub_epi64 + //CHECK: @llvm.x86.avx512.mask.psub.q.128 + return _mm_maskz_sub_epi64 (__U, __A, __B); +} + +__m256i test_mm256_mask_mul_epi32 (__m256i __W, __mmask8 __M, __m256i __X, + __m256i __Y) { + //CHECK-LABEL: @test_mm256_mask_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.256 + return _mm256_mask_mul_epi32(__W, __M, __X, __Y); +} + +__m256i test_mm256_maskz_mul_epi32 (__mmask8 __M, __m256i __X, __m256i __Y) { + //CHECK-LABEL: @test_mm256_maskz_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.256 + return _mm256_maskz_mul_epi32(__M, __X, __Y); +} + + +__m128i test_mm_mask_mul_epi32 (__m128i __W, __mmask8 __M, __m128i __X, + __m128i __Y) { + //CHECK-LABEL: @test_mm_mask_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.128 + return _mm_mask_mul_epi32(__W, __M, __X, __Y); +} + +__m128i test_mm_maskz_mul_epi32 (__mmask8 __M, __m128i __X, __m128i __Y) { + //CHECK-LABEL: @test_mm_maskz_mul_epi32 + //CHECK: @llvm.x86.avx512.mask.pmul.dq.128 + return _mm_maskz_mul_epi32(__M, __X, __Y); +} + +__m256i test_mm256_mask_mul_epu32 (__m256i __W, __mmask8 __M, __m256i __X, + __m256i __Y) { + //CHECK-LABEL: @test_mm256_mask_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.256 + return _mm256_mask_mul_epu32(__W, __M, __X, __Y); +} + +__m256i test_mm256_maskz_mul_epu32 (__mmask8 __M, __m256i __X, __m256i __Y) { + //CHECK-LABEL: @test_mm256_maskz_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.256 + return _mm256_maskz_mul_epu32(__M, __X, __Y); +} + +__m128i test_mm_mask_mul_epu32 (__m128i __W, __mmask8 __M, __m128i __X, + __m128i __Y) { + //CHECK-LABEL: @test_mm_mask_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.128 + return _mm_mask_mul_epu32(__W, __M, __X, __Y); +} + +__m128i test_mm_maskz_mul_epu32 (__mmask8 __M, __m128i __X, __m128i __Y) { + //CHECK-LABEL: @test_mm_maskz_mul_epu32 + //CHECK: @llvm.x86.avx512.mask.pmulu.dq.128 + return _mm_maskz_mul_epu32(__M, __X, __Y); +} + +__m128i test_mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.128 + return _mm_maskz_mullo_epi32(__M, __A, __B); +} + +__m128i test_mm_mask_mullo_epi32 (__m128i __W, __mmask8 __M, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.128 + return _mm_mask_mullo_epi32(__W, __M, __A, __B); +} + +__m256i test_mm256_maskz_mullo_epi32 (__mmask8 __M, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.256 + return _mm256_maskz_mullo_epi32(__M, __A, __B); +} + +__m256i test_mm256_mask_mullo_epi32 (__m256i __W, __mmask8 __M, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_mullo_epi32 + //CHECK: @llvm.x86.avx512.mask.pmull.d.256 + return _mm256_mask_mullo_epi32(__W, __M, __A, __B); +} + +__m256i test_mm256_mask_and_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_and_epi32 + //CHECK: @llvm.x86.avx512.mask.pand.d.256 + return _mm256_mask_and_epi32(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_and_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_and_epi32 + //CHECK: @llvm.x86.avx512.mask.pand.d.256 + return _mm256_maskz_and_epi32(__U, __A, __B); +} + +__m128i test_mm_mask_and_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_and_epi32 + //CHECK: @llvm.x86.avx512.mask.pand.d.128 + return _mm_mask_and_epi32(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_and_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_and_epi32 + //CHECK: @llvm.x86.avx512.mask.pand.d.128 + return _mm_maskz_and_epi32(__U, __A, __B); +} + +__m256i test_mm256_mask_andnot_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.256 + return _mm256_mask_andnot_epi32(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_andnot_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.256 + return _mm256_maskz_andnot_epi32(__U, __A, __B); +} + +__m128i test_mm_mask_andnot_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.128 + return _mm_mask_andnot_epi32(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_andnot_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_andnot_epi32 + //CHECK: @llvm.x86.avx512.mask.pandn.d.128 + return _mm_maskz_andnot_epi32(__U, __A, __B); +} + +__m256i test_mm256_mask_or_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_or_epi32 + //CHECK: @llvm.x86.avx512.mask.por.d.256 + return _mm256_mask_or_epi32(__W, __U, __A, __B); +} + + __m256i test_mm256_maskz_or_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_or_epi32 + //CHECK: @llvm.x86.avx512.mask.por.d.256 + return _mm256_maskz_or_epi32(__U, __A, __B); +} + + __m128i test_mm_mask_or_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_or_epi32 + //CHECK: @llvm.x86.avx512.mask.por.d.128 + return _mm_mask_or_epi32(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_or_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_or_epi32 + //CHECK: @llvm.x86.avx512.mask.por.d.128 + return _mm_maskz_or_epi32(__U, __A, __B); +} + +__m256i test_mm256_mask_xor_epi32 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_xor_epi32 + //CHECK: @llvm.x86.avx512.mask.pxor.d.256 + return _mm256_mask_xor_epi32(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_xor_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_xor_epi32 + //CHECK: @llvm.x86.avx512.mask.pxor.d.256 + return _mm256_maskz_xor_epi32(__U, __A, __B); +} + +__m128i test_mm_mask_xor_epi32 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_xor_epi32 + //CHECK: @llvm.x86.avx512.mask.pxor.d.128 + return _mm_mask_xor_epi32(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_xor_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_xor_epi32 + //CHECK: @llvm.x86.avx512.mask.pxor.d.128 + return _mm_maskz_xor_epi32(__U, __A, __B); +} + +__m256i test_mm256_mask_and_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_and_epi64 + //CHECK: @llvm.x86.avx512.mask.pand.q.256 + return _mm256_mask_and_epi64(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_and_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_and_epi64 + //CHECK: @llvm.x86.avx512.mask.pand.q.256 + return _mm256_maskz_and_epi64(__U, __A, __B); +} + +__m128i test_mm_mask_and_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_and_epi64 + //CHECK: @llvm.x86.avx512.mask.pand.q.128 + return _mm_mask_and_epi64(__W,__U, __A, __B); +} + +__m128i test_mm_maskz_and_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_and_epi64 + //CHECK: @llvm.x86.avx512.mask.pand.q.128 + return _mm_maskz_and_epi64(__U, __A, __B); +} + +__m256i test_mm256_mask_andnot_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.256 + return _mm256_mask_andnot_epi64(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_andnot_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.256 + return _mm256_maskz_andnot_epi64(__U, __A, __B); +} + +__m128i test_mm_mask_andnot_epi64 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + //CHECK-LABEL: @test_mm_mask_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.128 + return _mm_mask_andnot_epi64(__W,__U, __A, __B); +} + +__m128i test_mm_maskz_andnot_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_andnot_epi64 + //CHECK: @llvm.x86.avx512.mask.pandn.q.128 + return _mm_maskz_andnot_epi64(__U, __A, __B); +} + +__m256i test_mm256_mask_or_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_or_epi64 + //CHECK: @llvm.x86.avx512.mask.por.q.256 + return _mm256_mask_or_epi64(__W,__U, __A, __B); +} + +__m256i test_mm256_maskz_or_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_or_epi64 + //CHECK: @llvm.x86.avx512.mask.por.q.256 + return _mm256_maskz_or_epi64(__U, __A, __B); +} + +__m128i test_mm_mask_or_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_or_epi64 + //CHECK: @llvm.x86.avx512.mask.por.q.128 + return _mm_mask_or_epi64(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_or_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { +//CHECK-LABEL: @test_mm_maskz_or_epi64 + //CHECK: @llvm.x86.avx512.mask.por.q.128 + return _mm_maskz_or_epi64( __U, __A, __B); +} + +__m256i test_mm256_mask_xor_epi64 (__m256i __W, __mmask8 __U, __m256i __A, + __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_xor_epi64 + //CHECK: @llvm.x86.avx512.mask.pxor.q.256 + return _mm256_mask_xor_epi64(__W,__U, __A, __B); +} + +__m256i test_mm256_maskz_xor_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_xor_epi64 + //CHECK: @llvm.x86.avx512.mask.pxor.q.256 + return _mm256_maskz_xor_epi64(__U, __A, __B); +} + +__m128i test_mm_mask_xor_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_xor_epi64 + //CHECK: @llvm.x86.avx512.mask.pxor.q.128 + return _mm_mask_xor_epi64(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_xor_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_xor_epi64 + //CHECK: @llvm.x86.avx512.mask.pxor.q.128 + return _mm_maskz_xor_epi64( __U, __A, __B); +} + diff --git a/test/CodeGen/avx512vlbw-builtins.c b/test/CodeGen/avx512vlbw-builtins.c index 4d8508d1d5..64b7708b33 100644 --- a/test/CodeGen/avx512vlbw-builtins.c +++ b/test/CodeGen/avx512vlbw-builtins.c @@ -673,3 +673,122 @@ __mmask16 test_mm256_mask_cmp_epu16_mask(__mmask32 __u, __m256i __a, __m256i __b // CHECK: @llvm.x86.avx512.mask.ucmp.w.256(<16 x i16> {{.*}}, <16 x i16> {{.*}}, i8 7, i16 {{.*}}) return (__mmask32)_mm256_mask_cmp_epu16_mask(__u, __a, __b, 7); } + + +__m256i test_mm256_mask_add_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B){ + //CHECK-LABEL: @test_mm256_mask_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.256 + return _mm256_mask_add_epi8(__W, __U , __A, __B); +} + +__m256i test_mm256_maskz_add_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.256 + return _mm256_maskz_add_epi8(__U , __A, __B); +} +__m256i test_mm256_mask_add_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.256 + return _mm256_mask_add_epi16(__W, __U , __A, __B); +} + +__m256i test_mm256_maskz_add_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.256 + return _mm256_maskz_add_epi16(__U , __A, __B); +} + +__m256i test_mm256_mask_sub_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.256 + return _mm256_mask_sub_epi8(__W, __U , __A, __B); +} + +__m256i test_mm256_maskz_sub_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.256 + return _mm256_maskz_sub_epi8(__U , __A, __B); +} + +__m256i test_mm256_mask_sub_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.256 + return _mm256_mask_sub_epi16(__W, __U , __A, __B); +} + +__m256i test_mm256_maskz_sub_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.256 + return _mm256_maskz_sub_epi16(__U , __A, __B); +} +__m128i test_mm_mask_add_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.128 + return _mm_mask_add_epi8(__W, __U , __A, __B); +} + +__m128i test_mm_maskz_add_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_add_epi8 + //CHECK: @llvm.x86.avx512.mask.padd.b.128 + return _mm_maskz_add_epi8(__U , __A, __B); +} + +__m128i test_mm_mask_add_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.128 + return _mm_mask_add_epi16(__W, __U , __A, __B); +} + +__m128i test_mm_maskz_add_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_add_epi16 + //CHECK: @llvm.x86.avx512.mask.padd.w.128 + return _mm_maskz_add_epi16(__U , __A, __B); +} + +__m128i test_mm_mask_sub_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.128 + return _mm_mask_sub_epi8(__W, __U , __A, __B); +} + +__m128i test_mm_maskz_sub_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_sub_epi8 + //CHECK: @llvm.x86.avx512.mask.psub.b.128 + return _mm_maskz_sub_epi8(__U , __A, __B); +} + +__m128i test_mm_mask_sub_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.128 + return _mm_mask_sub_epi16(__W, __U , __A, __B); +} + +__m128i test_mm_maskz_sub_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_sub_epi16 + //CHECK: @llvm.x86.avx512.mask.psub.w.128 + return _mm_maskz_sub_epi16(__U , __A, __B); +} + +__m256i test_mm256_mask_mullo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_mask_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.256 + return _mm256_mask_mullo_epi16(__W, __U , __A, __B); +} + +__m256i test_mm256_maskz_mullo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + //CHECK-LABEL: @test_mm256_maskz_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.256 + return _mm256_maskz_mullo_epi16(__U , __A, __B); +} + +__m128i test_mm_mask_mullo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_mask_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.128 + return _mm_mask_mullo_epi16(__W, __U , __A, __B); +} + +__m128i test_mm_maskz_mullo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + //CHECK-LABEL: @test_mm_maskz_mullo_epi16 + //CHECK: @llvm.x86.avx512.mask.pmull.w.128 + return _mm_maskz_mullo_epi16(__U , __A, __B); +} \ No newline at end of file