summaryrefslogtreecommitdiffstats
path: root/x86cpuid.c
diff options
context:
space:
mode:
authorItamar Reis Peixoto <itamar@itamar.ispbrasil.com.br>2009-10-02 20:35:54 -0300
committerItamar Reis Peixoto <itamar@itamar.ispbrasil.com.br>2009-10-02 20:35:54 -0300
commit580c2e160be238f4abb46bd75fcf24bdd9768c2e (patch)
tree58d8c94f27e48d8aee8ff20ac7babb132b8eedee /x86cpuid.c
downloadcdb-580c2e160be238f4abb46bd75fcf24bdd9768c2e.zip
cdb-580c2e160be238f4abb46bd75fcf24bdd9768c2e.tar.gz
cdb-580c2e160be238f4abb46bd75fcf24bdd9768c2e.tar.xz
initial importHEADmaster
Diffstat (limited to 'x86cpuid.c')
-rw-r--r--x86cpuid.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/x86cpuid.c b/x86cpuid.c
new file mode 100644
index 0000000..900d7d5
--- /dev/null
+++ b/x86cpuid.c
@@ -0,0 +1,38 @@
+#include <signal.h>
+
+void nope()
+{
+ exit(1);
+}
+
+main()
+{
+ unsigned long x[4];
+ unsigned long y[4];
+ int i;
+ int j;
+ char c;
+
+ signal(SIGILL,nope);
+
+ x[0] = 0;
+ x[1] = 0;
+ x[2] = 0;
+ x[3] = 0;
+
+ asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) );
+ if (!x[0]) return 0;
+ asm volatile(".byte 15;.byte 162" : "=a"(y[0]),"=b"(y[1]),"=c"(y[2]),"=d"(y[3]) : "0"(1) );
+
+ for (i = 1;i < 4;++i)
+ for (j = 0;j < 4;++j) {
+ c = x[i] >> (8 * j);
+ if (c < 32) c = 32;
+ if (c > 126) c = 126;
+ putchar(c);
+ }
+
+ printf("-%08x-%08x\n",y[0],y[3]);
+
+ return 0;
+}