Yes, it's always out-of-line.

Cheers,
Simon

On 06/03/2014 20:20, Johan Tibell wrote:
Is the below code it (from rts/PrimOps.cmm)? Does it being in
PrimOps.cmm mean that it's always out-of-line?

stg_newArrayzh ( W_ n /* words */, gcptr init )
{
     W_ words, size;
     gcptr p, arr;

     again: MAYBE_GC(again);

     // the mark area contains one byte for each
2^MUT_ARR_PTRS_CARD_BITS words
     // in the array, making sure we round up, and then rounding up to a
whole
     // number of words.
     size = n + mutArrPtrsCardWords(n);
     words = BYTES_TO_WDS(SIZEOF_StgMutArrPtrs) + size;
     ("ptr" arr) = ccall allocate(MyCapability() "ptr",words);
     TICK_ALLOC_PRIM(SIZEOF_StgMutArrPtrs, WDS(n), 0);

     SET_HDR(arr, stg_MUT_ARR_PTRS_DIRTY_info, CCCS);
     StgMutArrPtrs_ptrs(arr) = n;
     StgMutArrPtrs_size(arr) = size;

     // Initialise all elements of the the array with the value in R2
     p = arr + SIZEOF_StgMutArrPtrs;
   for:
     if (p < arr + WDS(words)) {
         W_[p] = init;
         p = p + WDS(1);
         goto for;
     }
     // Initialise the mark bits with 0
   for2:
     if (p < arr + WDS(size)) {
         W_[p] = 0;
         p = p + WDS(1);
         goto for2;
     }

     return (arr);
}
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to