[Haskell-cafe] STG questions

Andrew Harris andrew.unit at gmail.com
Tue Oct 19 13:53:51 EDT 2004

Hi -

   I am reading Simon Peyton Jones's "Implementing lazy functional
languages on stock hardware: the Spineless Tagless G-Machine" (I have
version 2.5) paper.  I would like very much to understand the contents
of Figure 5 which illustrate the mapping of the "map" function from
STG code to C.  However I have some questions.  For example,

* It looks like map_closure is the "closure" in that it has an array
of StgWords and the first word is a pointer to an info table.  This
info table contains map_entry as the entry code.  I am curious about
the relationship between map_entry and map_direct.  Why isn't the
stuff in map_direct done in map_entry?

* The ret_vec1 is a continuation that's placed on the B stack.  I am
assuming this is a "non-vectored" return that has contents similar to
Figure 7 (which is for vectored returns), but is this true?  Also, the
"upd_nil" and "upd_cons" functions aren't defined in the example. 
Maybe they just don't do anything?

* In the return_cons1() function, how did the head and tail get put
into the RegData1 and RegData2 registers?

* I may have missed it, but it looks like the fy and mfy use three
contiguous words of heap each.  Can I assume that the triple {Hp[-5],
Hp[-4], Hp[-3]} are of a structure similar to figure 4, the "Layout of
a closure", which in this case would have some pointer/non-pointer

thanks for any help,

More information about the Haskell-Cafe mailing list