Disable FLONUM-EXP open-coding on i386.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 14 Dec 2018 16:24:58 +0000 (16:24 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sat, 15 Dec 2018 22:33:21 +0000 (22:33 +0000)
The instruction sequence we had was not very good, e.g. (exp -708)
was off by far more than 1ulp.  It can be done that way, but we need
to use 64-bit precision for it, and setting the i387 precision here
is getting a bit far afield from open-coding.

src/compiler/machines/i386/machin.scm
src/compiler/machines/i386/rulflo.scm

index 17dd499dd07b4ea4362a00b4823706479744c80c..2643098ebd5fa2cdb77525e8b7304d8a96d2b7e7 100644 (file)
@@ -357,6 +357,9 @@ USA.
                  ;; <= pi/4.  Correct argument reduction requires a
                  ;; better approximation of pi than the i387 has.
                  FLONUM-SIN FLONUM-COS FLONUM-TAN
+                 ;; Disabled: exp is too much trouble to get right in
+                 ;; i387; need 64-bit precision.  Let libm do it.
+                 FLONUM-EXP
                  VECTOR-CONS STRING-ALLOCATE FLOATING-VECTOR-CONS
                  FLONUM-IS-LESS? FLONUM-IS-LESS-OR-EQUAL?
                  FLONUM-IS-GREATER? FLONUM-IS-GREATER-OR-EQUAL?
index 7bd2aaf695db4da606e6fe593203344e369dfdf2..d4ba63aab738673212b83288878363e067a5b377 100644 (file)
@@ -335,7 +335,10 @@ USA.
      (LAP (FLDL2E)
          (FMULP (ST 1) (ST 0))
          (F2XM1)))))
+\f
+;; XXX This is disabled because it is inadequate in 53-bit precision.
 
+#;
 (define-arithmetic-method 'FLONUM-EXP flonum-methods/1-arg
   (flonum-unary-operation/stack-top
    (lambda ()