void host_cpuid(uint32_t function, uint32_t count,

                uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)

{

#if defined(CONFIG_KVM)

    uint32_t vec[4];



#ifdef __x86_64__

    asm volatile("cpuid"

                 : "=a"(vec[0]), "=b"(vec[1]),

                   "=c"(vec[2]), "=d"(vec[3])

                 : "0"(function), "c"(count) : "cc");

#else

    asm volatile("pusha \n\t"

                 "cpuid \n\t"

                 "mov %%eax, 0(%2) \n\t"

                 "mov %%ebx, 4(%2) \n\t"

                 "mov %%ecx, 8(%2) \n\t"

                 "mov %%edx, 12(%2) \n\t"

                 "popa"

                 : : "a"(function), "c"(count), "S"(vec)

                 : "memory", "cc");

#endif



    if (eax)

        *eax = vec[0];

    if (ebx)

        *ebx = vec[1];

    if (ecx)

        *ecx = vec[2];

    if (edx)

        *edx = vec[3];

#endif

}

void host_cpuid(uint32_t function, uint32_t count,

                uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)

{

#if defined(CONFIG_KVM)

    uint32_t vec[4];



#ifdef __x86_64__

    asm volatile("cpuid"

                 : "=a"(vec[0]), "=b"(vec[1]),

                   "=c"(vec[2]), "=d"(vec[3])

                 : "0"(function), "c"(count) : "cc");

#else

    asm volatile("pusha \n\t"

                 "cpuid \n\t"

                 "mov %%eax, 0(%2) \n\t"

                 "mov %%ebx, 4(%2) \n\t"

                 "mov %%ecx, 8(%2) \n\t"

                 "mov %%edx, 12(%2) \n\t"

                 "popa"

                 : : "a"(function), "c"(count), "S"(vec)

                 : "memory", "cc");

#endif



    if (eax)

        *eax = vec[0];

    if (ebx)

        *ebx = vec[1];

    if (ecx)

        *ecx = vec[2];

    if (edx)

        *edx = vec[3];

#endif

}

void FUNC_0(uint32_t VAR_0, uint32_t VAR_1,

                uint32_t *VAR_2, uint32_t *VAR_3, uint32_t *VAR_4, uint32_t *VAR_5)

{

#if defined(CONFIG_KVM)

    uint32_t vec[4];



#ifdef __x86_64__

    asm volatile("cpuid"

                 : "=a"(vec[0]), "=b"(vec[1]),

                   "=c"(vec[2]), "=d"(vec[3])

                 : "0"(VAR_0), "c"(VAR_1) : "cc");

#else

    asm volatile("pusha \n\t"

                 "cpuid \n\t"

                 "mov %%VAR_2, 0(%2) \n\t"

                 "mov %%VAR_3, 4(%2) \n\t"

                 "mov %%VAR_4, 8(%2) \n\t"

                 "mov %%VAR_5, 12(%2) \n\t"

                 "popa"

                 : : "a"(VAR_0), "c"(VAR_1), "S"(vec)

                 : "memory", "cc");

#endif



    if (VAR_2)

        *VAR_2 = vec[0];

    if (VAR_3)

        *VAR_3 = vec[1];

    if (VAR_4)

        *VAR_4 = vec[2];

    if (VAR_5)

        *VAR_5 = vec[3];

#endif

}

void FUNC_0(uint32_t VAR_0, uint32_t VAR_1,
uint32_t *VAR_2, uint32_t *VAR_3, uint32_t *VAR_4, uint32_t *VAR_5)
{ #if defined(CONFIG_KVM)
uint32_t vec[4]; #ifdef __x86_64__
asm volatile("cpuid"
: "=a"(vec[0]), "=b"(vec[1]),
"=c"(vec[2]), "=d"(vec[3])
: "0"(VAR_0), "c"(VAR_1) : "cc"); #else
asm volatile("pusha \n\t"
"cpuid \n\t"
"mov %%VAR_2, 0(%2) \n\t"
"mov %%VAR_3, 4(%2) \n\t"
"mov %%VAR_4, 8(%2) \n\t"
"mov %%VAR_5, 12(%2) \n\t"
"popa"
: : "a"(VAR_0), "c"(VAR_1), "S"(vec)
: "memory", "cc"); #endif
if (VAR_2)
*VAR_2 = vec[0]; if (VAR_3)
*VAR_3 = vec[1]; if (VAR_4)
*VAR_4 = vec[2]; if (VAR_5)
*VAR_5 = vec[3]; #endif
}