cpu_info_by_asm.c 723 B

12345678910111213141516171819202122232425262728293031
  1. #include <stdio.h>
  2. int main() {
  3. unsigned int CPUInfo0;
  4. unsigned int CPUInfo1;
  5. unsigned int CPUInfo2;
  6. unsigned int CPUInfo3;
  7. unsigned int InfoType;
  8. #if defined(__i386__) && defined(__PIC__)
  9. /* %ebx is PIC register in 32-bit, so mustn't clobber it. */
  10. __asm__ __volatile__ (
  11. "xchg %%ebx, %1\n"
  12. "cpuid\n"
  13. "xchg %%ebx, %1\n":
  14. "=a" (CPUInfo0),
  15. "=r" (CPUInfo1),
  16. "=c" (CPUInfo2),
  17. "=d" (CPUInfo3) :
  18. "0" (InfoType), "2" (0)
  19. );
  20. #else
  21. __asm__ __volatile__ (
  22. "cpuid":
  23. "=a" (CPUInfo0),
  24. "=b" (CPUInfo1),
  25. "=c" (CPUInfo2),
  26. "=d" (CPUInfo3) :
  27. "0" (InfoType), "2" (0)
  28. );
  29. #endif
  30. return 0;
  31. }