Re: [eigen] Building eigen in non x86/amd64/ppc archs

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


(the same thing, though cleaner)

#if defined(__GNUC__) && defined(__i386__)

# if defined(__PIC__)

# define EIGEN_CPUID(abcd,func,id) \

__asm__ __volatile__ ("xchgl %%ebx, %%esi;cpuid; xchgl %%ebx,%%esi": "=a" (abcd[0]), "=S" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id));

# else

# define EIGEN_CPUID(abcd,func,id) \

__asm__ __volatile__ ("cpuid": "=a" (abcd[0]), "=b" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id) );

# endif

#elif defined(_MSC_VER)

# if (_MSC_VER > 1500) /* newer than MSVC++ 9.0 */ || (_MSC_VER == 1500 && _MSC_FULL_VER >= 150030729) /* MSVC++ 9.0 with SP1*/

# define EIGEN_CPUID(abcd,func,id) __cpuidex((int*)abcd,func,id)

# endif

#endif

--

Thomas Capricelli <orzel@xxxxxxxxxxxxxxx>

http://www.freehackers.org/thomas

On Monday 27 December 2010 21:25:27 Thomas Capricelli wrote:

>

> Hi,

>

> I think the proper solution should be along the line of:

>

> #if defined(__GNUC__)

> # if defined(__i386__)

> # if defined(__PIC__)

> # define EIGEN_CPUID(abcd,func,id) \

> __asm__ __volatile__ ("xchgl %%ebx, %%esi;cpuid; xchgl %%ebx,%%esi": "=a" (abcd[0]), "=S" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id));

> # else

> # define EIGEN_CPUID(abcd,func,id) \

> __asm__ __volatile__ ("cpuid": "=a" (abcd[0]), "=b" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id) );

> # endif

> # endif

> #elif defined(_MSC_VER)

> # if (_MSC_VER > 1500) /* newer than MSVC++ 9.0 */ || (_MSC_VER == 1500 && _MSC_FULL_VER >= 150030729) /* MSVC++ 9.0 with SP1*/

> # define EIGEN_CPUID(abcd,func,id) __cpuidex((int*)abcd,func,id)

> # endif

> #endif

>

>

> Shouldn't it ?

> Better switch on i386 instead of a list of negation that might be incomplete (as it is right now).

> I'd like one or two confirmation before comitting.

>

> ++

> Thomas

> > On Mon, Dec 27, 2010 at 9:05 AM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:

> > > So, patches welcome!

> >

> > OK. I can confirm you that changing just this single line:

> >

> > ==========================

> > --- eigen3/Eigen/src/Core/util/Memory.h

> > +++ eigen3/Eigen/src/Core/util/Memory.h

> > @@ -601,7 +601,7 @@

> > # if defined(__PIC__) && defined(__i386__)

> > # define EIGEN_CPUID(abcd,func,id) \

> > __asm__ __volatile__ ("xchgl %%ebx, %%esi;cpuid; xchgl

> > %%ebx,%%esi": "=a" (abcd[0]), "=S" (abcd[1]), "=c" (abcd[2]), "=d"

> > (abcd[3]) : "a" (func), "c" (id));

> > -# elif !defined(__arm__) && !defined(__powerpc__)

> > +# elif !defined(__arm__) && !defined(__powerpc__) &&

> > !defined(__mips__) && !defined(__sparc__) && !defined(__sh__) &&

> > !defined(__s390__) && !defined(__m68k__) && !defined(__ia64__) &&

> > !defined(__hppa__)

> > # define EIGEN_CPUID(abcd,func,id) \

> > __asm__ __volatile__ ("cpuid": "=a" (abcd[0]), "=b" (abcd[1]),

> > "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id) );

> > # endif

> > ==========================

> >

> > fixes the compilation under MIPS, and hopefully in the rest of

> > platforms (if you're interested, I'll let you know if it's really the

> > case, but building one single file in a MIPS emulator took me ~30mins,

> > so it'll take days!!!).

> >

> > Please, apply that patch upstream. You can also replace all those "&&

> > !defined()" by a few "|| define()" if you are sure on which platforms

> > cpuid works... (x86 & x86_64?).

> >

> > Thanks and... have a happy new year!

> >

> > JL

> >

> >

> >

>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/