File: stream.sig

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (38 lines) | stat: -rw-r--r-- 1,527 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(*
 * This is a generic instruction stream datatype.
 * Components such as assemblers, machine code emitters, instruction
 * selection modules communicate with each via this interface.
 *
 * -- Allen
 *)

signature INSTRUCTION_STREAM =
sig

   structure P : PSEUDO_OPS
   datatype ('a,'b,'c,'d) stream =
      STREAM of
      { beginCluster: int -> unit,             (* start new compilation unit *)
        endCluster  : 'b -> 'd,                      (* end compilation unit *)
        emit        : 'a -> unit,                        (* emit instruction *)
        pseudoOp    : P.pseudo_op -> unit,               (* emit a pseudo op *)
        defineLabel : Label.label -> unit,           (* define a local label *)
        entryLabel  : Label.label -> unit,       (* define an external label *)
        comment     : string -> unit,                        (* emit comment *)
        annotation  : Annotations.annotation -> unit,      (* add annotation *)
        getAnnotations: unit -> Annotations.propList ref,  (* get annotations*)
        exitBlock   : 'c -> unit              (* mark the end of a procedure *)
      }

   (* Note:
    o  Each compilation unit should be wrapped between beginCluster/endCluster.
     
    o  The method annotation adds an annotation to the current basic block,
       not to the current instruction. 
       
    o  The method comment add a comment to the current basic block.
       Usually comment(msg) is the same as 
          annotation(BasicAnnotations.COMMENT msg).
    *)

end