/* (C) 2002 Marcello Barnaba <vjt@openssl.it>
 */
#include <stdint.h>

void cpuid(uint32_t mode, uint32_t *_eax, uint32_t *_ebx, uint32_t *_ecx, uint32_t *_edx)
{
    volatile uint32_t eax, ebx, ecx, edx;
    __asm__ __volatile__ (
	    " movl   %4, %%eax       \n"
	    " cpuid                  \n"
	    : "=a" (eax), "=d" (edx), "=c" (ecx), "=b" (ebx)
	    : "m" (mode)
    );

    *_eax = eax;
    *_ebx = ebx;
    *_ecx = ecx;
    *_edx = edx;

    return;
}

