This patch does not apply against current master.
I've attached an alternative patch that works for me on osx ppc.
I can't test my patch with clang, can someone else do it?
Pavel.
On 07/11/2016 07:56 PM, Jing Yu wrote:
Add #ifdef __APPLE__ to wrap around non-standard assembly code to make it
compatible with old platform.
Is it ok for trunk?
Thanks!
---
libavcodec/ppc/asm.S | 4 ++++
libavcodec/ppc/fft_altivec.S | 32 ++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/libavcodec/ppc/asm.S b/libavcodec/ppc/asm.S
index 700aa0d..baf68b0 100644
--- a/libavcodec/ppc/asm.S
+++ b/libavcodec/ppc/asm.S
@@ -53,7 +53,11 @@ L(\name):
.endm
.macro movrel rd, sym, gp
+#ifdef __APPLE__
+ ld \rd, \sym@got(r2)
+#else
ld \rd, \sym@got(2)
+#endif
.endm
.macro get_got rd
diff --git a/libavcodec/ppc/fft_altivec.S b/libavcodec/ppc/fft_altivec.S
index e0149a4..a6e144d 100644
--- a/libavcodec/ppc/fft_altivec.S
+++ b/libavcodec/ppc/fft_altivec.S
@@ -354,14 +354,24 @@ fft_data:
.macro fft_calc interleave
extfunc ff_fft_calc\interleave\()_altivec
mflr r0
+#ifdef __APPLE__
+ stp r0, 2*PS(r1)
+ stpu r1, -(160+16*PS)(r1)
+#else
stp r0, 2*PS(1)
stpu r1, -(160+16*PS)(1)
+#endif
get_got r11
addi r6, r1, 16*PS
stvm r6, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29
mfvrsave r0
+#ifdef __APPLE__
+ stw r0, 15*PS(r1)
+ li r6, 0xfffffffc
+#else
stw r0, 15*PS(1)
li r6, -4 #0xfffffffc
+#endif
mtvrsave r6
movrel r6, fft_data, r11
@@ -372,7 +382,11 @@ extfunc ff_fft_calc\interleave\()_altivec
movrel r12, X(ff_cos_tabs), r11
movrel r6, fft_dispatch_tab\interleave\()_altivec, r11
+#ifdef __APPLE__
+ lwz r3, 0(r3)
+#else
lwz r3, 0(3)
+#endif
subi r3, r3, 2
slwi r3, r3, 2+ARCH_PPC64
lpx r3, r3, r6
@@ -382,10 +396,19 @@ extfunc ff_fft_calc\interleave\()_altivec
addi r6, r1, 16*PS
lvm r6, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29
+#ifdef __APPLE__
+ lwz r6, 15*PS(r1)
+#else
lwz r6, 15*PS(1)
+#endif
mtvrsave r6
+#ifdef __APPLE__
+ lp r1, 0(r1)
+ lp r0, 2*PS(r1)
+#else
lp r1, 0(1)
lp r0, 2*PS(1)
+#endif
mtlr r0
blr
.endm
@@ -393,15 +416,24 @@ extfunc ff_fft_calc\interleave\()_altivec
.macro DECL_FFT suffix, bits, n, n2, n4
fft\n\suffix\()_altivec:
mflr r0
+#ifdef __APPLE__
+ stp r0,PS*(\bits-3)(r1)
+#else
stp r0,PS*(\bits-3)(1)
+#endif
bl fft\n2\()_altivec
addi2 r3,\n*4
bl fft\n4\()_altivec
addi2 r3,\n*2
bl fft\n4\()_altivec
addi2 r3,\n*-6
+#ifdef __APPLE__
+ lp r0,PS*(\bits-3)(r1)
+ lp r4,\bits*PS(r12)
+#else
lp r0,PS*(\bits-3)(1)
lp r4,\bits*PS(12)
+#endif
mtlr r0
li r5,\n/16
b fft_pass\suffix\()_altivec
>From 97965f39a23835b4ecba6b1ba8cd694452c69168 Mon Sep 17 00:00:00 2001
From: Pavel Koshevoy <pkoshe...@gmail.com>
Date: Mon, 11 Jul 2016 22:38:55 -0600
Subject: [PATCH] Restore compatibility with powerpc-apple-darwin9-gcc-4.2.1
... and attempt to preserve compatibility with clang that was
introduced in 311a953c76081fca99b872629d248f9d69ebc0c3 (untested)
---
libavcodec/ppc/asm.S | 8 +++++++-
libavcodec/ppc/fft_altivec.S | 26 +++++++++++++++-----------
2 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/libavcodec/ppc/asm.S b/libavcodec/ppc/asm.S
index 700aa0d..6222b8b 100644
--- a/libavcodec/ppc/asm.S
+++ b/libavcodec/ppc/asm.S
@@ -24,6 +24,12 @@
#define JOIN(a, b) GLUE(a, b)
#define X(s) JOIN(EXTERN_ASM, s)
+#if __APPLE__
+#define R(n) r ## n
+#else
+#define R(n) n
+#endif
+
#if ARCH_PPC64
#define PTR .quad
@@ -53,7 +59,7 @@ L(\name):
.endm
.macro movrel rd, sym, gp
- ld \rd, \sym@got(2)
+ ld \rd, \sym@got(R(2))
.endm
.macro get_got rd
diff --git a/libavcodec/ppc/fft_altivec.S b/libavcodec/ppc/fft_altivec.S
index e0149a4..8cd68d6 100644
--- a/libavcodec/ppc/fft_altivec.S
+++ b/libavcodec/ppc/fft_altivec.S
@@ -354,14 +354,18 @@ fft_data:
.macro fft_calc interleave
extfunc ff_fft_calc\interleave\()_altivec
mflr r0
- stp r0, 2*PS(1)
- stpu r1, -(160+16*PS)(1)
+ stp r0, 2*PS(R(1))
+ stpu r1, -(160+16*PS)(R(1))
get_got r11
addi r6, r1, 16*PS
stvm r6, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29
mfvrsave r0
- stw r0, 15*PS(1)
- li r6, -4 #0xfffffffc
+ stw r0, 15*PS(R(1))
+#if __APPLE__
+ li r6, 0xfffffffc
+#else
+ li r6, -4
+#endif
mtvrsave r6
movrel r6, fft_data, r11
@@ -372,7 +376,7 @@ extfunc ff_fft_calc\interleave\()_altivec
movrel r12, X(ff_cos_tabs), r11
movrel r6, fft_dispatch_tab\interleave\()_altivec, r11
- lwz r3, 0(3)
+ lwz r3, 0(R(3))
subi r3, r3, 2
slwi r3, r3, 2+ARCH_PPC64
lpx r3, r3, r6
@@ -382,10 +386,10 @@ extfunc ff_fft_calc\interleave\()_altivec
addi r6, r1, 16*PS
lvm r6, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29
- lwz r6, 15*PS(1)
+ lwz r6, 15*PS(R(1))
mtvrsave r6
- lp r1, 0(1)
- lp r0, 2*PS(1)
+ lp r1, 0(R(1))
+ lp r0, 2*PS(R(1))
mtlr r0
blr
.endm
@@ -393,15 +397,15 @@ extfunc ff_fft_calc\interleave\()_altivec
.macro DECL_FFT suffix, bits, n, n2, n4
fft\n\suffix\()_altivec:
mflr r0
- stp r0,PS*(\bits-3)(1)
+ stp r0,PS*(\bits-3)(R(1))
bl fft\n2\()_altivec
addi2 r3,\n*4
bl fft\n4\()_altivec
addi2 r3,\n*2
bl fft\n4\()_altivec
addi2 r3,\n*-6
- lp r0,PS*(\bits-3)(1)
- lp r4,\bits*PS(12)
+ lp r0,PS*(\bits-3)(R(1))
+ lp r4,\bits*PS(R(12))
mtlr r0
li r5,\n/16
b fft_pass\suffix\()_altivec
--
2.6.6
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel