Re: [eigen] cpuid on MSVC

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


Assembly is not a good idea. We need to find intrinsics to do it
because the x64 compiler does not allow inline assembly.

See here: http://msdn.microsoft.com/en-us/library/wbk4z78b.aspx

On Thu, Jun 24, 2010 at 9:40 AM, Gael Guennebaud
<gael.guennebaud@xxxxxxxxx> wrote:
> Hi msvc developers,
>
> as some of you probably known, we are now using the cpuid instruction
> to retrieve CPU cache sizes. To do so I need to provide to cpuid two
> information: the function code in the eax register and the cache id in
> ecx. However, the msvc __cpuid intrinsics seems to be too limited
> since it only allows to set the function code. So I'd some help from
> msvc gurus to write inline assembly code doing that. For the record
> here is the GCC version:
>
> 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) );
>
> The assembly is one instruction only: cpuid, thes next four items
> after the ":" are the outputs where "a" means eax register, "b" ==
> ebx, etc. and the last two item are the inputs which are put into the
> eax and ecx registers respectively.
>
> The code is in eigen/Eigen/src/Core/util/Memory.h line 598.
>
> thanks a lot :)
>
> gael
>
>
>



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