aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2018-12-04 16:29:40 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2019-03-24 10:38:51 +0100
commit04fe02bd80bc8dddd1e9d5a1cc9d336fc3a5a6da (patch)
tree42a59e5f5c6e42a0b753882457e2c09abec402d7
parenta6d25b6ba54826c545febc55ce77feb15f61efef (diff)
downloadffmpeg-04fe02bd80bc8dddd1e9d5a1cc9d336fc3a5a6da.tar.gz
avcodec/ppc/hevcdsp: Fix build failures with powerpc-linux-gnu-gcc-4.8 with --disable-optimizations
The affected functions could also be changed into macros, this is the smaller change to fix it though. And avoids (probably) less readable macros The extra code should be optimized out when optimizations are done as all values are known at build after inlining. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 2c64a6bcd280c64997e6c4799bc89c0a9393bbf3) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/ppc/hevcdsp.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/libavcodec/ppc/hevcdsp.c b/libavcodec/ppc/hevcdsp.c
index 4b1037d792..42a5bc487d 100644
--- a/libavcodec/ppc/hevcdsp.c
+++ b/libavcodec/ppc/hevcdsp.c
@@ -57,7 +57,13 @@ static void transform4x4(vec_s16 src_01, vec_s16 src_23, vec_s32 res[4],
e1 = vec_msums(src_02, trans4[2], zero);
o1 = vec_msums(src_13, trans4[3], zero);
- add = vec_sl(vec_splat_s32(1), vec_splat_u32(shift - 1));
+ switch(shift) {
+ case 7: add = vec_sl(vec_splat_s32(1), vec_splat_u32( 7 - 1)); break;
+ case 10: add = vec_sl(vec_splat_s32(1), vec_splat_u32(10 - 1)); break;
+ case 12: add = vec_sl(vec_splat_s32(1), vec_splat_u32(12 - 1)); break;
+ default: abort();
+ }
+
e0 = vec_add(e0, add);
e1 = vec_add(e1, add);
@@ -70,7 +76,14 @@ static void transform4x4(vec_s16 src_01, vec_s16 src_23, vec_s32 res[4],
static void scale(vec_s32 res[4], vec_s16 res_packed[2], int shift)
{
int i;
- vec_u32 v_shift = vec_splat_u32(shift);
+ vec_u32 v_shift;
+
+ switch(shift) {
+ case 7: v_shift = vec_splat_u32(7) ; break;
+ case 10: v_shift = vec_splat_u32(10); break;
+ case 12: v_shift = vec_splat_u32(12); break;
+ default: abort();
+ }
for (i = 0; i < 4; i++)
res[i] = vec_sra(res[i], v_shift);