Previous Up Next

Module Frames

module type FRAME =
   sig
     type register = string
     val rvTemp.temp (∗ return value, as seen by callee, p. 168 ∗) 
     val fpTemp.temp (∗ frame pointer register, p. 155 ∗)
     val registersregister list
     val temp_mapregister Temp.Table.table (∗ cf. p. 208 ∗)
     val wordsize : int

     val external_callstring × Tree.exp list → Tree.exp (∗ p. 165 ∗)

     type frame (∗ p. 134 ∗)
     type access (∗ not shown on p. 260 ∗)

     val new_frame: (Temp.label × bool list) → frame (∗ p. 135 vs. p. 260? ∗)
     (∗ val new_frame: Temp.label * int -> (frame * int list) ∗) (∗ p. 135 vs. p. 260? ∗)
     val formalsframe → access list 
     val nameframe → Temp.label 
     val alloc_localframe → bool → access (∗ p. 137/p. 260:!? frame -> int ∗)
     val stringTemp.label × string → string (∗ p. 262/163 ∗)

     val proc_entry_exit1frame × Tree.stm → Tree.stm (∗ p. 169, 261 ∗)
     val proc_entry_exit2frame × Assem.instr list → Assem.instr list (∗ p. 208 ∗)
     val proc_entry_exit3frame × Assem.instr list → (string × (Assem.instr list) × string)

     type frag = Proc of Tree.stm × frame 
       ∣ String of Temp.label × string

     Given an frame local access and a tree-expression that calculates how to reach the frame, the function gives back the absolute access. The second function directly gives code for access within the frame.


     val expaccess → Tree.exp → Tree.exp 
     val direct_expaccess → Tree.exp

the function, used by Translate, takes an access and gives back the code; the second argument is to refer to the correct frame and this has to be calculated
     val string_of_accessaccess → string
     val string_of_frameframe → string

end

 ,
Previous Up Next