[FFmpeg-devel] [PATCH] Fix broken osx powerpc build

Jing Yu jingyu at google.com
Tue Jul 12 08:41:43 EEST 2016


I have tested your patch with LLVM and GCC-4.9.1 on Ubuntu
powerpc64le. Both work.
I don't have the old Apple Power machine though.

On Mon, Jul 11, 2016 at 9:43 PM, Pavel Koshevoy <pkoshevoy at gmail.com> wrote:
> 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 at got(r2)
>> +#else
>>       ld      \rd, \sym at 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
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list