[Ffmpeg-devel] ARCH_X86 vs ARCH_X86_32 vs ARCH_X86_64

Diego Biurrun diego
Mon Oct 16 23:14:05 CEST 2006


On Mon, Oct 16, 2006 at 11:04:19PM +0200, Diego Biurrun wrote:
> On Mon, Oct 16, 2006 at 11:00:59PM +0200, Diego Biurrun wrote:
> > On Sun, Oct 08, 2006 at 11:55:55PM +0200, Diego Biurrun wrote:
> > > I'd like to introduce a define that encompasses both x86 and x86_64 to
> > > simplify statements like
> > > 
> > >   #if defined(ARCH_X86) || defined(ARCH_X86_64)
> > > 
> > > of which we have tons in the code and be able to use it in the Makefiles
> > > where or expressions are troublesome.
> > > 
> > > My first idea was to rename ARCH_X86 --> ARCH_X86_32 and use ARCH_X86
> > > for the general case.  It seems like the cleanest and most
> > > straightforward solution to me, but I'm getting second thoughts.  I'm
> > > afraid that ARCH_X86 semantics are kind of set in stone through years of
> > > usage (in autoconf as well).
> > 
> > OK, here is a first patch that introduces ARCH_X86_32.  Testing welcome.
> > 
> > --- libavcodec/cabac.h	(revision 6713)
> > +++ libavcodec/cabac.h	(working copy)
> > @@ -362,7 +362,7 @@
> >  
> >  static int always_inline get_cabac_inline(CABACContext *c, uint8_t * const state){
> >      //FIXME gcc generates duplicate load/stores for c->low and c->range
> > -#if defined(ARCH_X86) && !(defined(PIC) && defined(__GNUC__))
> > +#if defined(ARCH_X86_32) && !(defined(PIC) && defined(__GNUC__))
> >      int bit;
> >  
> >  #define LOW          "0"
> > --- libavcodec/mathops.h	(revision 6713)
> > +++ libavcodec/mathops.h	(working copy)
> > @@ -22,7 +22,7 @@
> >  #ifndef MATHOPS_H
> >  #define MATHOPS_H
> >  
> > -#ifdef ARCH_X86
> > +#ifdef ARCH_X86_32
> >  
> >  #include "i386/mathops.h"
> >  
> > Index: libavutil/internal.h
> > ===================================================================
> > --- libavutil/internal.h	(revision 6713)
> > +++ libavutil/internal.h	(working copy)
> > @@ -217,7 +217,7 @@
> >  static always_inline long int lrintf(float x)
> >  {
> >  #ifdef __MINGW32__
> > -#  ifdef ARCH_X86
> > +#  ifdef ARCH_X86_32
> >      int32_t i;
> >      asm volatile(
> >          "fistpl %0\n\t"
> > --- libavutil/common.h	(revision 6713)
> > +++ libavutil/common.h	(working copy)
> > @@ -344,7 +344,7 @@
> >          );
> >          return (d << 32) | (a & 0xffffffff);
> >  }
> > -#elif defined(ARCH_X86)
> > +#elif defined(ARCH_X86_32)
> >  static inline long long read_time(void)
> >  {
> >          long long l;
> 
> Note: I suspect that most or all of these conditions are bogus and might
> well work on x86_64 as well.  Somebody please replace them all by
> ARCH_X86_64 and test that as well.

And here is the corresponding patch for MPlayer, testing on x86_64 very
welcome as well.

Diego
-------------- next part --------------
Index: configure
===================================================================
--- configure	(revision 20277)
+++ configure	(working copy)
@@ -879,8 +879,10 @@
 
 case "$host_arch" in
   i[3-9]86|x86|x86pc|k5|k6|k6-2|k6-3|pentium*|athlon*|i586-i686)
-  _def_arch="#define ARCH_X86 1"
-  _target_arch="TARGET_ARCH_X86 = yes"
+  _def_arch_x86="#define ARCH_X86 1"
+  _target_arch_x86="TARGET_ARCH_X86 = yes"
+  _def_arch="#define ARCH_X86_32 1"
+  _target_arch="TARGET_ARCH_X86_32 = yes"
 
 
   case "$pvendor" in
@@ -1102,6 +1104,8 @@
   x86_64|amd64)
     _def_arch='#define ARCH_X86_64 1'
     _target_arch='TARGET_ARCH_X86_64 = yes'
+    _def_arch_x86="#define ARCH_X86 1"
+    _target_arch_x86="TARGET_ARCH_X86 = yes"
     iproc='x86_64'
 
     # gcc >= 3.4.0  doesn't support -mcpu, we have to use -mtune instead
@@ -7633,6 +7673,7 @@
 
 # --- Some stuff for autoconfigure ----
 $_target_arch
+$_target_arch_x86
 $_confwin32
 TARGET_CPU=$iproc
 TARGET_MMX = $_mmx
@@ -8097,6 +8135,7 @@
 $_def_words_endian
 
 $_def_arch
+$_def_arch_x86
 
 /* For the PPC.  G5 has the dcbzl when in 64bit mode but G4s and earlier do not
    have the instruction. */



More information about the ffmpeg-devel mailing list