[FFmpeg-devel] [PATCH] avutil: disable arch specific intmath routines if optimizations are disabled

Michael Niedermayer michael at niedermayer.cc
Tue Feb 16 18:57:20 CET 2016


On Tue, Feb 16, 2016 at 11:00:38PM +0800, Yu Xiaolei wrote:
> On Tue, Feb 16, 2016 at 9:01 PM, Michael Niedermayer <michael at niedermayer.cc
> > wrote:
> 
> > On Tue, Feb 16, 2016 at 02:40:10PM +0800, Xiaolei Yu wrote:
> > > Current intmath routines for arm require inter-procedure constant
> > propagation
> > > and fail to compile when optimizations are disabled.
> > > ---
> > >  configure           | 1 +
> > >  libavutil/intmath.h | 2 ++
> > >  2 files changed, 3 insertions(+)
> >
> > on arm without opts and this patch i get
> > src/libavcodec/arm/aac.h: In function ‘VMUL4S’:
> > src/libavcodec/arm/aac.h:102:5: error: can't find a register in class
> > ‘LO_REGS’ while reloading ‘asm’
> > src/libavcodec/arm/aac.h:102:5: error: ‘asm’ operand has impossible
> > constraints
> > make: *** [libavcodec/aacdec.o] Error 1
> >
> >
> This error seems unrelated to the patch, but I am not sure as I am only
> building some selected codecs.
> Can you build again without the patch?
> 
> Without the patch I get:
> In file included from src/libavutil/intmath.h:30:0,
>                  from src/libavutil/common.h:106,
>                  from src/libavutil/avutil.h:288,
>                  from src/libavutil/samplefmt.h:24,
>                  from src/libavcodec/avcodec.h:31,
>                  from src/libavcodec/internal.h:33,
>                  from src/libavcodec/h264_direct.c:28:
> src/libavutil/arm/intmath.h: In function 'get_scale_factor':
> src/libavutil/arm/intmath.h:69:5: warning: asm operand 2 probably doesn't
> match constraints
>      __asm__ ("ssat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p+1));
>      ^
> src/libavutil/arm/intmath.h:69:5: error: impossible constraint in 'asm'

yes, its worse without teh patch


> 
> on x86 build passes with and without the patch here
> > with what compiler is this needed ?
> >
> >
> Yes, x86 builds fine without this patch. But the underlying problem is not
> arch specific and may be encountered in other inline asm. I think current
> patch is more consistent if we consider these routines as manual
> optimizations.

i dont uderstand
the problem is specific to 2 arm asm functions
you disable all intmath arm functions
you disable all intmath x86 functions
    (none use the immedeate operand so cannot be affected)
you leave all other x86 and arm functions enabled

I think the 2 affected functions should be put under #if
there should be no need to disable anything else
its just the functions that use the immedeate operand which fail id
assume

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160216/61ca9dce/attachment.sig>


More information about the ffmpeg-devel mailing list