/src/avm/avm_dsp/simd/v64_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_V64_INTRINSICS_X86_H_ |
14 | | #define AVM_AVM_DSP_SIMD_V64_INTRINSICS_X86_H_ |
15 | | |
16 | | #include <emmintrin.h> |
17 | | #if defined(__SSSE3__) |
18 | | #include <tmmintrin.h> |
19 | | #endif |
20 | | #if defined(__SSE4_1__) |
21 | | #include <smmintrin.h> |
22 | | #endif |
23 | | |
24 | | typedef __m128i v64; |
25 | | |
26 | 0 | SIMD_INLINE uint32_t v64_low_u32(v64 a) { |
27 | 0 | return (uint32_t)_mm_cvtsi128_si32(a); |
28 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_low_u32 Unexecuted instantiation: cdef_block_ssse3.c:v64_low_u32 Unexecuted instantiation: cdef_block_sse4.c:v64_low_u32 Unexecuted instantiation: cdef_block_avx2.c:v64_low_u32 |
29 | | |
30 | 0 | SIMD_INLINE uint32_t v64_high_u32(v64 a) { |
31 | 0 | return (uint32_t)_mm_cvtsi128_si32(_mm_srli_si128(a, 4)); |
32 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_high_u32 Unexecuted instantiation: cdef_block_ssse3.c:v64_high_u32 Unexecuted instantiation: cdef_block_sse4.c:v64_high_u32 Unexecuted instantiation: cdef_block_avx2.c:v64_high_u32 |
33 | | |
34 | 0 | SIMD_INLINE int32_t v64_low_s32(v64 a) { return (int32_t)_mm_cvtsi128_si32(a); }Unexecuted instantiation: cdef_block_sse2.c:v64_low_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_low_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_low_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_low_s32 |
35 | | |
36 | 0 | SIMD_INLINE int32_t v64_high_s32(v64 a) { |
37 | 0 | return (int32_t)_mm_cvtsi128_si32(_mm_srli_si128(a, 4)); |
38 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_high_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_high_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_high_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_high_s32 |
39 | | |
40 | 0 | SIMD_INLINE v64 v64_from_16(uint16_t a, uint16_t b, uint16_t c, uint16_t d) { |
41 | 0 | return _mm_packs_epi32( |
42 | 0 | _mm_set_epi32((int16_t)a, (int16_t)b, (int16_t)c, (int16_t)d), |
43 | 0 | _mm_setzero_si128()); |
44 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_from_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_from_16 Unexecuted instantiation: cdef_block_sse4.c:v64_from_16 Unexecuted instantiation: cdef_block_avx2.c:v64_from_16 |
45 | | |
46 | 0 | SIMD_INLINE v64 v64_from_32(uint32_t x, uint32_t y) { |
47 | 0 | return _mm_set_epi32(0, 0, x, y); |
48 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_from_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_from_32 Unexecuted instantiation: cdef_block_sse4.c:v64_from_32 Unexecuted instantiation: cdef_block_avx2.c:v64_from_32 |
49 | | |
50 | 0 | SIMD_INLINE v64 v64_from_64(uint64_t x) { |
51 | 0 | #ifdef __x86_64__ |
52 | 0 | return _mm_cvtsi64_si128(x); |
53 | 0 | #else |
54 | 0 | return _mm_set_epi32(0, 0, x >> 32, (uint32_t)x); |
55 | 0 | #endif |
56 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_from_64 Unexecuted instantiation: cdef_block_ssse3.c:v64_from_64 Unexecuted instantiation: cdef_block_sse4.c:v64_from_64 Unexecuted instantiation: cdef_block_avx2.c:v64_from_64 |
57 | | |
58 | 0 | SIMD_INLINE uint64_t v64_u64(v64 x) { |
59 | 0 | return (uint64_t)v64_low_u32(x) | ((uint64_t)v64_high_u32(x) << 32); |
60 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_u64 Unexecuted instantiation: cdef_block_ssse3.c:v64_u64 Unexecuted instantiation: cdef_block_sse4.c:v64_u64 Unexecuted instantiation: cdef_block_avx2.c:v64_u64 |
61 | | |
62 | 0 | SIMD_INLINE uint32_t u32_load_aligned(const void *p) { |
63 | 0 | return *((uint32_t *)p); |
64 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:u32_load_aligned Unexecuted instantiation: cdef_block_ssse3.c:u32_load_aligned Unexecuted instantiation: cdef_block_sse4.c:u32_load_aligned Unexecuted instantiation: cdef_block_avx2.c:u32_load_aligned |
65 | | |
66 | 0 | SIMD_INLINE uint32_t u32_load_unaligned(const void *p) { |
67 | 0 | return *((uint32_t *)p); |
68 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:u32_load_unaligned Unexecuted instantiation: cdef_block_ssse3.c:u32_load_unaligned Unexecuted instantiation: cdef_block_sse4.c:u32_load_unaligned Unexecuted instantiation: cdef_block_avx2.c:u32_load_unaligned |
69 | | |
70 | 0 | SIMD_INLINE void u32_store_aligned(void *p, uint32_t a) { |
71 | 0 | *((uint32_t *)p) = a; |
72 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:u32_store_aligned Unexecuted instantiation: cdef_block_ssse3.c:u32_store_aligned Unexecuted instantiation: cdef_block_sse4.c:u32_store_aligned Unexecuted instantiation: cdef_block_avx2.c:u32_store_aligned |
73 | | |
74 | 0 | SIMD_INLINE void u32_store_unaligned(void *p, uint32_t a) { |
75 | 0 | *((uint32_t *)p) = a; |
76 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:u32_store_unaligned Unexecuted instantiation: cdef_block_ssse3.c:u32_store_unaligned Unexecuted instantiation: cdef_block_sse4.c:u32_store_unaligned Unexecuted instantiation: cdef_block_avx2.c:u32_store_unaligned |
77 | | |
78 | 1.21M | SIMD_INLINE v64 v64_load_aligned(const void *p) { |
79 | 1.21M | return _mm_loadl_epi64((__m128i *)p); |
80 | 1.21M | } Unexecuted instantiation: cdef_block_sse2.c:v64_load_aligned Unexecuted instantiation: cdef_block_ssse3.c:v64_load_aligned Unexecuted instantiation: cdef_block_sse4.c:v64_load_aligned cdef_block_avx2.c:v64_load_aligned Line | Count | Source | 78 | 1.21M | SIMD_INLINE v64 v64_load_aligned(const void *p) { | 79 | 1.21M | return _mm_loadl_epi64((__m128i *)p); | 80 | 1.21M | } |
|
81 | | |
82 | 10.9M | SIMD_INLINE v64 v64_load_unaligned(const void *p) { |
83 | 10.9M | return _mm_loadl_epi64((__m128i *)p); |
84 | 10.9M | } Unexecuted instantiation: cdef_block_sse2.c:v64_load_unaligned Unexecuted instantiation: cdef_block_ssse3.c:v64_load_unaligned Unexecuted instantiation: cdef_block_sse4.c:v64_load_unaligned cdef_block_avx2.c:v64_load_unaligned Line | Count | Source | 82 | 10.9M | SIMD_INLINE v64 v64_load_unaligned(const void *p) { | 83 | 10.9M | return _mm_loadl_epi64((__m128i *)p); | 84 | 10.9M | } |
|
85 | | |
86 | 1.21M | SIMD_INLINE void v64_store_aligned(void *p, v64 a) { |
87 | 1.21M | _mm_storel_epi64((__m128i *)p, a); |
88 | 1.21M | } Unexecuted instantiation: cdef_block_sse2.c:v64_store_aligned Unexecuted instantiation: cdef_block_ssse3.c:v64_store_aligned Unexecuted instantiation: cdef_block_sse4.c:v64_store_aligned cdef_block_avx2.c:v64_store_aligned Line | Count | Source | 86 | 1.21M | SIMD_INLINE void v64_store_aligned(void *p, v64 a) { | 87 | 1.21M | _mm_storel_epi64((__m128i *)p, a); | 88 | 1.21M | } |
|
89 | | |
90 | 0 | SIMD_INLINE void v64_store_unaligned(void *p, v64 a) { |
91 | 0 | _mm_storel_epi64((__m128i *)p, a); |
92 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_store_unaligned Unexecuted instantiation: cdef_block_ssse3.c:v64_store_unaligned Unexecuted instantiation: cdef_block_sse4.c:v64_store_unaligned Unexecuted instantiation: cdef_block_avx2.c:v64_store_unaligned |
93 | | |
94 | | #if defined(__OPTIMIZE__) && __OPTIMIZE__ && !defined(__clang__) |
95 | | #define v64_align(a, b, c) \ |
96 | | ((c) ? _mm_srli_si128(_mm_unpacklo_epi64(b, a), (c)) : b) |
97 | | #else |
98 | | #define v64_align(a, b, c) \ |
99 | | ((c) ? v64_from_64((v64_u64(b) >> (c) * 8) | (v64_u64(a) << (8 - (c)) * 8)) \ |
100 | | : (b)) |
101 | | #endif |
102 | | |
103 | 608k | SIMD_INLINE v64 v64_zero(void) { return _mm_setzero_si128(); }Unexecuted instantiation: cdef_block_sse2.c:v64_zero Unexecuted instantiation: cdef_block_ssse3.c:v64_zero Unexecuted instantiation: cdef_block_sse4.c:v64_zero cdef_block_avx2.c:v64_zero Line | Count | Source | 103 | 608k | SIMD_INLINE v64 v64_zero(void) { return _mm_setzero_si128(); } |
|
104 | | |
105 | 0 | SIMD_INLINE v64 v64_dup_8(uint8_t x) { return _mm_set1_epi8(x); }Unexecuted instantiation: cdef_block_sse2.c:v64_dup_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_dup_8 Unexecuted instantiation: cdef_block_sse4.c:v64_dup_8 Unexecuted instantiation: cdef_block_avx2.c:v64_dup_8 |
106 | | |
107 | 0 | SIMD_INLINE v64 v64_dup_16(uint16_t x) { return _mm_set1_epi16(x); }Unexecuted instantiation: cdef_block_sse2.c:v64_dup_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_dup_16 Unexecuted instantiation: cdef_block_sse4.c:v64_dup_16 Unexecuted instantiation: cdef_block_avx2.c:v64_dup_16 |
108 | | |
109 | 0 | SIMD_INLINE v64 v64_dup_32(uint32_t x) { return _mm_set1_epi32(x); }Unexecuted instantiation: cdef_block_sse2.c:v64_dup_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_dup_32 Unexecuted instantiation: cdef_block_sse4.c:v64_dup_32 Unexecuted instantiation: cdef_block_avx2.c:v64_dup_32 |
110 | | |
111 | 0 | SIMD_INLINE v64 v64_add_8(v64 a, v64 b) { return _mm_add_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_add_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_add_8 Unexecuted instantiation: cdef_block_sse4.c:v64_add_8 Unexecuted instantiation: cdef_block_avx2.c:v64_add_8 |
112 | | |
113 | 0 | SIMD_INLINE v64 v64_add_16(v64 a, v64 b) { return _mm_add_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_add_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_add_16 Unexecuted instantiation: cdef_block_sse4.c:v64_add_16 Unexecuted instantiation: cdef_block_avx2.c:v64_add_16 |
114 | | |
115 | 0 | SIMD_INLINE v64 v64_sadd_u8(v64 a, v64 b) { return _mm_adds_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sadd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_sadd_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_sadd_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_sadd_u8 |
116 | | |
117 | 0 | SIMD_INLINE v64 v64_sadd_s8(v64 a, v64 b) { return _mm_adds_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sadd_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_sadd_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_sadd_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_sadd_s8 |
118 | | |
119 | 0 | SIMD_INLINE v64 v64_sadd_s16(v64 a, v64 b) { return _mm_adds_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sadd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_sadd_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_sadd_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_sadd_s16 |
120 | | |
121 | 0 | SIMD_INLINE v64 v64_add_32(v64 a, v64 b) { return _mm_add_epi32(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_add_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_add_32 Unexecuted instantiation: cdef_block_sse4.c:v64_add_32 Unexecuted instantiation: cdef_block_avx2.c:v64_add_32 |
122 | | |
123 | 0 | SIMD_INLINE v64 v64_sub_8(v64 a, v64 b) { return _mm_sub_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sub_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_sub_8 Unexecuted instantiation: cdef_block_sse4.c:v64_sub_8 Unexecuted instantiation: cdef_block_avx2.c:v64_sub_8 |
124 | | |
125 | 0 | SIMD_INLINE v64 v64_ssub_u8(v64 a, v64 b) { return _mm_subs_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssub_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_ssub_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_ssub_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_ssub_u8 |
126 | | |
127 | 0 | SIMD_INLINE v64 v64_ssub_s8(v64 a, v64 b) { return _mm_subs_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssub_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_ssub_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_ssub_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_ssub_s8 |
128 | | |
129 | 0 | SIMD_INLINE v64 v64_sub_16(v64 a, v64 b) { return _mm_sub_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sub_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_sub_16 Unexecuted instantiation: cdef_block_sse4.c:v64_sub_16 Unexecuted instantiation: cdef_block_avx2.c:v64_sub_16 |
130 | | |
131 | 0 | SIMD_INLINE v64 v64_ssub_s16(v64 a, v64 b) { return _mm_subs_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssub_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_ssub_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_ssub_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_ssub_s16 |
132 | | |
133 | 0 | SIMD_INLINE v64 v64_ssub_u16(v64 a, v64 b) { return _mm_subs_epu16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssub_u16 Unexecuted instantiation: cdef_block_ssse3.c:v64_ssub_u16 Unexecuted instantiation: cdef_block_sse4.c:v64_ssub_u16 Unexecuted instantiation: cdef_block_avx2.c:v64_ssub_u16 |
134 | | |
135 | 0 | SIMD_INLINE v64 v64_sub_32(v64 a, v64 b) { return _mm_sub_epi32(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_sub_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_sub_32 Unexecuted instantiation: cdef_block_sse4.c:v64_sub_32 Unexecuted instantiation: cdef_block_avx2.c:v64_sub_32 |
136 | | |
137 | 0 | SIMD_INLINE v64 v64_abs_s16(v64 a) { |
138 | 0 | #if defined(__SSSE3__) |
139 | 0 | return _mm_abs_epi16(a); |
140 | 0 | #else |
141 | 0 | return _mm_max_epi16(a, _mm_sub_epi16(_mm_setzero_si128(), a)); |
142 | 0 | #endif |
143 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_abs_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_abs_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_abs_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_abs_s16 |
144 | | |
145 | 0 | SIMD_INLINE v64 v64_abs_s8(v64 a) { |
146 | 0 | #if defined(__SSSE3__) |
147 | 0 | return _mm_abs_epi8(a); |
148 | 0 | #else |
149 | 0 | v64 sign = _mm_cmplt_epi8(a, _mm_setzero_si128()); |
150 | 0 | return _mm_xor_si128(sign, _mm_add_epi8(a, sign)); |
151 | 0 | #endif |
152 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_abs_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_abs_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_abs_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_abs_s8 |
153 | | |
154 | 0 | SIMD_INLINE v64 v64_ziplo_8(v64 a, v64 b) { return _mm_unpacklo_epi8(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v64_ziplo_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziplo_8 Unexecuted instantiation: cdef_block_sse4.c:v64_ziplo_8 Unexecuted instantiation: cdef_block_avx2.c:v64_ziplo_8 |
155 | | |
156 | 0 | SIMD_INLINE v64 v64_ziphi_8(v64 a, v64 b) { |
157 | 0 | return _mm_srli_si128(_mm_unpacklo_epi8(b, a), 8); |
158 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_ziphi_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziphi_8 Unexecuted instantiation: cdef_block_sse4.c:v64_ziphi_8 Unexecuted instantiation: cdef_block_avx2.c:v64_ziphi_8 |
159 | | |
160 | 0 | SIMD_INLINE v64 v64_ziplo_16(v64 a, v64 b) { return _mm_unpacklo_epi16(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v64_ziplo_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziplo_16 Unexecuted instantiation: cdef_block_sse4.c:v64_ziplo_16 Unexecuted instantiation: cdef_block_avx2.c:v64_ziplo_16 |
161 | | |
162 | 0 | SIMD_INLINE v64 v64_ziphi_16(v64 a, v64 b) { |
163 | 0 | return _mm_srli_si128(_mm_unpacklo_epi16(b, a), 8); |
164 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_ziphi_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziphi_16 Unexecuted instantiation: cdef_block_sse4.c:v64_ziphi_16 Unexecuted instantiation: cdef_block_avx2.c:v64_ziphi_16 |
165 | | |
166 | 0 | SIMD_INLINE v64 v64_ziplo_32(v64 a, v64 b) { return _mm_unpacklo_epi32(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v64_ziplo_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziplo_32 Unexecuted instantiation: cdef_block_sse4.c:v64_ziplo_32 Unexecuted instantiation: cdef_block_avx2.c:v64_ziplo_32 |
167 | | |
168 | 0 | SIMD_INLINE v64 v64_ziphi_32(v64 a, v64 b) { |
169 | 0 | return _mm_srli_si128(_mm_unpacklo_epi32(b, a), 8); |
170 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_ziphi_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_ziphi_32 Unexecuted instantiation: cdef_block_sse4.c:v64_ziphi_32 Unexecuted instantiation: cdef_block_avx2.c:v64_ziphi_32 |
171 | | |
172 | 0 | SIMD_INLINE v64 v64_pack_s32_s16(v64 a, v64 b) { |
173 | 0 | __m128i t = _mm_unpacklo_epi64(b, a); |
174 | 0 | return _mm_packs_epi32(t, t); |
175 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_pack_s32_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_pack_s32_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_pack_s32_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_pack_s32_s16 |
176 | | |
177 | 0 | SIMD_INLINE v64 v64_pack_s32_u16(v64 a, v64 b) { |
178 | 0 | #if defined(__SSE4_1__) |
179 | 0 | __m128i t = _mm_unpacklo_epi64(b, a); |
180 | 0 | return _mm_packus_epi32(t, t); |
181 | 0 | #else |
182 | 0 | int32_t ah = v64_high_u32(a); |
183 | 0 | int32_t al = v64_low_u32(a); |
184 | 0 | int32_t bh = v64_high_u32(b); |
185 | 0 | int32_t bl = v64_low_u32(b); |
186 | 0 | return v64_from_16(ah > 65535 ? 65535 |
187 | 0 | : ah < 0 ? 0 |
188 | 0 | : ah, |
189 | 0 | al > 65535 ? 65535 |
190 | 0 | : al < 0 ? 0 |
191 | 0 | : al, |
192 | 0 | bh > 65535 ? 65535 |
193 | 0 | : bh < 0 ? 0 |
194 | 0 | : bh, |
195 | 0 | bl > 65535 ? 65535 |
196 | 0 | : bl < 0 ? 0 |
197 | 0 | : bl); |
198 | 0 | #endif |
199 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_pack_s32_u16 Unexecuted instantiation: cdef_block_ssse3.c:v64_pack_s32_u16 Unexecuted instantiation: cdef_block_sse4.c:v64_pack_s32_u16 Unexecuted instantiation: cdef_block_avx2.c:v64_pack_s32_u16 |
200 | | |
201 | 0 | SIMD_INLINE v64 v64_pack_s16_u8(v64 a, v64 b) { |
202 | 0 | __m128i t = _mm_unpacklo_epi64(b, a); |
203 | 0 | return _mm_packus_epi16(t, t); |
204 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_pack_s16_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_pack_s16_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_pack_s16_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_pack_s16_u8 |
205 | | |
206 | 0 | SIMD_INLINE v64 v64_pack_s16_s8(v64 a, v64 b) { |
207 | 0 | __m128i t = _mm_unpacklo_epi64(b, a); |
208 | 0 | return _mm_packs_epi16(t, t); |
209 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_pack_s16_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_pack_s16_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_pack_s16_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_pack_s16_s8 |
210 | | |
211 | 0 | SIMD_INLINE v64 v64_unziphi_8(v64 a, v64 b) { |
212 | 0 | #if defined(__SSSE3__) |
213 | 0 | return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), |
214 | 0 | v64_from_64(0x0f0d0b0907050301LL)); |
215 | 0 | #else |
216 | 0 | return _mm_packus_epi16( |
217 | 0 | _mm_unpacklo_epi64(_mm_srli_epi16(b, 8), _mm_srli_epi16(a, 8)), |
218 | 0 | _mm_setzero_si128()); |
219 | 0 | #endif |
220 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unziphi_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_unziphi_8 Unexecuted instantiation: cdef_block_sse4.c:v64_unziphi_8 Unexecuted instantiation: cdef_block_avx2.c:v64_unziphi_8 |
221 | | |
222 | 0 | SIMD_INLINE v64 v64_unziplo_8(v64 a, v64 b) { |
223 | 0 | #if defined(__SSSE3__) |
224 | 0 | return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), |
225 | 0 | v64_from_64(0x0e0c0a0806040200LL)); |
226 | 0 | #else |
227 | 0 | return v64_unziphi_8(_mm_slli_si128(a, 1), _mm_slli_si128(b, 1)); |
228 | 0 | #endif |
229 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unziplo_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_unziplo_8 Unexecuted instantiation: cdef_block_sse4.c:v64_unziplo_8 Unexecuted instantiation: cdef_block_avx2.c:v64_unziplo_8 |
230 | | |
231 | 0 | SIMD_INLINE v64 v64_unziphi_16(v64 a, v64 b) { |
232 | 0 | #if defined(__SSSE3__) |
233 | 0 | return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), |
234 | 0 | v64_from_64(0x0f0e0b0a07060302LL)); |
235 | 0 | #else |
236 | 0 | return _mm_packs_epi32( |
237 | 0 | _mm_unpacklo_epi64(_mm_srai_epi32(b, 16), _mm_srai_epi32(a, 16)), |
238 | 0 | _mm_setzero_si128()); |
239 | 0 | #endif |
240 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unziphi_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unziphi_16 Unexecuted instantiation: cdef_block_sse4.c:v64_unziphi_16 Unexecuted instantiation: cdef_block_avx2.c:v64_unziphi_16 |
241 | | |
242 | 0 | SIMD_INLINE v64 v64_unziplo_16(v64 a, v64 b) { |
243 | 0 | #if defined(__SSSE3__) |
244 | 0 | return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), |
245 | 0 | v64_from_64(0x0d0c090805040100LL)); |
246 | 0 | #else |
247 | 0 | return v64_unziphi_16(_mm_slli_si128(a, 2), _mm_slli_si128(b, 2)); |
248 | 0 | #endif |
249 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unziplo_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unziplo_16 Unexecuted instantiation: cdef_block_sse4.c:v64_unziplo_16 Unexecuted instantiation: cdef_block_avx2.c:v64_unziplo_16 |
250 | | |
251 | 0 | SIMD_INLINE v64 v64_unpacklo_u8_s16(v64 a) { |
252 | 0 | return _mm_unpacklo_epi8(a, _mm_setzero_si128()); |
253 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_unpacklo_u8_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_unpacklo_u8_s16 |
254 | | |
255 | 0 | SIMD_INLINE v64 v64_unpackhi_u8_s16(v64 a) { |
256 | 0 | return _mm_srli_si128(_mm_unpacklo_epi8(a, _mm_setzero_si128()), 8); |
257 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_unpackhi_u8_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_unpackhi_u8_s16 |
258 | | |
259 | 0 | SIMD_INLINE v64 v64_unpacklo_s8_s16(v64 a) { |
260 | 0 | return _mm_srai_epi16(_mm_unpacklo_epi8(a, a), 8); |
261 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_unpacklo_s8_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_unpacklo_s8_s16 |
262 | | |
263 | 0 | SIMD_INLINE v64 v64_unpackhi_s8_s16(v64 a) { |
264 | 0 | return _mm_srli_si128(_mm_srai_epi16(_mm_unpacklo_epi8(a, a), 8), 8); |
265 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_unpackhi_s8_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_unpackhi_s8_s16 |
266 | | |
267 | 0 | SIMD_INLINE v64 v64_unpacklo_u16_s32(v64 a) { |
268 | 0 | return _mm_unpacklo_epi16(a, _mm_setzero_si128()); |
269 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_unpacklo_u16_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_unpacklo_u16_s32 |
270 | | |
271 | 0 | SIMD_INLINE v64 v64_unpacklo_s16_s32(v64 a) { |
272 | 0 | return _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), a), 16); |
273 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_unpacklo_s16_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_unpacklo_s16_s32 |
274 | | |
275 | 0 | SIMD_INLINE v64 v64_unpackhi_u16_s32(v64 a) { |
276 | 0 | return _mm_srli_si128(_mm_unpacklo_epi16(a, _mm_setzero_si128()), 8); |
277 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_unpackhi_u16_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_unpackhi_u16_s32 |
278 | | |
279 | 0 | SIMD_INLINE v64 v64_unpackhi_s16_s32(v64 a) { |
280 | 0 | return _mm_srli_si128( |
281 | 0 | _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), a), 16), 8); |
282 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_unpackhi_s16_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_unpackhi_s16_s32 |
283 | | |
284 | 0 | SIMD_INLINE v64 v64_shuffle_8(v64 x, v64 pattern) { |
285 | 0 | #if defined(__SSSE3__) |
286 | 0 | return _mm_shuffle_epi8(x, pattern); |
287 | 0 | #else |
288 | 0 | v64 output; |
289 | 0 | unsigned char *input = (unsigned char *)&x; |
290 | 0 | unsigned char *index = (unsigned char *)&pattern; |
291 | 0 | char *selected = (char *)&output; |
292 | 0 | int counter; |
293 | 0 |
|
294 | 0 | for (counter = 0; counter < 8; counter++) { |
295 | 0 | selected[counter] = input[index[counter]]; |
296 | 0 | } |
297 | 0 |
|
298 | 0 | return output; |
299 | 0 | #endif |
300 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shuffle_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_shuffle_8 Unexecuted instantiation: cdef_block_sse4.c:v64_shuffle_8 Unexecuted instantiation: cdef_block_avx2.c:v64_shuffle_8 |
301 | | |
302 | 0 | SIMD_INLINE int64_t v64_dotp_su8(v64 a, v64 b) { |
303 | 0 | __m128i t = _mm_madd_epi16(_mm_srai_epi16(_mm_unpacklo_epi8(a, a), 8), |
304 | 0 | _mm_unpacklo_epi8(b, _mm_setzero_si128())); |
305 | 0 | t = _mm_add_epi32(t, _mm_srli_si128(t, 8)); |
306 | 0 | t = _mm_add_epi32(t, _mm_srli_si128(t, 4)); |
307 | 0 | return (int32_t)v64_low_u32(t); |
308 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_dotp_su8 Unexecuted instantiation: cdef_block_ssse3.c:v64_dotp_su8 Unexecuted instantiation: cdef_block_sse4.c:v64_dotp_su8 Unexecuted instantiation: cdef_block_avx2.c:v64_dotp_su8 |
309 | | |
310 | 0 | SIMD_INLINE int64_t v64_dotp_s16(v64 a, v64 b) { |
311 | 0 | __m128i r = _mm_madd_epi16(a, b); |
312 | 0 | #if defined(__SSE4_1__) && defined(__x86_64__) |
313 | 0 | __m128i x = _mm_cvtepi32_epi64(r); |
314 | 0 | return _mm_cvtsi128_si64(_mm_add_epi64(x, _mm_srli_si128(x, 8))); |
315 | 0 | #else |
316 | 0 | return (int64_t)_mm_cvtsi128_si32(_mm_srli_si128(r, 4)) + |
317 | 0 | (int64_t)_mm_cvtsi128_si32(r); |
318 | 0 | #endif |
319 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_dotp_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_dotp_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_dotp_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_dotp_s16 |
320 | | |
321 | 0 | SIMD_INLINE uint64_t v64_hadd_u8(v64 a) { |
322 | 0 | return v64_low_u32(_mm_sad_epu8(a, _mm_setzero_si128())); |
323 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_hadd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_hadd_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_hadd_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_hadd_u8 |
324 | | |
325 | 0 | SIMD_INLINE int64_t v64_hadd_s16(v64 a) { |
326 | 0 | return v64_dotp_s16(a, v64_dup_16(1)); |
327 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_hadd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_hadd_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_hadd_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_hadd_s16 |
328 | | |
329 | | typedef v64 sad64_internal; |
330 | | |
331 | 0 | SIMD_INLINE sad64_internal v64_sad_u8_init(void) { return _mm_setzero_si128(); }Unexecuted instantiation: cdef_block_sse2.c:v64_sad_u8_init Unexecuted instantiation: cdef_block_ssse3.c:v64_sad_u8_init Unexecuted instantiation: cdef_block_sse4.c:v64_sad_u8_init Unexecuted instantiation: cdef_block_avx2.c:v64_sad_u8_init |
332 | | |
333 | | /* Implementation dependent return value. Result must be finalised with |
334 | | v64_sad_u8_sum(). |
335 | | The result for more than 32 v64_sad_u8() calls is undefined. */ |
336 | 0 | SIMD_INLINE sad64_internal v64_sad_u8(sad64_internal s, v64 a, v64 b) { |
337 | 0 | return _mm_add_epi64(s, _mm_sad_epu8(a, b)); |
338 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_sad_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_sad_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_sad_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_sad_u8 |
339 | | |
340 | 0 | SIMD_INLINE uint32_t v64_sad_u8_sum(sad64_internal s) { return v64_low_u32(s); }Unexecuted instantiation: cdef_block_sse2.c:v64_sad_u8_sum Unexecuted instantiation: cdef_block_ssse3.c:v64_sad_u8_sum Unexecuted instantiation: cdef_block_sse4.c:v64_sad_u8_sum Unexecuted instantiation: cdef_block_avx2.c:v64_sad_u8_sum |
341 | | |
342 | | typedef v64 ssd64_internal; |
343 | | |
344 | 0 | SIMD_INLINE ssd64_internal v64_ssd_u8_init(void) { return _mm_setzero_si128(); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssd_u8_init Unexecuted instantiation: cdef_block_ssse3.c:v64_ssd_u8_init Unexecuted instantiation: cdef_block_sse4.c:v64_ssd_u8_init Unexecuted instantiation: cdef_block_avx2.c:v64_ssd_u8_init |
345 | | |
346 | | /* Implementation dependent return value. Result must be finalised with |
347 | | * v64_ssd_u8_sum(). */ |
348 | 0 | SIMD_INLINE ssd64_internal v64_ssd_u8(ssd64_internal s, v64 a, v64 b) { |
349 | 0 | v64 l = v64_sub_16(v64_ziplo_8(v64_zero(), a), v64_ziplo_8(v64_zero(), b)); |
350 | 0 | v64 h = v64_sub_16(v64_ziphi_8(v64_zero(), a), v64_ziphi_8(v64_zero(), b)); |
351 | 0 | v64 r = v64_add_32(_mm_madd_epi16(l, l), _mm_madd_epi16(h, h)); |
352 | 0 | return _mm_add_epi64( |
353 | 0 | s, v64_ziplo_32(v64_zero(), _mm_add_epi32(r, _mm_srli_si128(r, 4)))); |
354 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_ssd_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_ssd_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_ssd_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_ssd_u8 |
355 | | |
356 | 0 | SIMD_INLINE uint32_t v64_ssd_u8_sum(sad64_internal s) { return v64_low_u32(s); }Unexecuted instantiation: cdef_block_sse2.c:v64_ssd_u8_sum Unexecuted instantiation: cdef_block_ssse3.c:v64_ssd_u8_sum Unexecuted instantiation: cdef_block_sse4.c:v64_ssd_u8_sum Unexecuted instantiation: cdef_block_avx2.c:v64_ssd_u8_sum |
357 | | |
358 | 0 | SIMD_INLINE v64 v64_or(v64 a, v64 b) { return _mm_or_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_or Unexecuted instantiation: cdef_block_ssse3.c:v64_or Unexecuted instantiation: cdef_block_sse4.c:v64_or Unexecuted instantiation: cdef_block_avx2.c:v64_or |
359 | | |
360 | 0 | SIMD_INLINE v64 v64_xor(v64 a, v64 b) { return _mm_xor_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_xor Unexecuted instantiation: cdef_block_ssse3.c:v64_xor Unexecuted instantiation: cdef_block_sse4.c:v64_xor Unexecuted instantiation: cdef_block_avx2.c:v64_xor |
361 | | |
362 | 0 | SIMD_INLINE v64 v64_and(v64 a, v64 b) { return _mm_and_si128(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_and Unexecuted instantiation: cdef_block_ssse3.c:v64_and Unexecuted instantiation: cdef_block_sse4.c:v64_and Unexecuted instantiation: cdef_block_avx2.c:v64_and |
363 | | |
364 | 0 | SIMD_INLINE v64 v64_andn(v64 a, v64 b) { return _mm_andnot_si128(b, a); }Unexecuted instantiation: cdef_block_sse2.c:v64_andn Unexecuted instantiation: cdef_block_ssse3.c:v64_andn Unexecuted instantiation: cdef_block_sse4.c:v64_andn Unexecuted instantiation: cdef_block_avx2.c:v64_andn |
365 | | |
366 | 0 | SIMD_INLINE v64 v64_mullo_s16(v64 a, v64 b) { return _mm_mullo_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_mullo_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_mullo_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_mullo_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_mullo_s16 |
367 | | |
368 | 0 | SIMD_INLINE v64 v64_mulhi_s16(v64 a, v64 b) { return _mm_mulhi_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_mulhi_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_mulhi_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_mulhi_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_mulhi_s16 |
369 | | |
370 | 0 | SIMD_INLINE v64 v64_mullo_s32(v64 a, v64 b) { |
371 | 0 | #if defined(__SSE4_1__) |
372 | 0 | return _mm_mullo_epi32(a, b); |
373 | 0 | #else |
374 | 0 | return _mm_unpacklo_epi32( |
375 | 0 | _mm_mul_epu32(a, b), |
376 | 0 | _mm_mul_epu32(_mm_srli_si128(a, 4), _mm_srli_si128(b, 4))); |
377 | 0 | #endif |
378 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_mullo_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_mullo_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_mullo_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_mullo_s32 |
379 | | |
380 | 0 | SIMD_INLINE v64 v64_madd_s16(v64 a, v64 b) { return _mm_madd_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_madd_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_madd_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_madd_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_madd_s16 |
381 | | |
382 | 0 | SIMD_INLINE v64 v64_madd_us8(v64 a, v64 b) { |
383 | 0 | #if defined(__SSSE3__) |
384 | 0 | return _mm_maddubs_epi16(a, b); |
385 | 0 | #else |
386 | 0 | __m128i t = _mm_madd_epi16(_mm_unpacklo_epi8(a, _mm_setzero_si128()), |
387 | 0 | _mm_srai_epi16(_mm_unpacklo_epi8(b, b), 8)); |
388 | 0 | return _mm_packs_epi32(t, t); |
389 | 0 | #endif |
390 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_madd_us8 Unexecuted instantiation: cdef_block_ssse3.c:v64_madd_us8 Unexecuted instantiation: cdef_block_sse4.c:v64_madd_us8 Unexecuted instantiation: cdef_block_avx2.c:v64_madd_us8 |
391 | | |
392 | 0 | SIMD_INLINE v64 v64_avg_u8(v64 a, v64 b) { return _mm_avg_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_avg_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_avg_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_avg_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_avg_u8 |
393 | | |
394 | 0 | SIMD_INLINE v64 v64_rdavg_u8(v64 a, v64 b) { |
395 | 0 | return _mm_sub_epi8(_mm_avg_epu8(a, b), |
396 | 0 | _mm_and_si128(_mm_xor_si128(a, b), v64_dup_8(1))); |
397 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_rdavg_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_rdavg_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_rdavg_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_rdavg_u8 |
398 | | |
399 | 0 | SIMD_INLINE v64 v64_rdavg_u16(v64 a, v64 b) { |
400 | 0 | return _mm_sub_epi16(_mm_avg_epu16(a, b), |
401 | 0 | _mm_and_si128(_mm_xor_si128(a, b), v64_dup_16(1))); |
402 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_rdavg_u16 Unexecuted instantiation: cdef_block_ssse3.c:v64_rdavg_u16 Unexecuted instantiation: cdef_block_sse4.c:v64_rdavg_u16 Unexecuted instantiation: cdef_block_avx2.c:v64_rdavg_u16 |
403 | | |
404 | 0 | SIMD_INLINE v64 v64_avg_u16(v64 a, v64 b) { return _mm_avg_epu16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_avg_u16 Unexecuted instantiation: cdef_block_ssse3.c:v64_avg_u16 Unexecuted instantiation: cdef_block_sse4.c:v64_avg_u16 Unexecuted instantiation: cdef_block_avx2.c:v64_avg_u16 |
405 | | |
406 | 0 | SIMD_INLINE v64 v64_min_u8(v64 a, v64 b) { return _mm_min_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_min_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_min_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_min_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_min_u8 |
407 | | |
408 | 0 | SIMD_INLINE v64 v64_max_u8(v64 a, v64 b) { return _mm_max_epu8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_max_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_max_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_max_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_max_u8 |
409 | | |
410 | 0 | SIMD_INLINE v64 v64_min_s8(v64 a, v64 b) { |
411 | 0 | #if defined(__SSE4_1__) |
412 | 0 | return _mm_min_epi8(a, b); |
413 | 0 | #else |
414 | 0 | v64 mask = _mm_cmplt_epi8(a, b); |
415 | 0 | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
416 | 0 | #endif |
417 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_min_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_min_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_min_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_min_s8 |
418 | | |
419 | 0 | SIMD_INLINE v64 v64_max_s8(v64 a, v64 b) { |
420 | 0 | #if defined(__SSE4_1__) |
421 | 0 | return _mm_max_epi8(a, b); |
422 | 0 | #else |
423 | 0 | v64 mask = _mm_cmplt_epi8(b, a); |
424 | 0 | return _mm_or_si128(_mm_andnot_si128(mask, b), _mm_and_si128(mask, a)); |
425 | 0 | #endif |
426 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_max_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_max_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_max_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_max_s8 |
427 | | |
428 | 0 | SIMD_INLINE v64 v64_min_s16(v64 a, v64 b) { return _mm_min_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_min_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_min_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_min_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_min_s16 |
429 | | |
430 | 0 | SIMD_INLINE v64 v64_max_s16(v64 a, v64 b) { return _mm_max_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_max_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_max_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_max_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_max_s16 |
431 | | |
432 | 0 | SIMD_INLINE v64 v64_cmpgt_s8(v64 a, v64 b) { return _mm_cmpgt_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmpgt_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmpgt_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_cmpgt_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_cmpgt_s8 |
433 | | |
434 | 0 | SIMD_INLINE v64 v64_cmplt_s8(v64 a, v64 b) { return _mm_cmplt_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmplt_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmplt_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_cmplt_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_cmplt_s8 |
435 | | |
436 | 0 | SIMD_INLINE v64 v64_cmpeq_8(v64 a, v64 b) { return _mm_cmpeq_epi8(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmpeq_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmpeq_8 Unexecuted instantiation: cdef_block_sse4.c:v64_cmpeq_8 Unexecuted instantiation: cdef_block_avx2.c:v64_cmpeq_8 |
437 | | |
438 | 0 | SIMD_INLINE v64 v64_cmpgt_s16(v64 a, v64 b) { return _mm_cmpgt_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmpgt_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmpgt_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_cmpgt_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_cmpgt_s16 |
439 | | |
440 | 0 | SIMD_INLINE v64 v64_cmplt_s16(v64 a, v64 b) { return _mm_cmplt_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmplt_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmplt_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_cmplt_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_cmplt_s16 |
441 | | |
442 | 0 | SIMD_INLINE v64 v64_cmpeq_16(v64 a, v64 b) { return _mm_cmpeq_epi16(a, b); }Unexecuted instantiation: cdef_block_sse2.c:v64_cmpeq_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_cmpeq_16 Unexecuted instantiation: cdef_block_sse4.c:v64_cmpeq_16 Unexecuted instantiation: cdef_block_avx2.c:v64_cmpeq_16 |
443 | | |
444 | 0 | SIMD_INLINE v64 v64_shl_8(v64 a, unsigned int c) { |
445 | 0 | return _mm_and_si128(_mm_set1_epi8((uint8_t)(0xff << c)), |
446 | 0 | _mm_sll_epi16(a, _mm_cvtsi32_si128(c))); |
447 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shl_8 Unexecuted instantiation: cdef_block_ssse3.c:v64_shl_8 Unexecuted instantiation: cdef_block_sse4.c:v64_shl_8 Unexecuted instantiation: cdef_block_avx2.c:v64_shl_8 |
448 | | |
449 | 0 | SIMD_INLINE v64 v64_shr_u8(v64 a, unsigned int c) { |
450 | 0 | return _mm_and_si128(_mm_set1_epi8((char)(0xff >> c)), |
451 | 0 | _mm_srl_epi16(a, _mm_cvtsi32_si128(c))); |
452 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_u8 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_u8 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_u8 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_u8 |
453 | | |
454 | 0 | SIMD_INLINE v64 v64_shr_s8(v64 a, unsigned int c) { |
455 | 0 | return _mm_packs_epi16( |
456 | 0 | _mm_sra_epi16(_mm_unpacklo_epi8(a, a), _mm_cvtsi32_si128(c + 8)), a); |
457 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_s8 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_s8 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_s8 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_s8 |
458 | | |
459 | 0 | SIMD_INLINE v64 v64_shl_16(v64 a, unsigned int c) { |
460 | 0 | return _mm_sll_epi16(a, _mm_cvtsi32_si128(c)); |
461 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shl_16 Unexecuted instantiation: cdef_block_ssse3.c:v64_shl_16 Unexecuted instantiation: cdef_block_sse4.c:v64_shl_16 Unexecuted instantiation: cdef_block_avx2.c:v64_shl_16 |
462 | | |
463 | 0 | SIMD_INLINE v64 v64_shr_u16(v64 a, unsigned int c) { |
464 | 0 | return _mm_srl_epi16(a, _mm_cvtsi32_si128(c)); |
465 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_u16 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_u16 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_u16 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_u16 |
466 | | |
467 | 0 | SIMD_INLINE v64 v64_shr_s16(v64 a, unsigned int c) { |
468 | 0 | return _mm_sra_epi16(a, _mm_cvtsi32_si128(c)); |
469 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_s16 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_s16 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_s16 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_s16 |
470 | | |
471 | 0 | SIMD_INLINE v64 v64_shl_32(v64 a, unsigned int c) { |
472 | 0 | return _mm_sll_epi32(a, _mm_cvtsi32_si128(c)); |
473 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shl_32 Unexecuted instantiation: cdef_block_ssse3.c:v64_shl_32 Unexecuted instantiation: cdef_block_sse4.c:v64_shl_32 Unexecuted instantiation: cdef_block_avx2.c:v64_shl_32 |
474 | | |
475 | 0 | SIMD_INLINE v64 v64_shr_u32(v64 a, unsigned int c) { |
476 | 0 | return _mm_srl_epi32(a, _mm_cvtsi32_si128(c)); |
477 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_u32 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_u32 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_u32 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_u32 |
478 | | |
479 | 0 | SIMD_INLINE v64 v64_shr_s32(v64 a, unsigned int c) { |
480 | 0 | return _mm_sra_epi32(a, _mm_cvtsi32_si128(c)); |
481 | 0 | } Unexecuted instantiation: cdef_block_sse2.c:v64_shr_s32 Unexecuted instantiation: cdef_block_ssse3.c:v64_shr_s32 Unexecuted instantiation: cdef_block_sse4.c:v64_shr_s32 Unexecuted instantiation: cdef_block_avx2.c:v64_shr_s32 |
482 | | |
483 | | /* These intrinsics require immediate values, so we must use #defines |
484 | | to enforce that. */ |
485 | | #define v64_shl_n_byte(a, c) _mm_slli_si128(a, c) |
486 | | #define v64_shr_n_byte(a, c) _mm_srli_si128(_mm_unpacklo_epi64(a, a), c + 8) |
487 | | #define v64_shl_n_8(a, c) \ |
488 | | _mm_and_si128(_mm_set1_epi8((uint8_t)(0xff << (c))), _mm_slli_epi16(a, c)) |
489 | | #define v64_shr_n_u8(a, c) \ |
490 | | _mm_and_si128(_mm_set1_epi8(0xff >> (c)), _mm_srli_epi16(a, c)) |
491 | | #define v64_shr_n_s8(a, c) \ |
492 | | _mm_packs_epi16(_mm_srai_epi16(_mm_unpacklo_epi8(a, a), (c) + 8), a) |
493 | | #define v64_shl_n_16(a, c) _mm_slli_epi16(a, c) |
494 | | #define v64_shr_n_u16(a, c) _mm_srli_epi16(a, c) |
495 | | #define v64_shr_n_s16(a, c) _mm_srai_epi16(a, c) |
496 | | #define v64_shl_n_32(a, c) _mm_slli_epi32(a, c) |
497 | | #define v64_shr_n_u32(a, c) _mm_srli_epi32(a, c) |
498 | | #define v64_shr_n_s32(a, c) _mm_srai_epi32(a, c) |
499 | | |
500 | | #endif // AVM_AVM_DSP_SIMD_V64_INTRINSICS_X86_H_ |