summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/cpuid.h
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-04-16 03:03:45 +0000
committerChristopher Faylor <me@cgf.cx>2003-04-16 03:03:45 +0000
commitc448f78fd56ef8d34474adc2678d6394a4d088ec (patch)
tree8b0177d10bddf05d3648e296b07ab13e218115e8 /winsup/cygwin/cpuid.h
parent9eed5df6392240b46c2506dcb37227ee73f5a806 (diff)
downloadcygnal-c448f78fd56ef8d34474adc2678d6394a4d088ec.tar.gz
cygnal-c448f78fd56ef8d34474adc2678d6394a4d088ec.tar.bz2
cygnal-c448f78fd56ef8d34474adc2678d6394a4d088ec.zip
* termios.cc (setspeed): New function.
(cfsetospeed): Use setspeed to set speed. (cfsetispeed): Use setspeed to set speed. * autoload.cc: Add load statement for UuidCreate, and UuidCreateSequential. * cpuid.h: New file. * cygwin.din: Export gethostid. * fhandler_proc.cc (cpuid): Move to cpuid.h. (can_set_flag): Move to cpuid.h. * syscalls.cc (gethostid): New function. * version.h: Bump DLL minor version number to 83.
Diffstat (limited to 'winsup/cygwin/cpuid.h')
-rw-r--r--winsup/cygwin/cpuid.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/winsup/cygwin/cpuid.h b/winsup/cygwin/cpuid.h
new file mode 100644
index 000000000..1f0cc5006
--- /dev/null
+++ b/winsup/cygwin/cpuid.h
@@ -0,0 +1,35 @@
+#ifndef CPUID_H
+#define CPUID_H
+
+extern inline void
+cpuid (unsigned *a, unsigned *b, unsigned *c, unsigned *d, unsigned in)
+{
+ asm ("cpuid"
+ : "=a" (*a),
+ "=b" (*b),
+ "=c" (*c),
+ "=d" (*d)
+ : "a" (in));
+}
+
+extern inline bool
+can_set_flag (unsigned flag)
+{
+ unsigned r1, r2;
+ asm("pushfl\n"
+ "popl %0\n"
+ "movl %0, %1\n"
+ "xorl %2, %0\n"
+ "pushl %0\n"
+ "popfl\n"
+ "pushfl\n"
+ "popl %0\n"
+ "pushl %1\n"
+ "popfl\n"
+ : "=&r" (r1), "=&r" (r2)
+ : "ir" (flag)
+ );
+ return ((r1 ^ r2) & flag) != 0;
+}
+
+#endif // !CPUID_H