1. 13 Dec, 2013 1 commit
    • Raymond Toy's avatar
      Optimizations to many vops to allow a descriptor for the second arg. · e2c9ecef
      Raymond Toy authored
       * Allow the second arg to be a descriptor for the basic arithmetic
         operations on single floats and double floats.  Previously, the
         boxed number would be loaded to a temporary reg for the
         operation. This saves the load and the extra register.
      
       * Allow a descriptor for the second arg in the comparison vops, the
         float conversion vops and the float truncation vops.
      
       * Allow descriptor for sqrt vop.
      e2c9ecef
  2. 22 Oct, 2013 1 commit
    • Raymond Toy's avatar
      Enable micro-optimization of fast-unary-ftruncate and · 07e2d61f
      Raymond Toy authored
      double-float-bits for x86/sse2. This gives x86 the same
      micro-optimizations that were available for sparc and ppc.
      
      
       o code/kernel.lisp:
         o Enable fast double-float-bits using the vop instead of calling
           double-float-high-bits/double-float-low-bits. 
      
       o compiler/float-tran.lisp:
         o Make fast-unary-ftruncate known to compiler and enable optimizer
           for it. 
         o Make double-float-bits known to compiler
      
       o compiler/x86/float-sse2.lisp:
         o Implement fast-unary-ftruncate for singles and doubles.
         o Implement double-float-bits.
      07e2d61f
  3. 18 Jul, 2012 1 commit
    • Raymond Toy's avatar
      Fix ticket:61, using option 2. · 40b532c5
      Raymond Toy authored
      src/lisp/gencgc.c:
      o Save and restore the FPU state in alloc().
      
      src/compiler/x86/alloc.lisp
      src/compiler/x86/array.lisp
      src/compiler/x86/call.lisp
      src/compiler/x86/float-sse2.lisp
      src/compiler/x86/float.lisp
      src/compiler/x86/move.lisp
      src/compiler/x86/sap.lisp:
      o Don't need to use :save-p anymore because the allocation routine
        saves an live registers anyway.  This improves code generation as
        well.
      
      src/general-info/release-20d.txt:
      o Update.
      40b532c5
  4. 30 Jun, 2012 1 commit
  5. 27 Mar, 2012 1 commit
  6. 04 Nov, 2011 1 commit
  7. 25 Sep, 2011 1 commit
  8. 28 Oct, 2010 1 commit
    • rtoy's avatar
      Fix critical bug in realpart/imagpart. · 5fc2d92b
      rtoy authored
      o realpart/complex-single-float, realpart/complex-double-float,
        imagpart/complex-double-float, %complex-double-float, and
        %complex-single-float were zeroing out the result register
        which is ok, except when the result register and the source register
        are the same.  Use a temp register in this case.
      
        This bit of code tickles the bug:
      
          (defun zot-r (z)
            (declare (type (simple-array (complex double-float) (*)) z))
            (realpart (aref z 0)))
      
          (defun zot-i (z)
            (declare (type (simple-array (complex double-float) (*)) z))
            (imagpart (aref z 0)))
      
          (let ((z (make-array 1 :element-type '(complex double-float)
      			 :initial-element #c(42d0 -42d0))))
            (zot-r z))
      
          (let ((z (make-array 1 :element-type '(complex double-float)
      			 :initial-element #c(42d0 -42d0))))
            (zot-i z))
      
        The correct results are 42d0 and -42d0, not 0d0, of course.
      5fc2d92b
  9. 11 Aug, 2010 1 commit
    • rtoy's avatar
      insts.lisp: · ec292309
      rtoy authored
      o Add UCOMISS and UCOMISD instructions.
      
      float-sse2.lisp:
      o Use UCOMISS and UCOMISD in the =/single-float and =/double-float
        vops to match what we do on x87.  This won't signal invalid
        operation if one of the operands is NaN.
      o Rename some vops to match the vop naming convention.
      ec292309
  10. 06 Aug, 2010 1 commit
  11. 23 Jul, 2010 1 commit
    • rtoy's avatar
      In the vops realpart/complex-double-float and · 3b1cf7c1
      rtoy authored
      realpart/complex-single-float, remove the unused temp register.
      Change the xor temp temp instruction to xor r r instruction so that
      the result has zeroes in the unused parts of the register.
      
      Bug and fix from Alexander Donkov.
      3b1cf7c1
  12. 21 Jul, 2010 1 commit
  13. 01 Jul, 2010 1 commit
    • rtoy's avatar
      Fix critical bug introduced in previous changes. Incorrect results · 4578fb45
      rtoy authored
      were returned when calling out to a C function returning a float.
      
      float-sse2.lisp:
      o Remove the FLOAT-MOVE vop and add a FLOAT-MOVE/SINGLE and
        FLOAT-MOVE/DOUBLE that can handle moving from FR0 or any XMM
        register to any XMM register.
      o Update the move vops appropriately.
      
      sse2-c-call.lisp:
      o Don't need to move FR0 to XMM0 anymore.  This was one source of the
        problem.  The compiler knows now to ask for a move from FR0 to some
        XMM register.
      o Update comments.
      
      vm.lisp:
      o Correct printing of XMM registers.  Previously printed them as
        XMM8-15 but should have been XMM0-7.  (Mostly in trace files.)
      4578fb45
  14. 20 Apr, 2010 1 commit
  15. 19 Mar, 2010 1 commit
  16. 24 Feb, 2010 1 commit
  17. 28 Oct, 2009 2 commits
    • rtoy's avatar
      Revert previous change. Instead, make the arithmetic vops for mixing · 69e201b4
      rtoy authored
      complex and floats ensure that the float is converted to a complex
      with the correct imaginary part.  The failed tests from Maxima
      (rtest_gamma) now pass.  (Almost.  The required tolerance is a little
      too tight for sse2, mostly due to a slightly inaccurate exp function.
      But that's libc's fault, not CMUCL's fault.)
      69e201b4
    • rtoy's avatar
      o Fix critical issue where the conversion of integers to floats left · 4e386db8
      rtoy authored
        junk in the high part of the xmm register.  This causes some tests
        in maxima to fail.
      o Same fix for adding/subtracting a complex and a float.
      
      The vops need to be examined carefully to make sure we keep the
      invariant that the high part is zero for double-float values in XMM
      registers.
      4e386db8
  18. 16 Jun, 2009 1 commit
    • rtoy's avatar
      compiler/x86/float-sse2.lisp: · e220506c
      rtoy authored
      o Add vop for conjugate of complex single and double floats.
      
      compiler/float-tran.lisp:
      o Disable deftransform for conjugate.  All platforms with complex fp
        vops support conjugate.
      e220506c
  19. 15 Jun, 2009 1 commit
    • rtoy's avatar
      code/numbers.lisp: · 3934a9cb
      rtoy authored
      o Do appropriate contagion when computing a complex + real or complex
        - real.  (+ #c(1d0 -0d0)  1d0) should be #c(2d0 0d0), not #c(2d0
          -0d0).
      
      compiler/x86/float-sse2.lisp:
      o Update vops for computing complex +/- float and float + complex to
        do appropriate contagion so that the imaginary part has the correct
        sign (as above for numbers.lisp).
      3934a9cb
  20. 14 Jun, 2009 1 commit
  21. 13 Jun, 2009 1 commit
  22. 14 Nov, 2008 2 commits
  23. 12 Nov, 2008 1 commit