(* This module prints [ASM] programs. It is slightly more than just a
   printer: it also inserts code and directives that reserve space for
   global variables, initialize [$gp], transfer control to the entry
   procedure when the program is started, halt the program when the
   entry procedure returns, and provide code for the primitive
   operations. One might say that this is really a translation of
   [ASM] to MIPS assembly language. *)

open Print

val print_program: ASM.program printer