File: operand-table.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 (59 lines) | stat: -rw-r--r-- 1,729 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(*
 * A table for storing operands for a compilation unit.
 * We give each distinct operand a unique (negative) value number.
 *)
signature OPERAND_TABLE =
sig

   structure I : INSTRUCTIONS

   type operandTable
   type valueNumber = I.C.cell

   datatype const =
     INT of int                        (* small integer operand *)
   | INTINF of MachineInt.machine_int  (* large integer operand *)
   | OPERAND of I.operand              (* other operand *)

   datatype valueNumberMethods =
      VALUE_NUMBERING of
      { int     : int -> valueNumber,
        word    : word -> valueNumber,
        word32  : Word32.word -> valueNumber,
        int32   : Int32.int -> valueNumber,
        intinf  : IntInf.int -> valueNumber,
        operand : I.operand -> valueNumber
      }

   exception NoOperand
   exception NoInt
   exception NoIntInf
   exception NoConst

   (* Special values *)
   val bot      : valueNumber
   val top      : valueNumber
   val volatile : valueNumber

   (* Create a new table *)
   val create  : int ref -> operandTable 

   (* Lookup methods *)

   (* Value number -> int/operand/label *)
   val const       : valueNumber -> const
   val int         : operandTable -> int -> valueNumber
   val word        : operandTable -> word -> valueNumber
   val int32       : operandTable -> Int32.int -> valueNumber
   val word32      : operandTable -> Word32.word -> valueNumber
   val intinf      : operandTable -> IntInf.int -> valueNumber
   val operand     : operandTable -> I.operand -> valueNumber

   (* Create new value numbers *)
   val makeNewValueNumbers : operandTable -> valueNumberMethods

   (* Lookup but don't create *)
   val lookupValueNumbers : operandTable -> valueNumberMethods


end