/src/aom/aom_dsp/x86/obmc_variance_sse4.c
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2016, Alliance for Open Media. All rights reserved. |
3 | | * |
4 | | * This source code is subject to the terms of the BSD 2 Clause License and |
5 | | * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
6 | | * was not distributed with this source code in the LICENSE file, you can |
7 | | * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
8 | | * Media Patent License 1.0 was not distributed with this source code in the |
9 | | * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
10 | | */ |
11 | | |
12 | | #include <assert.h> |
13 | | #include <immintrin.h> |
14 | | |
15 | | #include "config/aom_config.h" |
16 | | #include "config/aom_dsp_rtcd.h" |
17 | | |
18 | | #include "aom_ports/mem.h" |
19 | | #include "aom/aom_integer.h" |
20 | | |
21 | | #include "aom_dsp/aom_dsp_common.h" |
22 | | #include "aom_dsp/aom_filter.h" |
23 | | #include "aom_dsp/x86/obmc_intrinsic_sse4.h" |
24 | | #include "aom_dsp/x86/synonyms.h" |
25 | | #include "aom_dsp/x86/variance_impl_ssse3.h" |
26 | | |
27 | | //////////////////////////////////////////////////////////////////////////////// |
28 | | // 8 bit |
29 | | //////////////////////////////////////////////////////////////////////////////// |
30 | | |
31 | | static inline void obmc_variance_w8n(const uint8_t *pre, const int pre_stride, |
32 | | const int32_t *wsrc, const int32_t *mask, |
33 | | unsigned int *const sse, int *const sum, |
34 | 0 | const int w, const int h) { |
35 | 0 | const int pre_step = pre_stride - w; |
36 | 0 | int n = 0; |
37 | 0 | __m128i v_sum_d = _mm_setzero_si128(); |
38 | 0 | __m128i v_sse_d = _mm_setzero_si128(); |
39 | |
|
40 | 0 | assert(w >= 8); |
41 | 0 | assert(IS_POWER_OF_TWO(w)); |
42 | 0 | assert(IS_POWER_OF_TWO(h)); |
43 | | |
44 | 0 | do { |
45 | 0 | const __m128i v_p1_b = xx_loadl_32(pre + n + 4); |
46 | 0 | const __m128i v_m1_d = xx_load_128(mask + n + 4); |
47 | 0 | const __m128i v_w1_d = xx_load_128(wsrc + n + 4); |
48 | 0 | const __m128i v_p0_b = xx_loadl_32(pre + n); |
49 | 0 | const __m128i v_m0_d = xx_load_128(mask + n); |
50 | 0 | const __m128i v_w0_d = xx_load_128(wsrc + n); |
51 | |
|
52 | 0 | const __m128i v_p0_d = _mm_cvtepu8_epi32(v_p0_b); |
53 | 0 | const __m128i v_p1_d = _mm_cvtepu8_epi32(v_p1_b); |
54 | | |
55 | | // Values in both pre and mask fit in 15 bits, and are packed at 32 bit |
56 | | // boundaries. We use pmaddwd, as it has lower latency on Haswell |
57 | | // than pmulld but produces the same result with these inputs. |
58 | 0 | const __m128i v_pm0_d = _mm_madd_epi16(v_p0_d, v_m0_d); |
59 | 0 | const __m128i v_pm1_d = _mm_madd_epi16(v_p1_d, v_m1_d); |
60 | |
|
61 | 0 | const __m128i v_diff0_d = _mm_sub_epi32(v_w0_d, v_pm0_d); |
62 | 0 | const __m128i v_diff1_d = _mm_sub_epi32(v_w1_d, v_pm1_d); |
63 | |
|
64 | 0 | const __m128i v_rdiff0_d = xx_roundn_epi32(v_diff0_d, 12); |
65 | 0 | const __m128i v_rdiff1_d = xx_roundn_epi32(v_diff1_d, 12); |
66 | 0 | const __m128i v_rdiff01_w = _mm_packs_epi32(v_rdiff0_d, v_rdiff1_d); |
67 | 0 | const __m128i v_sqrdiff_d = _mm_madd_epi16(v_rdiff01_w, v_rdiff01_w); |
68 | |
|
69 | 0 | v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff0_d); |
70 | 0 | v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff1_d); |
71 | 0 | v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d); |
72 | |
|
73 | 0 | n += 8; |
74 | |
|
75 | 0 | if (n % w == 0) pre += pre_step; |
76 | 0 | } while (n < w * h); |
77 | |
|
78 | 0 | *sum = xx_hsum_epi32_si32(v_sum_d); |
79 | 0 | *sse = xx_hsum_epi32_si32(v_sse_d); |
80 | 0 | } |
81 | | |
82 | | #define OBMCVARWXH(W, H) \ |
83 | | unsigned int aom_obmc_variance##W##x##H##_sse4_1( \ |
84 | | const uint8_t *pre, int pre_stride, const int32_t *wsrc, \ |
85 | 0 | const int32_t *mask, unsigned int *sse) { \ |
86 | 0 | int sum; \ |
87 | 0 | if (W == 4) { \ |
88 | 0 | obmc_variance_w4(pre, pre_stride, wsrc, mask, sse, &sum, H); \ |
89 | 0 | } else { \ |
90 | 0 | obmc_variance_w8n(pre, pre_stride, wsrc, mask, sse, &sum, W, H); \ |
91 | 0 | } \ |
92 | 0 | return *sse - (unsigned int)(((int64_t)sum * sum) / (W * H)); \ |
93 | 0 | } Unexecuted instantiation: aom_obmc_variance128x128_sse4_1 Unexecuted instantiation: aom_obmc_variance128x64_sse4_1 Unexecuted instantiation: aom_obmc_variance64x128_sse4_1 Unexecuted instantiation: aom_obmc_variance64x64_sse4_1 Unexecuted instantiation: aom_obmc_variance64x32_sse4_1 Unexecuted instantiation: aom_obmc_variance32x64_sse4_1 Unexecuted instantiation: aom_obmc_variance32x32_sse4_1 Unexecuted instantiation: aom_obmc_variance32x16_sse4_1 Unexecuted instantiation: aom_obmc_variance16x32_sse4_1 Unexecuted instantiation: aom_obmc_variance16x16_sse4_1 Unexecuted instantiation: aom_obmc_variance16x8_sse4_1 Unexecuted instantiation: aom_obmc_variance8x16_sse4_1 Unexecuted instantiation: aom_obmc_variance8x8_sse4_1 Unexecuted instantiation: aom_obmc_variance8x4_sse4_1 Unexecuted instantiation: aom_obmc_variance4x8_sse4_1 Unexecuted instantiation: aom_obmc_variance4x4_sse4_1 Unexecuted instantiation: aom_obmc_variance4x16_sse4_1 Unexecuted instantiation: aom_obmc_variance16x4_sse4_1 Unexecuted instantiation: aom_obmc_variance8x32_sse4_1 Unexecuted instantiation: aom_obmc_variance32x8_sse4_1 Unexecuted instantiation: aom_obmc_variance16x64_sse4_1 Unexecuted instantiation: aom_obmc_variance64x16_sse4_1 |
94 | | |
95 | | OBMCVARWXH(128, 128) |
96 | | OBMCVARWXH(128, 64) |
97 | | OBMCVARWXH(64, 128) |
98 | | OBMCVARWXH(64, 64) |
99 | | OBMCVARWXH(64, 32) |
100 | | OBMCVARWXH(32, 64) |
101 | | OBMCVARWXH(32, 32) |
102 | | OBMCVARWXH(32, 16) |
103 | | OBMCVARWXH(16, 32) |
104 | | OBMCVARWXH(16, 16) |
105 | | OBMCVARWXH(16, 8) |
106 | | OBMCVARWXH(8, 16) |
107 | | OBMCVARWXH(8, 8) |
108 | | OBMCVARWXH(8, 4) |
109 | | OBMCVARWXH(4, 8) |
110 | | OBMCVARWXH(4, 4) |
111 | | OBMCVARWXH(4, 16) |
112 | | OBMCVARWXH(16, 4) |
113 | | OBMCVARWXH(8, 32) |
114 | | OBMCVARWXH(32, 8) |
115 | | OBMCVARWXH(16, 64) |
116 | | OBMCVARWXH(64, 16) |
117 | | |
118 | | #include "config/aom_dsp_rtcd.h" |
119 | | |
120 | | #define OBMC_SUBPIX_VAR(W, H) \ |
121 | | uint32_t aom_obmc_sub_pixel_variance##W##x##H##_sse4_1( \ |
122 | | const uint8_t *pre, int pre_stride, int xoffset, int yoffset, \ |
123 | 0 | const int32_t *wsrc, const int32_t *mask, unsigned int *sse) { \ |
124 | 0 | uint16_t fdata3[(H + 1) * W]; \ |
125 | 0 | uint8_t temp2[H * W]; \ |
126 | 0 | \ |
127 | 0 | aom_var_filter_block2d_bil_first_pass_ssse3( \ |
128 | 0 | pre, fdata3, pre_stride, 1, H + 1, W, bilinear_filters_2t[xoffset]); \ |
129 | 0 | aom_var_filter_block2d_bil_second_pass_ssse3( \ |
130 | 0 | fdata3, temp2, W, W, H, W, bilinear_filters_2t[yoffset]); \ |
131 | 0 | \ |
132 | 0 | return aom_obmc_variance##W##x##H##_sse4_1(temp2, W, wsrc, mask, sse); \ |
133 | 0 | } Unexecuted instantiation: aom_obmc_sub_pixel_variance128x128_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance128x64_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance64x128_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance64x64_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance64x32_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance32x64_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance32x32_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance32x16_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance16x32_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance16x16_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance16x8_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance8x16_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance8x8_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance8x4_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance4x8_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance4x4_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance4x16_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance16x4_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance8x32_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance32x8_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance16x64_sse4_1 Unexecuted instantiation: aom_obmc_sub_pixel_variance64x16_sse4_1 |
134 | | |
135 | | OBMC_SUBPIX_VAR(128, 128) |
136 | | OBMC_SUBPIX_VAR(128, 64) |
137 | | OBMC_SUBPIX_VAR(64, 128) |
138 | | OBMC_SUBPIX_VAR(64, 64) |
139 | | OBMC_SUBPIX_VAR(64, 32) |
140 | | OBMC_SUBPIX_VAR(32, 64) |
141 | | OBMC_SUBPIX_VAR(32, 32) |
142 | | OBMC_SUBPIX_VAR(32, 16) |
143 | | OBMC_SUBPIX_VAR(16, 32) |
144 | | OBMC_SUBPIX_VAR(16, 16) |
145 | | OBMC_SUBPIX_VAR(16, 8) |
146 | | OBMC_SUBPIX_VAR(8, 16) |
147 | | OBMC_SUBPIX_VAR(8, 8) |
148 | | OBMC_SUBPIX_VAR(8, 4) |
149 | | OBMC_SUBPIX_VAR(4, 8) |
150 | | OBMC_SUBPIX_VAR(4, 4) |
151 | | OBMC_SUBPIX_VAR(4, 16) |
152 | | OBMC_SUBPIX_VAR(16, 4) |
153 | | OBMC_SUBPIX_VAR(8, 32) |
154 | | OBMC_SUBPIX_VAR(32, 8) |
155 | | OBMC_SUBPIX_VAR(16, 64) |
156 | | OBMC_SUBPIX_VAR(64, 16) |
157 | | |
158 | | //////////////////////////////////////////////////////////////////////////////// |
159 | | // High bit-depth |
160 | | //////////////////////////////////////////////////////////////////////////////// |
161 | | #if CONFIG_AV1_HIGHBITDEPTH |
162 | | static inline void hbd_obmc_variance_w4( |
163 | | const uint8_t *pre8, const int pre_stride, const int32_t *wsrc, |
164 | 0 | const int32_t *mask, uint64_t *const sse, int64_t *const sum, const int h) { |
165 | 0 | const uint16_t *pre = CONVERT_TO_SHORTPTR(pre8); |
166 | 0 | const int pre_step = pre_stride - 4; |
167 | 0 | int n = 0; |
168 | 0 | __m128i v_sum_d = _mm_setzero_si128(); |
169 | 0 | __m128i v_sse_d = _mm_setzero_si128(); |
170 | |
|
171 | 0 | assert(IS_POWER_OF_TWO(h)); |
172 | | |
173 | 0 | do { |
174 | 0 | const __m128i v_p_w = xx_loadl_64(pre + n); |
175 | 0 | const __m128i v_m_d = xx_load_128(mask + n); |
176 | 0 | const __m128i v_w_d = xx_load_128(wsrc + n); |
177 | |
|
178 | 0 | const __m128i v_p_d = _mm_cvtepu16_epi32(v_p_w); |
179 | | |
180 | | // Values in both pre and mask fit in 15 bits, and are packed at 32 bit |
181 | | // boundaries. We use pmaddwd, as it has lower latency on Haswell |
182 | | // than pmulld but produces the same result with these inputs. |
183 | 0 | const __m128i v_pm_d = _mm_madd_epi16(v_p_d, v_m_d); |
184 | |
|
185 | 0 | const __m128i v_diff_d = _mm_sub_epi32(v_w_d, v_pm_d); |
186 | 0 | const __m128i v_rdiff_d = xx_roundn_epi32(v_diff_d, 12); |
187 | 0 | const __m128i v_sqrdiff_d = _mm_mullo_epi32(v_rdiff_d, v_rdiff_d); |
188 | |
|
189 | 0 | v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff_d); |
190 | 0 | v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d); |
191 | |
|
192 | 0 | n += 4; |
193 | |
|
194 | 0 | if (n % 4 == 0) pre += pre_step; |
195 | 0 | } while (n < 4 * h); |
196 | |
|
197 | 0 | *sum = xx_hsum_epi32_si32(v_sum_d); |
198 | 0 | *sse = xx_hsum_epi32_si32(v_sse_d); |
199 | 0 | } |
200 | | |
201 | | static inline void hbd_obmc_variance_w8n( |
202 | | const uint8_t *pre8, const int pre_stride, const int32_t *wsrc, |
203 | | const int32_t *mask, uint64_t *const sse, int64_t *const sum, const int w, |
204 | 0 | const int h) { |
205 | 0 | const uint16_t *pre = CONVERT_TO_SHORTPTR(pre8); |
206 | 0 | const int pre_step = pre_stride - w; |
207 | 0 | int n = 0; |
208 | 0 | __m128i v_sum_d = _mm_setzero_si128(); |
209 | 0 | __m128i v_sse_d = _mm_setzero_si128(); |
210 | |
|
211 | 0 | assert(w >= 8); |
212 | 0 | assert(IS_POWER_OF_TWO(w)); |
213 | 0 | assert(IS_POWER_OF_TWO(h)); |
214 | | |
215 | 0 | do { |
216 | 0 | const __m128i v_p1_w = xx_loadl_64(pre + n + 4); |
217 | 0 | const __m128i v_m1_d = xx_load_128(mask + n + 4); |
218 | 0 | const __m128i v_w1_d = xx_load_128(wsrc + n + 4); |
219 | 0 | const __m128i v_p0_w = xx_loadl_64(pre + n); |
220 | 0 | const __m128i v_m0_d = xx_load_128(mask + n); |
221 | 0 | const __m128i v_w0_d = xx_load_128(wsrc + n); |
222 | |
|
223 | 0 | const __m128i v_p0_d = _mm_cvtepu16_epi32(v_p0_w); |
224 | 0 | const __m128i v_p1_d = _mm_cvtepu16_epi32(v_p1_w); |
225 | | |
226 | | // Values in both pre and mask fit in 15 bits, and are packed at 32 bit |
227 | | // boundaries. We use pmaddwd, as it has lower latency on Haswell |
228 | | // than pmulld but produces the same result with these inputs. |
229 | 0 | const __m128i v_pm0_d = _mm_madd_epi16(v_p0_d, v_m0_d); |
230 | 0 | const __m128i v_pm1_d = _mm_madd_epi16(v_p1_d, v_m1_d); |
231 | |
|
232 | 0 | const __m128i v_diff0_d = _mm_sub_epi32(v_w0_d, v_pm0_d); |
233 | 0 | const __m128i v_diff1_d = _mm_sub_epi32(v_w1_d, v_pm1_d); |
234 | |
|
235 | 0 | const __m128i v_rdiff0_d = xx_roundn_epi32(v_diff0_d, 12); |
236 | 0 | const __m128i v_rdiff1_d = xx_roundn_epi32(v_diff1_d, 12); |
237 | 0 | const __m128i v_rdiff01_w = _mm_packs_epi32(v_rdiff0_d, v_rdiff1_d); |
238 | 0 | const __m128i v_sqrdiff_d = _mm_madd_epi16(v_rdiff01_w, v_rdiff01_w); |
239 | |
|
240 | 0 | v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff0_d); |
241 | 0 | v_sum_d = _mm_add_epi32(v_sum_d, v_rdiff1_d); |
242 | 0 | v_sse_d = _mm_add_epi32(v_sse_d, v_sqrdiff_d); |
243 | |
|
244 | 0 | n += 8; |
245 | |
|
246 | 0 | if (n % w == 0) pre += pre_step; |
247 | 0 | } while (n < w * h); |
248 | |
|
249 | 0 | *sum += xx_hsum_epi32_si64(v_sum_d); |
250 | 0 | *sse += xx_hsum_epi32_si64(v_sse_d); |
251 | 0 | } |
252 | | |
253 | | static inline void highbd_8_obmc_variance(const uint8_t *pre8, int pre_stride, |
254 | | const int32_t *wsrc, |
255 | | const int32_t *mask, int w, int h, |
256 | 0 | unsigned int *sse, int *sum) { |
257 | 0 | int64_t sum64 = 0; |
258 | 0 | uint64_t sse64 = 0; |
259 | 0 | if (w == 4) { |
260 | 0 | hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h); |
261 | 0 | } else { |
262 | 0 | hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h); |
263 | 0 | } |
264 | 0 | *sum = (int)sum64; |
265 | 0 | *sse = (unsigned int)sse64; |
266 | 0 | } |
267 | | |
268 | | static inline void highbd_10_obmc_variance(const uint8_t *pre8, int pre_stride, |
269 | | const int32_t *wsrc, |
270 | | const int32_t *mask, int w, int h, |
271 | 0 | unsigned int *sse, int *sum) { |
272 | 0 | int64_t sum64 = 0; |
273 | 0 | uint64_t sse64 = 0; |
274 | 0 | if (w == 4) { |
275 | 0 | hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h); |
276 | 0 | } else if (w < 128 || h < 128) { |
277 | 0 | hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h); |
278 | 0 | } else { |
279 | 0 | assert(w == 128 && h == 128); |
280 | | |
281 | 0 | do { |
282 | 0 | hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, |
283 | 0 | 64); |
284 | 0 | pre8 += 64 * pre_stride; |
285 | 0 | wsrc += 64 * w; |
286 | 0 | mask += 64 * w; |
287 | 0 | h -= 64; |
288 | 0 | } while (h > 0); |
289 | 0 | } |
290 | 0 | *sum = (int)ROUND_POWER_OF_TWO(sum64, 2); |
291 | 0 | *sse = (unsigned int)ROUND_POWER_OF_TWO(sse64, 4); |
292 | 0 | } |
293 | | |
294 | | static inline void highbd_12_obmc_variance(const uint8_t *pre8, int pre_stride, |
295 | | const int32_t *wsrc, |
296 | | const int32_t *mask, int w, int h, |
297 | 0 | unsigned int *sse, int *sum) { |
298 | 0 | int64_t sum64 = 0; |
299 | 0 | uint64_t sse64 = 0; |
300 | 0 | int max_pel_allowed_per_ovf = 512; |
301 | 0 | if (w == 4) { |
302 | 0 | hbd_obmc_variance_w4(pre8, pre_stride, wsrc, mask, &sse64, &sum64, h); |
303 | 0 | } else if (w * h <= max_pel_allowed_per_ovf) { |
304 | 0 | hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, h); |
305 | 0 | } else { |
306 | 0 | int h_per_ovf = max_pel_allowed_per_ovf / w; |
307 | |
|
308 | 0 | assert(max_pel_allowed_per_ovf % w == 0); |
309 | 0 | do { |
310 | 0 | hbd_obmc_variance_w8n(pre8, pre_stride, wsrc, mask, &sse64, &sum64, w, |
311 | 0 | h_per_ovf); |
312 | 0 | pre8 += h_per_ovf * pre_stride; |
313 | 0 | wsrc += h_per_ovf * w; |
314 | 0 | mask += h_per_ovf * w; |
315 | 0 | h -= h_per_ovf; |
316 | 0 | } while (h > 0); |
317 | 0 | } |
318 | 0 | *sum = (int)ROUND_POWER_OF_TWO(sum64, 4); |
319 | 0 | *sse = (unsigned int)ROUND_POWER_OF_TWO(sse64, 8); |
320 | 0 | } |
321 | | |
322 | | #define HBD_OBMCVARWXH(W, H) \ |
323 | | unsigned int aom_highbd_8_obmc_variance##W##x##H##_sse4_1( \ |
324 | | const uint8_t *pre, int pre_stride, const int32_t *wsrc, \ |
325 | 0 | const int32_t *mask, unsigned int *sse) { \ |
326 | 0 | int sum; \ |
327 | 0 | highbd_8_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum); \ |
328 | 0 | return *sse - (unsigned int)(((int64_t)sum * sum) / (W * H)); \ |
329 | 0 | } \ Unexecuted instantiation: aom_highbd_8_obmc_variance128x128_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance128x64_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance64x128_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance64x64_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance64x32_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance32x64_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance32x32_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance32x16_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance16x32_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance16x16_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance16x8_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance8x16_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance8x8_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance8x4_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance4x8_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance4x4_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance4x16_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance16x4_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance8x32_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance32x8_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance16x64_sse4_1 Unexecuted instantiation: aom_highbd_8_obmc_variance64x16_sse4_1 |
330 | | \ |
331 | | unsigned int aom_highbd_10_obmc_variance##W##x##H##_sse4_1( \ |
332 | | const uint8_t *pre, int pre_stride, const int32_t *wsrc, \ |
333 | 0 | const int32_t *mask, unsigned int *sse) { \ |
334 | 0 | int sum; \ |
335 | 0 | int64_t var; \ |
336 | 0 | highbd_10_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum); \ |
337 | 0 | var = (int64_t)(*sse) - (((int64_t)sum * sum) / (W * H)); \ |
338 | 0 | return (var >= 0) ? (uint32_t)var : 0; \ |
339 | 0 | } \ Unexecuted instantiation: aom_highbd_10_obmc_variance128x128_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance128x64_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance64x128_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance64x64_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance64x32_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance32x64_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance32x32_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance32x16_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance16x32_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance16x16_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance16x8_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance8x16_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance8x8_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance8x4_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance4x8_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance4x4_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance4x16_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance16x4_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance8x32_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance32x8_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance16x64_sse4_1 Unexecuted instantiation: aom_highbd_10_obmc_variance64x16_sse4_1 |
340 | | \ |
341 | | unsigned int aom_highbd_12_obmc_variance##W##x##H##_sse4_1( \ |
342 | | const uint8_t *pre, int pre_stride, const int32_t *wsrc, \ |
343 | 0 | const int32_t *mask, unsigned int *sse) { \ |
344 | 0 | int sum; \ |
345 | 0 | int64_t var; \ |
346 | 0 | highbd_12_obmc_variance(pre, pre_stride, wsrc, mask, W, H, sse, &sum); \ |
347 | 0 | var = (int64_t)(*sse) - (((int64_t)sum * sum) / (W * H)); \ |
348 | 0 | return (var >= 0) ? (uint32_t)var : 0; \ |
349 | 0 | } Unexecuted instantiation: aom_highbd_12_obmc_variance128x128_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance128x64_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance64x128_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance64x64_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance64x32_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance32x64_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance32x32_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance32x16_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance16x32_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance16x16_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance16x8_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance8x16_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance8x8_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance8x4_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance4x8_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance4x4_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance4x16_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance16x4_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance8x32_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance32x8_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance16x64_sse4_1 Unexecuted instantiation: aom_highbd_12_obmc_variance64x16_sse4_1 |
350 | | |
351 | | HBD_OBMCVARWXH(128, 128) |
352 | | HBD_OBMCVARWXH(128, 64) |
353 | | HBD_OBMCVARWXH(64, 128) |
354 | | HBD_OBMCVARWXH(64, 64) |
355 | | HBD_OBMCVARWXH(64, 32) |
356 | | HBD_OBMCVARWXH(32, 64) |
357 | | HBD_OBMCVARWXH(32, 32) |
358 | | HBD_OBMCVARWXH(32, 16) |
359 | | HBD_OBMCVARWXH(16, 32) |
360 | | HBD_OBMCVARWXH(16, 16) |
361 | | HBD_OBMCVARWXH(16, 8) |
362 | | HBD_OBMCVARWXH(8, 16) |
363 | | HBD_OBMCVARWXH(8, 8) |
364 | | HBD_OBMCVARWXH(8, 4) |
365 | | HBD_OBMCVARWXH(4, 8) |
366 | | HBD_OBMCVARWXH(4, 4) |
367 | | HBD_OBMCVARWXH(4, 16) |
368 | | HBD_OBMCVARWXH(16, 4) |
369 | | HBD_OBMCVARWXH(8, 32) |
370 | | HBD_OBMCVARWXH(32, 8) |
371 | | HBD_OBMCVARWXH(16, 64) |
372 | | HBD_OBMCVARWXH(64, 16) |
373 | | #endif // CONFIG_AV1_HIGHBITDEPTH |