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 /MLRISC/trunk/mltree/machine-int.sig
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1181 - (view) (download) (as text)
Original Path: sml/trunk/src/MLRISC/mltree/machine-int.sig

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

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