7
7
//!
8
8
//! [intel64_ref]: http://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
9
9
10
- use crate :: core_arch:: simd:: i16x16;
11
- use crate :: core_arch:: simd:: i16x32;
12
- use crate :: core_arch:: simd:: i16x8;
13
10
use crate :: core_arch:: simd:: i8x16;
14
11
use crate :: core_arch:: simd:: i8x32;
15
12
use crate :: core_arch:: simd:: i8x64;
@@ -26,28 +23,14 @@ use crate::core_arch::x86::_mm_setzero_si128;
26
23
use crate :: core_arch:: x86:: m128iExt;
27
24
use crate :: core_arch:: x86:: m256iExt;
28
25
use crate :: core_arch:: x86:: m512iExt;
29
- use crate :: intrinsics:: simd:: simd_select_bitmask;
26
+ use crate :: intrinsics:: simd:: { simd_ctpop , simd_select_bitmask} ;
30
27
use crate :: mem:: transmute;
31
28
32
29
#[ cfg( test) ]
33
30
use stdarch_test:: assert_instr;
34
31
35
32
#[ allow( improper_ctypes) ]
36
33
extern "C" {
37
- #[ link_name = "llvm.ctpop.v32i16" ]
38
- fn popcnt_v32i16 ( x : i16x32 ) -> i16x32 ;
39
- #[ link_name = "llvm.ctpop.v16i16" ]
40
- fn popcnt_v16i16 ( x : i16x16 ) -> i16x16 ;
41
- #[ link_name = "llvm.ctpop.v8i16" ]
42
- fn popcnt_v8i16 ( x : i16x8 ) -> i16x8 ;
43
-
44
- #[ link_name = "llvm.ctpop.v64i8" ]
45
- fn popcnt_v64i8 ( x : i8x64 ) -> i8x64 ;
46
- #[ link_name = "llvm.ctpop.v32i8" ]
47
- fn popcnt_v32i8 ( x : i8x32 ) -> i8x32 ;
48
- #[ link_name = "llvm.ctpop.v16i8" ]
49
- fn popcnt_v16i8 ( x : i8x16 ) -> i8x16 ;
50
-
51
34
#[ link_name = "llvm.x86.avx512.mask.vpshufbitqmb.512" ]
52
35
fn bitshuffle_512 ( data : i8x64 , indices : i8x64 , mask : __mmask64 ) -> __mmask64 ;
53
36
#[ link_name = "llvm.x86.avx512.mask.vpshufbitqmb.256" ]
@@ -64,7 +47,7 @@ extern "C" {
64
47
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
65
48
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
66
49
pub unsafe fn _mm512_popcnt_epi16 ( a : __m512i ) -> __m512i {
67
- transmute ( popcnt_v32i16 ( a. as_i16x32 ( ) ) )
50
+ transmute ( simd_ctpop ( a. as_i16x32 ( ) ) )
68
51
}
69
52
70
53
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -79,7 +62,7 @@ pub unsafe fn _mm512_popcnt_epi16(a: __m512i) -> __m512i {
79
62
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
80
63
pub unsafe fn _mm512_maskz_popcnt_epi16 ( k : __mmask32 , a : __m512i ) -> __m512i {
81
64
let zero = _mm512_setzero_si512 ( ) . as_i16x32 ( ) ;
82
- transmute ( simd_select_bitmask ( k, popcnt_v32i16 ( a. as_i16x32 ( ) ) , zero) )
65
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i16x32 ( ) ) , zero) )
83
66
}
84
67
85
68
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -95,7 +78,7 @@ pub unsafe fn _mm512_maskz_popcnt_epi16(k: __mmask32, a: __m512i) -> __m512i {
95
78
pub unsafe fn _mm512_mask_popcnt_epi16 ( src : __m512i , k : __mmask32 , a : __m512i ) -> __m512i {
96
79
transmute ( simd_select_bitmask (
97
80
k,
98
- popcnt_v32i16 ( a. as_i16x32 ( ) ) ,
81
+ simd_ctpop ( a. as_i16x32 ( ) ) ,
99
82
src. as_i16x32 ( ) ,
100
83
) )
101
84
}
@@ -108,7 +91,7 @@ pub unsafe fn _mm512_mask_popcnt_epi16(src: __m512i, k: __mmask32, a: __m512i) -
108
91
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
109
92
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
110
93
pub unsafe fn _mm256_popcnt_epi16 ( a : __m256i ) -> __m256i {
111
- transmute ( popcnt_v16i16 ( a. as_i16x16 ( ) ) )
94
+ transmute ( simd_ctpop ( a. as_i16x16 ( ) ) )
112
95
}
113
96
114
97
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -123,7 +106,7 @@ pub unsafe fn _mm256_popcnt_epi16(a: __m256i) -> __m256i {
123
106
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
124
107
pub unsafe fn _mm256_maskz_popcnt_epi16 ( k : __mmask16 , a : __m256i ) -> __m256i {
125
108
let zero = _mm256_setzero_si256 ( ) . as_i16x16 ( ) ;
126
- transmute ( simd_select_bitmask ( k, popcnt_v16i16 ( a. as_i16x16 ( ) ) , zero) )
109
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i16x16 ( ) ) , zero) )
127
110
}
128
111
129
112
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -139,7 +122,7 @@ pub unsafe fn _mm256_maskz_popcnt_epi16(k: __mmask16, a: __m256i) -> __m256i {
139
122
pub unsafe fn _mm256_mask_popcnt_epi16 ( src : __m256i , k : __mmask16 , a : __m256i ) -> __m256i {
140
123
transmute ( simd_select_bitmask (
141
124
k,
142
- popcnt_v16i16 ( a. as_i16x16 ( ) ) ,
125
+ simd_ctpop ( a. as_i16x16 ( ) ) ,
143
126
src. as_i16x16 ( ) ,
144
127
) )
145
128
}
@@ -152,7 +135,7 @@ pub unsafe fn _mm256_mask_popcnt_epi16(src: __m256i, k: __mmask16, a: __m256i) -
152
135
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
153
136
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
154
137
pub unsafe fn _mm_popcnt_epi16 ( a : __m128i ) -> __m128i {
155
- transmute ( popcnt_v8i16 ( a. as_i16x8 ( ) ) )
138
+ transmute ( simd_ctpop ( a. as_i16x8 ( ) ) )
156
139
}
157
140
158
141
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -167,7 +150,7 @@ pub unsafe fn _mm_popcnt_epi16(a: __m128i) -> __m128i {
167
150
#[ cfg_attr( test, assert_instr( vpopcntw) ) ]
168
151
pub unsafe fn _mm_maskz_popcnt_epi16 ( k : __mmask8 , a : __m128i ) -> __m128i {
169
152
let zero = _mm_setzero_si128 ( ) . as_i16x8 ( ) ;
170
- transmute ( simd_select_bitmask ( k, popcnt_v8i16 ( a. as_i16x8 ( ) ) , zero) )
153
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i16x8 ( ) ) , zero) )
171
154
}
172
155
173
156
/// For each packed 16-bit integer maps the value to the number of logical 1 bits.
@@ -183,7 +166,7 @@ pub unsafe fn _mm_maskz_popcnt_epi16(k: __mmask8, a: __m128i) -> __m128i {
183
166
pub unsafe fn _mm_mask_popcnt_epi16 ( src : __m128i , k : __mmask8 , a : __m128i ) -> __m128i {
184
167
transmute ( simd_select_bitmask (
185
168
k,
186
- popcnt_v8i16 ( a. as_i16x8 ( ) ) ,
169
+ simd_ctpop ( a. as_i16x8 ( ) ) ,
187
170
src. as_i16x8 ( ) ,
188
171
) )
189
172
}
@@ -196,7 +179,7 @@ pub unsafe fn _mm_mask_popcnt_epi16(src: __m128i, k: __mmask8, a: __m128i) -> __
196
179
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
197
180
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
198
181
pub unsafe fn _mm512_popcnt_epi8 ( a : __m512i ) -> __m512i {
199
- transmute ( popcnt_v64i8 ( a. as_i8x64 ( ) ) )
182
+ transmute ( simd_ctpop ( a. as_i8x64 ( ) ) )
200
183
}
201
184
202
185
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -211,7 +194,7 @@ pub unsafe fn _mm512_popcnt_epi8(a: __m512i) -> __m512i {
211
194
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
212
195
pub unsafe fn _mm512_maskz_popcnt_epi8 ( k : __mmask64 , a : __m512i ) -> __m512i {
213
196
let zero = _mm512_setzero_si512 ( ) . as_i8x64 ( ) ;
214
- transmute ( simd_select_bitmask ( k, popcnt_v64i8 ( a. as_i8x64 ( ) ) , zero) )
197
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i8x64 ( ) ) , zero) )
215
198
}
216
199
217
200
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -227,7 +210,7 @@ pub unsafe fn _mm512_maskz_popcnt_epi8(k: __mmask64, a: __m512i) -> __m512i {
227
210
pub unsafe fn _mm512_mask_popcnt_epi8 ( src : __m512i , k : __mmask64 , a : __m512i ) -> __m512i {
228
211
transmute ( simd_select_bitmask (
229
212
k,
230
- popcnt_v64i8 ( a. as_i8x64 ( ) ) ,
213
+ simd_ctpop ( a. as_i8x64 ( ) ) ,
231
214
src. as_i8x64 ( ) ,
232
215
) )
233
216
}
@@ -240,7 +223,7 @@ pub unsafe fn _mm512_mask_popcnt_epi8(src: __m512i, k: __mmask64, a: __m512i) ->
240
223
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
241
224
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
242
225
pub unsafe fn _mm256_popcnt_epi8 ( a : __m256i ) -> __m256i {
243
- transmute ( popcnt_v32i8 ( a. as_i8x32 ( ) ) )
226
+ transmute ( simd_ctpop ( a. as_i8x32 ( ) ) )
244
227
}
245
228
246
229
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -255,7 +238,7 @@ pub unsafe fn _mm256_popcnt_epi8(a: __m256i) -> __m256i {
255
238
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
256
239
pub unsafe fn _mm256_maskz_popcnt_epi8 ( k : __mmask32 , a : __m256i ) -> __m256i {
257
240
let zero = _mm256_setzero_si256 ( ) . as_i8x32 ( ) ;
258
- transmute ( simd_select_bitmask ( k, popcnt_v32i8 ( a. as_i8x32 ( ) ) , zero) )
241
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i8x32 ( ) ) , zero) )
259
242
}
260
243
261
244
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -271,7 +254,7 @@ pub unsafe fn _mm256_maskz_popcnt_epi8(k: __mmask32, a: __m256i) -> __m256i {
271
254
pub unsafe fn _mm256_mask_popcnt_epi8 ( src : __m256i , k : __mmask32 , a : __m256i ) -> __m256i {
272
255
transmute ( simd_select_bitmask (
273
256
k,
274
- popcnt_v32i8 ( a. as_i8x32 ( ) ) ,
257
+ simd_ctpop ( a. as_i8x32 ( ) ) ,
275
258
src. as_i8x32 ( ) ,
276
259
) )
277
260
}
@@ -284,7 +267,7 @@ pub unsafe fn _mm256_mask_popcnt_epi8(src: __m256i, k: __mmask32, a: __m256i) ->
284
267
#[ unstable( feature = "stdarch_x86_avx512" , issue = "111137" ) ]
285
268
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
286
269
pub unsafe fn _mm_popcnt_epi8 ( a : __m128i ) -> __m128i {
287
- transmute ( popcnt_v16i8 ( a. as_i8x16 ( ) ) )
270
+ transmute ( simd_ctpop ( a. as_i8x16 ( ) ) )
288
271
}
289
272
290
273
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -299,7 +282,7 @@ pub unsafe fn _mm_popcnt_epi8(a: __m128i) -> __m128i {
299
282
#[ cfg_attr( test, assert_instr( vpopcntb) ) ]
300
283
pub unsafe fn _mm_maskz_popcnt_epi8 ( k : __mmask16 , a : __m128i ) -> __m128i {
301
284
let zero = _mm_setzero_si128 ( ) . as_i8x16 ( ) ;
302
- transmute ( simd_select_bitmask ( k, popcnt_v16i8 ( a. as_i8x16 ( ) ) , zero) )
285
+ transmute ( simd_select_bitmask ( k, simd_ctpop ( a. as_i8x16 ( ) ) , zero) )
303
286
}
304
287
305
288
/// For each packed 8-bit integer maps the value to the number of logical 1 bits.
@@ -315,7 +298,7 @@ pub unsafe fn _mm_maskz_popcnt_epi8(k: __mmask16, a: __m128i) -> __m128i {
315
298
pub unsafe fn _mm_mask_popcnt_epi8 ( src : __m128i , k : __mmask16 , a : __m128i ) -> __m128i {
316
299
transmute ( simd_select_bitmask (
317
300
k,
318
- popcnt_v16i8 ( a. as_i8x16 ( ) ) ,
301
+ simd_ctpop ( a. as_i8x16 ( ) ) ,
319
302
src. as_i8x16 ( ) ,
320
303
) )
321
304
}
0 commit comments