/src/avm/avm_dsp/simd/v128_intrinsics_x86.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2021, Alliance for Open Media. All rights reserved |
3 | | * |
4 | | * This source code is subject to the terms of the BSD 3-Clause Clear License |
5 | | * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear |
6 | | * License was not distributed with this source code in the LICENSE file, you |
7 | | * can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the |
8 | | * Alliance for Open Media Patent License 1.0 was not distributed with this |
9 | | * source code in the PATENTS file, you can obtain it at |
10 | | * aomedia.org/license/patent-license/. |
11 | | */ |
12 | | |
13 | | #ifndef AVM_AVM_DSP_SIMD_V128_INTRINSICS_X86_H_ |
14 | | #define AVM_AVM_DSP_SIMD_V128_INTRINSICS_X86_H_ |
15 | | |
16 | | #include <stdint.h> |
17 | | #include "avm_dsp/simd/v64_intrinsics_x86.h" |
18 | | |
19 | | typedef __m128i v128; |
20 | | |
21 | 3 | SIMD_INLINE uint32_t v128_low_u32(v128 a) { |
22 | 3 | return (uint32_t)_mm_cvtsi128_si32(a); |
23 | 3 | } Unexecuted instantiation: cdef_block_sse2.c:v128_low_u32 Unexecuted instantiation: cdef_block_ssse3.c:v128_low_u32 Unexecuted instantiation: cdef_block_sse4.c:v128_low_u32 cdef_block_avx2.c:v128_low_u32 Line | Count | Source | 21 | 3 | SIMD_INLINE uint32_t v128_low_u32(v128 a) { | 22 | 3 | return (uint32_t)_mm_cvtsi128_si32(a); | 23 | 3 | } |
|
24 | | |
25 | 9.72k | SIMD_INLINE v64 v128_low_v64(v128 a) { |
26 | 9.72k | return _mm_unpacklo_epi64(a, v64_zero()); |
27 | 9.72k | } Unexecuted instantiation: cdef_block_sse2.c:v128_low_v64 Unexecuted instantiation: cdef_block_ssse3.c:v128_low_v64 Unexecuted instantiation: cdef_block_sse4.c:v128_low_v64 cdef_block_avx2.c:v128_low_v64 Line | Count | Source | 25 | 9.72k | SIMD_INLINE v64 v128_low_v64(v128 a) { | 26 | 9.72k | return _mm_unpacklo_epi64(a, v64_zero()); | 27 | 9.72k | } |
|
28 | | |
29 | 9.72k | SIMD_INLINE v64 v128_high_v64(v128 a) { return _mm_srli_si128(a, 8); }Unexecuted instantiation: cdef_block_sse2.c:v128_high_v64 Unexecuted instantiation: cdef_block_ssse3.c:v128_high_v64 Unexecuted instantiation: cdef_block_sse4.c:v128_high_v64 cdef_block_avx2.c:v128_high_v64 Line | Count | Source | 29 | 9.72k | SIMD_INLINE v64 v128_high_v64(v128 a) { return _mm_srli_si128(a, 8); } |
|
30 | | |
31 | 64.0k | SIMD_INLINE v128 v128_from_v64(v64 a, v64 b) { |
32 | 64.0k | return _mm_unpacklo_epi64(b, a); |
33 | 64.0k | } Unexecuted instantiation: cdef_block_sse2.c:v128_from_v64 Unexecuted instantiation: cdef_block_ssse3.c:v128_from_v64 Unexecuted instantiation: cdef_block_sse4.c:v128_from_v64 cdef_block_avx2.c:v128_from_v64 Line | Count | Source | 31 | 64.0k | SIMD_INLINE v128 v128_from_v64(v64 a, v64 b) { | 32 | 64.0k | return _mm_unpacklo_epi64(b, a); | 33 | 64.0k | } |
|
34 | | |
35 | 0 | SIMD_INLINE v128 v128_from_64(uint64_t a, uint64_t b) { |
36 | 0 | return v128_from_v64(v64_from_64(a), v64_from_64(b)); |
37 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_from_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_from_64 Unexecuted instantiation: cdef_block_sse4.c:v128_from_64 Unexecuted instantiation: cdef_block_avx2.c:v128_from_64 |
38 | | |
39 | 54 | SIMD_INLINE v128 v128_from_32(uint32_t a, uint32_t b, uint32_t c, uint32_t d) { |
40 | 54 | return _mm_set_epi32(a, b, c, d); |
41 | 54 | } Unexecuted instantiation: cdef_block_sse2.c:v128_from_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_from_32 Unexecuted instantiation: cdef_block_sse4.c:v128_from_32 cdef_block_avx2.c:v128_from_32 Line | Count | Source | 39 | 54 | SIMD_INLINE v128 v128_from_32(uint32_t a, uint32_t b, uint32_t c, uint32_t d) { | 40 | 54 | return _mm_set_epi32(a, b, c, d); | 41 | 54 | } |
|
42 | | |
43 | 225k | SIMD_INLINE v128 v128_load_unaligned(const void *p) { |
44 | | #if defined(__SSSE3__) |
45 | | return _mm_lddqu_si128((__m128i *)p); |
46 | | #else |
47 | | return _mm_loadu_si128((__m128i *)p); |
48 | | #endif |
49 | 225k | } Unexecuted instantiation: cdef_block_sse2.c:v128_load_unaligned Unexecuted instantiation: cdef_block_ssse3.c:v128_load_unaligned Unexecuted instantiation: cdef_block_sse4.c:v128_load_unaligned cdef_block_avx2.c:v128_load_unaligned Line | Count | Source | 43 | 225k | SIMD_INLINE v128 v128_load_unaligned(const void *p) { | 44 | 225k | #if defined(__SSSE3__) | 45 | 225k | return _mm_lddqu_si128((__m128i *)p); | 46 | | #else | 47 | | return _mm_loadu_si128((__m128i *)p); | 48 | | #endif | 49 | 225k | } |
|
50 | | |
51 | 30.2k | SIMD_INLINE v128 v128_load_aligned(const void *p) { |
52 | 30.2k | return v128_load_unaligned(p); |
53 | 30.2k | } Unexecuted instantiation: cdef_block_sse2.c:v128_load_aligned Unexecuted instantiation: cdef_block_ssse3.c:v128_load_aligned Unexecuted instantiation: cdef_block_sse4.c:v128_load_aligned cdef_block_avx2.c:v128_load_aligned Line | Count | Source | 51 | 30.2k | SIMD_INLINE v128 v128_load_aligned(const void *p) { | 52 | 30.2k | return v128_load_unaligned(p); | 53 | 30.2k | } |
|
54 | | |
55 | 0 | SIMD_INLINE void v128_store_aligned(void *p, v128 a) { |
56 | 0 | _mm_store_si128((__m128i *)p, a); |
57 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_store_aligned Unexecuted instantiation: cdef_block_ssse3.c:v128_store_aligned Unexecuted instantiation: cdef_block_sse4.c:v128_store_aligned Unexecuted instantiation: cdef_block_avx2.c:v128_store_aligned |
58 | | |
59 | 79.2k | SIMD_INLINE void v128_store_unaligned(void *p, v128 a) { |
60 | 79.2k | _mm_storeu_si128((__m128i *)p, a); |
61 | 79.2k | } Unexecuted instantiation: cdef_block_sse2.c:v128_store_unaligned Unexecuted instantiation: cdef_block_ssse3.c:v128_store_unaligned Unexecuted instantiation: cdef_block_sse4.c:v128_store_unaligned cdef_block_avx2.c:v128_store_unaligned Line | Count | Source | 59 | 79.2k | SIMD_INLINE void v128_store_unaligned(void *p, v128 a) { | 60 | 79.2k | _mm_storeu_si128((__m128i *)p, a); | 61 | 79.2k | } |
|
62 | | |
63 | | // The following function requires an immediate. |
64 | | // Some compilers will check this during optimisation, others wont. |
65 | | #if defined(__OPTIMIZE__) && __OPTIMIZE__ && !defined(__clang__) |
66 | | #if defined(__SSSE3__) |
67 | | SIMD_INLINE v128 v128_align(v128 a, v128 b, const unsigned int c) { |
68 | | return c ? _mm_alignr_epi8(a, b, c) : b; |
69 | | } |
70 | | #else |
71 | | #define v128_align(a, b, c) \ |
72 | | ((c) ? _mm_or_si128(_mm_srli_si128(b, c), _mm_slli_si128(a, 16 - (c))) : (b)) |
73 | | #endif |
74 | | #else |
75 | | #if defined(__SSSE3__) |
76 | 6 | #define v128_align(a, b, c) ((c) ? _mm_alignr_epi8(a, b, (uint8_t)(c)) : (b)) |
77 | | #else |
78 | | #define v128_align(a, b, c) \ |
79 | 0 | ((c) ? _mm_or_si128(_mm_srli_si128(b, c), _mm_slli_si128(a, 16 - (c))) : (b)) |
80 | | #endif |
81 | | #endif |
82 | | |
83 | 0 | SIMD_INLINE v128 v128_zero() { return _mm_setzero_si128(); }Unexecuted instantiation: cdef_block_sse2.c:v128_zero Unexecuted instantiation: cdef_block_ssse3.c:v128_zero Unexecuted instantiation: cdef_block_sse4.c:v128_zero Unexecuted instantiation: cdef_block_avx2.c:v128_zero |
84 | | |
85 | 0 | SIMD_INLINE v128 v128_dup_8(uint8_t x) { return _mm_set1_epi8(x); }Unexecuted instantiation: cdef_block_sse2.c:v128_dup_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_dup_8 Unexecuted instantiation: cdef_block_sse4.c:v128_dup_8 Unexecuted instantiation: cdef_block_avx2.c:v128_dup_8 |
86 | | |
87 | 24 | SIMD_INLINE v128 v128_dup_16(uint16_t x) { return _mm_set1_epi16(x); }Unexecuted instantiation: cdef_block_sse2.c:v128_dup_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_dup_16 Unexecuted instantiation: cdef_block_sse4.c:v128_dup_16 cdef_block_avx2.c:v128_dup_16 Line | Count | Source | 87 | 24 | SIMD_INLINE v128 v128_dup_16(uint16_t x) { return _mm_set1_epi16(x); } |
|
88 | | |
89 | 6 | SIMD_INLINE v128 v128_dup_32(uint32_t x) { return _mm_set1_epi32(x); }Unexecuted instantiation: cdef_block_sse2.c:v128_dup_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_dup_32 Unexecuted instantiation: cdef_block_sse4.c:v128_dup_32 cdef_block_avx2.c:v128_dup_32 Line | Count | Source | 89 | 6 | SIMD_INLINE v128 v128_dup_32(uint32_t x) { return _mm_set1_epi32(x); } |
|
90 | | |
91 | 0 | SIMD_INLINE v128 v128_dup_64(uint64_t x) { |
92 | 0 | // _mm_set_pi64x and _mm_cvtsi64x_si64 missing in some compilers |
93 | 0 | return _mm_set_epi32((uint32_t)(x >> 32), (uint32_t)x, (uint32_t)(x >> 32), |
94 | 0 | (uint32_t)x); |
95 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_dup_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_dup_64 Unexecuted instantiation: cdef_block_sse4.c:v128_dup_64 Unexecuted instantiation: cdef_block_avx2.c:v128_dup_64 |
96 | | |
97 | 0 | SIMD_INLINE v128 v128_add_8(v128 a, v128 b) { return _mm_add_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_add_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_add_8 Unexecuted instantiation: cdef_block_sse4.c:v128_add_8 Unexecuted instantiation: cdef_block_avx2.c:v128_add_8 |
98 | | |
99 | 192 | SIMD_INLINE v128 v128_add_16(v128 a, v128 b) { return _mm_add_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_add_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_add_16 Unexecuted instantiation: cdef_block_sse4.c:v128_add_16 cdef_block_avx2.c:v128_add_16 Line | Count | Source | 99 | 192 | SIMD_INLINE v128 v128_add_16(v128 a, v128 b) { return _mm_add_epi16(a, b); } |
|
100 | | |
101 | 0 | SIMD_INLINE v128 v128_sadd_u8(v128 a, v128 b) { return _mm_adds_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sadd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_sadd_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_sadd_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_sadd_u8 |
102 | | |
103 | 0 | SIMD_INLINE v128 v128_sadd_s8(v128 a, v128 b) { return _mm_adds_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sadd_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_sadd_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_sadd_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_sadd_s8 |
104 | | |
105 | 0 | SIMD_INLINE v128 v128_sadd_s16(v128 a, v128 b) { return _mm_adds_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sadd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_sadd_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_sadd_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_sadd_s16 |
106 | | |
107 | 36 | SIMD_INLINE v128 v128_add_32(v128 a, v128 b) { return _mm_add_epi32(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_add_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_add_32 Unexecuted instantiation: cdef_block_sse4.c:v128_add_32 cdef_block_avx2.c:v128_add_32 Line | Count | Source | 107 | 36 | SIMD_INLINE v128 v128_add_32(v128 a, v128 b) { return _mm_add_epi32(a, b); } |
|
108 | | |
109 | 0 | SIMD_INLINE v128 v128_add_64(v128 a, v128 b) { return _mm_add_epi64(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_add_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_add_64 Unexecuted instantiation: cdef_block_sse4.c:v128_add_64 Unexecuted instantiation: cdef_block_avx2.c:v128_add_64 |
110 | | |
111 | 0 | SIMD_INLINE v128 v128_padd_s16(v128 a) { |
112 | 0 | return _mm_madd_epi16(a, _mm_set1_epi16(1)); |
113 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_padd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_padd_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_padd_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_padd_s16 |
114 | | |
115 | 0 | SIMD_INLINE v128 v128_sub_8(v128 a, v128 b) { return _mm_sub_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sub_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_sub_8 Unexecuted instantiation: cdef_block_sse4.c:v128_sub_8 Unexecuted instantiation: cdef_block_avx2.c:v128_sub_8 |
116 | | |
117 | 0 | SIMD_INLINE v128 v128_ssub_u8(v128 a, v128 b) { return _mm_subs_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_ssub_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssub_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_ssub_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_ssub_u8 |
118 | | |
119 | 0 | SIMD_INLINE v128 v128_ssub_s8(v128 a, v128 b) { return _mm_subs_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_ssub_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssub_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_ssub_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_ssub_s8 |
120 | | |
121 | 24 | SIMD_INLINE v128 v128_sub_16(v128 a, v128 b) { return _mm_sub_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sub_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_sub_16 Unexecuted instantiation: cdef_block_sse4.c:v128_sub_16 cdef_block_avx2.c:v128_sub_16 Line | Count | Source | 121 | 24 | SIMD_INLINE v128 v128_sub_16(v128 a, v128 b) { return _mm_sub_epi16(a, b); } |
|
122 | | |
123 | 0 | SIMD_INLINE v128 v128_ssub_s16(v128 a, v128 b) { return _mm_subs_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_ssub_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssub_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_ssub_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_ssub_s16 |
124 | | |
125 | 0 | SIMD_INLINE v128 v128_ssub_u16(v128 a, v128 b) { return _mm_subs_epu16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_ssub_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssub_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_ssub_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_ssub_u16 |
126 | | |
127 | 0 | SIMD_INLINE v128 v128_sub_32(v128 a, v128 b) { return _mm_sub_epi32(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sub_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_sub_32 Unexecuted instantiation: cdef_block_sse4.c:v128_sub_32 Unexecuted instantiation: cdef_block_avx2.c:v128_sub_32 |
128 | | |
129 | 0 | SIMD_INLINE v128 v128_sub_64(v128 a, v128 b) { return _mm_sub_epi64(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_sub_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_sub_64 Unexecuted instantiation: cdef_block_sse4.c:v128_sub_64 Unexecuted instantiation: cdef_block_avx2.c:v128_sub_64 |
130 | | |
131 | 0 | SIMD_INLINE v128 v128_abs_s16(v128 a) { |
132 | | #if defined(__SSSE3__) |
133 | | return _mm_abs_epi16(a); |
134 | | #else |
135 | | return _mm_max_epi16(a, _mm_sub_epi16(_mm_setzero_si128(), a)); |
136 | | #endif |
137 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_abs_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_abs_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_abs_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_abs_s16 |
138 | | |
139 | 0 | SIMD_INLINE v128 v128_abs_s8(v128 a) { |
140 | 0 | #if defined(__SSSE3__) |
141 | 0 | return _mm_abs_epi8(a); |
142 | 0 | #else |
143 | 0 | v128 sign = _mm_cmplt_epi8(a, _mm_setzero_si128()); |
144 | 0 | return _mm_xor_si128(sign, _mm_add_epi8(a, sign)); |
145 | 0 | #endif |
146 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_abs_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_abs_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_abs_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_abs_s8 |
147 | | |
148 | 0 | SIMD_INLINE v128 v128_ziplo_8(v128 a, v128 b) { |
149 | 0 | return _mm_unpacklo_epi8(b, a); |
150 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziplo_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziplo_8 Unexecuted instantiation: cdef_block_sse4.c:v128_ziplo_8 Unexecuted instantiation: cdef_block_avx2.c:v128_ziplo_8 |
151 | | |
152 | 0 | SIMD_INLINE v128 v128_ziphi_8(v128 a, v128 b) { |
153 | 0 | return _mm_unpackhi_epi8(b, a); |
154 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziphi_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziphi_8 Unexecuted instantiation: cdef_block_sse4.c:v128_ziphi_8 Unexecuted instantiation: cdef_block_avx2.c:v128_ziphi_8 |
155 | | |
156 | 30 | SIMD_INLINE v128 v128_ziplo_16(v128 a, v128 b) { |
157 | 30 | return _mm_unpacklo_epi16(b, a); |
158 | 30 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziplo_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziplo_16 Unexecuted instantiation: cdef_block_sse4.c:v128_ziplo_16 cdef_block_avx2.c:v128_ziplo_16 Line | Count | Source | 156 | 30 | SIMD_INLINE v128 v128_ziplo_16(v128 a, v128 b) { | 157 | 30 | return _mm_unpacklo_epi16(b, a); | 158 | 30 | } |
|
159 | | |
160 | 30 | SIMD_INLINE v128 v128_ziphi_16(v128 a, v128 b) { |
161 | 30 | return _mm_unpackhi_epi16(b, a); |
162 | 30 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziphi_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziphi_16 Unexecuted instantiation: cdef_block_sse4.c:v128_ziphi_16 cdef_block_avx2.c:v128_ziphi_16 Line | Count | Source | 160 | 30 | SIMD_INLINE v128 v128_ziphi_16(v128 a, v128 b) { | 161 | 30 | return _mm_unpackhi_epi16(b, a); | 162 | 30 | } |
|
163 | | |
164 | 24 | SIMD_INLINE v128 v128_ziplo_32(v128 a, v128 b) { |
165 | 24 | return _mm_unpacklo_epi32(b, a); |
166 | 24 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziplo_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziplo_32 Unexecuted instantiation: cdef_block_sse4.c:v128_ziplo_32 cdef_block_avx2.c:v128_ziplo_32 Line | Count | Source | 164 | 24 | SIMD_INLINE v128 v128_ziplo_32(v128 a, v128 b) { | 165 | 24 | return _mm_unpacklo_epi32(b, a); | 166 | 24 | } |
|
167 | | |
168 | 24 | SIMD_INLINE v128 v128_ziphi_32(v128 a, v128 b) { |
169 | 24 | return _mm_unpackhi_epi32(b, a); |
170 | 24 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziphi_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziphi_32 Unexecuted instantiation: cdef_block_sse4.c:v128_ziphi_32 cdef_block_avx2.c:v128_ziphi_32 Line | Count | Source | 168 | 24 | SIMD_INLINE v128 v128_ziphi_32(v128 a, v128 b) { | 169 | 24 | return _mm_unpackhi_epi32(b, a); | 170 | 24 | } |
|
171 | | |
172 | 24 | SIMD_INLINE v128 v128_ziplo_64(v128 a, v128 b) { |
173 | 24 | return _mm_unpacklo_epi64(b, a); |
174 | 24 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziplo_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziplo_64 Unexecuted instantiation: cdef_block_sse4.c:v128_ziplo_64 cdef_block_avx2.c:v128_ziplo_64 Line | Count | Source | 172 | 24 | SIMD_INLINE v128 v128_ziplo_64(v128 a, v128 b) { | 173 | 24 | return _mm_unpacklo_epi64(b, a); | 174 | 24 | } |
|
175 | | |
176 | 24 | SIMD_INLINE v128 v128_ziphi_64(v128 a, v128 b) { |
177 | 24 | return _mm_unpackhi_epi64(b, a); |
178 | 24 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ziphi_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_ziphi_64 Unexecuted instantiation: cdef_block_sse4.c:v128_ziphi_64 cdef_block_avx2.c:v128_ziphi_64 Line | Count | Source | 176 | 24 | SIMD_INLINE v128 v128_ziphi_64(v128 a, v128 b) { | 177 | 24 | return _mm_unpackhi_epi64(b, a); | 178 | 24 | } |
|
179 | | |
180 | 0 | SIMD_INLINE v128 v128_zip_8(v64 a, v64 b) { return _mm_unpacklo_epi8(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v128_zip_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_zip_8 Unexecuted instantiation: cdef_block_sse4.c:v128_zip_8 Unexecuted instantiation: cdef_block_avx2.c:v128_zip_8 |
181 | | |
182 | 0 | SIMD_INLINE v128 v128_zip_16(v64 a, v64 b) { return _mm_unpacklo_epi16(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v128_zip_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_zip_16 Unexecuted instantiation: cdef_block_sse4.c:v128_zip_16 Unexecuted instantiation: cdef_block_avx2.c:v128_zip_16 |
183 | | |
184 | 0 | SIMD_INLINE v128 v128_zip_32(v64 a, v64 b) { return _mm_unpacklo_epi32(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v128_zip_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_zip_32 Unexecuted instantiation: cdef_block_sse4.c:v128_zip_32 Unexecuted instantiation: cdef_block_avx2.c:v128_zip_32 |
185 | | |
186 | 0 | SIMD_INLINE v128 v128_unziphi_8(v128 a, v128 b) { |
187 | 0 | return _mm_packs_epi16(_mm_srai_epi16(b, 8), _mm_srai_epi16(a, 8)); |
188 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziphi_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziphi_8 Unexecuted instantiation: cdef_block_sse4.c:v128_unziphi_8 Unexecuted instantiation: cdef_block_avx2.c:v128_unziphi_8 |
189 | | |
190 | 0 | SIMD_INLINE v128 v128_unziplo_8(v128 a, v128 b) { |
191 | 0 | #if defined(__SSSE3__) |
192 | 0 | #ifdef __x86_64__ |
193 | 0 | v128 order = _mm_cvtsi64_si128(0x0e0c0a0806040200LL); |
194 | 0 | #else |
195 | 0 | v128 order = _mm_set_epi32(0, 0, 0x0e0c0a08, 0x06040200); |
196 | 0 | #endif |
197 | 0 | return _mm_unpacklo_epi64(_mm_shuffle_epi8(b, order), |
198 | 0 | _mm_shuffle_epi8(a, order)); |
199 | 0 | #else |
200 | 0 | return v128_unziphi_8(_mm_slli_si128(a, 1), _mm_slli_si128(b, 1)); |
201 | 0 | #endif |
202 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziplo_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziplo_8 Unexecuted instantiation: cdef_block_sse4.c:v128_unziplo_8 Unexecuted instantiation: cdef_block_avx2.c:v128_unziplo_8 |
203 | | |
204 | 0 | SIMD_INLINE v128 v128_unziphi_16(v128 a, v128 b) { |
205 | 0 | return _mm_packs_epi32(_mm_srai_epi32(b, 16), _mm_srai_epi32(a, 16)); |
206 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziphi_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziphi_16 Unexecuted instantiation: cdef_block_sse4.c:v128_unziphi_16 Unexecuted instantiation: cdef_block_avx2.c:v128_unziphi_16 |
207 | | |
208 | 0 | SIMD_INLINE v128 v128_unziplo_16(v128 a, v128 b) { |
209 | 0 | #if defined(__SSSE3__) |
210 | 0 | #ifdef __x86_64__ |
211 | 0 | v128 order = _mm_cvtsi64_si128(0x0d0c090805040100LL); |
212 | 0 | #else |
213 | 0 | v128 order = _mm_set_epi32(0, 0, 0x0d0c0908, 0x05040100); |
214 | 0 | #endif |
215 | 0 | return _mm_unpacklo_epi64(_mm_shuffle_epi8(b, order), |
216 | 0 | _mm_shuffle_epi8(a, order)); |
217 | 0 | #else |
218 | 0 | return v128_unziphi_16(_mm_slli_si128(a, 2), _mm_slli_si128(b, 2)); |
219 | 0 | #endif |
220 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziplo_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziplo_16 Unexecuted instantiation: cdef_block_sse4.c:v128_unziplo_16 Unexecuted instantiation: cdef_block_avx2.c:v128_unziplo_16 |
221 | | |
222 | 0 | SIMD_INLINE v128 v128_unziphi_32(v128 a, v128 b) { |
223 | 0 | return _mm_castps_si128(_mm_shuffle_ps( |
224 | 0 | _mm_castsi128_ps(b), _mm_castsi128_ps(a), _MM_SHUFFLE(3, 1, 3, 1))); |
225 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziphi_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziphi_32 Unexecuted instantiation: cdef_block_sse4.c:v128_unziphi_32 Unexecuted instantiation: cdef_block_avx2.c:v128_unziphi_32 |
226 | | |
227 | 0 | SIMD_INLINE v128 v128_unziplo_32(v128 a, v128 b) { |
228 | 0 | return _mm_castps_si128(_mm_shuffle_ps( |
229 | 0 | _mm_castsi128_ps(b), _mm_castsi128_ps(a), _MM_SHUFFLE(2, 0, 2, 0))); |
230 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unziplo_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unziplo_32 Unexecuted instantiation: cdef_block_sse4.c:v128_unziplo_32 Unexecuted instantiation: cdef_block_avx2.c:v128_unziplo_32 |
231 | | |
232 | 0 | SIMD_INLINE v128 v128_unpack_u8_s16(v64 a) { |
233 | 0 | return _mm_unpacklo_epi8(a, _mm_setzero_si128()); |
234 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpack_u8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpack_u8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpack_u8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpack_u8_s16 |
235 | | |
236 | 0 | SIMD_INLINE v128 v128_unpacklo_u8_s16(v128 a) { |
237 | 0 | return _mm_unpacklo_epi8(a, _mm_setzero_si128()); |
238 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpacklo_u8_s16 |
239 | | |
240 | 0 | SIMD_INLINE v128 v128_unpackhi_u8_s16(v128 a) { |
241 | 0 | return _mm_unpackhi_epi8(a, _mm_setzero_si128()); |
242 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpackhi_u8_s16 |
243 | | |
244 | 0 | SIMD_INLINE v128 v128_unpack_s8_s16(v64 a) { |
245 | 0 | return _mm_srai_epi16(_mm_unpacklo_epi8(a, a), 8); |
246 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpack_s8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpack_s8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpack_s8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpack_s8_s16 |
247 | | |
248 | 0 | SIMD_INLINE v128 v128_unpacklo_s8_s16(v128 a) { |
249 | 0 | return _mm_srai_epi16(_mm_unpacklo_epi8(a, a), 8); |
250 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpacklo_s8_s16 |
251 | | |
252 | 0 | SIMD_INLINE v128 v128_unpackhi_s8_s16(v128 a) { |
253 | 0 | return _mm_srai_epi16(_mm_unpackhi_epi8(a, a), 8); |
254 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_unpackhi_s8_s16 |
255 | | |
256 | 3 | SIMD_INLINE v128 v128_pack_s32_s16(v128 a, v128 b) { |
257 | 3 | return _mm_packs_epi32(b, a); |
258 | 3 | } Unexecuted instantiation: cdef_block_sse2.c:v128_pack_s32_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_pack_s32_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_pack_s32_s16 cdef_block_avx2.c:v128_pack_s32_s16 Line | Count | Source | 256 | 3 | SIMD_INLINE v128 v128_pack_s32_s16(v128 a, v128 b) { | 257 | 3 | return _mm_packs_epi32(b, a); | 258 | 3 | } |
|
259 | | |
260 | 0 | SIMD_INLINE v128 v128_pack_s32_u16(v128 a, v128 b) { |
261 | 0 | #if defined(__SSE4_1__) |
262 | 0 | return _mm_packus_epi32(b, a); |
263 | 0 | #else |
264 | 0 | return v128_from_v64(v64_pack_s32_u16(v128_high_v64(a), v128_low_v64(a)), |
265 | 0 | v64_pack_s32_u16(v128_high_v64(b), v128_low_v64(b))); |
266 | 0 | #endif |
267 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_pack_s32_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_pack_s32_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_pack_s32_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_pack_s32_u16 |
268 | | |
269 | 0 | SIMD_INLINE v128 v128_pack_s16_u8(v128 a, v128 b) { |
270 | 0 | return _mm_packus_epi16(b, a); |
271 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_pack_s16_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_pack_s16_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_pack_s16_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_pack_s16_u8 |
272 | | |
273 | 3 | SIMD_INLINE v128 v128_pack_s16_s8(v128 a, v128 b) { |
274 | 3 | return _mm_packs_epi16(b, a); |
275 | 3 | } Unexecuted instantiation: cdef_block_sse2.c:v128_pack_s16_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_pack_s16_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_pack_s16_s8 cdef_block_avx2.c:v128_pack_s16_s8 Line | Count | Source | 273 | 3 | SIMD_INLINE v128 v128_pack_s16_s8(v128 a, v128 b) { | 274 | 3 | return _mm_packs_epi16(b, a); | 275 | 3 | } |
|
276 | | |
277 | 0 | SIMD_INLINE v128 v128_unpack_u16_s32(v64 a) { |
278 | 0 | return _mm_unpacklo_epi16(a, _mm_setzero_si128()); |
279 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpack_u16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpack_u16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpack_u16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpack_u16_s32 |
280 | | |
281 | 0 | SIMD_INLINE v128 v128_unpack_s16_s32(v64 a) { |
282 | 0 | return _mm_srai_epi32(_mm_unpacklo_epi16(a, a), 16); |
283 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpack_s16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpack_s16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpack_s16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpack_s16_s32 |
284 | | |
285 | 0 | SIMD_INLINE v128 v128_unpacklo_u16_s32(v128 a) { |
286 | 0 | return _mm_unpacklo_epi16(a, _mm_setzero_si128()); |
287 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpacklo_u16_s32 |
288 | | |
289 | 0 | SIMD_INLINE v128 v128_unpacklo_s16_s32(v128 a) { |
290 | 0 | return _mm_srai_epi32(_mm_unpacklo_epi16(a, a), 16); |
291 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpacklo_s16_s32 |
292 | | |
293 | 0 | SIMD_INLINE v128 v128_unpackhi_u16_s32(v128 a) { |
294 | 0 | return _mm_unpackhi_epi16(a, _mm_setzero_si128()); |
295 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpackhi_u16_s32 |
296 | | |
297 | 0 | SIMD_INLINE v128 v128_unpackhi_s16_s32(v128 a) { |
298 | 0 | return _mm_srai_epi32(_mm_unpackhi_epi16(a, a), 16); |
299 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_unpackhi_s16_s32 |
300 | | |
301 | 18 | SIMD_INLINE v128 v128_shuffle_8(v128 x, v128 pattern) { |
302 | | #if defined(__SSSE3__) |
303 | | return _mm_shuffle_epi8(x, pattern); |
304 | | #else |
305 | | v128 output; |
306 | | unsigned char *input = (unsigned char *)&x; |
307 | | unsigned char *index = (unsigned char *)&pattern; |
308 | | char *selected = (char *)&output; |
309 | | int counter; |
310 | | |
311 | 0 | for (counter = 0; counter < 16; counter++) { |
312 | 0 | selected[counter] = input[index[counter] & 15]; |
313 | 0 | } |
314 | | |
315 | | return output; |
316 | | #endif |
317 | 18 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shuffle_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_shuffle_8 Unexecuted instantiation: cdef_block_sse4.c:v128_shuffle_8 cdef_block_avx2.c:v128_shuffle_8 Line | Count | Source | 301 | 18 | SIMD_INLINE v128 v128_shuffle_8(v128 x, v128 pattern) { | 302 | 18 | #if defined(__SSSE3__) | 303 | 18 | return _mm_shuffle_epi8(x, pattern); | 304 | | #else | 305 | | v128 output; | 306 | | unsigned char *input = (unsigned char *)&x; | 307 | | unsigned char *index = (unsigned char *)&pattern; | 308 | | char *selected = (char *)&output; | 309 | | int counter; | 310 | | | 311 | | for (counter = 0; counter < 16; counter++) { | 312 | | selected[counter] = input[index[counter] & 15]; | 313 | | } | 314 | | | 315 | | return output; | 316 | | #endif | 317 | 18 | } |
|
318 | | |
319 | 0 | SIMD_INLINE int64_t v128_dotp_su8(v128 a, v128 b) { |
320 | 0 | v128 t1 = _mm_madd_epi16(v128_unpackhi_s8_s16(a), v128_unpackhi_u8_s16(b)); |
321 | 0 | v128 t2 = _mm_madd_epi16(v128_unpacklo_s8_s16(a), v128_unpacklo_u8_s16(b)); |
322 | 0 | v128 t = v128_add_32(t1, t2); |
323 | 0 | t = v128_add_32(t, _mm_srli_si128(t, 8)); |
324 | 0 | t = v128_add_32(t, _mm_srli_si128(t, 4)); |
325 | 0 | return (int32_t)v128_low_u32(t); |
326 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_dotp_su8 Unexecuted instantiation: cdef_block_ssse3.c:v128_dotp_su8 Unexecuted instantiation: cdef_block_sse4.c:v128_dotp_su8 Unexecuted instantiation: cdef_block_avx2.c:v128_dotp_su8 |
327 | | |
328 | 0 | SIMD_INLINE int64_t v128_dotp_s16(v128 a, v128 b) { |
329 | 0 | v128 r = _mm_madd_epi16(a, b); |
330 | 0 | #if defined(__SSE4_1__) && defined(__x86_64__) |
331 | 0 | v128 c = _mm_add_epi64(_mm_cvtepi32_epi64(r), |
332 | 0 | _mm_cvtepi32_epi64(_mm_srli_si128(r, 8))); |
333 | 0 | return _mm_cvtsi128_si64(_mm_add_epi64(c, _mm_srli_si128(c, 8))); |
334 | 0 | #else |
335 | 0 | return (int64_t)_mm_cvtsi128_si32(r) + |
336 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 4)) + |
337 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 8)) + |
338 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 12)); |
339 | 0 | #endif |
340 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_dotp_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_dotp_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_dotp_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_dotp_s16 |
341 | | |
342 | 0 | SIMD_INLINE uint64_t v128_hadd_u8(v128 a) { |
343 | 0 | v128 t = _mm_sad_epu8(a, _mm_setzero_si128()); |
344 | 0 | return v64_low_u32(v128_low_v64(t)) + v64_low_u32(v128_high_v64(t)); |
345 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_hadd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_hadd_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_hadd_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_hadd_u8 |
346 | | |
347 | | typedef v128 sad128_internal; |
348 | | |
349 | 0 | SIMD_INLINE sad128_internal v128_sad_u8_init() { return _mm_setzero_si128(); }Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u8_init Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u8_init Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u8_init Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u8_init |
350 | | |
351 | | /* Implementation dependent return value. Result must be finalised with |
352 | | v128_sad_sum(). |
353 | | The result for more than 32 v128_sad_u8() calls is undefined. */ |
354 | 0 | SIMD_INLINE sad128_internal v128_sad_u8(sad128_internal s, v128 a, v128 b) { |
355 | 0 | return _mm_add_epi64(s, _mm_sad_epu8(a, b)); |
356 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u8 |
357 | | |
358 | 0 | SIMD_INLINE uint32_t v128_sad_u8_sum(sad128_internal s) { |
359 | 0 | return v128_low_u32(_mm_add_epi32(s, _mm_unpackhi_epi64(s, s))); |
360 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u8_sum Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u8_sum Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u8_sum Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u8_sum |
361 | | |
362 | | typedef int32_t ssd128_internal; |
363 | | |
364 | 0 | SIMD_INLINE ssd128_internal v128_ssd_u8_init() { return 0; }Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_u8_init Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_u8_init Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_u8_init Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_u8_init |
365 | | |
366 | | /* Implementation dependent return value. Result must be finalised with |
367 | | * v128_ssd_sum(). */ |
368 | 0 | SIMD_INLINE ssd128_internal v128_ssd_u8(ssd128_internal s, v128 a, v128 b) { |
369 | 0 | v128 z = _mm_setzero_si128(); |
370 | 0 | v128 l = _mm_sub_epi16(_mm_unpacklo_epi8(a, z), _mm_unpacklo_epi8(b, z)); |
371 | 0 | v128 h = _mm_sub_epi16(_mm_unpackhi_epi8(a, z), _mm_unpackhi_epi8(b, z)); |
372 | 0 | v128 rl = _mm_madd_epi16(l, l); |
373 | 0 | v128 rh = _mm_madd_epi16(h, h); |
374 | 0 | v128 r = _mm_add_epi32(rl, rh); |
375 | 0 | r = _mm_add_epi32(r, _mm_srli_si128(r, 8)); |
376 | 0 | r = _mm_add_epi32(r, _mm_srli_si128(r, 4)); |
377 | 0 | return s + _mm_cvtsi128_si32(r); |
378 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_u8 |
379 | | |
380 | 0 | SIMD_INLINE int32_t v128_ssd_u8_sum(ssd128_internal s) { return s; }Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_u8_sum Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_u8_sum Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_u8_sum Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_u8_sum |
381 | | |
382 | 0 | SIMD_INLINE v128 v128_or(v128 a, v128 b) { return _mm_or_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_or Unexecuted instantiation: cdef_block_ssse3.c:v128_or Unexecuted instantiation: cdef_block_sse4.c:v128_or Unexecuted instantiation: cdef_block_avx2.c:v128_or |
383 | | |
384 | 0 | SIMD_INLINE v128 v128_xor(v128 a, v128 b) { return _mm_xor_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_xor Unexecuted instantiation: cdef_block_ssse3.c:v128_xor Unexecuted instantiation: cdef_block_sse4.c:v128_xor Unexecuted instantiation: cdef_block_avx2.c:v128_xor |
385 | | |
386 | 0 | SIMD_INLINE v128 v128_and(v128 a, v128 b) { return _mm_and_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_and Unexecuted instantiation: cdef_block_ssse3.c:v128_and Unexecuted instantiation: cdef_block_sse4.c:v128_and Unexecuted instantiation: cdef_block_avx2.c:v128_and |
387 | | |
388 | 0 | SIMD_INLINE v128 v128_andn(v128 a, v128 b) { return _mm_andnot_si128(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v128_andn Unexecuted instantiation: cdef_block_ssse3.c:v128_andn Unexecuted instantiation: cdef_block_sse4.c:v128_andn Unexecuted instantiation: cdef_block_avx2.c:v128_andn |
389 | | |
390 | 0 | SIMD_INLINE v128 v128_mul_s16(v64 a, v64 b) { |
391 | 0 | v64 lo_bits = v64_mullo_s16(a, b); |
392 | 0 | v64 hi_bits = v64_mulhi_s16(a, b); |
393 | 0 | return v128_from_v64(v64_ziphi_16(hi_bits, lo_bits), |
394 | 0 | v64_ziplo_16(hi_bits, lo_bits)); |
395 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_mul_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_mul_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_mul_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_mul_s16 |
396 | | |
397 | 0 | SIMD_INLINE v128 v128_mullo_s16(v128 a, v128 b) { |
398 | 0 | return _mm_mullo_epi16(a, b); |
399 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_mullo_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_mullo_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_mullo_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_mullo_s16 |
400 | | |
401 | 0 | SIMD_INLINE v128 v128_mulhi_s16(v128 a, v128 b) { |
402 | 0 | return _mm_mulhi_epi16(a, b); |
403 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_mulhi_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_mulhi_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_mulhi_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_mulhi_s16 |
404 | | |
405 | 42 | SIMD_INLINE v128 v128_mullo_s32(v128 a, v128 b) { |
406 | | #if defined(__SSE4_1__) |
407 | | return _mm_mullo_epi32(a, b); |
408 | | #else |
409 | | return _mm_unpacklo_epi32( |
410 | | _mm_shuffle_epi32(_mm_mul_epu32(a, b), 8), |
411 | | _mm_shuffle_epi32( |
412 | | _mm_mul_epu32(_mm_srli_si128(a, 4), _mm_srli_si128(b, 4)), 8)); |
413 | | #endif |
414 | 42 | } Unexecuted instantiation: cdef_block_sse2.c:v128_mullo_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_mullo_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_mullo_s32 cdef_block_avx2.c:v128_mullo_s32 Line | Count | Source | 405 | 42 | SIMD_INLINE v128 v128_mullo_s32(v128 a, v128 b) { | 406 | 42 | #if defined(__SSE4_1__) | 407 | 42 | return _mm_mullo_epi32(a, b); | 408 | | #else | 409 | | return _mm_unpacklo_epi32( | 410 | | _mm_shuffle_epi32(_mm_mul_epu32(a, b), 8), | 411 | | _mm_shuffle_epi32( | 412 | | _mm_mul_epu32(_mm_srli_si128(a, 4), _mm_srli_si128(b, 4)), 8)); | 413 | | #endif | 414 | 42 | } |
|
415 | | |
416 | 0 | SIMD_INLINE int64_t v128_dotp_s32(v128 a, v128 b) { |
417 | 0 | v128 r = v128_mullo_s32(a, b); |
418 | 0 | return (int64_t)_mm_cvtsi128_si32(r) + |
419 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 4)) + |
420 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 8)) + |
421 | 0 | (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 12)); |
422 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_dotp_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_dotp_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_dotp_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_dotp_s32 |
423 | | |
424 | 42 | SIMD_INLINE v128 v128_madd_s16(v128 a, v128 b) { return _mm_madd_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_madd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_madd_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_madd_s16 cdef_block_avx2.c:v128_madd_s16 Line | Count | Source | 424 | 42 | SIMD_INLINE v128 v128_madd_s16(v128 a, v128 b) { return _mm_madd_epi16(a, b); } |
|
425 | | |
426 | 0 | SIMD_INLINE v128 v128_madd_us8(v128 a, v128 b) { |
427 | 0 | #if defined(__SSSE3__) |
428 | 0 | return _mm_maddubs_epi16(a, b); |
429 | 0 | #else |
430 | 0 | return _mm_packs_epi32( |
431 | 0 | _mm_madd_epi16(_mm_unpacklo_epi8(a, _mm_setzero_si128()), |
432 | 0 | _mm_srai_epi16(_mm_unpacklo_epi8(b, b), 8)), |
433 | 0 | _mm_madd_epi16(_mm_unpackhi_epi8(a, _mm_setzero_si128()), |
434 | 0 | _mm_srai_epi16(_mm_unpackhi_epi8(b, b), 8))); |
435 | 0 | #endif |
436 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_madd_us8 Unexecuted instantiation: cdef_block_ssse3.c:v128_madd_us8 Unexecuted instantiation: cdef_block_sse4.c:v128_madd_us8 Unexecuted instantiation: cdef_block_avx2.c:v128_madd_us8 |
437 | | |
438 | 0 | SIMD_INLINE v128 v128_padd_u8(v128 a) { |
439 | 0 | return v128_madd_us8(a, _mm_set1_epi8(1)); |
440 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_padd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_padd_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_padd_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_padd_u8 |
441 | | |
442 | 0 | SIMD_INLINE v128 v128_avg_u8(v128 a, v128 b) { return _mm_avg_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_avg_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_avg_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_avg_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_avg_u8 |
443 | | |
444 | 0 | SIMD_INLINE v128 v128_rdavg_u8(v128 a, v128 b) { |
445 | 0 | return _mm_sub_epi8(_mm_avg_epu8(a, b), |
446 | 0 | _mm_and_si128(_mm_xor_si128(a, b), v128_dup_8(1))); |
447 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_rdavg_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_rdavg_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_rdavg_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_rdavg_u8 |
448 | | |
449 | 0 | SIMD_INLINE v128 v128_rdavg_u16(v128 a, v128 b) { |
450 | 0 | return _mm_sub_epi16(_mm_avg_epu16(a, b), |
451 | 0 | _mm_and_si128(_mm_xor_si128(a, b), v128_dup_16(1))); |
452 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_rdavg_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_rdavg_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_rdavg_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_rdavg_u16 |
453 | | |
454 | 0 | SIMD_INLINE v128 v128_avg_u16(v128 a, v128 b) { return _mm_avg_epu16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_avg_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_avg_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_avg_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_avg_u16 |
455 | | |
456 | 0 | SIMD_INLINE v128 v128_min_u8(v128 a, v128 b) { return _mm_min_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_min_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_min_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_min_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_min_u8 |
457 | | |
458 | 0 | SIMD_INLINE v128 v128_max_u8(v128 a, v128 b) { return _mm_max_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_max_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_max_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_max_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_max_u8 |
459 | | |
460 | 0 | SIMD_INLINE v128 v128_min_s8(v128 a, v128 b) { |
461 | 0 | #if defined(__SSE4_1__) |
462 | 0 | return _mm_min_epi8(a, b); |
463 | 0 | #else |
464 | 0 | v128 mask = _mm_cmplt_epi8(a, b); |
465 | 0 | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
466 | 0 | #endif |
467 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_min_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_min_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_min_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_min_s8 |
468 | | |
469 | 3 | SIMD_INLINE uint32_t v128_movemask_8(v128 a) { return _mm_movemask_epi8(a); }Unexecuted instantiation: cdef_block_sse2.c:v128_movemask_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_movemask_8 Unexecuted instantiation: cdef_block_sse4.c:v128_movemask_8 cdef_block_avx2.c:v128_movemask_8 Line | Count | Source | 469 | 3 | SIMD_INLINE uint32_t v128_movemask_8(v128 a) { return _mm_movemask_epi8(a); } |
|
470 | | |
471 | 0 | SIMD_INLINE v128 v128_blend_8(v128 a, v128 b, v128 c) { |
472 | 0 | #if defined(__SSE4_1__) |
473 | 0 | return _mm_blendv_epi8(a, b, c); |
474 | 0 | #else |
475 | 0 | c = _mm_cmplt_epi8(c, v128_zero()); |
476 | 0 | return v128_or(v128_and(b, c), v128_andn(a, c)); |
477 | 0 | #endif |
478 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_blend_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_blend_8 Unexecuted instantiation: cdef_block_sse4.c:v128_blend_8 Unexecuted instantiation: cdef_block_avx2.c:v128_blend_8 |
479 | | |
480 | 0 | SIMD_INLINE v128 v128_max_s8(v128 a, v128 b) { |
481 | 0 | #if defined(__SSE4_1__) |
482 | 0 | return _mm_max_epi8(a, b); |
483 | 0 | #else |
484 | 0 | v128 mask = _mm_cmplt_epi8(b, a); |
485 | 0 | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
486 | 0 | #endif |
487 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_max_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_max_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_max_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_max_s8 |
488 | | |
489 | 0 | SIMD_INLINE v128 v128_min_s16(v128 a, v128 b) { return _mm_min_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_min_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_min_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_min_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_min_s16 |
490 | | |
491 | 0 | SIMD_INLINE v128 v128_max_s16(v128 a, v128 b) { return _mm_max_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_max_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_max_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_max_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_max_s16 |
492 | | |
493 | 0 | SIMD_INLINE v128 v128_min_s32(v128 a, v128 b) { |
494 | 0 | #if defined(__SSE4_1__) |
495 | 0 | return _mm_min_epi32(a, b); |
496 | 0 | #else |
497 | 0 | v128 mask = _mm_cmplt_epi32(a, b); |
498 | 0 | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
499 | 0 | #endif |
500 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_min_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_min_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_min_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_min_s32 |
501 | | |
502 | 9 | SIMD_INLINE v128 v128_max_s32(v128 a, v128 b) { |
503 | | #if defined(__SSE4_1__) |
504 | | return _mm_max_epi32(a, b); |
505 | | #else |
506 | | v128 mask = _mm_cmplt_epi32(b, a); |
507 | | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
508 | | #endif |
509 | 9 | } Unexecuted instantiation: cdef_block_sse2.c:v128_max_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_max_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_max_s32 cdef_block_avx2.c:v128_max_s32 Line | Count | Source | 502 | 9 | SIMD_INLINE v128 v128_max_s32(v128 a, v128 b) { | 503 | 9 | #if defined(__SSE4_1__) | 504 | 9 | return _mm_max_epi32(a, b); | 505 | | #else | 506 | | v128 mask = _mm_cmplt_epi32(b, a); | 507 | | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); | 508 | | #endif | 509 | 9 | } |
|
510 | | |
511 | 0 | SIMD_INLINE v128 v128_cmpgt_s8(v128 a, v128 b) { return _mm_cmpgt_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_cmpgt_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpgt_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpgt_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_cmpgt_s8 |
512 | | |
513 | 0 | SIMD_INLINE v128 v128_cmplt_s8(v128 a, v128 b) { return _mm_cmplt_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_cmplt_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmplt_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_cmplt_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_cmplt_s8 |
514 | | |
515 | 0 | SIMD_INLINE v128 v128_cmpeq_8(v128 a, v128 b) { return _mm_cmpeq_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_cmpeq_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpeq_8 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpeq_8 Unexecuted instantiation: cdef_block_avx2.c:v128_cmpeq_8 |
516 | | |
517 | 0 | SIMD_INLINE v128 v128_cmpgt_s16(v128 a, v128 b) { |
518 | 0 | return _mm_cmpgt_epi16(a, b); |
519 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_cmpgt_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpgt_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpgt_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_cmpgt_s16 |
520 | | |
521 | 0 | SIMD_INLINE v128 v128_cmplt_s16(v128 a, v128 b) { |
522 | 0 | return _mm_cmplt_epi16(a, b); |
523 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_cmplt_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmplt_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_cmplt_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_cmplt_s16 |
524 | | |
525 | 6 | SIMD_INLINE v128 v128_cmpeq_32(v128 a, v128 b) { return _mm_cmpeq_epi32(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_cmpeq_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpeq_32 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpeq_32 cdef_block_avx2.c:v128_cmpeq_32 Line | Count | Source | 525 | 6 | SIMD_INLINE v128 v128_cmpeq_32(v128 a, v128 b) { return _mm_cmpeq_epi32(a, b); } |
|
526 | | |
527 | 0 | SIMD_INLINE v128 v128_cmpgt_s32(v128 a, v128 b) { |
528 | 0 | return _mm_cmpgt_epi32(a, b); |
529 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_cmpgt_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpgt_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpgt_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_cmpgt_s32 |
530 | | |
531 | 0 | SIMD_INLINE v128 v128_cmplt_s32(v128 a, v128 b) { |
532 | 0 | return _mm_cmplt_epi32(a, b); |
533 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_cmplt_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmplt_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_cmplt_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_cmplt_s32 |
534 | | |
535 | 0 | SIMD_INLINE v128 v128_cmpeq_16(v128 a, v128 b) { return _mm_cmpeq_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v128_cmpeq_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_cmpeq_16 Unexecuted instantiation: cdef_block_sse4.c:v128_cmpeq_16 Unexecuted instantiation: cdef_block_avx2.c:v128_cmpeq_16 |
536 | | |
537 | 0 | SIMD_INLINE v128 v128_shl_8(v128 a, unsigned int c) { |
538 | 0 | return _mm_and_si128(_mm_set1_epi8((uint8_t)(0xff << c)), |
539 | 0 | _mm_sll_epi16(a, _mm_cvtsi32_si128(c))); |
540 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shl_8 Unexecuted instantiation: cdef_block_ssse3.c:v128_shl_8 Unexecuted instantiation: cdef_block_sse4.c:v128_shl_8 Unexecuted instantiation: cdef_block_avx2.c:v128_shl_8 |
541 | | |
542 | 0 | SIMD_INLINE v128 v128_shr_u8(v128 a, unsigned int c) { |
543 | 0 | return _mm_and_si128(_mm_set1_epi8((char)(0xff >> c)), |
544 | 0 | _mm_srl_epi16(a, _mm_cvtsi32_si128(c))); |
545 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_u8 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_u8 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_u8 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_u8 |
546 | | |
547 | 0 | SIMD_INLINE v128 v128_shr_s8(v128 a, unsigned int c) { |
548 | 0 | __m128i x = _mm_cvtsi32_si128(c + 8); |
549 | 0 | return _mm_packs_epi16(_mm_sra_epi16(_mm_unpacklo_epi8(a, a), x), |
550 | 0 | _mm_sra_epi16(_mm_unpackhi_epi8(a, a), x)); |
551 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_s8 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_s8 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_s8 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_s8 |
552 | | |
553 | 0 | SIMD_INLINE v128 v128_shl_16(v128 a, unsigned int c) { |
554 | 0 | return _mm_sll_epi16(a, _mm_cvtsi32_si128(c)); |
555 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shl_16 Unexecuted instantiation: cdef_block_ssse3.c:v128_shl_16 Unexecuted instantiation: cdef_block_sse4.c:v128_shl_16 Unexecuted instantiation: cdef_block_avx2.c:v128_shl_16 |
556 | | |
557 | 0 | SIMD_INLINE v128 v128_shr_u16(v128 a, unsigned int c) { |
558 | 0 | return _mm_srl_epi16(a, _mm_cvtsi32_si128(c)); |
559 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_u16 |
560 | | |
561 | 24 | SIMD_INLINE v128 v128_shr_s16(v128 a, unsigned int c) { |
562 | 24 | return _mm_sra_epi16(a, _mm_cvtsi32_si128(c)); |
563 | 24 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_s16 cdef_block_avx2.c:v128_shr_s16 Line | Count | Source | 561 | 24 | SIMD_INLINE v128 v128_shr_s16(v128 a, unsigned int c) { | 562 | 24 | return _mm_sra_epi16(a, _mm_cvtsi32_si128(c)); | 563 | 24 | } |
|
564 | | |
565 | 0 | SIMD_INLINE v128 v128_shl_32(v128 a, unsigned int c) { |
566 | 0 | return _mm_sll_epi32(a, _mm_cvtsi32_si128(c)); |
567 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shl_32 Unexecuted instantiation: cdef_block_ssse3.c:v128_shl_32 Unexecuted instantiation: cdef_block_sse4.c:v128_shl_32 Unexecuted instantiation: cdef_block_avx2.c:v128_shl_32 |
568 | | |
569 | 0 | SIMD_INLINE v128 v128_shr_u32(v128 a, unsigned int c) { |
570 | 0 | return _mm_srl_epi32(a, _mm_cvtsi32_si128(c)); |
571 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_u32 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_u32 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_u32 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_u32 |
572 | | |
573 | 0 | SIMD_INLINE v128 v128_shr_s32(v128 a, unsigned int c) { |
574 | 0 | return _mm_sra_epi32(a, _mm_cvtsi32_si128(c)); |
575 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_s32 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_s32 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_s32 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_s32 |
576 | | |
577 | 0 | SIMD_INLINE v128 v128_shl_64(v128 a, unsigned int c) { |
578 | 0 | return _mm_sll_epi64(a, _mm_cvtsi32_si128(c)); |
579 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shl_64 Unexecuted instantiation: cdef_block_ssse3.c:v128_shl_64 Unexecuted instantiation: cdef_block_sse4.c:v128_shl_64 Unexecuted instantiation: cdef_block_avx2.c:v128_shl_64 |
580 | | |
581 | 0 | SIMD_INLINE v128 v128_shr_u64(v128 a, unsigned int c) { |
582 | 0 | return _mm_srl_epi64(a, _mm_cvtsi32_si128(c)); |
583 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_u64 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_u64 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_u64 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_u64 |
584 | | |
585 | 0 | SIMD_INLINE v128 v128_shr_s64(v128 a, unsigned int c) { |
586 | 0 | // _mm_sra_epi64 is missing in gcc? |
587 | 0 | return v128_from_64((int64_t)v64_u64(v128_high_v64(a)) >> c, |
588 | 0 | (int64_t)v64_u64(v128_low_v64(a)) >> c); |
589 | 0 | // return _mm_sra_epi64(a, _mm_cvtsi32_si128(c)); |
590 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_shr_s64 Unexecuted instantiation: cdef_block_ssse3.c:v128_shr_s64 Unexecuted instantiation: cdef_block_sse4.c:v128_shr_s64 Unexecuted instantiation: cdef_block_avx2.c:v128_shr_s64 |
591 | | |
592 | | /* These intrinsics require immediate values, so we must use #defines |
593 | | to enforce that. */ |
594 | 90 | #define v128_shl_n_byte(a, c) _mm_slli_si128(a, (c) & 127) |
595 | 90 | #define v128_shr_n_byte(a, c) _mm_srli_si128(a, (c) & 127) |
596 | | #define v128_shl_n_8(a, c) \ |
597 | | _mm_and_si128(_mm_set1_epi8((uint8_t)(0xff << (c))), _mm_slli_epi16(a, c)) |
598 | | #define v128_shr_n_u8(a, c) \ |
599 | | _mm_and_si128(_mm_set1_epi8(0xff >> (c)), _mm_srli_epi16(a, c)) |
600 | | #define v128_shr_n_s8(a, c) \ |
601 | | _mm_packs_epi16(_mm_srai_epi16(_mm_unpacklo_epi8(a, a), (c) + 8), \ |
602 | | _mm_srai_epi16(_mm_unpackhi_epi8(a, a), (c) + 8)) |
603 | | #define v128_shl_n_16(a, c) _mm_slli_epi16(a, c) |
604 | | #define v128_shr_n_u16(a, c) _mm_srli_epi16(a, c) |
605 | 0 | #define v128_shr_n_s16(a, c) _mm_srai_epi16(a, c) |
606 | | #define v128_shl_n_32(a, c) _mm_slli_epi32(a, c) |
607 | | #define v128_shr_n_u32(a, c) _mm_srli_epi32(a, c) |
608 | | #define v128_shr_n_s32(a, c) _mm_srai_epi32(a, c) |
609 | | #define v128_shl_n_64(a, c) _mm_slli_epi64(a, c) |
610 | | #define v128_shr_n_u64(a, c) _mm_srli_epi64(a, c) |
611 | | #define v128_shr_n_s64(a, c) \ |
612 | | v128_shr_s64(a, c) // _mm_srai_epi64 missing in gcc? |
613 | | |
614 | | typedef v128 sad128_internal_u16; |
615 | | |
616 | 0 | SIMD_INLINE sad128_internal_u16 v128_sad_u16_init() { return v128_zero(); }Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u16_init Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u16_init Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u16_init Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u16_init |
617 | | |
618 | | /* Implementation dependent return value. Result must be finalised with |
619 | | * v128_sad_u16_sum(). */ |
620 | | SIMD_INLINE sad128_internal_u16 v128_sad_u16(sad128_internal_u16 s, v128 a, |
621 | 0 | v128 b) { |
622 | 0 | #if defined(__SSE4_1__) |
623 | 0 | v128 t = v128_sub_16(_mm_max_epu16(a, b), _mm_min_epu16(a, b)); |
624 | 0 | #else |
625 | 0 | v128 t = v128_cmplt_s16(v128_xor(a, v128_dup_16(32768)), |
626 | 0 | v128_xor(b, v128_dup_16(32768))); |
627 | 0 | t = v128_sub_16(v128_or(v128_and(b, t), v128_andn(a, t)), |
628 | 0 | v128_or(v128_and(a, t), v128_andn(b, t))); |
629 | 0 | #endif |
630 | 0 | return v128_add_32( |
631 | 0 | s, v128_add_32(v128_unpackhi_u16_s32(t), v128_unpacklo_u16_s32(t))); |
632 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u16 Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u16 Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u16 Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u16 |
633 | | |
634 | 0 | SIMD_INLINE uint32_t v128_sad_u16_sum(sad128_internal_u16 s) { |
635 | 0 | return v128_low_u32(s) + v128_low_u32(v128_shr_n_byte(s, 4)) + |
636 | 0 | v128_low_u32(v128_shr_n_byte(s, 8)) + |
637 | 0 | v128_low_u32(v128_shr_n_byte(s, 12)); |
638 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_sad_u16_sum Unexecuted instantiation: cdef_block_ssse3.c:v128_sad_u16_sum Unexecuted instantiation: cdef_block_sse4.c:v128_sad_u16_sum Unexecuted instantiation: cdef_block_avx2.c:v128_sad_u16_sum |
639 | | |
640 | | typedef v128 ssd128_internal_s16; |
641 | | |
642 | 0 | SIMD_INLINE ssd128_internal_s16 v128_ssd_s16_init() { return v128_zero(); }Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_s16_init Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_s16_init Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_s16_init Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_s16_init |
643 | | |
644 | | /* Implementation dependent return value. Result must be finalised with |
645 | | * v128_ssd_s16_sum(). */ |
646 | | SIMD_INLINE ssd128_internal_s16 v128_ssd_s16(ssd128_internal_s16 s, v128 a, |
647 | 0 | v128 b) { |
648 | 0 | v128 d = v128_sub_16(a, b); |
649 | 0 | d = v128_madd_s16(d, d); |
650 | 0 | return v128_add_64(s, v128_add_64(_mm_unpackhi_epi32(d, v128_zero()), |
651 | 0 | _mm_unpacklo_epi32(d, v128_zero()))); |
652 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_s16 Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_s16 Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_s16 |
653 | | |
654 | 0 | SIMD_INLINE uint64_t v128_ssd_s16_sum(ssd128_internal_s16 s) { |
655 | 0 | return v64_u64(v128_low_v64(s)) + v64_u64(v128_high_v64(s)); |
656 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v128_ssd_s16_sum Unexecuted instantiation: cdef_block_ssse3.c:v128_ssd_s16_sum Unexecuted instantiation: cdef_block_sse4.c:v128_ssd_s16_sum Unexecuted instantiation: cdef_block_avx2.c:v128_ssd_s16_sum |
657 | | |
658 | | #endif // AVM_AVM_DSP_SIMD_V128_INTRINSICS_X86_H_ |