ppc: Add vpx_sad64/32/16x64/32/16_avg_vsx
Change-Id: Ic9639b1331d8c5cbc207c2a036891ff0137fc56f
This commit is contained in:
parent
6b9d130214
commit
bcbc3929ae
@ -934,5 +934,17 @@ const SadMxNParam vsx_tests[] = {
|
||||
SadMxNParam(16, 8, &vpx_sad16x8_vsx),
|
||||
};
|
||||
INSTANTIATE_TEST_CASE_P(VSX, SADTest, ::testing::ValuesIn(vsx_tests));
|
||||
|
||||
const SadMxNAvgParam avg_vsx_tests[] = {
|
||||
SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_vsx),
|
||||
SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_vsx),
|
||||
SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_vsx),
|
||||
SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_vsx),
|
||||
SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_vsx),
|
||||
SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_vsx),
|
||||
SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_vsx),
|
||||
SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_vsx),
|
||||
};
|
||||
INSTANTIATE_TEST_CASE_P(VSX, SADavgTest, ::testing::ValuesIn(avg_vsx_tests));
|
||||
#endif // HAVE_VSX
|
||||
} // namespace
|
||||
|
@ -10,9 +10,12 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "./vpx_dsp_rtcd.h"
|
||||
|
||||
#include "vpx_dsp/ppc/types_vsx.h"
|
||||
|
||||
#include "vpx/vpx_integer.h"
|
||||
#include "vpx_ports/mem.h"
|
||||
|
||||
#define PROCESS16(offset) \
|
||||
v_a = vec_vsx_ld(offset, a); \
|
||||
@ -100,3 +103,45 @@ SAD32(32);
|
||||
SAD32(64);
|
||||
SAD64(32);
|
||||
SAD64(64);
|
||||
|
||||
#define SAD16AVG(height) \
|
||||
unsigned int vpx_sad16x##height##_avg_vsx( \
|
||||
const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, \
|
||||
const uint8_t *second_pred) { \
|
||||
DECLARE_ALIGNED(16, uint8_t, comp_pred[16 * height]); \
|
||||
vpx_comp_avg_pred_vsx(comp_pred, second_pred, 16, height, ref, \
|
||||
ref_stride); \
|
||||
\
|
||||
return vpx_sad16x##height##_vsx(src, src_stride, comp_pred, 16); \
|
||||
}
|
||||
|
||||
#define SAD32AVG(height) \
|
||||
unsigned int vpx_sad32x##height##_avg_vsx( \
|
||||
const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, \
|
||||
const uint8_t *second_pred) { \
|
||||
DECLARE_ALIGNED(32, uint8_t, comp_pred[32 * height]); \
|
||||
vpx_comp_avg_pred_vsx(comp_pred, second_pred, 32, height, ref, \
|
||||
ref_stride); \
|
||||
\
|
||||
return vpx_sad32x##height##_vsx(src, src_stride, comp_pred, 32); \
|
||||
}
|
||||
|
||||
#define SAD64AVG(height) \
|
||||
unsigned int vpx_sad64x##height##_avg_vsx( \
|
||||
const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, \
|
||||
const uint8_t *second_pred) { \
|
||||
DECLARE_ALIGNED(64, uint8_t, comp_pred[64 * height]); \
|
||||
vpx_comp_avg_pred_vsx(comp_pred, second_pred, 64, height, ref, \
|
||||
ref_stride); \
|
||||
\
|
||||
return vpx_sad64x##height##_vsx(src, src_stride, comp_pred, 64); \
|
||||
}
|
||||
|
||||
SAD16AVG(8);
|
||||
SAD16AVG(16);
|
||||
SAD16AVG(32);
|
||||
SAD32AVG(16);
|
||||
SAD32AVG(32);
|
||||
SAD32AVG(64);
|
||||
SAD64AVG(32);
|
||||
SAD64AVG(64);
|
||||
|
@ -778,28 +778,28 @@ if (vpx_config("CONFIG_VP9_ENCODER") eq "yes") {
|
||||
} # CONFIG_VP9_ENCODER
|
||||
|
||||
add_proto qw/unsigned int vpx_sad64x64_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad64x64_avg avx2 msa sse2/;
|
||||
specialize qw/vpx_sad64x64_avg avx2 msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad64x32_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad64x32_avg avx2 msa sse2/;
|
||||
specialize qw/vpx_sad64x32_avg avx2 msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad32x64_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad32x64_avg avx2 msa sse2/;
|
||||
specialize qw/vpx_sad32x64_avg avx2 msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad32x32_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad32x32_avg avx2 msa sse2/;
|
||||
specialize qw/vpx_sad32x32_avg avx2 msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad32x16_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad32x16_avg avx2 msa sse2/;
|
||||
specialize qw/vpx_sad32x16_avg avx2 msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad16x32_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad16x32_avg msa sse2/;
|
||||
specialize qw/vpx_sad16x32_avg msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad16x16_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad16x16_avg msa sse2/;
|
||||
specialize qw/vpx_sad16x16_avg msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad16x8_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad16x8_avg msa sse2/;
|
||||
specialize qw/vpx_sad16x8_avg msa sse2 vsx/;
|
||||
|
||||
add_proto qw/unsigned int vpx_sad8x16_avg/, "const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred";
|
||||
specialize qw/vpx_sad8x16_avg msa sse2/;
|
||||
|
Loading…
x
Reference in New Issue
Block a user