Annotation of researchv10no/cmd/sml/src/mips/mipscoder.sig, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: signature MIPSCODER = sig
                      3: 
                      4: (* Assembler for the MIPS chip *)
                      5: 
                      6: eqtype Label
                      7: datatype Register = Reg of int
                      8:     (* Registers 1 and 31 are reserved for use by this assembler *)
                      9: datatype EA = Direct of Register | Immed of int | Immedlab of Label
                     10:                                 (* effective address *)
                     11: 
                     12: structure M : sig
                     13: 
                     14:     (* Emit various constants into the code *)
                     15: 
                     16:     val emitstring : string -> unit     (* put a literal string into the
                     17:                                            code (null-terminated?) and
                     18:                                            extend with nulls to 4-byte 
                     19:                                            boundary. Just chars, no 
                     20:                                            descriptor or length *)
                     21:     val realconst : string -> unit      (* emit a floating pt literal *)
                     22:                                                 (* NOT RIGHT YET *)
                     23:     val emitlong : int -> unit          (* emit a 4-byte integer literal *)
                     24: 
                     25: 
                     26:     (* Label bindings and emissions *)
                     27: 
                     28:     val newlabel : unit -> Label        (* new, unbound label *)
                     29:     val define : Label -> unit          (* cause the label to be bound to
                     30:                                            the code about to be generated *)
                     31:     val emitlab : int * Label -> unit   (* L3: emitlab(k,L2) is equivalent to
                     32:                                            L3: emitlong(k+L2-L3) *)
                     33: 
                     34:     (* Control flow instructions *)
                     35: 
                     36:     val slt : Register * EA * Register -> unit
                     37:                 (* (operand1, operand2, result) *)
                     38:                                         (* set less than family *)
                     39:     val beq : bool * Register * Register * Label -> unit
                     40:                 (* (beq or bne, operand1, operand2, branch address) *)
                     41:                                         (* branch equal/not equal family *)
                     42:     
                     43:     val jump : Register -> unit         (* jump register instruction *)
                     44: 
                     45:     val slt_double : Register * Register -> unit
                     46:                                        (* floating pt set less than *)
                     47:     val seq_double : Register * Register -> unit
                     48:                                        (* floating pt set equal *)
                     49:     val bcop1 : bool * Label -> unit    (* floating pt conditional branch *)
                     50: 
                     51: 
                     52:     (* Arithmetic instructions *)
                     53:             (* arguments are (operand1, operand2, result) *)
                     54: 
                     55:     val add : Register * EA * Register -> unit
                     56:     val and' : Register * EA * Register -> unit
                     57:     val or : Register * EA * Register -> unit
                     58:     val xor : Register * EA * Register -> unit
                     59:     val sub : Register * Register * Register -> unit
                     60:     val div : Register * Register * Register -> unit
                     61:     val mult : Register * Register * Register -> unit
                     62:     val mfhi : Register -> unit                (* high word of 64-bit multiply *)
                     63:     
                     64:     (* Floating point arithmetic *)
                     65: 
                     66:     val neg_double : Register * Register -> unit
                     67:     val mul_double : Register * Register * Register -> unit
                     68:     val div_double : Register * Register * Register -> unit
                     69:     val add_double : Register * Register * Register -> unit
                     70:     val sub_double : Register * Register * Register -> unit
                     71: 
                     72:     (* Move pseudo-instruction :  move(src,dest) *)
                     73: 
                     74:     val move : EA * Register -> unit
                     75: 
                     76:     (* Load and store instructions *)
                     77:             (* arguments are (destination, source address, offset) *)
                     78:  
                     79:     val lbu  : Register * EA * int -> unit (* bytes *)
                     80:     val sb  : Register * EA * int -> unit
                     81:     val lw  : Register * EA * int -> unit  (* words *)
                     82:     val sw  : Register * EA * int -> unit
                     83:     val lwc1: Register * EA * int -> unit  (* floating point coprocessor *)
                     84:     val swc1: Register * EA * int -> unit
                     85:     val lui : Register * int -> unit
                     86: 
                     87:     (* Shift instructions *)
                     88:             (* arguments are (shamt, operand, result) *)
                     89:             (* shamt as Immedlab _ is senseless *)
                     90: 
                     91:     val sll : EA * Register * Register -> unit
                     92:     val sra : EA * Register * Register -> unit
                     93:     
                     94: 
                     95:     (* Miscellany *)
                     96: 
                     97:     val align : unit -> unit            (* cause next data to be emitted on
                     98:                                            a 4-byte boundary *)
                     99:     val mark : unit -> unit             (* emit a back pointer, 
                    100:                                            also called mark *)
                    101: 
                    102:     val comment : string -> unit
                    103: 
                    104:   end (* signature of structure M *)
                    105: 
                    106:   val codegen : (int * int -> unit) * (int -> string -> unit) 
                    107:                        * (string -> unit) -> unit
                    108: 
                    109:   val codestats : outstream -> unit    (* write statistics on stream *)
                    110: 
                    111: end (* signature MIPSCODER *)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.