Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===---- avx512vlbitalgintrin.h - BITALG intrinsics -----------------------===
2
 *
3
 *
4
 * 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
7
 *
8
 *===-----------------------------------------------------------------------===
9
 */
10
#ifndef __IMMINTRIN_H
11
#error "Never use <avx512vlbitalgintrin.h> directly; include <immintrin.h> instead."
12
#endif
13
 
14
#ifndef __AVX512VLBITALGINTRIN_H
15
#define __AVX512VLBITALGINTRIN_H
16
 
17
/* Define the default attributes for the functions in this file. */
18
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(128)))
19
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(256)))
20
 
21
static __inline__ __m256i __DEFAULT_FN_ATTRS256
22
_mm256_popcnt_epi16(__m256i __A)
23
{
24
  return (__m256i) __builtin_ia32_vpopcntw_256((__v16hi) __A);
25
}
26
 
27
static __inline__ __m256i __DEFAULT_FN_ATTRS256
28
_mm256_mask_popcnt_epi16(__m256i __A, __mmask16 __U, __m256i __B)
29
{
30
  return (__m256i) __builtin_ia32_selectw_256((__mmask16) __U,
31
              (__v16hi) _mm256_popcnt_epi16(__B),
32
              (__v16hi) __A);
33
}
34
 
35
static __inline__ __m256i __DEFAULT_FN_ATTRS256
36
_mm256_maskz_popcnt_epi16(__mmask16 __U, __m256i __B)
37
{
38
  return _mm256_mask_popcnt_epi16((__m256i) _mm256_setzero_si256(),
39
              __U,
40
              __B);
41
}
42
 
43
static __inline__ __m128i __DEFAULT_FN_ATTRS128
44
_mm_popcnt_epi16(__m128i __A)
45
{
46
  return (__m128i) __builtin_ia32_vpopcntw_128((__v8hi) __A);
47
}
48
 
49
static __inline__ __m128i __DEFAULT_FN_ATTRS128
50
_mm_mask_popcnt_epi16(__m128i __A, __mmask8 __U, __m128i __B)
51
{
52
  return (__m128i) __builtin_ia32_selectw_128((__mmask8) __U,
53
              (__v8hi) _mm_popcnt_epi16(__B),
54
              (__v8hi) __A);
55
}
56
 
57
static __inline__ __m128i __DEFAULT_FN_ATTRS128
58
_mm_maskz_popcnt_epi16(__mmask8 __U, __m128i __B)
59
{
60
  return _mm_mask_popcnt_epi16((__m128i) _mm_setzero_si128(),
61
              __U,
62
              __B);
63
}
64
 
65
static __inline__ __m256i __DEFAULT_FN_ATTRS256
66
_mm256_popcnt_epi8(__m256i __A)
67
{
68
  return (__m256i) __builtin_ia32_vpopcntb_256((__v32qi) __A);
69
}
70
 
71
static __inline__ __m256i __DEFAULT_FN_ATTRS256
72
_mm256_mask_popcnt_epi8(__m256i __A, __mmask32 __U, __m256i __B)
73
{
74
  return (__m256i) __builtin_ia32_selectb_256((__mmask32) __U,
75
              (__v32qi) _mm256_popcnt_epi8(__B),
76
              (__v32qi) __A);
77
}
78
 
79
static __inline__ __m256i __DEFAULT_FN_ATTRS256
80
_mm256_maskz_popcnt_epi8(__mmask32 __U, __m256i __B)
81
{
82
  return _mm256_mask_popcnt_epi8((__m256i) _mm256_setzero_si256(),
83
              __U,
84
              __B);
85
}
86
 
87
static __inline__ __m128i __DEFAULT_FN_ATTRS128
88
_mm_popcnt_epi8(__m128i __A)
89
{
90
  return (__m128i) __builtin_ia32_vpopcntb_128((__v16qi) __A);
91
}
92
 
93
static __inline__ __m128i __DEFAULT_FN_ATTRS128
94
_mm_mask_popcnt_epi8(__m128i __A, __mmask16 __U, __m128i __B)
95
{
96
  return (__m128i) __builtin_ia32_selectb_128((__mmask16) __U,
97
              (__v16qi) _mm_popcnt_epi8(__B),
98
              (__v16qi) __A);
99
}
100
 
101
static __inline__ __m128i __DEFAULT_FN_ATTRS128
102
_mm_maskz_popcnt_epi8(__mmask16 __U, __m128i __B)
103
{
104
  return _mm_mask_popcnt_epi8((__m128i) _mm_setzero_si128(),
105
              __U,
106
              __B);
107
}
108
 
109
static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
110
_mm256_mask_bitshuffle_epi64_mask(__mmask32 __U, __m256i __A, __m256i __B)
111
{
112
  return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask((__v32qi) __A,
113
              (__v32qi) __B,
114
              __U);
115
}
116
 
117
static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
118
_mm256_bitshuffle_epi64_mask(__m256i __A, __m256i __B)
119
{
120
  return _mm256_mask_bitshuffle_epi64_mask((__mmask32) -1,
121
              __A,
122
              __B);
123
}
124
 
125
static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
126
_mm_mask_bitshuffle_epi64_mask(__mmask16 __U, __m128i __A, __m128i __B)
127
{
128
  return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask((__v16qi) __A,
129
              (__v16qi) __B,
130
              __U);
131
}
132
 
133
static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
134
_mm_bitshuffle_epi64_mask(__m128i __A, __m128i __B)
135
{
136
  return _mm_mask_bitshuffle_epi64_mask((__mmask16) -1,
137
              __A,
138
              __B);
139
}
140
 
141
 
142
#undef __DEFAULT_FN_ATTRS128
143
#undef __DEFAULT_FN_ATTRS256
144
 
145
#endif