27 int dst_stride,
int src_stride1,
int src_stride2,
int h)
29 int stride1_2, stride1_3, stride1_4;
30 int stride2_2, stride2_3, stride2_4;
32 "slli.d %[stride1_2], %[srcStride1], 1 \n\t"
33 "slli.d %[stride2_2], %[srcStride2], 1 \n\t"
34 "add.d %[stride1_3], %[stride1_2], %[srcStride1] \n\t"
35 "add.d %[stride2_3], %[stride2_2], %[srcStride2] \n\t"
36 "slli.d %[stride1_4], %[stride1_2], 1 \n\t"
37 "slli.d %[stride2_4], %[stride2_2], 1 \n\t"
39 "vld $vr0, %[src1], 0 \n\t"
40 "vldx $vr1, %[src1], %[srcStride1] \n\t"
41 "vldx $vr2, %[src1], %[stride1_2] \n\t"
42 "vldx $vr3, %[src1], %[stride1_3] \n\t"
43 "add.d %[src1], %[src1], %[stride1_4] \n\t"
45 "vld $vr4, %[src2], 0 \n\t"
46 "vldx $vr5, %[src2], %[srcStride2] \n\t"
47 "vldx $vr6, %[src2], %[stride2_2] \n\t"
48 "vldx $vr7, %[src2], %[stride2_3] \n\t"
49 "add.d %[src2], %[src2], %[stride2_4] \n\t"
51 "addi.d %[h], %[h], -4 \n\t"
53 "vavgr.bu $vr0, $vr4, $vr0 \n\t"
54 "vavgr.bu $vr1, $vr5, $vr1 \n\t"
55 "vavgr.bu $vr2, $vr6, $vr2 \n\t"
56 "vavgr.bu $vr3, $vr7, $vr3 \n\t"
57 "vstelm.d $vr0, %[dst], 0, 0 \n\t"
58 "add.d %[dst], %[dst], %[dstStride] \n\t"
59 "vstelm.d $vr1, %[dst], 0, 0 \n\t"
60 "add.d %[dst], %[dst], %[dstStride] \n\t"
61 "vstelm.d $vr2, %[dst], 0, 0 \n\t"
62 "add.d %[dst], %[dst], %[dstStride] \n\t"
63 "vstelm.d $vr3, %[dst], 0, 0 \n\t"
64 "add.d %[dst], %[dst], %[dstStride] \n\t"
68 [
h]
"+&r"(
h), [stride1_2]
"=&r"(stride1_2),
69 [stride1_3]
"=&r"(stride1_3), [stride1_4]
"=&r"(stride1_4),
70 [stride2_2]
"=&r"(stride2_2), [stride2_3]
"=&r"(stride2_3),
71 [stride2_4]
"=&r"(stride2_4)
72 : [dstStride]
"r"(dst_stride), [srcStride1]
"r"(src_stride1),
73 [srcStride2]
"r"(src_stride2)
80 int dst_stride,
int src_stride1,
int src_stride2,
int h)
82 int stride1_2, stride1_3, stride1_4;
83 int stride2_2, stride2_3, stride2_4;
84 int dststride2, dststride3, dststride4;
86 "slli.d %[stride1_2], %[srcStride1], 1 \n\t"
87 "slli.d %[stride2_2], %[srcStride2], 1 \n\t"
88 "slli.d %[dststride2], %[dstStride], 1 \n\t"
89 "add.d %[stride1_3], %[stride1_2], %[srcStride1] \n\t"
90 "add.d %[stride2_3], %[stride2_2], %[srcStride2] \n\t"
91 "add.d %[dststride3], %[dststride2], %[dstStride] \n\t"
92 "slli.d %[stride1_4], %[stride1_2], 1 \n\t"
93 "slli.d %[stride2_4], %[stride2_2], 1 \n\t"
94 "slli.d %[dststride4], %[dststride2], 1 \n\t"
96 "vld $vr0, %[src1], 0 \n\t"
97 "vldx $vr1, %[src1], %[srcStride1] \n\t"
98 "vldx $vr2, %[src1], %[stride1_2] \n\t"
99 "vldx $vr3, %[src1], %[stride1_3] \n\t"
100 "add.d %[src1], %[src1], %[stride1_4] \n\t"
102 "vld $vr4, %[src2], 0 \n\t"
103 "vldx $vr5, %[src2], %[srcStride2] \n\t"
104 "vldx $vr6, %[src2], %[stride2_2] \n\t"
105 "vldx $vr7, %[src2], %[stride2_3] \n\t"
106 "add.d %[src2], %[src2], %[stride2_4] \n\t"
108 "addi.d %[h], %[h], -4 \n\t"
110 "vavgr.bu $vr0, $vr4, $vr0 \n\t"
111 "vavgr.bu $vr1, $vr5, $vr1 \n\t"
112 "vavgr.bu $vr2, $vr6, $vr2 \n\t"
113 "vavgr.bu $vr3, $vr7, $vr3 \n\t"
114 "vst $vr0, %[dst], 0 \n\t"
115 "vstx $vr1, %[dst], %[dstStride] \n\t"
116 "vstx $vr2, %[dst], %[dststride2] \n\t"
117 "vstx $vr3, %[dst], %[dststride3] \n\t"
118 "add.d %[dst], %[dst], %[dststride4] \n\t"
122 [
h]
"+&r"(
h), [stride1_2]
"=&r"(stride1_2),
123 [stride1_3]
"=&r"(stride1_3), [stride1_4]
"=&r"(stride1_4),
124 [stride2_2]
"=&r"(stride2_2), [stride2_3]
"=&r"(stride2_3),
125 [stride2_4]
"=&r"(stride2_4), [dststride2]
"=&r"(dststride2),
126 [dststride3]
"=&r"(dststride3), [dststride4]
"=&r"(dststride4)
127 : [dstStride]
"r"(dst_stride), [srcStride1]
"r"(src_stride1),
128 [srcStride2]
"r"(src_stride2)
134 ptrdiff_t line_size,
int h)
139 ptrdiff_t stride2, stride3, stride4;
142 "beqz %[h_8], 2f \n\t"
143 "slli.d %[stride2], %[stride], 1 \n\t"
144 "add.d %[stride3], %[stride2], %[stride] \n\t"
145 "slli.d %[stride4], %[stride2], 1 \n\t"
147 "ld.d %[tmp0], %[src], 0x0 \n\t"
148 "ldx.d %[tmp1], %[src], %[stride] \n\t"
149 "ldx.d %[tmp2], %[src], %[stride2] \n\t"
150 "ldx.d %[tmp3], %[src], %[stride3] \n\t"
151 "add.d %[src], %[src], %[stride4] \n\t"
152 "ld.d %[tmp4], %[src], 0x0 \n\t"
153 "ldx.d %[tmp5], %[src], %[stride] \n\t"
154 "ldx.d %[tmp6], %[src], %[stride2] \n\t"
155 "ldx.d %[tmp7], %[src], %[stride3] \n\t"
156 "add.d %[src], %[src], %[stride4] \n\t"
158 "addi.d %[h_8], %[h_8], -1 \n\t"
160 "st.d %[tmp0], %[dst], 0x0 \n\t"
161 "stx.d %[tmp1], %[dst], %[stride] \n\t"
162 "stx.d %[tmp2], %[dst], %[stride2] \n\t"
163 "stx.d %[tmp3], %[dst], %[stride3] \n\t"
164 "add.d %[dst], %[dst], %[stride4] \n\t"
165 "st.d %[tmp4], %[dst], 0x0 \n\t"
166 "stx.d %[tmp5], %[dst], %[stride] \n\t"
167 "stx.d %[tmp6], %[dst], %[stride2] \n\t"
168 "stx.d %[tmp7], %[dst], %[stride3] \n\t"
169 "add.d %[dst], %[dst], %[stride4] \n\t"
170 "bnez %[h_8], 1b \n\t"
173 "beqz %[res], 4f \n\t"
175 "ld.d %[tmp0], %[src], 0x0 \n\t"
176 "add.d %[src], %[src], %[stride] \n\t"
177 "addi.d %[res], %[res], -1 \n\t"
178 "st.d %[tmp0], %[dst], 0x0 \n\t"
179 "add.d %[dst], %[dst], %[stride] \n\t"
180 "bnez %[res], 3b \n\t"
182 : [tmp0]
"=&r"(
tmp[0]), [tmp1]
"=&r"(
tmp[1]),
183 [tmp2]
"=&r"(
tmp[2]), [tmp3]
"=&r"(
tmp[3]),
184 [tmp4]
"=&r"(
tmp[4]), [tmp5]
"=&r"(
tmp[5]),
185 [tmp6]
"=&r"(
tmp[6]), [tmp7]
"=&r"(
tmp[7]),
186 [dst]
"+&r"(
block), [
src]
"+&r"(pixels),
187 [h_8]
"+&r"(h_8), [res]
"+&r"(res),
188 [stride2]
"=&r"(stride2), [stride3]
"=&r"(stride3),
189 [stride4]
"=&r"(stride4)
196 ptrdiff_t line_size,
int h)
200 ptrdiff_t stride2, stride3, stride4;
203 "beqz %[h_8], 2f \n\t"
204 "slli.d %[stride2], %[stride], 1 \n\t"
205 "add.d %[stride3], %[stride2], %[stride] \n\t"
206 "slli.d %[stride4], %[stride2], 1 \n\t"
208 "vld $vr0, %[src], 0x0 \n\t"
209 "vldx $vr1, %[src], %[stride] \n\t"
210 "vldx $vr2, %[src], %[stride2] \n\t"
211 "vldx $vr3, %[src], %[stride3] \n\t"
212 "add.d %[src], %[src], %[stride4] \n\t"
213 "vld $vr4, %[src], 0x0 \n\t"
214 "vldx $vr5, %[src], %[stride] \n\t"
215 "vldx $vr6, %[src], %[stride2] \n\t"
216 "vldx $vr7, %[src], %[stride3] \n\t"
217 "add.d %[src], %[src], %[stride4] \n\t"
219 "addi.d %[h_8], %[h_8], -1 \n\t"
221 "vst $vr0, %[dst], 0x0 \n\t"
222 "vstx $vr1, %[dst], %[stride] \n\t"
223 "vstx $vr2, %[dst], %[stride2] \n\t"
224 "vstx $vr3, %[dst], %[stride3] \n\t"
225 "add.d %[dst], %[dst], %[stride4] \n\t"
226 "vst $vr4, %[dst], 0x0 \n\t"
227 "vstx $vr5, %[dst], %[stride] \n\t"
228 "vstx $vr6, %[dst], %[stride2] \n\t"
229 "vstx $vr7, %[dst], %[stride3] \n\t"
230 "add.d %[dst], %[dst], %[stride4] \n\t"
231 "bnez %[h_8], 1b \n\t"
234 "beqz %[res], 4f \n\t"
236 "vld $vr0, %[src], 0x0 \n\t"
237 "add.d %[src], %[src], %[stride] \n\t"
238 "addi.d %[res], %[res], -1 \n\t"
239 "vst $vr0, %[dst], 0x0 \n\t"
240 "add.d %[dst], %[dst], %[stride] \n\t"
241 "bnez %[res], 3b \n\t"
243 : [dst]
"+&r"(
block), [
src]
"+&r"(pixels),
244 [h_8]
"+&r"(h_8), [res]
"+&r"(res),
245 [stride2]
"=&r"(stride2), [stride3]
"=&r"(stride3),
246 [stride4]
"=&r"(stride4)
253 ptrdiff_t line_size,
int h)
260 ptrdiff_t line_size,
int h)
263 line_size, line_size,
h);
267 ptrdiff_t line_size,
int h)
274 ptrdiff_t line_size,
int h)
277 line_size, line_size,
h);
282 uint8_t *dst,
int32_t dst_stride)
285 int32_t src_stride_2x = src_stride << 1;
286 int32_t src_stride_4x = src_stride << 2;
287 int32_t src_stride_3x = src_stride_2x + src_stride;
288 uint8_t *_src = (uint8_t*)
src;
290 src0 = __lasx_xvld(_src, 0);
292 src3 = __lasx_xvldx(_src, src_stride_3x);
294 src4 = __lasx_xvld(_src, 0);
295 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
296 src7 = __lasx_xvldx(_src, src_stride_3x);
297 _src += (src_stride_4x -1);
302 __lasx_xvstelm_d(
src0, dst, 0, 0);
303 __lasx_xvstelm_d(
src0, dst, 8, 1);
305 __lasx_xvstelm_d(
src0, dst, 0, 2);
306 __lasx_xvstelm_d(
src0, dst, 8, 3);
308 __lasx_xvstelm_d(
src1, dst, 0, 0);
309 __lasx_xvstelm_d(
src1, dst, 8, 1);
311 __lasx_xvstelm_d(
src1, dst, 0, 2);
312 __lasx_xvstelm_d(
src1, dst, 8, 3);
315 src0 = __lasx_xvld(_src, 0);
317 src3 = __lasx_xvldx(_src, src_stride_3x);
319 src4 = __lasx_xvld(_src, 0);
320 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
321 src7 = __lasx_xvldx(_src, src_stride_3x);
322 _src += (src_stride_4x - 1);
327 __lasx_xvstelm_d(
src0, dst, 0, 0);
328 __lasx_xvstelm_d(
src0, dst, 8, 1);
330 __lasx_xvstelm_d(
src0, dst, 0, 2);
331 __lasx_xvstelm_d(
src0, dst, 8, 3);
333 __lasx_xvstelm_d(
src1, dst, 0, 0);
334 __lasx_xvstelm_d(
src1, dst, 8, 1);
336 __lasx_xvstelm_d(
src1, dst, 0, 2);
337 __lasx_xvstelm_d(
src1, dst, 8, 3);
340 src0 = __lasx_xvld(_src, 0);
342 src3 = __lasx_xvldx(_src, src_stride_3x);
344 src4 = __lasx_xvld(_src, 0);
345 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
346 src7 = __lasx_xvldx(_src, src_stride_3x);
347 _src += (src_stride_4x - 1);
352 __lasx_xvstelm_d(
src0, dst, 0, 0);
353 __lasx_xvstelm_d(
src0, dst, 8, 1);
355 __lasx_xvstelm_d(
src0, dst, 0, 2);
356 __lasx_xvstelm_d(
src0, dst, 8, 3);
358 __lasx_xvstelm_d(
src1, dst, 0, 0);
359 __lasx_xvstelm_d(
src1, dst, 8, 1);
361 __lasx_xvstelm_d(
src1, dst, 0, 2);
362 __lasx_xvstelm_d(
src1, dst, 8, 3);
365 src0 = __lasx_xvld(_src, 0);
367 src3 = __lasx_xvldx(_src, src_stride_3x);
369 src4 = __lasx_xvld(_src, 0);
370 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
371 src7 = __lasx_xvldx(_src, src_stride_3x);
376 __lasx_xvstelm_d(
src0, dst, 0, 0);
377 __lasx_xvstelm_d(
src0, dst, 8, 1);
379 __lasx_xvstelm_d(
src0, dst, 0, 2);
380 __lasx_xvstelm_d(
src0, dst, 8, 3);
382 __lasx_xvstelm_d(
src1, dst, 0, 0);
383 __lasx_xvstelm_d(
src1, dst, 8, 1);
385 __lasx_xvstelm_d(
src1, dst, 0, 2);
386 __lasx_xvstelm_d(
src1, dst, 8, 3);
391 uint8_t *dst,
int32_t dst_stride)
394 int32_t src_stride_2x = src_stride << 1;
395 int32_t src_stride_4x = src_stride << 2;
396 int32_t src_stride_3x = src_stride_2x + src_stride;
397 uint8_t* _src = (uint8_t*)
src;
399 src0 = __lasx_xvld(_src, 0);
401 src3 = __lasx_xvldx(_src, src_stride_3x);
403 src4 = __lasx_xvld(_src, 0);
404 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
405 src7 = __lasx_xvldx(_src, src_stride_3x);
406 _src += (src_stride_4x - 1);
411 __lasx_xvstelm_d(
src0, dst, 0, 0);
412 __lasx_xvstelm_d(
src0, dst, 8, 1);
414 __lasx_xvstelm_d(
src0, dst, 0, 2);
415 __lasx_xvstelm_d(
src0, dst, 8, 3);
417 __lasx_xvstelm_d(
src1, dst, 0, 0);
418 __lasx_xvstelm_d(
src1, dst, 8, 1);
420 __lasx_xvstelm_d(
src1, dst, 0, 2);
421 __lasx_xvstelm_d(
src1, dst, 8, 3);
424 src0 = __lasx_xvld(_src, 0);
426 src3 = __lasx_xvldx(_src, src_stride_3x);
428 src4 = __lasx_xvld(_src, 0);
429 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
430 src7 = __lasx_xvldx(_src, src_stride_3x);
435 __lasx_xvstelm_d(
src0, dst, 0, 0);
436 __lasx_xvstelm_d(
src0, dst, 8, 1);
438 __lasx_xvstelm_d(
src0, dst, 0, 2);
439 __lasx_xvstelm_d(
src0, dst, 8, 3);
441 __lasx_xvstelm_d(
src1, dst, 0, 0);
442 __lasx_xvstelm_d(
src1, dst, 8, 1);
444 __lasx_xvstelm_d(
src1, dst, 0, 2);
445 __lasx_xvstelm_d(
src1, dst, 8, 3);
449 ptrdiff_t line_size,
int h)
460 uint8_t *dst,
int32_t dst_stride)
462 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
463 __m256i src9, src10, src11, src12, src13, src14, src15, src16;
464 int32_t src_stride_2x = src_stride << 1;
465 int32_t src_stride_4x = src_stride << 2;
466 int32_t src_stride_3x = src_stride_2x + src_stride;
467 uint8_t* _src = (uint8_t*)
src;
469 src0 = __lasx_xvld(_src, 0);
471 src3 = __lasx_xvldx(_src, src_stride_3x);
472 _src += src_stride_4x;
473 src4 = __lasx_xvld(_src, 0);
474 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
475 src7 = __lasx_xvldx(_src, src_stride_3x);
476 _src += src_stride_4x;
477 src8 = __lasx_xvld(_src, 0);
478 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src9, src10);
479 src11 = __lasx_xvldx(_src, src_stride_3x);
480 _src += src_stride_4x;
481 src12 = __lasx_xvld(_src, 0);
482 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
484 src15 = __lasx_xvldx(_src, src_stride_3x);
485 _src += src_stride_4x;
486 src16 = __lasx_xvld(_src, 0);
490 DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6,
491 0x20, src8, src7, 0x20, src4, src5, src6, src7);
492 DUP4_ARG3(__lasx_xvpermi_q, src9, src8, 0x20, src10, src9, 0x20, src11,
493 src10, 0x20, src12, src11, 0x20, src8, src9, src10, src11);
494 DUP4_ARG3(__lasx_xvpermi_q, src13, src12, 0x20, src14, src13, 0x20, src15,
495 src14, 0x20, src16, src15, 0x20, src12, src13, src14, src15);
498 DUP4_ARG2(__lasx_xvavg_bu, src8, src9, src10, src11, src12, src13, src14,
499 src15, src8, src10, src12, src14);
501 __lasx_xvstelm_d(
src0, dst, 0, 0);
502 __lasx_xvstelm_d(
src0, dst, 8, 1);
504 __lasx_xvstelm_d(
src0, dst, 0, 2);
505 __lasx_xvstelm_d(
src0, dst, 8, 3);
507 __lasx_xvstelm_d(
src2, dst, 0, 0);
508 __lasx_xvstelm_d(
src2, dst, 8, 1);
510 __lasx_xvstelm_d(
src2, dst, 0, 2);
511 __lasx_xvstelm_d(
src2, dst, 8, 3);
513 __lasx_xvstelm_d(src4, dst, 0, 0);
514 __lasx_xvstelm_d(src4, dst, 8, 1);
516 __lasx_xvstelm_d(src4, dst, 0, 2);
517 __lasx_xvstelm_d(src4, dst, 8, 3);
519 __lasx_xvstelm_d(src6, dst, 0, 0);
520 __lasx_xvstelm_d(src6, dst, 8, 1);
522 __lasx_xvstelm_d(src6, dst, 0, 2);
523 __lasx_xvstelm_d(src6, dst, 8, 3);
525 __lasx_xvstelm_d(src8, dst, 0, 0);
526 __lasx_xvstelm_d(src8, dst, 8, 1);
528 __lasx_xvstelm_d(src8, dst, 0, 2);
529 __lasx_xvstelm_d(src8, dst, 8, 3);
531 __lasx_xvstelm_d(src10, dst, 0, 0);
532 __lasx_xvstelm_d(src10, dst, 8, 1);
534 __lasx_xvstelm_d(src10, dst, 0, 2);
535 __lasx_xvstelm_d(src10, dst, 8, 3);
537 __lasx_xvstelm_d(src12, dst, 0, 0);
538 __lasx_xvstelm_d(src12, dst, 8, 1);
540 __lasx_xvstelm_d(src12, dst, 0, 2);
541 __lasx_xvstelm_d(src12, dst, 8, 3);
543 __lasx_xvstelm_d(src14, dst, 0, 0);
544 __lasx_xvstelm_d(src14, dst, 8, 1);
546 __lasx_xvstelm_d(src14, dst, 0, 2);
547 __lasx_xvstelm_d(src14, dst, 8, 3);
552 uint8_t *dst,
int32_t dst_stride)
554 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
555 int32_t src_stride_2x = src_stride << 1;
556 int32_t src_stride_4x = src_stride << 2;
557 int32_t src_stride_3x = src_stride_2x + src_stride;
558 uint8_t* _src = (uint8_t*)
src;
560 src0 = __lasx_xvld(_src, 0);
562 src3 = __lasx_xvldx(_src, src_stride_3x);
563 _src += src_stride_4x;
564 src4 = __lasx_xvld(_src, 0);
565 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
566 src7 = __lasx_xvldx(_src, src_stride_3x);
567 _src += src_stride_4x;
568 src8 = __lasx_xvld(_src, 0);
572 DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6,
573 0x20, src8, src7, 0x20, src4, src5, src6, src7);
577 __lasx_xvstelm_d(
src0, dst, 0, 0);
578 __lasx_xvstelm_d(
src0, dst, 8, 1);
580 __lasx_xvstelm_d(
src0, dst, 0, 2);
581 __lasx_xvstelm_d(
src0, dst, 8, 3);
583 __lasx_xvstelm_d(
src2, dst, 0, 0);
584 __lasx_xvstelm_d(
src2, dst, 8, 1);
586 __lasx_xvstelm_d(
src2, dst, 0, 2);
587 __lasx_xvstelm_d(
src2, dst, 8, 3);
589 __lasx_xvstelm_d(src4, dst, 0, 0);
590 __lasx_xvstelm_d(src4, dst, 8, 1);
592 __lasx_xvstelm_d(src4, dst, 0, 2);
593 __lasx_xvstelm_d(src4, dst, 8, 3);
595 __lasx_xvstelm_d(src6, dst, 0, 0);
596 __lasx_xvstelm_d(src6, dst, 8, 1);
598 __lasx_xvstelm_d(src6, dst, 0, 2);
599 __lasx_xvstelm_d(src6, dst, 8, 3);
603 ptrdiff_t line_size,
int h)
614 uint8_t *dst,
int32_t dst_stride)
616 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9;
617 __m256i src10, src11, src12, src13, src14, src15, src16, src17;
618 __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7;
619 int32_t src_stride_2x = src_stride << 1;
620 int32_t src_stride_4x = src_stride << 2;
621 int32_t src_stride_3x = src_stride_2x + src_stride;
622 uint8_t* _src = (uint8_t*)
src;
624 src0 = __lasx_xvld(_src, 0);
626 src3 = __lasx_xvldx(_src, src_stride_3x);
627 _src += src_stride_4x;
628 src4 = __lasx_xvld(_src, 0);
629 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
630 src7 = __lasx_xvldx(_src, src_stride_3x);
631 _src += (1 - src_stride_4x);
632 src9 = __lasx_xvld(_src, 0);
633 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
635 src12 = __lasx_xvldx(_src, src_stride_3x);
636 _src += src_stride_4x;
637 src13 = __lasx_xvld(_src, 0);
638 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
640 src16 = __lasx_xvldx(_src, src_stride_3x);
641 _src += (src_stride_4x - 1);
642 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17);
646 DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10,
647 src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7);
648 DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02,
651 sum0, sum2, sum4, sum6);
653 sum1, sum3, sum5, sum7);
654 src8 = __lasx_xvilvl_h(src9, src4);
655 src9 = __lasx_xvilvh_h(src9, src4);
657 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2,
659 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6,
660 sum7, sum7, src4, src5, src6, src7);
661 DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9);
664 sum0, sum1, sum2, sum3);
665 DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9,
666 sum4, sum5, sum6, sum7);
667 DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1,
668 sum0, sum1, sum2, sum3);
669 DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1,
670 sum4, sum5, sum6, sum7);
671 DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2,
672 sum7, sum6, 2, sum0, sum1, sum2, sum3);
673 __lasx_xvstelm_d(sum0, dst, 0, 0);
674 __lasx_xvstelm_d(sum0, dst, 8, 1);
676 __lasx_xvstelm_d(sum1, dst, 0, 0);
677 __lasx_xvstelm_d(sum1, dst, 8, 1);
679 __lasx_xvstelm_d(sum2, dst, 0, 0);
680 __lasx_xvstelm_d(sum2, dst, 8, 1);
682 __lasx_xvstelm_d(sum3, dst, 0, 0);
683 __lasx_xvstelm_d(sum3, dst, 8, 1);
685 __lasx_xvstelm_d(sum0, dst, 0, 2);
686 __lasx_xvstelm_d(sum0, dst, 8, 3);
688 __lasx_xvstelm_d(sum1, dst, 0, 2);
689 __lasx_xvstelm_d(sum1, dst, 8, 3);
691 __lasx_xvstelm_d(sum2, dst, 0, 2);
692 __lasx_xvstelm_d(sum2, dst, 8, 3);
694 __lasx_xvstelm_d(sum3, dst, 0, 2);
695 __lasx_xvstelm_d(sum3, dst, 8, 3);
698 src0 = __lasx_xvld(_src, 0);
700 src3 = __lasx_xvldx(_src, src_stride_3x);
701 _src += src_stride_4x;
702 src4 = __lasx_xvld(_src, 0);
703 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
704 src7 = __lasx_xvldx(_src, src_stride_3x);
705 _src += (1 - src_stride_4x);
706 src9 = __lasx_xvld(_src, 0);
707 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
709 src12 = __lasx_xvldx(_src, src_stride_3x);
710 _src += src_stride_4x;
711 src13 = __lasx_xvld(_src, 0);
712 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
714 src16 = __lasx_xvldx(_src, src_stride_3x);
715 _src += (src_stride_4x - 1);
716 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17);
718 DUP4_ARG3(__lasx_xvpermi_q,
src0, src4, 0x02,
src1, src5, 0x02,
src2, src6, 0x02,
720 DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02,
721 src11, src15, 0x02, src4, src5, src6, src7);
722 DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9);
725 sum0, sum2, sum4, sum6);
727 sum1, sum3, sum5, sum7);
728 src8 = __lasx_xvilvl_h(src9, src4);
729 src9 = __lasx_xvilvh_h(src9, src4);
731 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2,
733 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6,
734 sum7, sum7, src4, src5, src6, src7);
735 DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9);
738 sum0, sum1, sum2, sum3);
739 DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9,
740 sum4, sum5, sum6, sum7);
741 DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1,
742 sum0, sum1, sum2, sum3);
743 DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1,
744 sum4, sum5, sum6, sum7);
745 DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2,
746 sum7, sum6, 2, sum0, sum1, sum2, sum3);
747 __lasx_xvstelm_d(sum0, dst, 0, 0);
748 __lasx_xvstelm_d(sum0, dst, 8, 1);
750 __lasx_xvstelm_d(sum1, dst, 0, 0);
751 __lasx_xvstelm_d(sum1, dst, 8, 1);
753 __lasx_xvstelm_d(sum2, dst, 0, 0);
754 __lasx_xvstelm_d(sum2, dst, 8, 1);
756 __lasx_xvstelm_d(sum3, dst, 0, 0);
757 __lasx_xvstelm_d(sum3, dst, 8, 1);
759 __lasx_xvstelm_d(sum0, dst, 0, 2);
760 __lasx_xvstelm_d(sum0, dst, 8, 3);
762 __lasx_xvstelm_d(sum1, dst, 0, 2);
763 __lasx_xvstelm_d(sum1, dst, 8, 3);
765 __lasx_xvstelm_d(sum2, dst, 0, 2);
766 __lasx_xvstelm_d(sum2, dst, 8, 3);
768 __lasx_xvstelm_d(sum3, dst, 0, 2);
769 __lasx_xvstelm_d(sum3, dst, 8, 3);
774 uint8_t *dst,
int32_t dst_stride)
776 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9;
777 __m256i src10, src11, src12, src13, src14, src15, src16, src17;
778 __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7;
779 int32_t src_stride_2x = src_stride << 1;
780 int32_t src_stride_4x = src_stride << 2;
781 int32_t src_stride_3x = src_stride_2x + src_stride;
782 uint8_t* _src = (uint8_t*)
src;
784 src0 = __lasx_xvld(_src, 0);
786 src3 = __lasx_xvldx(_src, src_stride_3x);
787 _src += src_stride_4x;
788 src4 = __lasx_xvld(_src, 0);
789 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
790 src7 = __lasx_xvldx(_src, src_stride_3x);
791 _src += (1 - src_stride_4x);
792 src9 = __lasx_xvld(_src, 0);
793 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
795 src12 = __lasx_xvldx(_src, src_stride_3x);
796 _src += src_stride_4x;
797 src13 = __lasx_xvld(_src, 0);
798 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
800 src16 = __lasx_xvldx(_src, src_stride_3x);
801 _src += (src_stride_4x - 1);
802 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17);
806 DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10,
807 src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7);
808 DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9);
811 sum0, sum2, sum4, sum6);
813 sum1, sum3, sum5, sum7);
814 src8 = __lasx_xvilvl_h(src9, src4);
815 src9 = __lasx_xvilvh_h(src9, src4);
817 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2,
819 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6,
820 sum7, sum7, src4, src5, src6, src7);
821 DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9);
824 sum0, sum1, sum2, sum3);
825 DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9,
826 sum4, sum5, sum6, sum7);
827 DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1,
828 sum0, sum1, sum2, sum3);
829 DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1,
830 sum4, sum5, sum6, sum7);
831 DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2,
832 sum7, sum6, 2, sum0, sum1, sum2, sum3);
833 __lasx_xvstelm_d(sum0, dst, 0, 0);
834 __lasx_xvstelm_d(sum0, dst, 8, 1);
836 __lasx_xvstelm_d(sum1, dst, 0, 0);
837 __lasx_xvstelm_d(sum1, dst, 8, 1);
839 __lasx_xvstelm_d(sum2, dst, 0, 0);
840 __lasx_xvstelm_d(sum2, dst, 8, 1);
842 __lasx_xvstelm_d(sum3, dst, 0, 0);
843 __lasx_xvstelm_d(sum3, dst, 8, 1);
845 __lasx_xvstelm_d(sum0, dst, 0, 2);
846 __lasx_xvstelm_d(sum0, dst, 8, 3);
848 __lasx_xvstelm_d(sum1, dst, 0, 2);
849 __lasx_xvstelm_d(sum1, dst, 8, 3);
851 __lasx_xvstelm_d(sum2, dst, 0, 2);
852 __lasx_xvstelm_d(sum2, dst, 8, 3);
854 __lasx_xvstelm_d(sum3, dst, 0, 2);
855 __lasx_xvstelm_d(sum3, dst, 8, 3);
859 const uint8_t *pixels,
860 ptrdiff_t line_size,
int h)
871 uint8_t *dst,
int32_t dst_stride)
874 __m256i src8, src9, src10, src11, src12, src13, src14, src15;
875 int32_t src_stride_2x = src_stride << 1;
876 int32_t src_stride_4x = src_stride << 2;
877 int32_t dst_stride_2x = dst_stride << 1;
878 int32_t dst_stride_4x = dst_stride << 2;
879 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
880 int32_t src_stride_3x = src_stride_2x + src_stride;
881 uint8_t* _src = (uint8_t*)
src;
883 src0 = __lasx_xvld(_src, 0);
885 src3 = __lasx_xvldx(_src, src_stride_3x);
886 _src += src_stride_4x;
887 src4 = __lasx_xvld(_src, 0);
888 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
889 src7 = __lasx_xvldx(_src, src_stride_3x);
890 _src += (1 - src_stride_4x);
891 src8 = __lasx_xvld(_src, 0);
892 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src9, src10);
893 src11 = __lasx_xvldx(_src, src_stride_3x);
894 _src += src_stride_4x;
895 src12 = __lasx_xvld(_src, 0);
896 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
898 src15 = __lasx_xvldx(_src, src_stride_3x);
902 DUP4_ARG2(__lasx_xvpickev_d, src9, src8, src11, src10, src13, src12, src15,
903 src14, src4, src5, src6, src7);
908 __lasx_xvstelm_d(
src0, dst, 0, 0);
909 __lasx_xvstelm_d(
src0, dst + dst_stride, 0, 1);
910 __lasx_xvstelm_d(
src0, dst + dst_stride_2x, 0, 2);
911 __lasx_xvstelm_d(
src0, dst + dst_stride_3x, 0, 3);
912 dst += dst_stride_4x;
913 __lasx_xvstelm_d(
src1, dst, 0, 0);
914 __lasx_xvstelm_d(
src1, dst + dst_stride, 0, 1);
915 __lasx_xvstelm_d(
src1, dst + dst_stride_2x, 0, 2);
916 __lasx_xvstelm_d(
src1, dst + dst_stride_3x, 0, 3);
921 uint8_t *dst,
int32_t dst_stride)
924 int32_t src_stride_2x = src_stride << 1;
925 int32_t src_stride_3x = src_stride_2x + src_stride;
926 int32_t dst_stride_2x = dst_stride << 1;
927 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
928 uint8_t *_src = (uint8_t*)
src;
930 src0 = __lasx_xvld(_src, 0);
932 src3 = __lasx_xvldx(_src, src_stride_3x);
934 src4 = __lasx_xvld(_src, 0);
935 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
936 src7 = __lasx_xvldx(_src, src_stride_3x);
941 __lasx_xvstelm_d(
src0, dst, 0, 0);
942 __lasx_xvstelm_d(
src0, dst + dst_stride, 0, 1);
943 __lasx_xvstelm_d(
src0, dst + dst_stride_2x, 0, 2);
944 __lasx_xvstelm_d(
src0, dst + dst_stride_3x, 0, 3);
948 ptrdiff_t line_size,
int h)
958 uint8_t *dst,
int32_t dst_stride)
960 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
961 int32_t src_stride_2x = src_stride << 1;
962 int32_t src_stride_4x = src_stride << 2;
963 int32_t dst_stride_2x = dst_stride << 1;
964 int32_t dst_stride_4x = dst_stride << 2;
965 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
966 int32_t src_stride_3x = src_stride_2x + src_stride;
967 uint8_t* _src = (uint8_t*)
src;
969 src0 = __lasx_xvld(_src, 0);
971 src3 = __lasx_xvldx(_src, src_stride_3x);
972 _src += src_stride_4x;
973 src4 = __lasx_xvld(_src, 0);
974 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
975 src7 = __lasx_xvldx(_src, src_stride_3x);
976 _src += src_stride_4x;
977 src8 = __lasx_xvld(_src, 0);
981 DUP4_ARG2(__lasx_xvpickev_d, src5, src4, src6, src5, src7, src6, src8, src7,
982 src4, src5, src6, src7);
987 __lasx_xvstelm_d(
src0, dst, 0, 0);
988 __lasx_xvstelm_d(
src0, dst + dst_stride, 0, 1);
989 __lasx_xvstelm_d(
src0, dst + dst_stride_2x, 0, 2);
990 __lasx_xvstelm_d(
src0, dst + dst_stride_3x, 0, 3);
991 dst += dst_stride_4x;
992 __lasx_xvstelm_d(
src1, dst, 0, 0);
993 __lasx_xvstelm_d(
src1, dst + dst_stride, 0, 1);
994 __lasx_xvstelm_d(
src1, dst + dst_stride_2x, 0, 2);
995 __lasx_xvstelm_d(
src1, dst + dst_stride_3x, 0, 3);
999 uint8_t *dst,
int32_t dst_stride)
1002 int32_t src_stride_2x = src_stride << 1;
1003 int32_t src_stride_4x = src_stride << 2;
1004 int32_t dst_stride_2x = dst_stride << 1;
1005 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
1006 int32_t src_stride_3x = src_stride_2x + src_stride;
1007 uint8_t* _src = (uint8_t*)
src;
1009 src0 = __lasx_xvld(_src, 0);
1010 DUP4_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, _src,
1011 src_stride_3x, _src, src_stride_4x,
src1,
src2, src3, src4);
1016 __lasx_xvstelm_d(
src0, dst, 0, 0);
1017 __lasx_xvstelm_d(
src0, dst + dst_stride, 0, 1);
1018 __lasx_xvstelm_d(
src0, dst + dst_stride_2x, 0, 2);
1019 __lasx_xvstelm_d(
src0, dst + dst_stride_3x, 0, 3);
1023 ptrdiff_t line_size,
int h)
1027 }
else if (
h == 4) {
1033 uint8_t *dst,
int32_t dst_stride)
1035 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7;
1036 __m256i src8, src9, src10, src11, src12, src13, src14, src15, src16, src17;
1037 __m256i sum0, sum1, sum2, sum3;
1038 int32_t src_stride_2x = src_stride << 1;
1039 int32_t src_stride_4x = src_stride << 2;
1040 int32_t dst_stride_2x = dst_stride << 1;
1041 int32_t dst_stride_4x = dst_stride << 2;
1042 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
1043 int32_t src_stride_3x = src_stride_2x + src_stride;
1044 uint8_t* _src = (uint8_t*)
src;
1046 src0 = __lasx_xvld(_src, 0);
1048 src3 = __lasx_xvldx(_src, src_stride_3x);
1049 _src += src_stride_4x;
1050 src4 = __lasx_xvld(_src, 0);
1051 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
1052 src7 = __lasx_xvldx(_src, src_stride_3x);
1053 _src += (1 - src_stride_4x);
1054 src9 = __lasx_xvld(_src, 0);
1055 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
1057 src12 = __lasx_xvldx(_src, src_stride_3x);
1058 _src += src_stride_4x;
1059 src13 = __lasx_xvld(_src, 0);
1060 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
1062 src16 = __lasx_xvldx(_src, src_stride_3x);
1063 _src += (src_stride_4x - 1);
1064 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17);
1068 DUP4_ARG2(__lasx_xvilvl_b, src13, src4, src14, src5, src15, src6, src16, src7,
1069 src4, src5, src6, src7);
1070 src8 = __lasx_xvilvl_b(src17, src8);
1073 DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6,
1074 0x20, src8, src7, 0x20, src4, src5, src6, src7);
1077 DUP4_ARG2(__lasx_xvhaddw_hu_bu, src4, src4, src5, src5, src6, src6,
1078 src7, src7, src4, src5, src6, src7);
1080 sum0, sum1, sum2, sum3);
1081 DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1,
1082 sum0, sum1, sum2, sum3);
1083 DUP2_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum0, sum1);
1084 __lasx_xvstelm_d(sum0, dst, 0, 0);
1085 __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2);
1086 __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1);
1087 __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3);
1088 dst += dst_stride_4x;
1089 __lasx_xvstelm_d(sum1, dst, 0, 0);
1090 __lasx_xvstelm_d(sum1, dst + dst_stride, 0, 2);
1091 __lasx_xvstelm_d(sum1, dst + dst_stride_2x, 0, 1);
1092 __lasx_xvstelm_d(sum1, dst + dst_stride_3x, 0, 3);
1096 uint8_t *dst,
int32_t dst_stride)
1098 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7;
1099 __m256i src8, src9, sum0, sum1;
1100 int32_t src_stride_2x = src_stride << 1;
1101 int32_t src_stride_4x = src_stride << 2;
1102 int32_t dst_stride_2x = dst_stride << 1;
1103 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
1104 int32_t src_stride_3x = src_stride_2x + src_stride;
1105 uint8_t *_src = (uint8_t*)
src;
1107 src0 = __lasx_xvld(_src, 0);
1109 src3 = __lasx_xvldx(_src, src_stride_3x);
1111 src5 = __lasx_xvld(_src, 0);
1112 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src6, src7);
1113 src8 = __lasx_xvldx(_src, src_stride_3x);
1114 _src += (src_stride_4x - 1);
1115 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src4, src9);
1119 src4 = __lasx_xvilvl_b(src9, src4);
1125 sum0 = __lasx_xvaddi_hu(sum0, 1);
1126 sum1 = __lasx_xvaddi_hu(sum1, 1);
1127 sum0 = __lasx_xvsrani_b_h(sum1, sum0, 2);
1128 __lasx_xvstelm_d(sum0, dst, 0, 0);
1129 __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2);
1130 __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1);
1131 __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3);
1135 ptrdiff_t line_size,
int h)
1139 }
else if (
h == 4) {
1145 uint8_t *dst,
int32_t dst_stride,
1148 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9;
1149 __m256i src10, src11, src12, src13, src14, src15, src16, src17;
1150 __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7;
1152 int32_t src_stride_2x = src_stride << 1;
1153 int32_t src_stride_4x = src_stride << 2;
1154 int32_t src_stride_3x = src_stride_2x + src_stride;
1155 uint8_t* _src = (uint8_t*)
src;
1157 for (loop_cnt = (
height >> 3); loop_cnt--;) {
1158 src0 = __lasx_xvld(_src, 0);
1160 src3 = __lasx_xvldx(_src, src_stride_3x);
1161 _src += src_stride_4x;
1162 src4 = __lasx_xvld(_src, 0);
1163 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6);
1164 src7 = __lasx_xvldx(_src, src_stride_3x);
1165 _src += (1 - src_stride_4x);
1166 src9 = __lasx_xvld(_src, 0);
1167 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
1169 src12 = __lasx_xvldx(_src, src_stride_3x);
1170 _src += src_stride_4x;
1171 src13 = __lasx_xvld(_src, 0);
1172 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
1174 src16 = __lasx_xvldx(_src, src_stride_3x);
1175 _src += (src_stride_4x - 1);
1176 DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17);
1180 DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10,
1181 src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7);
1182 DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02,
1186 src3, sum0, sum2, sum4, sum6);
1188 src3, sum1, sum3, sum5, sum7);
1189 src8 = __lasx_xvilvl_h(src9, src4);
1190 src9 = __lasx_xvilvh_h(src9, src4);
1192 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2,
1194 DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6,
1195 sum7, sum7, src4, src5, src6, src7);
1196 DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9);
1199 src5, sum0, sum1, sum2, sum3);
1200 DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7,
1201 src9, sum4, sum5, sum6, sum7);
1202 DUP4_ARG3(__lasx_xvsrarni_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5,
1203 sum4, 2, sum7, sum6, 2, sum0, sum1, sum2, sum3);
1204 __lasx_xvstelm_d(sum0, dst, 0, 0);
1205 __lasx_xvstelm_d(sum0, dst, 8, 1);
1207 __lasx_xvstelm_d(sum1, dst, 0, 0);
1208 __lasx_xvstelm_d(sum1, dst, 8, 1);
1210 __lasx_xvstelm_d(sum2, dst, 0, 0);
1211 __lasx_xvstelm_d(sum2, dst, 8, 1);
1213 __lasx_xvstelm_d(sum3, dst, 0, 0);
1214 __lasx_xvstelm_d(sum3, dst, 8, 1);
1216 __lasx_xvstelm_d(sum0, dst, 0, 2);
1217 __lasx_xvstelm_d(sum0, dst, 8, 3);
1219 __lasx_xvstelm_d(sum1, dst, 0, 2);
1220 __lasx_xvstelm_d(sum1, dst, 8, 3);
1222 __lasx_xvstelm_d(sum2, dst, 0, 2);
1223 __lasx_xvstelm_d(sum2, dst, 8, 3);
1225 __lasx_xvstelm_d(sum3, dst, 0, 2);
1226 __lasx_xvstelm_d(sum3, dst, 8, 3);
1232 ptrdiff_t line_size,
int h)
1238 uint8_t *dst,
int32_t dst_stride,
1241 __m256i
src0,
src1,
src2, src3, src4, src5, src6, src7;
1242 __m256i src8, src9, sum0, sum1;
1244 int32_t src_stride_2x = src_stride << 1;
1245 int32_t src_stride_4x = src_stride << 2;
1246 int32_t dst_stride_2x = dst_stride << 1;
1247 int32_t dst_stride_4x = dst_stride << 2;
1248 int32_t dst_stride_3x = dst_stride_2x + dst_stride;
1249 int32_t src_stride_3x = src_stride_2x + src_stride;
1250 uint8_t* _src = (uint8_t*)
src;
1255 for (loop_cnt = (
height >> 2); loop_cnt--;) {
1256 src1 = __lasx_xvld(_src, 0);
1257 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x,
src2, src3);
1258 src4 = __lasx_xvldx(_src, src_stride_3x);
1260 src6 = __lasx_xvld(_src, 0);
1261 DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src7, src8);
1262 src9 = __lasx_xvldx(_src, src_stride_3x);
1263 _src += (src_stride_4x - 1);
1266 src5 = __lasx_xvilvl_b(src9, src4);
1272 sum0 = __lasx_xvsrarni_b_h(sum1, sum0, 2);
1273 __lasx_xvstelm_d(sum0, dst, 0, 0);
1274 __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2);
1275 __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1);
1276 __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3);
1277 dst += dst_stride_4x;
1284 ptrdiff_t line_size,
int h)