blob: c0e0f94d48d489dfc7a7b5755f95fe6615faa8f6 [file] [log] [blame]
Logan Chien2833ffb2018-10-09 10:03:24 +08001/*===------------- avx512vbmiintrin.h - VBMI intrinsics ------------------===
2 *
3 *
Logan Chiendf4f7662019-09-04 16:45:23 -07004 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 * See https://llvm.org/LICENSE.txt for license information.
6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Logan Chien2833ffb2018-10-09 10:03:24 +08007 *
8 *===-----------------------------------------------------------------------===
9 */
10#ifndef __IMMINTRIN_H
11#error "Never use <avx512vbmiintrin.h> directly; include <immintrin.h> instead."
12#endif
13
14#ifndef __VBMIINTRIN_H
15#define __VBMIINTRIN_H
16
17/* Define the default attributes for the functions in this file. */
Logan Chien55afb0a2018-10-15 10:42:14 +080018#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi"), __min_vector_width__(512)))
Logan Chien2833ffb2018-10-09 10:03:24 +080019
20
21static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chien55afb0a2018-10-15 10:42:14 +080022_mm512_permutex2var_epi8(__m512i __A, __m512i __I, __m512i __B)
Logan Chien2833ffb2018-10-09 10:03:24 +080023{
Logan Chien55afb0a2018-10-15 10:42:14 +080024 return (__m512i)__builtin_ia32_vpermi2varqi512((__v64qi)__A, (__v64qi)__I,
25 (__v64qi) __B);
Logan Chien2833ffb2018-10-09 10:03:24 +080026}
27
28static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chien55afb0a2018-10-15 10:42:14 +080029_mm512_mask_permutex2var_epi8(__m512i __A, __mmask64 __U, __m512i __I,
30 __m512i __B)
Logan Chien2833ffb2018-10-09 10:03:24 +080031{
Logan Chien55afb0a2018-10-15 10:42:14 +080032 return (__m512i)__builtin_ia32_selectb_512(__U,
33 (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
34 (__v64qi)__A);
Logan Chien2833ffb2018-10-09 10:03:24 +080035}
36
37static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chien55afb0a2018-10-15 10:42:14 +080038_mm512_mask2_permutex2var_epi8(__m512i __A, __m512i __I, __mmask64 __U,
39 __m512i __B)
Logan Chien2833ffb2018-10-09 10:03:24 +080040{
Logan Chien55afb0a2018-10-15 10:42:14 +080041 return (__m512i)__builtin_ia32_selectb_512(__U,
42 (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
43 (__v64qi)__I);
Logan Chien2833ffb2018-10-09 10:03:24 +080044}
45
46static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chien55afb0a2018-10-15 10:42:14 +080047_mm512_maskz_permutex2var_epi8(__mmask64 __U, __m512i __A, __m512i __I,
48 __m512i __B)
Logan Chien2833ffb2018-10-09 10:03:24 +080049{
Logan Chien55afb0a2018-10-15 10:42:14 +080050 return (__m512i)__builtin_ia32_selectb_512(__U,
51 (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
52 (__v64qi)_mm512_setzero_si512());
Logan Chien2833ffb2018-10-09 10:03:24 +080053}
54
55static __inline__ __m512i __DEFAULT_FN_ATTRS
56_mm512_permutexvar_epi8 (__m512i __A, __m512i __B)
57{
Logan Chien55afb0a2018-10-15 10:42:14 +080058 return (__m512i)__builtin_ia32_permvarqi512((__v64qi) __B, (__v64qi) __A);
Logan Chien2833ffb2018-10-09 10:03:24 +080059}
60
61static __inline__ __m512i __DEFAULT_FN_ATTRS
62_mm512_maskz_permutexvar_epi8 (__mmask64 __M, __m512i __A,
63 __m512i __B)
64{
Logan Chien55afb0a2018-10-15 10:42:14 +080065 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
66 (__v64qi)_mm512_permutexvar_epi8(__A, __B),
67 (__v64qi)_mm512_setzero_si512());
Logan Chien2833ffb2018-10-09 10:03:24 +080068}
69
70static __inline__ __m512i __DEFAULT_FN_ATTRS
71_mm512_mask_permutexvar_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
72 __m512i __B)
73{
Logan Chien55afb0a2018-10-15 10:42:14 +080074 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
75 (__v64qi)_mm512_permutexvar_epi8(__A, __B),
76 (__v64qi)__W);
Logan Chien2833ffb2018-10-09 10:03:24 +080077}
78
79static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chiendbcf4122019-03-21 10:50:25 +080080_mm512_multishift_epi64_epi8(__m512i __X, __m512i __Y)
Logan Chien2833ffb2018-10-09 10:03:24 +080081{
Logan Chiendbcf4122019-03-21 10:50:25 +080082 return (__m512i)__builtin_ia32_vpmultishiftqb512((__v64qi)__X, (__v64qi) __Y);
Logan Chien2833ffb2018-10-09 10:03:24 +080083}
84
85static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chiendbcf4122019-03-21 10:50:25 +080086_mm512_mask_multishift_epi64_epi8(__m512i __W, __mmask64 __M, __m512i __X,
87 __m512i __Y)
Logan Chien2833ffb2018-10-09 10:03:24 +080088{
Logan Chiendbcf4122019-03-21 10:50:25 +080089 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
90 (__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
91 (__v64qi)__W);
Logan Chien2833ffb2018-10-09 10:03:24 +080092}
93
94static __inline__ __m512i __DEFAULT_FN_ATTRS
Logan Chiendbcf4122019-03-21 10:50:25 +080095_mm512_maskz_multishift_epi64_epi8(__mmask64 __M, __m512i __X, __m512i __Y)
Logan Chien2833ffb2018-10-09 10:03:24 +080096{
Logan Chiendbcf4122019-03-21 10:50:25 +080097 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
98 (__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
99 (__v64qi)_mm512_setzero_si512());
Logan Chien2833ffb2018-10-09 10:03:24 +0800100}
101
102
103#undef __DEFAULT_FN_ATTRS
104
105#endif