Changes between Version 71 and Version 72 of Commentary/Compiler/StackAreas


Ignore:
Timestamp:
Sep 19, 2013 2:25:56 PM (7 months ago)
Author:
simonpj
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Commentary/Compiler/StackAreas

    v71 v72  
    6060An `Area` represents space on the stack; it may use either the `RegSlot` constructor to represent a single stack slot for a register or the `CallArea` constructor to represent parameters passed to/from a function call/return. In a young `CallArea`, the `BlockId` is the label of the function call's continuation, and it passes parameters to the call.  
    6161 
    62 '''Each `Area` grows down, with offset 0 pointing to the old end of the `Area`.''' 
     62'''Each `Area` grows down (towards lower addresses), with offset 0 pointing to the old end of the `Area`.''' 
     63So offset 0 actually addresses the byte one beyond the high end of the `Area`. To address a 4-byte object at the old end of the `Area`, we use the offset 4. 
    6364 
    6465 The old call area is the initial state of the stack on entry to the function (the overflow parameters and the return address) as well as any arguments that will be passed to a tail call. Note that `RegSlot` areas are very small (since they only need to store a single register), while `CallArea` are contiguous chunks of arguments. 
     
    6667To name a specific location on the stack, we represent its address with a new kind of `CmmExpr`: the `CmmStackSlot`. 
    6768A `CmmStackSlot` is just an integer offset into an `Area`. [[BR]] 
    68 To address a 4-byte object at the old end of the `Area`, we use the offset 4. 
     69 
    6970 
    7071Notice that a `CmmStackSlot` is an ''address'', so we can say