Skip to content
  1. Oct 22, 2013
    • 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
  2. Feb 22, 2013
    • Raymond Toy's avatar
      Clean up one- and two-arg-derive-type. · 17e30810
      Raymond Toy authored
      srctran.lisp::
       * The optional convert-type arg is always true, so remove it and
         update the local functions to convert always.
       * Clean up some comments as well.
      
      float-tran.lisp::
       * Fix up one place where we were supplying a value for the optional
         convert-type arg.
      17e30810
  3. Dec 23, 2012
  4. Aug 19, 2012
  5. Nov 04, 2011
  6. Sep 25, 2011
  7. Aug 18, 2010
  8. Aug 17, 2010
  9. Apr 20, 2010
  10. Apr 19, 2010
  11. Mar 19, 2010
  12. Feb 05, 2010
    • rtoy's avatar
      Implement a fast fround for single and double floats. This is enabled · d611150a
      rtoy authored
      everywhere except for x87 builds since there is a possible roundoff
      issue due to the 80-bit registers for x87.
      
      This is some 2-3 times faster than the existing fround function.
      
      code/float.lisp:
      o Implementations of %unary-fround/single-float,
        %unary-fround/double-float, and %unary-fround.  Declare the first
        two as inline too.
      
      compiler/float-tran.lisp:
      o Tell compiler about %unary-fround.
      o Transform fround to a call to %unary-fround.
      o Transform %unary-fround to special versions for single and double
        float arguments.
      d611150a
  13. Nov 02, 2009
    • rtoy's avatar
      Revert previous changes. They were supposed to go on · d01310f2
      rtoy authored
      amd64-dd-branch.
      d01310f2
    • rtoy's avatar
      This large checkin brings the amd64 port up-to-date with the current · 2bafb654
      rtoy authored
      sources.  No real attempt has been made to make it work, but the
      cross-compile does create a kernel.core, and the C code compiles (on
      openSuSE 10.3).  The resulting kernel.core does not yet work.
      
      Use cross-x86-amd64.lisp as the cross-compile script.  This is
      intended to be cross-compiled using the 20a release for Linux, and
      only supports x87.  The sse2 support has not be ported yet.
      
      tools/cross-scripts/cross-x86-amd64.lisp:
      o Update cross-compile with some missing constants, and frob new
        symbols.
      
      tools/clean-target.sh:
      o Remove amd64f files too.
      
      code/pred.lisp:
      o Define predicates for double-doubles for bootstrapping to work
        around recursive known function problems with these predicates.
      
      code/sap.lisp:
      o Define int-sap with (unsigned-byte 64) type declaration.  (May not
        be needed?)
      
      code/unix-glibc2.lisp:
      o Build fails defining map_failed to (int-sap -1).  Just hard-wire to
        0 for now so we can build.
      
      compiler/float-tran.lisp:
      o Add missing conditional for %complex-double-double-float.
      
      compiler/amd64/float.lisp:
      o Merge double-double support for amd64.  Not really tested yet.
      
      compiler/amd64/parms.lisp:
      o Update to match x86 build.  In particular, get the space address
        correct and update the static symbols.
      
      compiler/amd64/type-vops.lisp:
      o DYLAN-FUNCTION-HEADER-TYPE no longer exists.
      
      compiler/amd64/vm.lisp:
      o Add double-double storage classes and register definitions.
      
      lisp/Config.amd64:
      o Bring in line with Config.x86 and friends.
      
      lisp/Linux-os.c:
      o Bring amd64 code up-to-date with x86/linux code.
      
      lisp/Linux-os.h
      o Need to include sys/ucontext.h to get ucontext defined.  (Why?)
      o Also define __USE_GNU so we get the register offsets in the ucontext
        defined.  (Why?)
      
      lisp/amd64-arch.c:
      o Change struct sigcontext to os_context_t.
      o Use SC_PC instead of context->sc_pc.
      o Merge some changes in from x86 version, like SC_EFLAGS.  May need
        more work.
      
      lisp/amd64-assem.s:
      o Use rbx instead of ebx for jmp.
      
      lisp/amd64-lispregs.h:
      o Define SC_REG, SC_PC, SC_SP using the new x86 style.
      
      lisp/backtrace.c:
      o Remove inline assembly for now until I figure out what the amd64
        version should be.
      
      lisp/gencgc.c:
      o Conditionalize out weak hash table support for now.
      
      lisp/gencgc.h:
      o Set PAGE_SIZE for amd64.  (Is 4096 right?)
      
      lisp/globals.h:
      o Export current_dynamic_space_free_pointer and
        current_auto_gc_trigger like for x86.
      2bafb654
  14. Aug 11, 2009
    • rtoy's avatar
      Some symbol cleanups. · 36b8abb9
      rtoy authored
      code/exports.lisp:
      o Import STREAM:SET-SYSTEM-EXTERNAL-FORMAT into the EXT package.
      o Define and export %sin-quick, %cos-quick, and %tan-quick only for
        x87 builds.
      
      compiler/float-tran.lisp:
      o Only apply defknowns and deftransforms for %sin-quick, %cos-quick,
        and %tan-quick for x87 builds.
      36b8abb9
  15. Jun 16, 2009
    • 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
  16. Jun 15, 2009
    • rtoy's avatar
      compiler/float-tran.lisp: · 5a98a234
      rtoy authored
      o Sparc has a vop for complex conjugate, so we can disable the
        deftransform.
      o Both sparc and x86 have a vop to do float - complex, so disable that
        transform too.
      
      compiler/sparc/float.lisp:
      o Fix the float-complex vop to do the right thing wrt contagion.
      o Remove some old commented out vop for complex*complex and
        complex/complex.
      5a98a234
    • rtoy's avatar
      o Fix deftransforms to do contagion correctly: · 2b772630
      rtoy authored
        - complex + real
        - complex - real
        - real + complex
      o Clean up comments and fix erroneous ones.
      2b772630
  17. Mar 18, 2009
    • rtoy's avatar
      code/irrat-dd.lisp: · 8bd5d96d
      rtoy authored
      o Declare POLY-EVAL and POLY-EVAL-1 as maybe-inline functions so they
        can be semi-inlined.
      
      code/irrat.lisp:
      o I don't think there's any real reason to make the local function
        REAL-EXPT inline.  It's very big and local function call is already
        good enough.
      
      compiler/float-tran.lisp:
      o Change some functions to be maybe-inline instead of inline to save
        on space for the the larger double-double functions:  SUB-DD,
        SUB-D-DD, SUB-DD-D, SPLIT.  Semi-inline should be good enough for
        these large functions, saving on cache memory, local function
        calling sequence should be good enough.
      8bd5d96d
  18. Dec 30, 2008
  19. Dec 22, 2008
  20. Nov 16, 2008
  21. Nov 14, 2008
    • rtoy's avatar
      float-tran.lisp: · 7264ddad
      rtoy authored
      o Remove the deftransform for real + complex and real * complex.
      o Always enable the transform for real - complex.
      
      x86/float-sse2.lisp:
      o Add vop to do real + complex
      o Add vop to do real * complex
      7264ddad
  22. Nov 13, 2008
    • rtoy's avatar
      o Enable the complex-contagion deftransforms · ea96ab08
      rtoy authored
      o Change the other complex arithmetic deftransforms not to use REAL as
        the type of an argument.  It should be the same as the complex
        argument.  Without this, the deftransforms were causing infinite
        loops during compilation where the deftransforms kept changing the
        code.
      ea96ab08
    • rtoy's avatar
      o Turn off complex contagion stuff because it breaks things like · 66793933
      rtoy authored
        (defun foo (z)
          (declare (double-float z))
          (+ (complex 0 1) z))
      o For now, don't convert real*complex to complex*real.  Expand it out
        explicitly.
      66793933
  23. Nov 12, 2008
  24. Jun 26, 2008
    • rtoy's avatar
      code/rand-mt19937.lisp: · d4cb5a5e
      rtoy authored
      o Recursively call RANDOM for the integer case to let the deftransform
        handle the case.
      
      compiler/float-tran.lisp:
      o Remove comment about modifying RANDOM to match the deftransform.
        We're automatically in sync now.
      d4cb5a5e
  25. Jun 24, 2008
    • rtoy's avatar
      compiler/float-tran.lisp: · a282fdc9
      rtoy authored
        Fix bug in deftransform where the case for x86 and num-high >
        random-fixnum-max was never used.  We now always use the bignum
        multiply code for all platforms and use that for all cases for which
        the deftransform applies.
      
        Simplify the constant-continuation case too so we don't have to the
        check.  I think the bignum multiply version does not have the bias
        problem that rem has.
      
      code/rand-mt19937.lisp:
        Change the RANDOM function to compute the same value as the
        deftransform would.
      
      general-info/release-19f.txt:
        Update
      
      Make a note that both the function and the deftransform should be
      synchronized to match.  This change also changes the sequence of
      numbers produced.
      a282fdc9
  26. Apr 08, 2008
    • rtoy's avatar
      o Fix type-derivation for the basic DOUBLE-DOUBLE-FLOAT arithmetic · 5c34c685
      rtoy authored
        operations.  The deftransforms were causing type-derivation to
        return DOUBLE-DOUBLE-FLOAT for everything.  Use the suggestion from
        Rob: Wrap the result of the deftransform in a TRULY-THE form and use
        the node derived type for the type.
      o The FLOAT-SIGN deftransform for DOUBLE-DOUBLE-FLOAT should be
        conditioned on the DOUBLE-DOUBLE feature.
      o Remove old unused deftransform for * for two double-double args.
      5c34c685
  27. Apr 03, 2008
  28. Feb 14, 2008
  29. Feb 01, 2008
  30. Jun 27, 2007
  31. Jun 21, 2007
  32. Jun 20, 2007
  33. Jun 11, 2007
    • rtoy's avatar
      compiler/float-tran.lisp: · 599a4a72
      rtoy authored
      o Handle signed-zeroes for addition, subtraction, and multiplication
        of double-double floats.  That is, return the correct signed zero
        for the result.
      o Try to handle overflow in addition, multiplication, and division by
        returning infinity, if the overflow or divide-by-zero trap is
        disabled.  This is done by looking to see what the corresponding
        double-float operation would return.  This probably needs more work.
      
      code/irrat-dd.lisp:
      o Remove the careful-mul stuff from dd-complex-atanh since we handle
        signed zeroes better now during double-double multiplication.
      599a4a72
  34. May 09, 2007
    • rtoy's avatar
      compiler/ppc/float.lisp: · 6574f257
      rtoy authored
      o Add vops to do fused multiply-add and fused multiply-subtract.
        (Only double-float supported.)
      o Add defknown's for these translations.
      
      compiler/float-tran.lisp:
      o Used fused multiply-subtract for two-prod and two-sqr instead of the
        split function.
      6574f257
  35. Feb 03, 2007
    • rtoy's avatar
      Fix bug in expt type derivation. · 99d4c4c8
      rtoy authored
      (defun f (x y)
         (declare (fixnum x y))
         (expt x y))
      
      caused an error because we weren't handling member types correctly.
      99d4c4c8
  36. Jan 23, 2007
    • rtoy's avatar
      Fix expt derive-type optimizer. The compiler was deriving the result · 4ece2b2c
      rtoy authored
      type of:
      
          (defun foo3 (x y)
            (declare (type (double-float (0d0) 1d0) x)
      	       (type (double-float (0d0)) y))
            (expt x y))
      
      to be (double-float 0d0 1d0), i.e, including -0.0, but that's not
      possible.  With this fix, the result type is (or (member 0d0)
      (double-float (0d0) 1d0)), which is better.
      4ece2b2c