Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/mltree/machine-int.sig
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/mltree/machine-int.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 775 - (view) (download) (as text)

1 : leunga 744 (*
2 : george 761 * This module implements 2's complement arithmetic of various widths.
3 : leunga 744 *)
4 :     signature MACHINE_INT =
5 :     sig
6 :    
7 : george 761 type machine_int = IntInf.int
8 :     type sz = int (* width in bits *)
9 : leunga 744
10 :     (* some common constants *)
11 :     val int_0 : machine_int
12 :     val int_1 : machine_int
13 :     val int_2 : machine_int
14 :     val int_3 : machine_int
15 :     val int_4 : machine_int
16 :     val int_7 : machine_int
17 :     val int_8 : machine_int
18 :     val int_m1 : machine_int (* ~1 *)
19 :     val int_m2 : machine_int (* ~2 *)
20 :     val int_m3 : machine_int (* ~3 *)
21 :     val int_m4 : machine_int (* ~4 *)
22 :     val int_15 : machine_int
23 :     val int_16 : machine_int
24 :     val int_31 : machine_int
25 :     val int_32 : machine_int
26 :     val int_63 : machine_int
27 :     val int_64 : machine_int
28 : george 761 val int_0xff : machine_int (* 255 *)
29 :     val int_0x100 : machine_int (* 256 *)
30 :     val int_0xffff : machine_int (* 65535 *)
31 :     val int_0x10000 : machine_int (* 65536 *)
32 :     val int_0xffffffff : machine_int
33 : leunga 744 val int_0x100000000 : machine_int
34 :    
35 : leunga 775
36 :     val hash : machine_int -> word
37 :    
38 : leunga 744 (* machine_int <-> other types *)
39 : george 761 val fromInt : sz * int -> machine_int
40 :     val fromInt32 : sz * Int32.int -> machine_int
41 :     val fromWord : sz * word -> machine_int
42 :     val fromWord32 : sz * Word32.word -> machine_int
43 : leunga 744
44 : george 761 val toInt : sz * machine_int -> int
45 :     val toWord : sz * machine_int -> word
46 :     val toWord32 : sz * machine_int -> Word32.word
47 :     val toInt32 : sz * machine_int -> Int32.int
48 : leunga 744
49 : george 761 val fromString : sz * string -> machine_int option
50 :     val toString : sz * machine_int -> string
51 :     val toHexString : sz * machine_int -> string
52 :     val toBinString : sz * machine_int -> string
53 :    
54 :    
55 :     (* when in doubt, use this to narrow to a given width! *)
56 :     val narrow : sz * IntInf.int -> machine_int
57 :    
58 :     (* convert to signed/unsigned representation *)
59 :     val signed : sz * machine_int -> IntInf.int
60 :     val unsigned : sz * machine_int -> IntInf.int
61 :    
62 : leunga 744 (* queries *)
63 :     val isNeg : machine_int -> bool
64 :     val isPos : machine_int -> bool
65 :     val isZero : machine_int -> bool
66 :     val isNonNeg : machine_int -> bool
67 :     val isNonPos : machine_int -> bool
68 :     val isEven : machine_int -> bool
69 :     val isOdd : machine_int -> bool
70 :    
71 :     (* two's complement operators *)
72 : george 761 val NEG : sz * machine_int -> machine_int
73 :     val ABS : sz * machine_int -> machine_int
74 :     val ADD : sz * machine_int * machine_int -> machine_int
75 :     val SUB : sz * machine_int * machine_int -> machine_int
76 :     val MULS : sz * machine_int * machine_int -> machine_int
77 :     val DIVS : sz * machine_int * machine_int -> machine_int
78 :     val QUOTS : sz * machine_int * machine_int -> machine_int
79 :     val REMS : sz * machine_int * machine_int -> machine_int
80 : leunga 744
81 : george 761 (* unsigned operators *)
82 :     val MULU : sz * machine_int * machine_int -> machine_int
83 :     val DIVU : sz * machine_int * machine_int -> machine_int
84 :     val QUOTU : sz * machine_int * machine_int -> machine_int
85 :     val REMU : sz * machine_int * machine_int -> machine_int
86 :    
87 :     (* Signed, trapping operators, may raise Overflow *)
88 :     val ABST : sz * machine_int -> machine_int
89 :     val NEGT : sz * machine_int -> machine_int
90 :     val ADDT : sz * machine_int * machine_int -> machine_int
91 :     val SUBT : sz * machine_int * machine_int -> machine_int
92 :     val MULT : sz * machine_int * machine_int -> machine_int
93 :     val DIVT : sz * machine_int * machine_int -> machine_int
94 :     val QUOTT : sz * machine_int * machine_int -> machine_int
95 :     val REMT : sz * machine_int * machine_int -> machine_int
96 :    
97 : leunga 744 (* bit operators *)
98 : george 761 val NOTB : sz * machine_int -> machine_int
99 :     val ANDB : sz * machine_int * machine_int -> machine_int
100 :     val ORB : sz * machine_int * machine_int -> machine_int
101 :     val XORB : sz * machine_int * machine_int -> machine_int
102 :     val EQVB : sz * machine_int * machine_int -> machine_int
103 :     val SLL : sz * machine_int * machine_int -> machine_int
104 :     val SRL : sz * machine_int * machine_int -> machine_int
105 :     val SRA : sz * machine_int * machine_int -> machine_int
106 :     val BITSLICE : sz * (int * int) list * machine_int -> machine_int
107 : leunga 744
108 :     (* Other useful operators *)
109 : george 761 val Sll : sz * machine_int * word -> machine_int
110 :     val Srl : sz * machine_int * word -> machine_int
111 :     val Sra : sz * machine_int * word -> machine_int
112 : leunga 744 val pow2 : int -> machine_int
113 : george 761 val maxOfSize : sz -> machine_int
114 :     val minOfSize : sz -> machine_int
115 :     val isInRange : sz * machine_int -> bool
116 : leunga 744
117 : george 761 (* Indexing *)
118 :     val bitOf : sz * machine_int * int -> word (* 0w0 or 0w1 *)
119 :     val byteOf : sz * machine_int * int -> word (* 8 bits *)
120 :     val halfOf : sz * machine_int * int -> word (* 16 bits *)
121 :     val wordOf : sz * machine_int * int -> Word32.word (* 32 bits *)
122 : leunga 744
123 :     (* type promotion *)
124 : george 761 val SX : sz (* to *) * sz (* from *) * machine_int -> machine_int
125 :     val ZX : sz (* to *) * sz (* from *) * machine_int -> machine_int
126 : leunga 744
127 :     (* comparisions *)
128 : george 761 val EQ : sz * machine_int * machine_int -> bool
129 :     val NE : sz * machine_int * machine_int -> bool
130 :     val GT : sz * machine_int * machine_int -> bool
131 :     val GE : sz * machine_int * machine_int -> bool
132 :     val LT : sz * machine_int * machine_int -> bool
133 :     val LE : sz * machine_int * machine_int -> bool
134 :     val LTU : sz * machine_int * machine_int -> bool
135 :     val GTU : sz * machine_int * machine_int -> bool
136 :     val LEU : sz * machine_int * machine_int -> bool
137 :     val GEU : sz * machine_int * machine_int -> bool
138 : leunga 744 end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0