mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-26 09:12:33 +00:00
ppc: fix Altivec build with old compilers
The vec_splat() intrinsic requires a constant argument for the element number, and the code relies on the compiler unrolling the loop to provide this. Manually unrolling the loop avoids this reliance and works with all compilers. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
643933f51d
commit
f79364b2c3
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user