Source code

Revision control

Copy as Markdown

Other Tools

/*
* Copyright (c) 2022 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef VPX_VPX_DSP_LOONGARCH_VARIANCE_LSX_H_
#define VPX_VPX_DSP_LOONGARCH_VARIANCE_LSX_H_
#include "vpx_util/loongson_intrinsics.h"
#define HADD_SW_S32(in0, in1) \
do { \
__m128i res0_m; \
\
res0_m = __lsx_vhaddw_d_w(in0, in0); \
res0_m = __lsx_vhaddw_q_d(res0_m, res0_m); \
in1 = __lsx_vpickve2gr_w(res0_m, 0); \
} while (0)
#define HORIZ_2TAP_FILT_UH(in0, in1, mask, coeff, shift, in2) \
do { \
__m128i tmp0_m, tmp1_m; \
\
tmp0_m = __lsx_vshuf_b(in1, in0, mask); \
tmp1_m = __lsx_vdp2_h_bu(tmp0_m, coeff); \
in2 = __lsx_vsrari_h(tmp1_m, shift); \
} while (0)
#define CALC_MSE_B(src, ref, var) \
do { \
__m128i src_l0_m, src_l1_m; \
__m128i res_l0_m, res_l1_m; \
\
src_l0_m = __lsx_vilvl_b(src, ref); \
src_l1_m = __lsx_vilvh_b(src, ref); \
DUP2_ARG2(__lsx_vhsubw_hu_bu, src_l0_m, src_l0_m, src_l1_m, src_l1_m, \
res_l0_m, res_l1_m); \
var = __lsx_vdp2add_w_h(var, res_l0_m, res_l0_m); \
var = __lsx_vdp2add_w_h(var, res_l1_m, res_l1_m); \
} while (0)
#define CALC_MSE_AVG_B(src, ref, var, sub) \
do { \
__m128i src_l0_m, src_l1_m; \
__m128i res_l0_m, res_l1_m; \
\
src_l0_m = __lsx_vilvl_b(src, ref); \
src_l1_m = __lsx_vilvh_b(src, ref); \
DUP2_ARG2(__lsx_vhsubw_hu_bu, src_l0_m, src_l0_m, src_l1_m, src_l1_m, \
res_l0_m, res_l1_m); \
var = __lsx_vdp2add_w_h(var, res_l0_m, res_l0_m); \
var = __lsx_vdp2add_w_h(var, res_l1_m, res_l1_m); \
sub = __lsx_vadd_h(sub, res_l0_m); \
sub = __lsx_vadd_h(sub, res_l1_m); \
} while (0)
#endif // VPX_VPX_DSP_LOONGARCH_VARIANCE_LSX_H_