1. 08 Nov, 2001 10 commits
    • simonmar's avatar
      [project @ 2001-11-08 17:02:41 by simonmar] · 02fb8137
      simonmar authored
      inputReady can be an unsafe foreign import.
    • simonmar's avatar
      [project @ 2001-11-08 16:37:54 by simonmar] · 0e74df8d
      simonmar authored
    • simonmar's avatar
      [project @ 2001-11-08 16:36:39 by simonmar] · 012eb965
      simonmar authored
      getProgArgv can be an unsafe foreign import.
    • simonmar's avatar
      [project @ 2001-11-08 16:17:35 by simonmar] · c094c3ad
      simonmar authored
      Revert resumeThread and suspendThread to working with StgRegTable
      rather than Capability, and do the conversion in the functions
      themselves rather than in the inline code.  This means I don't have to
      fiddle with the NCG to fix the SUSPEND_THREAD/RESUME_THREAD macros.
    • simonmar's avatar
      [project @ 2001-11-08 14:42:11 by simonmar] · 79368b84
      simonmar authored
      Fix a bug in the previous commit, and add some more sanity checking.
    • simonmar's avatar
      [project @ 2001-11-08 12:56:00 by simonmar] · 6ae381cd
      simonmar authored
      Updates to the native code generator following the changes to fix the
      large block allocation bug, and changes to use the new
      function-address cache in the register table to reduce code size.
      Also: I changed the pretty-printing machinery for assembly code to use
      Pretty rather than Outputable, since we don't make use of the styles
      and it should improve performance.  Perhaps the same should be done
      for abstract C.
    • simonmar's avatar
      [project @ 2001-11-08 12:50:07 by simonmar] · 11c7505f
      simonmar authored
      Remove the heap-check-size panic, following the RTS fixes for this problem.
    • simonmar's avatar
      [project @ 2001-11-08 12:46:31 by simonmar] · 0671ef05
      simonmar authored
      Fix the large block allocation bug (Yay!)
      In order to do this, I had to
       1. in each heap-check failure branch, return the amount of heap
          actually requested, in a known location (I added another slot
          in StgRegTable called HpAlloc for this purpose).  This is
          useful for other reasons - in particular it makes it possible
          to get accurate allocation statistics.
       2. In the scheduler, if a heap check fails and we wanted more than
          BLOCK_SIZE_W words, then allocate a special large block and place
          it in the nursery.  The nursery now has to be double-linked so
          we can insert the new block in the middle.
       3. The garbage collector has to be able to deal with multiple objects
          in a large block.  It turns out that this isn't a problem as long as
          the large blocks only occur in the nursery, because we always copy
          objects from the nursery during GC.  One small change had to be
          made: in evacuate(), we may need to follow the link field from the
          block descriptor to get to the block descriptor for the head of a
          large block.
       4. Various other parts of the storage manager had to be modified
          to cope with a nursery containing a mixture of block sizes.
      Point (3) causes a slight pessimization in the garbage collector.  I
      don't see a way to avoid this.  Point (1) causes some code bloat (a
      rough measurement is around 5%), so to offset this I made the
      following change which I'd been meaning to do for some time:
        - Store the values of some commonly-used absolute addresses
          (eg. stg_update_PAP) in the register table.  This lets us use
          shorter instruction forms for some absolute jumps and saves some
          code space.
        - The type of Capability is no longer the same as an StgRegTable.
          MainRegTable renamed to MainCapability.  See Regs.h for details.
      Other minor changes:
        - remove individual declarations for the heap-check-failure jump
          points, and declare them all in StgMiscClosures.h instead.  Remove
      Updates to the native code generator to follow.
    • simonmar's avatar
      [project @ 2001-11-08 12:41:07 by simonmar] · d7dedcdb
      simonmar authored
      (addendum to the previous commit) also set bd->blocks to zero in
    • simonmar's avatar
      [project @ 2001-11-08 10:18:49 by simonmar] · 18b3cd97
      simonmar authored
      For each non-head block in a block group, set its 'blocks' field to
      zero (as per comments elsewhere).
  2. 07 Nov, 2001 22 commits
  3. 06 Nov, 2001 8 commits