static void CollectHistogram(const uint8_t* ref, const uint8_t* pred, int start_block, int end_block, VP8Histogram* const histo) { int j; int distribution[MAX_COEFF_THRESH + 1] = { 0 }; for (j = start_block; j < end_block; ++j) { int16_t out[16]; VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out); { int k; v8i16 coeff0, coeff1; const v8i16 zero = { 0 }; const v8i16 max_coeff_thr = __msa_ldi_h(MAX_COEFF_THRESH); LD_SH2(&out[0], 8, coeff0, coeff1); coeff0 = __msa_add_a_h(coeff0, zero); coeff1 = __msa_add_a_h(coeff1, zero); SRAI_H2_SH(coeff0, coeff1, 3); coeff0 = __msa_min_s_h(coeff0, max_coeff_thr); coeff1 = __msa_min_s_h(coeff1, max_coeff_thr); ST_SH2(coeff0, coeff1, &out[0], 8); for (k = 0; k < 16; ++k) { ++distribution[out[k]]; } } } VP8SetHistogramData(distribution, histo); }
static uint32_t sub_pixel_sse_diff_4width_h_msa(const uint8_t *src, int32_t src_stride, const uint8_t *dst, int32_t dst_stride, const uint8_t *filter, int32_t height, int32_t *diff) { int16_t filtval; uint32_t loop_cnt; uint32_t ref0, ref1, ref2, ref3; v16u8 filt0, ref = { 0 }; v16i8 src0, src1, src2, src3; v16i8 mask = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 }; v8u16 vec0, vec1, vec2, vec3; v8u16 const255; v8i16 avg = { 0 }; v4i32 vec, var = { 0 }; filtval = LH(filter); filt0 = (v16u8)__msa_fill_h(filtval); const255 = (v8u16)__msa_ldi_h(255); for (loop_cnt = (height >> 2); loop_cnt--;) {