[Python-checkins] r71577 - in python/branches/py3k-short-float-repr: Include/pymath.h Python/pymath.c

mark.dickinson python-checkins at python.org
Mon Apr 13 18:25:29 CEST 2009


Author: mark.dickinson
Date: Mon Apr 13 18:25:29 2009
New Revision: 71577

Log:
Add functions to get and set the x87 FPU control word, where applicable


Modified:
   python/branches/py3k-short-float-repr/Include/pymath.h
   python/branches/py3k-short-float-repr/Python/pymath.c

Modified: python/branches/py3k-short-float-repr/Include/pymath.h
==============================================================================
--- python/branches/py3k-short-float-repr/Include/pymath.h	(original)
+++ python/branches/py3k-short-float-repr/Include/pymath.h	Mon Apr 13 18:25:29 2009
@@ -92,6 +92,11 @@
 #  endif
 #endif
 
+#ifdef HAVE_GCC_ASM_FOR_X87
+PyAPI_FUNC(unsigned short) _Py_get_387controlword(void);
+PyAPI_FUNC(void) _Py_set_387controlword(unsigned short);
+#endif
+
 /* Py_IS_NAN(X)
  * Return 1 if float or double arg is a NaN, else 0.
  * Caution:

Modified: python/branches/py3k-short-float-repr/Python/pymath.c
==============================================================================
--- python/branches/py3k-short-float-repr/Python/pymath.c	(original)
+++ python/branches/py3k-short-float-repr/Python/pymath.c	Mon Apr 13 18:25:29 2009
@@ -13,6 +13,28 @@
 }
 #endif
 
+#ifdef USING_X87_FPU
+#  ifdef HAVE_GCC_ASM_FOR_X87
+
+/* inline assembly for getting and setting the 387 FPU control word on
+   gcc/x86 */
+
+unsigned short _Py_get_387controlword(void) {
+    unsigned short cw;
+    __asm__ __volatile__ ("fnstcw %0" : "=m" (cw));
+    return cw;
+}
+
+void _Py_set_387controlword(unsigned short cw) {
+    __asm__ __volatile__ ("fldcw %0" : : "m" (cw));
+}
+
+#  else
+#    error "Unable to get and set x87 control word"
+#  endif
+#endif
+
+
 #ifndef HAVE_HYPOT
 double hypot(double x, double y)
 {


More information about the Python-checkins mailing list