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/ |