Print this page
patch mul-ste

@@ -37,17 +37,20 @@
 /*
  * Multiplies two normal or subnormal doubles, returns result and exceptions.
  */
 double
 __mul_set(double x, double y, int *pe) {
-        extern void _putmxcsr(), _getmxcsr();
-        int csr;
+        int csr = CSR_DEFAULT;
         double z;
 
-        _putmxcsr(CSR_DEFAULT);
-        z = x * y;
-        _getmxcsr(&csr);
+        __asm__ __volatile__(
+            "ldmxcsr    %4\n"
+            "mulsd      %2,%3\n"
+            "stmxcsr    %0\n"
+            : "=m" (csr), "=C" (z)
+            : "C" (x), "C" (y), "m" (csr));
+
         if ((csr & 0x3f) == 0) {
                 *pe = 0;
         } else {
                 /* Result may not be exact. */
                 *pe = 1;