63 lines
3.2 KiB
C
63 lines
3.2 KiB
C
/*
|
|
* 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_
|