1. 30 Jul, 2007 1 commit
  2. 31 Jul, 2007 1 commit
    • Clemens Fruhwirth's avatar
      Change the strategy to determine dynamic data access · 81b2276f
      Clemens Fruhwirth authored
      Instead of attaching the information whether a Label is going to be
      accessed dynamically or not (distinction between IdLabel/DynLabel and
      additional flags in ModuleInitLabel and PlainModuleInitLabel), we hand
      dflags through the CmmOpt monad and the NatM monad. Before calling
      labelDynamic in PositionIndependentCode, we extract thisPackage from
      dflags and supply the current package to labelDynamic, so it can take
      this information into account instead of extracting it from the labels
      itself. This simplifies a lot of code in codeGen that just hands
      through this_pkg.
  3. 23 Jul, 2007 1 commit
  4. 22 Jul, 2007 1 commit
  5. 17 Jul, 2007 1 commit
  6. 13 Jul, 2007 2 commits
    • Clemens Fruhwirth's avatar
      Add import facility to cmm parser · d55027c9
      Clemens Fruhwirth authored
      The cmm parser classified all unknown variables as imported. This
      behaviour is not changed with this patch. Explicitly imported
      variables get a different internal label type, namely ForeignLabel
      instead of RtsLabel. In PIC compilation, the NCG creates dynamic
      access for ForeignLabel, while RtsLabel are not treated as PIC when
      -package rts. Hence, putting explicit imports into cmm files enables
      the NCG to distinguish between RTS-external and RTS-internal symbols,
      and create the appropriate code.
    • Clemens Fruhwirth's avatar
      Fix the knot-tying in loopDecls to actually do what its comment tells: provide... · 1e15be89
      Clemens Fruhwirth authored
      Fix the knot-tying in loopDecls to actually do what its comment tells: provide access to global declarations
  7. 03 Jul, 2007 1 commit
  8. 28 Jun, 2007 1 commit
  9. 20 Jun, 2007 1 commit
  10. 30 Jul, 2007 3 commits
  11. 29 Jul, 2007 2 commits
  12. 27 Jul, 2007 1 commit
    • Simon Marlow's avatar
      Pointer Tagging · 6015a94f
      Simon Marlow authored
      This patch implements pointer tagging as per our ICFP'07 paper "Faster
      laziness using dynamic pointer tagging".  It improves performance by
      10-15% for most workloads, including GHC itself.
      The original patches were by Alexey Rodriguez Yakushev
      <mrchebas@gmail.com>, with additions and improvements by me.  I've
      re-recorded the development as a single patch.
      The basic idea is this: we use the low 2 bits of a pointer to a heap
      object (3 bits on a 64-bit architecture) to encode some information
      about the object pointed to.  For a constructor, we encode the "tag"
      of the constructor (e.g. True vs. False), for a function closure its
      arity.  This enables some decisions to be made without dereferencing
      the pointer, which speeds up some common operations.  In particular it
      enables us to avoid costly indirect jumps in many cases.
      More information in the commentary:
  13. 26 Jul, 2007 13 commits
  14. 25 Jul, 2007 10 commits
  15. 24 Jul, 2007 1 commit
    • Simon Marlow's avatar
      hs_exit()/shutdownHaskell(): wait for outstanding foreign calls to complete before returning · 681aad99
      Simon Marlow authored
      This is pertinent to #1177.  When shutting down a DLL, we need to be
      sure that there are no OS threads that can return to the code that we
      are about to unload, and previously the threaded RTS was unsafe in
      this respect.
      When exiting a standalone program we don't have to be quite so
      paranoid: all the code will disappear at the same time as any running
      threads.  Happily exiting a program happens via a different path:
      shutdownHaskellAndExit().  If we're about to exit(), then there's no
      need to wait for foreign calls to complete.