AC-Archive
Autoconf Macro Archive

ac-archive.sf.net: - Project CVS - Download
Macro Index
- AM Support
- C++ Support
- C Support
- Fortran Support
- Java Support
- Cross Compilation
- Installed Packages
- Miscellaneous
- LaTeX Support
- Uncategorized
- archive macros
- adl's macros
- bkorb's macros
- guidod's macros
- latex's macros
- other's macros
- rleigh's macros
- obsoleted macros
- released macros
- search index

Documentation
- Contribute!
- History
- acincludedir m4
- acinclude (tool)
- macro howto
- ax tricks
- maintainers
- License
- Topics

generated...
2007-08-05

(C) 2007 guidod
Download the M4 Source.

ax_gcc_x86_cpuid

Back to the Main Page.

Synopsis
AX_GCC_X86_CPUID(OP) ,

run x86 cpuid instruction OP using gcc inline assembler

Version

2005-05-30

Author

Steven G. Johnson <stevenj@alum.mit.edu> and Matteo Frigo.

License

GPLWithACException
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts

Category

cryp.to ac-archive's Miscellaneous (released)

Documentation

On Pentium and later x86 processors, with gcc or a compiler that has a compatible syntax for inline assembly instructions, run a small program that executes the cpuid instruction with input OP. This can be used to detect the CPU type.

On output, the values of the eax, ebx, ecx, and edx registers are stored as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable ax_cv_gcc_x86_cpuid_OP.

If the cpuid instruction fails (because you are running a cross-compiler, or because you are not using gcc, or because you are on a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP is set to the string "unknown".

This macro mainly exists to be used in AX_GCC_ARCHFLAG.

M4 Source Code
AC_DEFUN([AX_GCC_X86_CPUID],
[AC_REQUIRE([AC_PROG_CC])
AC_LANG_PUSH([C])
AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
 [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include &lt;stdio.h&gt;], [
     int op = $1, eax, ebx, ecx, edx;
     FILE *f;
      __asm__("cpuid"
        : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
        : "a" (op));
     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
     fclose(f);
     return 0;
])],
     [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
     [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
     [ax_cv_gcc_x86_cpuid_$1=unknown])])
AC_LANG_POP([C])
])