Fix two issues in stg_newArrayzh
authorJohan Tibell <johan.tibell@gmail.com>
Thu, 13 Mar 2014 21:24:24 +0000 (22:24 +0100)
committerJohan Tibell <johan.tibell@gmail.com>
Thu, 13 Mar 2014 22:00:00 +0000 (23:00 +0100)
commit46d05ba03d1491cade4a3fe33f0b8c404ad3c760
tree9ebf6f5fb99ec2f75b80a451441a79f94e073401
parente55acf007f5109b42a2e388eaca63445bbbc7376
Fix two issues in stg_newArrayzh

The implementations of newArray# and newArrayArray#, stg_newArrayzh
and stg_newArrayArrayzh, had three issues:

 * The condition for the loop that fills the array with the initial
   element was incorrect. It would write into the card table as
   well. The condition for the loop that filled the card table was
   never executed, as its condition was also wrong. In the end this
   didn't lead to any disasters as the value of the card table doesn't
   matter for newly allocated arrays.

 * The card table was unnecessarily initialized. The card table is
   only used when the array isn't copied, which new arrays always
   are. By not writing the card table at all we save some cycles.

 * The ticky allocation accounting was wrong. The second argument to
   TICK_ALLOC_PRIM is the size of the closure excluding the header
   size, but the header size was incorrectly included.

Fixes #8867.
rts/PrimOps.cmm