diff --git a/libavcodec/ppc/fmtconvert_altivec.c b/libavcodec/ppc/fmtconvert_altivec.c index 129891ad9b..68e5e0079e 100644 --- a/libavcodec/ppc/fmtconvert_altivec.c +++ b/libavcodec/ppc/fmtconvert_altivec.c @@ -83,6 +83,12 @@ static void float_to_int16_altivec(int16_t *dst, const float *src, long len) } } +#define VSTE_INC(dst, v, elem, inc) do { \ + vector signed short s = vec_splat(v, elem); \ + vec_ste(s, 0, dst); \ + dst += inc; \ + } while (0) + static void float_to_int16_stride_altivec(int16_t *dst, const float *src, long len, int stride) { @@ -91,11 +97,14 @@ static void float_to_int16_stride_altivec(int16_t *dst, const float *src, for (i = 0; i < len - 7; i += 8) { d = float_to_int16_one_altivec(src + i); - for (j = 0; j < 8; j++) { - s = vec_splat(d, j); - vec_ste(s, 0, dst); - dst += stride; - } + VSTE_INC(dst, d, 0, stride); + VSTE_INC(dst, d, 1, stride); + VSTE_INC(dst, d, 2, stride); + VSTE_INC(dst, d, 3, stride); + VSTE_INC(dst, d, 4, stride); + VSTE_INC(dst, d, 5, stride); + VSTE_INC(dst, d, 6, stride); + VSTE_INC(dst, d, 7, stride); } }