[MLton-commit] r4373

Matthew Fluet MLton@mlton.org
Sat, 4 Mar 2006 09:09:40 -0800


Initial port of the MLRISC Library
----------------------------------------------------------------------

U   mlton/trunk/Makefile
A   mlton/trunk/lib/mlrisc-lib/
A   mlton/trunk/lib/mlrisc-lib/.ignore
A   mlton/trunk/lib/mlrisc-lib/MLRISC.patch
A   mlton/trunk/lib/mlrisc-lib/MLRISC.tgz
A   mlton/trunk/lib/mlrisc-lib/Makefile
U   mlton/trunk/util/cm2mlb/cm2mlb-map

----------------------------------------------------------------------

Modified: mlton/trunk/Makefile
===================================================================
--- mlton/trunk/Makefile	2006-03-04 14:35:22 UTC (rev 4372)
+++ mlton/trunk/Makefile	2006-03-04 17:09:22 UTC (rev 4373)
@@ -169,17 +169,19 @@
         # do not change "make" to "$(MAKE)" in the following line
 	cd $(BSDSRC)/package/freebsd && MAINTAINER_MODE=yes make build-package  
 
-LIBRARIES = ckit-lib cml mlnlffi-lib mlyacc-lib smlnj-lib
+LIBRARIES = ckit-lib cml mlnlffi-lib mlrisc-lib mlyacc-lib smlnj-lib
 
 .PHONY: libraries-no-check
 libraries-no-check:
 	mkdir -p $(LIB)/sml
 	cd $(LIB)/sml && rm -rf $(LIBRARIES)
 	$(MAKE) -C $(SRC)/lib/ckit-lib
+	$(MAKE) -C $(SRC)/lib/mlrisc-lib
 	$(MAKE) -C $(SRC)/lib/smlnj-lib
 	$(CP) $(SRC)/lib/cml/. $(LIB)/sml/cml
 	$(CP) $(SRC)/lib/ckit-lib/ckit/. $(LIB)/sml/ckit-lib
 	$(CP) $(SRC)/lib/mlnlffi/. $(LIB)/sml/mlnlffi-lib
+	$(CP) $(SRC)/lib/mlrisc-lib/MLRISC/. $(LIB)/sml/mlrisc-lib
 	$(CP) $(SRC)/lib/mlyacc/. $(LIB)/sml/mlyacc-lib
 	$(CP) $(SRC)/lib/smlnj-lib/smlnj-lib/. $(LIB)/sml/smlnj-lib
 	find $(LIB)/sml -type d -name .svn | xargs rm -rf


Property changes on: mlton/trunk/lib/mlrisc-lib
___________________________________________________________________
Name: svn:ignore
   + MLRISC


Added: mlton/trunk/lib/mlrisc-lib/.ignore
===================================================================
--- mlton/trunk/lib/mlrisc-lib/.ignore	2006-03-04 14:35:22 UTC (rev 4372)
+++ mlton/trunk/lib/mlrisc-lib/.ignore	2006-03-04 17:09:22 UTC (rev 4373)
@@ -0,0 +1 @@
+MLRISC

Added: mlton/trunk/lib/mlrisc-lib/MLRISC.patch
===================================================================
--- mlton/trunk/lib/mlrisc-lib/MLRISC.patch	2006-03-04 14:35:22 UTC (rev 4372)
+++ mlton/trunk/lib/mlrisc-lib/MLRISC.patch	2006-03-04 17:09:22 UTC (rev 4373)
@@ -0,0 +1,13603 @@
+diff -Naur MLRISC/aliasing/pointsTo.sig MLRISC-mlton/aliasing/pointsTo.sig
+--- MLRISC/aliasing/pointsTo.sig	2000-12-07 23:11:33.000000000 -0500
++++ MLRISC-mlton/aliasing/pointsTo.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -7,18 +7,27 @@
+ sig
+ 
+    eqtype edgekind 
+-   structure C : CELLS_BASIS = CellsBasis
++   structure C : CELLS_BASIS (* = CellsBasis *)
++                 where type CellSet.cellset = CellsBasis.CellSet.cellset
++                   and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                   and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                   and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                   and type cell = CellsBasis.cell
++                   and type cellColor = CellsBasis.cellColor
++                   and type cellkind = CellsBasis.cellkind
++                   and type cellkindDesc = CellsBasis.cellkindDesc
++                   and type cellkindInfo = CellsBasis.cellkindInfo
+ 
+    datatype cell = 
+-     LINK  of region                             
+-   | SREF  of C.cell * edges ref
+-   | WREF  of C.cell * edges ref
+-   | SCELL of C.cell * edges ref
+-   | WCELL of C.cell * edges ref
++     LINK  of cell ref
++   | SREF  of C.cell * (edgekind * int * cell ref) list ref
++   | WREF  of C.cell * (edgekind * int * cell ref) list ref
++   | SCELL of C.cell * (edgekind * int * cell ref) list ref
++   | WCELL of C.cell * (edgekind * int * cell ref) list ref
+    | TOP   of {mutable:bool, id:C.cell, name:string}
+       (* a collapsed node *)
+-   withtype region = cell ref
+-   and      edges  = (edgekind * int * region) list
++   type region = cell ref
++   type edges  = (edgekind * int * region) list
+ 
+    val reset    : (unit -> C.cell) -> unit
+ 
+diff -Naur MLRISC/aliasing/pointsTo.sml MLRISC-mlton/aliasing/pointsTo.sml
+--- MLRISC/aliasing/pointsTo.sml	2002-03-07 16:16:23.000000000 -0500
++++ MLRISC-mlton/aliasing/pointsTo.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -10,25 +10,30 @@
+    structure C = CellsBasis
+ 
+    datatype cell = 
+-     LINK  of region
+-   | SREF  of C.cell * edges ref
+-   | WREF  of C.cell * edges ref
+-   | SCELL of C.cell * edges ref
+-   | WCELL of C.cell * edges ref
++     LINK  of cell ref
++   | SREF  of C.cell * (edgekind * int * cell ref) list ref
++   | WREF  of C.cell * (edgekind * int * cell ref) list ref
++   | SCELL of C.cell * (edgekind * int * cell ref) list ref
++   | WCELL of C.cell * (edgekind * int * cell ref) list ref
+    | TOP   of {mutable:bool, id:C.cell, name:string}
+       (* a collapsed node *)
+-
+-   withtype region = cell ref
+-   and      edges  = (edgekind * int * region) list
++   type region = cell ref
++   type edges  = (edgekind * int * region) list
+ 
+    fun error msg = MLRiscErrorMsg.error("PointsTo",msg)
+ 
+    (* PI > DOM > RAN > RECORD *)
+    fun greaterKind(PI,_) = false   
+      | greaterKind(DOM,PI) = false
+-     | greaterKind(RAN,(PI | DOM)) = false
+-     | greaterKind(RECORD,(PI | DOM | RAN)) = false
+-     | greaterKind(MARK,(PI | DOM | RAN | RECORD)) = false
++     | greaterKind(RAN,PI) = false
++     | greaterKind(RAN,DOM) = false
++     | greaterKind(RECORD,PI) = false
++     | greaterKind(RECORD,DOM) = false
++     | greaterKind(RECORD,RAN) = false
++     | greaterKind(MARK,PI) = false
++     | greaterKind(MARK,DOM) = false
++     | greaterKind(MARK,RAN) = false
++     | greaterKind(MARK,RECORD) = false
+      | greaterKind _ = true
+ 
+    fun less(k,i,k',i') = k=k' andalso i > i' orelse greaterKind(k,k')
+diff -Naur MLRISC/alpha/backpatch/alphaJumps.sml MLRISC-mlton/alpha/backpatch/alphaJumps.sml
+--- MLRISC/alpha/backpatch/alphaJumps.sml	2003-05-22 18:46:19.000000000 -0400
++++ MLRISC-mlton/alpha/backpatch/alphaJumps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,10 +5,67 @@
+  *)
+ functor AlphaJumps
+   (structure Instr : ALPHAINSTR
+-   structure Shuffle : ALPHASHUFFLE 
+-			   where I = Instr
+-   structure MLTreeEval : MLTREE_EVAL 
+-			   where T = Instr.T
++   structure Shuffle : ALPHASHUFFLE (* where I = Instr *)
++                       where type I.Constant.const = Instr.Constant.const
++                         and type I.Region.region = Instr.Region.region
++                         and type I.T.Basis.cond = Instr.T.Basis.cond
++                         and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                         and type I.T.Basis.ext = Instr.T.Basis.ext
++                         and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                         and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                         and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                         and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                         and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                         and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                         and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                         and type I.T.ccexp = Instr.T.ccexp
++                         and type I.T.fexp = Instr.T.fexp
++                         (* and type I.T.labexp = Instr.T.labexp *)
++                         and type I.T.mlrisc = Instr.T.mlrisc
++                         and type I.T.oper = Instr.T.oper
++                         and type I.T.rep = Instr.T.rep
++                         and type I.T.rexp = Instr.T.rexp
++                         and type I.T.stm = Instr.T.stm
++                         and type I.branch = Instr.branch
++                         and type I.cmove = Instr.cmove
++                         and type I.ea = Instr.ea
++                         and type I.fbranch = Instr.fbranch
++                         and type I.fcmove = Instr.fcmove
++                         and type I.fload = Instr.fload
++                         and type I.foperate = Instr.foperate
++                         and type I.foperateV = Instr.foperateV
++                         and type I.fstore = Instr.fstore
++                         and type I.funary = Instr.funary
++                         and type I.instr = Instr.instr
++                         and type I.instruction = Instr.instruction
++                         and type I.load = Instr.load
++                         and type I.operand = Instr.operand
++                         and type I.operate = Instr.operate
++                         and type I.operateV = Instr.operateV
++                         and type I.osf_user_palcode = Instr.osf_user_palcode
++                         and type I.pseudo_op = Instr.pseudo_op
++                         and type I.store = Instr.store
++   structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
+   ) : SDI_JUMPS = 
+ struct
+   structure I = Instr
+diff -Naur MLRISC/alpha/emit/alphaAsm.sml MLRISC-mlton/alpha/emit/alphaAsm.sml
+--- MLRISC/alpha/emit/alphaAsm.sml	2002-03-07 16:16:24.000000000 -0500
++++ MLRISC-mlton/alpha/emit/alphaAsm.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,12 +6,88 @@
+ 
+ 
+ functor AlphaAsmEmitter(structure S : INSTRUCTION_STREAM
+-                        structure Instr : ALPHAINSTR
+-                           where T = S.P.T
+-                        structure Shuffle : ALPHASHUFFLE
+-                           where I = Instr
+-                        structure MLTreeEval : MLTREE_EVAL
+-                           where T = Instr.T
++                        structure Instr : ALPHAINSTR (* where T = S.P.T *)
++                                          where type T.Basis.cond = S.P.T.Basis.cond
++                                            and type T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++                                            and type T.Basis.ext = S.P.T.Basis.ext
++                                            and type T.Basis.fcond = S.P.T.Basis.fcond
++                                            and type T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++                                            and type T.Constant.const = S.P.T.Constant.const
++                                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++                                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++                                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++                                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++                                            and type T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++                                            and type T.Region.region = S.P.T.Region.region
++                                            and type T.ccexp = S.P.T.ccexp
++                                            and type T.fexp = S.P.T.fexp
++                                            (* and type T.labexp = S.P.T.labexp *)
++                                            and type T.mlrisc = S.P.T.mlrisc
++                                            and type T.oper = S.P.T.oper
++                                            and type T.rep = S.P.T.rep
++                                            and type T.rexp = S.P.T.rexp
++                                            and type T.stm = S.P.T.stm
++                        structure Shuffle : ALPHASHUFFLE (* where I = Instr *)
++                                            where type I.Constant.const = Instr.Constant.const
++                                              and type I.Region.region = Instr.Region.region
++                                              and type I.T.Basis.cond = Instr.T.Basis.cond
++                                              and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                              and type I.T.Basis.ext = Instr.T.Basis.ext
++                                              and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                              and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                              and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                              and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                              and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                              and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                              and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                              and type I.T.ccexp = Instr.T.ccexp
++                                              and type I.T.fexp = Instr.T.fexp
++                                              (* and type I.T.labexp = Instr.T.labexp *)
++                                              and type I.T.mlrisc = Instr.T.mlrisc
++                                              and type I.T.oper = Instr.T.oper
++                                              and type I.T.rep = Instr.T.rep
++                                              and type I.T.rexp = Instr.T.rexp
++                                              and type I.T.stm = Instr.T.stm
++                                              and type I.branch = Instr.branch
++                                              and type I.cmove = Instr.cmove
++                                              and type I.ea = Instr.ea
++                                              and type I.fbranch = Instr.fbranch
++                                              and type I.fcmove = Instr.fcmove
++                                              and type I.fload = Instr.fload
++                                              and type I.foperate = Instr.foperate
++                                              and type I.foperateV = Instr.foperateV
++                                              and type I.fstore = Instr.fstore
++                                              and type I.funary = Instr.funary
++                                              and type I.instr = Instr.instr
++                                              and type I.instruction = Instr.instruction
++                                              and type I.load = Instr.load
++                                              and type I.operand = Instr.operand
++                                              and type I.operate = Instr.operate
++                                              and type I.operateV = Instr.operateV
++                                              and type I.osf_user_palcode = Instr.osf_user_palcode
++                                              and type I.pseudo_op = Instr.pseudo_op
++                                              and type I.store = Instr.store
++                        structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                               where type T.Basis.cond = Instr.T.Basis.cond
++                                                 and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                                 and type T.Basis.ext = Instr.T.Basis.ext
++                                                 and type T.Basis.fcond = Instr.T.Basis.fcond
++                                                 and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                                 and type T.Constant.const = Instr.T.Constant.const
++                                                 and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                                 and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                                 and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                                 and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                                 and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                                 and type T.Region.region = Instr.T.Region.region
++                                                 and type T.ccexp = Instr.T.ccexp
++                                                 and type T.fexp = Instr.T.fexp
++                                                 (* and type T.labexp = Instr.T.labexp *)
++                                                 and type T.mlrisc = Instr.T.mlrisc
++                                                 and type T.oper = Instr.T.oper
++                                                 and type T.rep = Instr.T.rep
++                                                 and type T.rexp = Instr.T.rexp
++                                                 and type T.stm = Instr.T.stm
+                        ) : INSTRUCTION_EMITTER =
+ struct
+    structure I  = Instr
+diff -Naur MLRISC/alpha/emit/alphaMC.sml MLRISC-mlton/alpha/emit/alphaMC.sml
+--- MLRISC/alpha/emit/alphaMC.sml	2002-01-09 14:44:18.000000000 -0500
++++ MLRISC-mlton/alpha/emit/alphaMC.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,7 +6,27 @@
+ 
+ 
+ functor AlphaMCEmitter(structure Instr : ALPHAINSTR
+-                       structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++                       structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                              where type T.Basis.cond = Instr.T.Basis.cond
++                                                and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                                and type T.Basis.ext = Instr.T.Basis.ext
++                                                and type T.Basis.fcond = Instr.T.Basis.fcond
++                                                and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                                and type T.Constant.const = Instr.T.Constant.const
++                                                and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                                and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                                and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                                and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                                and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                                and type T.Region.region = Instr.T.Region.region
++                                                and type T.ccexp = Instr.T.ccexp
++                                                and type T.fexp = Instr.T.fexp
++                                                (* and type T.labexp = Instr.T.labexp *)
++                                                and type T.mlrisc = Instr.T.mlrisc
++                                                and type T.oper = Instr.T.oper
++                                                and type T.rep = Instr.T.rep
++                                                and type T.rexp = Instr.T.rexp
++                                                and type T.stm = Instr.T.stm
+                        structure Stream : INSTRUCTION_STREAM 
+                        structure CodeString : CODE_STRING
+                       ) : INSTRUCTION_EMITTER =
+@@ -47,6 +67,7 @@
+        (* note: fromLargeWord strips the high order bits! *)
+        fun eByteW w =
+        let val i = !loc
++           val w = W.toLargeWord w
+        in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
+    
+        fun doNothing _ = ()
+diff -Naur MLRISC/alpha/flowgraph/alphaGasPseudoOps.sml MLRISC-mlton/alpha/flowgraph/alphaGasPseudoOps.sml
+--- MLRISC/alpha/flowgraph/alphaGasPseudoOps.sml	2001-11-21 13:39:55.000000000 -0500
++++ MLRISC-mlton/alpha/flowgraph/alphaGasPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,26 @@
+ functor AlphaGasPseudoOps 
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL  where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+     ) : PSEUDO_OPS_BASIS = 
+ 
+ struct
+diff -Naur MLRISC/alpha/instructions/alphaInstr.sml MLRISC-mlton/alpha/instructions/alphaInstr.sml
+--- MLRISC/alpha/instructions/alphaInstr.sml	2002-01-24 00:45:15.000000000 -0500
++++ MLRISC-mlton/alpha/instructions/alphaInstr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature ALPHAINSTR =
+ sig
+    structure C : ALPHACELLS
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    structure T : MLTREE
+    structure Constant: CONSTANT
+    structure Region : REGION
+diff -Naur MLRISC/alpha/instructions/alphaProps.sml MLRISC-mlton/alpha/instructions/alphaProps.sml
+--- MLRISC/alpha/instructions/alphaProps.sml	2002-03-11 22:56:22.000000000 -0500
++++ MLRISC-mlton/alpha/instructions/alphaProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,8 +6,48 @@
+ 
+ functor AlphaProps
+    (structure Instr : ALPHAINSTR
+-    structure MLTreeHash :  MLTREE_HASH where T = Instr.T
+-    structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++    structure MLTreeHash : MLTREE_HASH (* where T = Instr.T *)
++                           where type T.Basis.cond = Instr.T.Basis.cond
++                             and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                             and type T.Basis.ext = Instr.T.Basis.ext
++                             and type T.Basis.fcond = Instr.T.Basis.fcond
++                             and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                             and type T.Constant.const = Instr.T.Constant.const
++                             and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                             and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                             and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                             and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                             and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                             and type T.Region.region = Instr.T.Region.region
++                             and type T.ccexp = Instr.T.ccexp
++                             and type T.fexp = Instr.T.fexp
++                             (* and type T.labexp = Instr.T.labexp *)
++                             and type T.mlrisc = Instr.T.mlrisc
++                             and type T.oper = Instr.T.oper
++                             and type T.rep = Instr.T.rep
++                             and type T.rexp = Instr.T.rexp
++                             and type T.stm = Instr.T.stm
++    structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                           where type T.Basis.cond = Instr.T.Basis.cond
++                             and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                             and type T.Basis.ext = Instr.T.Basis.ext
++                             and type T.Basis.fcond = Instr.T.Basis.fcond
++                             and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                             and type T.Constant.const = Instr.T.Constant.const
++                             and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                             and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                             and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                             and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                             and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                             and type T.Region.region = Instr.T.Region.region
++                             and type T.ccexp = Instr.T.ccexp
++                             and type T.fexp = Instr.T.fexp
++                             (* and type T.labexp = Instr.T.labexp *)
++                             and type T.mlrisc = Instr.T.mlrisc
++                             and type T.oper = Instr.T.oper
++                             and type T.rep = Instr.T.rep
++                             and type T.rexp = Instr.T.rexp
++                             and type T.stm = Instr.T.stm
+     ):INSN_PROPERTIES =
+ struct
+     structure I = Instr
+diff -Naur MLRISC/alpha/mltree/alphaPseudoInstr.sig MLRISC-mlton/alpha/mltree/alphaPseudoInstr.sig
+--- MLRISC/alpha/mltree/alphaPseudoInstr.sig	2001-07-19 16:35:13.000000000 -0400
++++ MLRISC-mlton/alpha/mltree/alphaPseudoInstr.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -4,10 +4,39 @@
+ sig
+    structure I : ALPHAINSTR
+    structure T : MLTREE
++                 where type Basis.cond = I.T.Basis.cond
++                   and type Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                   and type Basis.ext = I.T.Basis.ext
++                   and type Basis.fcond = I.T.Basis.fcond
++                   and type Basis.rounding_mode = I.T.Basis.rounding_mode
++                   and type Constant.const = I.T.Constant.const
++                   and type ('s,'r,'f,'c) Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                   and type ('s,'r,'f,'c) Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                   and type ('s,'r,'f,'c) Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                   and type ('s,'r,'f,'c) Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                   and type I.div_rounding_mode = I.T.I.div_rounding_mode
++                   and type Region.region = I.T.Region.region
++                   and type ccexp = I.T.ccexp
++                   and type fexp = I.T.fexp
++                   (* and type labexp = I.T.labexp *)
++                   and type mlrisc = I.T.mlrisc
++                   and type oper = I.T.oper
++                   and type rep = I.T.rep
++                   and type rexp = I.T.rexp
++                   and type stm = I.T.stm
+    structure C : ALPHACELLS
+-     sharing C = I.C
+-     sharing I.T = T
+-   structure CB: CELLS_BASIS = CellsBasis
++     (* sharing C = I.C *)
++     (* sharing I.T = T *)
++   structure CB: CELLS_BASIS (* = CellsBasis *)
++                 where type CellSet.cellset = CellsBasis.CellSet.cellset
++                   and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                   and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                   and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                   and type cell = CellsBasis.cell
++                   and type cellColor = CellsBasis.cellColor
++                   and type cellkind = CellsBasis.cellkind
++                   and type cellkindDesc = CellsBasis.cellkindDesc
++                   and type cellkindInfo = CellsBasis.cellkindInfo
+   
+    type reduceOpnd = I.operand -> CB.cell
+ 
+diff -Naur MLRISC/alpha/mltree/alpha.sml MLRISC-mlton/alpha/mltree/alpha.sml
+--- MLRISC/alpha/mltree/alpha.sml	2003-08-28 17:58:42.000000000 -0400
++++ MLRISC-mlton/alpha/mltree/alpha.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -11,11 +11,72 @@
+ 
+ functor Alpha
+    (structure AlphaInstr : ALPHAINSTR 
+-    structure PseudoInstrs : ALPHA_PSEUDO_INSTR
+-    			where I = AlphaInstr
+-    structure ExtensionComp : MLTREE_EXTENSION_COMP
+-    			where I = AlphaInstr
+-			  and T = AlphaInstr.T
++    structure PseudoInstrs : ALPHA_PSEUDO_INSTR (* where I = AlphaInstr *)
++                             where type I.Constant.const = AlphaInstr.Constant.const
++                               and type I.Region.region = AlphaInstr.Region.region
++                               and type I.T.Basis.cond = AlphaInstr.T.Basis.cond
++                               and type I.T.Basis.div_rounding_mode = AlphaInstr.T.Basis.div_rounding_mode
++                               and type I.T.Basis.ext = AlphaInstr.T.Basis.ext
++                               and type I.T.Basis.fcond = AlphaInstr.T.Basis.fcond
++                               and type I.T.Basis.rounding_mode = AlphaInstr.T.Basis.rounding_mode
++                               and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) AlphaInstr.T.Extension.ccx
++                               and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) AlphaInstr.T.Extension.fx
++                               and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) AlphaInstr.T.Extension.rx
++                               and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) AlphaInstr.T.Extension.sx
++                               and type I.T.I.div_rounding_mode = AlphaInstr.T.I.div_rounding_mode
++                               and type I.T.ccexp = AlphaInstr.T.ccexp
++                               and type I.T.fexp = AlphaInstr.T.fexp
++                               (* and type I.T.labexp = AlphaInstr.T.labexp *)
++                               and type I.T.mlrisc = AlphaInstr.T.mlrisc
++                               and type I.T.oper = AlphaInstr.T.oper
++                               and type I.T.rep = AlphaInstr.T.rep
++                               and type I.T.rexp = AlphaInstr.T.rexp
++                               and type I.T.stm = AlphaInstr.T.stm
++                               and type I.branch = AlphaInstr.branch
++                               and type I.cmove = AlphaInstr.cmove
++                               and type I.ea = AlphaInstr.ea
++                               and type I.fbranch = AlphaInstr.fbranch
++                               and type I.fcmove = AlphaInstr.fcmove
++                               and type I.fload = AlphaInstr.fload
++                               and type I.foperate = AlphaInstr.foperate
++                               and type I.foperateV = AlphaInstr.foperateV
++                               and type I.fstore = AlphaInstr.fstore
++                               and type I.funary = AlphaInstr.funary
++                               and type I.instr = AlphaInstr.instr
++                               and type I.instruction = AlphaInstr.instruction
++                               and type I.load = AlphaInstr.load
++                               and type I.operand = AlphaInstr.operand
++                               and type I.operate = AlphaInstr.operate
++                               and type I.operateV = AlphaInstr.operateV
++                               and type I.osf_user_palcode = AlphaInstr.osf_user_palcode
++                               and type I.pseudo_op = AlphaInstr.pseudo_op
++                               and type I.store = AlphaInstr.store
++    structure ExtensionComp : MLTREE_EXTENSION_COMP (* where I = AlphaInstr and T = AlphaInstr.T *)
++                              where type I.addressing_mode = AlphaInstr.addressing_mode
++                                and type I.ea = AlphaInstr.ea
++                                and type I.instr = AlphaInstr.instr
++                                and type I.instruction = AlphaInstr.instruction
++                                and type I.operand = AlphaInstr.operand
++                              where type T.Basis.cond = AlphaInstr.T.Basis.cond
++                                and type T.Basis.div_rounding_mode = AlphaInstr.T.Basis.div_rounding_mode
++                                and type T.Basis.ext = AlphaInstr.T.Basis.ext
++                                and type T.Basis.fcond = AlphaInstr.T.Basis.fcond
++                                and type T.Basis.rounding_mode = AlphaInstr.T.Basis.rounding_mode
++                                and type T.Constant.const = AlphaInstr.T.Constant.const
++                                and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) AlphaInstr.T.Extension.ccx
++                                and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) AlphaInstr.T.Extension.fx
++                                and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) AlphaInstr.T.Extension.rx
++                                and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) AlphaInstr.T.Extension.sx
++                                and type T.I.div_rounding_mode = AlphaInstr.T.I.div_rounding_mode
++                                and type T.Region.region = AlphaInstr.T.Region.region
++                                and type T.ccexp = AlphaInstr.T.ccexp
++                                and type T.fexp = AlphaInstr.T.fexp
++                                (* and type T.labexp = AlphaInstr.T.labexp *)
++                                and type T.mlrisc = AlphaInstr.T.mlrisc
++                                and type T.oper = AlphaInstr.T.oper
++                                and type T.rep = AlphaInstr.T.rep
++                                and type T.rexp = AlphaInstr.T.rexp
++                                and type T.stm = AlphaInstr.T.stm
+ 
+       (* Cost of multiplication in cycles *)
+     val multCost : int ref
+@@ -215,7 +276,9 @@
+    * Specialize the modules for multiplication/division 
+    * by constant optimizations.
+    *)
+-  functor Multiply32 = MLTreeMult
++
++  (* signed, trapping version of multiply and divide *)
++  structure Mult32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CellsBasis
+@@ -256,40 +319,115 @@
+          in  [I.operate{oper=I.ADDL,ra=r,rb=zeroOpn,rc=tmp},
+               I.operate{oper=I.SRA,ra=tmp,rb=I.IMMop i,rc=d}]
+          end 
+-    )
++     
++     val trapping = true
++     val multCost = multCost
++     fun addv{r1,r2,d} = [I.operatev{oper=I.ADDLV,ra=r1,rb=I.REGop r2,rc=d}]
++     fun subv{r1,r2,d} = [I.operatev{oper=I.SUBLV,ra=r1,rb=I.REGop r2,rc=d}]
++     val sh1addv = NONE
++     val sh2addv = NONE
++     val sh3addv = NONE
++     
++     val signed = true)
+ 
+-  functor Multiply64 = MLTreeMult
++  (* unsigned, non-trapping version of multiply and divide *)
++  structure Mulu32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CellsBasis
+-   
+-     val intTy = 64
+ 
+-     type arg  = {r1:CB.cell, r2:CB.cell, d:CB.cell}
+-     type argi = {r:CB.cell, i:int, d:CB.cell}
++     val intTy = 32
++   
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
+ 
+      fun mov{r,d}    = I.COPY{k=CB.GP, sz=intTy, dst=[d],src=[r],tmp=NONE}
+-     fun add{r1,r2,d}= I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}
+-     fun slli{r,i,d} = [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=d}]
+-     fun srli{r,i,d} = [I.operate{oper=I.SRL,ra=r,rb=I.IMMop i,rc=d}]
+-     fun srai{r,i,d} = [I.operate{oper=I.SRA,ra=r,rb=I.IMMop i,rc=d}]
+-    )
++     fun add{r1,r2,d} = I.operate{oper=I.ADDL,ra=r1,rb=I.REGop r2,rc=d}
++     (*
++      * How to left shift by a constant (32bits)
++      *)
++     fun slli{r,i=1,d} = [I.operate{oper=I.ADDL,ra=r,rb=I.REGop r,rc=d}]
++       | slli{r,i=2,d} = [I.operate{oper=I.S4ADDL,ra=r,rb=zeroOpn,rc=d}]
++       | slli{r,i=3,d} = [I.operate{oper=I.S8ADDL,ra=r,rb=zeroOpn,rc=d}]
++       | slli{r,i,d}   = 
++          let val tmp = C.newReg()
++          in  [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=tmp},
++               I.operate{oper=I.ADDL,ra=tmp,rb=zeroOpn,rc=d}]
++          end
+ 
+-  (* signed, trapping version of multiply and divide *)
+-  structure Mult32 = Multiply32
+-    (val trapping = true
++     (* 
++      * How to right shift (unsigned) by a constant (32bits)
++      *)
++     fun srli{r,i,d} =
++         let val tmp = C.newReg()
++         in  [I.operate{oper=I.ZAP,ra=r,rb=I.IMMop 0xf0,rc=tmp},
++              I.operate{oper=I.SRL,ra=tmp,rb=I.IMMop i,rc=d}]
++         end
++
++     (* 
++      * How to right shift (signed) by a constant (32bits)
++      *)
++     fun srai{r,i,d} = 
++         let val tmp = C.newReg()
++         in  [I.operate{oper=I.ADDL,ra=r,rb=zeroOpn,rc=tmp},
++              I.operate{oper=I.SRA,ra=tmp,rb=I.IMMop i,rc=d}]
++         end 
++     
++     val trapping = false
+      val multCost = multCost
+-     fun addv{r1,r2,d} = [I.operatev{oper=I.ADDLV,ra=r1,rb=I.REGop r2,rc=d}]
+-     fun subv{r1,r2,d} = [I.operatev{oper=I.SUBLV,ra=r1,rb=I.REGop r2,rc=d}]
++     fun addv{r1,r2,d} = [I.operate{oper=I.ADDL,ra=r1,rb=I.REGop r2,rc=d}]
++     fun subv{r1,r2,d} = [I.operate{oper=I.SUBL,ra=r1,rb=I.REGop r2,rc=d}]
+      val sh1addv = NONE
+-     val sh2addv = NONE
+-     val sh3addv = NONE
+-    )
+-    (val signed = true)
++     val sh2addv = SOME(fn {r1,r2,d} => 
++                    [I.operate{oper=I.S4ADDL,ra=r1,rb=I.REGop r2,rc=d}])
++     val sh3addv = SOME(fn {r1,r2,d} => 
++                    [I.operate{oper=I.S8ADDL,ra=r1,rb=I.REGop r2,rc=d}])
++     
++     val signed = false)
++  (* signed, non-trapping version of multiply and divide *)
++  structure Muls32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
+ 
+-  (* non-trapping version of multiply and divide *)
+-  functor Mul32 = Multiply32
+-    (val trapping = false
++     val intTy = 32
++   
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++
++     fun mov{r,d}    = I.COPY{k=CB.GP, sz=intTy, dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.operate{oper=I.ADDL,ra=r1,rb=I.REGop r2,rc=d}
++     (*
++      * How to left shift by a constant (32bits)
++      *)
++     fun slli{r,i=1,d} = [I.operate{oper=I.ADDL,ra=r,rb=I.REGop r,rc=d}]
++       | slli{r,i=2,d} = [I.operate{oper=I.S4ADDL,ra=r,rb=zeroOpn,rc=d}]
++       | slli{r,i=3,d} = [I.operate{oper=I.S8ADDL,ra=r,rb=zeroOpn,rc=d}]
++       | slli{r,i,d}   = 
++          let val tmp = C.newReg()
++          in  [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=tmp},
++               I.operate{oper=I.ADDL,ra=tmp,rb=zeroOpn,rc=d}]
++          end
++
++     (* 
++      * How to right shift (unsigned) by a constant (32bits)
++      *)
++     fun srli{r,i,d} =
++         let val tmp = C.newReg()
++         in  [I.operate{oper=I.ZAP,ra=r,rb=I.IMMop 0xf0,rc=tmp},
++              I.operate{oper=I.SRL,ra=tmp,rb=I.IMMop i,rc=d}]
++         end
++
++     (* 
++      * How to right shift (signed) by a constant (32bits)
++      *)
++     fun srai{r,i,d} = 
++         let val tmp = C.newReg()
++         in  [I.operate{oper=I.ADDL,ra=r,rb=zeroOpn,rc=tmp},
++              I.operate{oper=I.SRA,ra=tmp,rb=I.IMMop i,rc=d}]
++         end 
++     
++     val trapping = false
+      val multCost = multCost
+      fun addv{r1,r2,d} = [I.operate{oper=I.ADDL,ra=r1,rb=I.REGop r2,rc=d}]
+      fun subv{r1,r2,d} = [I.operate{oper=I.SUBL,ra=r1,rb=I.REGop r2,rc=d}]
+@@ -298,25 +436,82 @@
+                     [I.operate{oper=I.S4ADDL,ra=r1,rb=I.REGop r2,rc=d}])
+      val sh3addv = SOME(fn {r1,r2,d} => 
+                     [I.operate{oper=I.S8ADDL,ra=r1,rb=I.REGop r2,rc=d}])
+-    )
+-  structure Mulu32 = Mul32(val signed = false)
+-  structure Muls32 = Mul32(val signed = true)
++     
++     val signed = true)
+ 
+   (* signed, trapping version of multiply and divide *)
+-  structure Mult64 = Multiply64
+-    (val trapping = true
++  structure Mult64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++   
++     val intTy = 64
++
++     type arg  = {r1:CB.cell, r2:CB.cell, d:CB.cell}
++     type argi = {r:CB.cell, i:int, d:CB.cell}
++
++     fun mov{r,d}    = I.COPY{k=CB.GP, sz=intTy, dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d}= I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}
++     fun slli{r,i,d} = [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srli{r,i,d} = [I.operate{oper=I.SRL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srai{r,i,d} = [I.operate{oper=I.SRA,ra=r,rb=I.IMMop i,rc=d}]
++     
++     val trapping = true
+      val multCost = multCost
+      fun addv{r1,r2,d} = [I.operatev{oper=I.ADDQV,ra=r1,rb=I.REGop r2,rc=d}]
+      fun subv{r1,r2,d} = [I.operatev{oper=I.SUBQV,ra=r1,rb=I.REGop r2,rc=d}]
+      val sh1addv = NONE
+      val sh2addv = NONE
+      val sh3addv = NONE
+-    )
+-    (val signed = true)
++     
++     val signed = true)
+ 
+   (* unsigned, non-trapping version of multiply and divide *)
+-  functor Mul64 = Multiply64
+-    (val trapping = false
++  structure Mulu64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++   
++     val intTy = 64
++
++     type arg  = {r1:CB.cell, r2:CB.cell, d:CB.cell}
++     type argi = {r:CB.cell, i:int, d:CB.cell}
++
++     fun mov{r,d}    = I.COPY{k=CB.GP, sz=intTy, dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d}= I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}
++     fun slli{r,i,d} = [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srli{r,i,d} = [I.operate{oper=I.SRL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srai{r,i,d} = [I.operate{oper=I.SRA,ra=r,rb=I.IMMop i,rc=d}]
++    
++     val trapping = false
++     val multCost = multCost
++     fun addv{r1,r2,d} = [I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}]
++     fun subv{r1,r2,d} = [I.operate{oper=I.SUBQ,ra=r1,rb=I.REGop r2,rc=d}]
++     val sh1addv = NONE
++     val sh2addv = SOME(fn {r1,r2,d} => 
++                    [I.operate{oper=I.S4ADDQ,ra=r1,rb=I.REGop r2,rc=d}])
++     val sh3addv = SOME(fn {r1,r2,d} => 
++                    [I.operate{oper=I.S8ADDQ,ra=r1,rb=I.REGop r2,rc=d}])
++     
++     val signed = false)
++  (* signed, non-trapping version of multiply and divide *)
++  structure Muls64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++   
++     val intTy = 64
++
++     type arg  = {r1:CB.cell, r2:CB.cell, d:CB.cell}
++     type argi = {r:CB.cell, i:int, d:CB.cell}
++
++     fun mov{r,d}    = I.COPY{k=CB.GP, sz=intTy, dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d}= I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}
++     fun slli{r,i,d} = [I.operate{oper=I.SLL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srli{r,i,d} = [I.operate{oper=I.SRL,ra=r,rb=I.IMMop i,rc=d}]
++     fun srai{r,i,d} = [I.operate{oper=I.SRA,ra=r,rb=I.IMMop i,rc=d}]
++     
++     val trapping = false
+      val multCost = multCost
+      fun addv{r1,r2,d} = [I.operate{oper=I.ADDQ,ra=r1,rb=I.REGop r2,rc=d}]
+      fun subv{r1,r2,d} = [I.operate{oper=I.SUBQ,ra=r1,rb=I.REGop r2,rc=d}]
+@@ -325,9 +520,8 @@
+                     [I.operate{oper=I.S4ADDQ,ra=r1,rb=I.REGop r2,rc=d}])
+      val sh3addv = SOME(fn {r1,r2,d} => 
+                     [I.operate{oper=I.S8ADDQ,ra=r1,rb=I.REGop r2,rc=d}])
+-    )
+-  structure Mulu64 = Mul64(val signed = false)
+-  structure Muls64 = Mul64(val signed = true)
++     
++     val signed = true)
+ 
+   (* 
+    * The main stuff
+@@ -971,10 +1165,10 @@
+              *)
+           | T.ADD(64,e,T.LABEXP le) => mark(I.LDA{r=d,b=expr e,d=I.LABop le},an)
+           | T.ADD(64,T.LABEXP le,e) => mark(I.LDA{r=d,b=expr e,d=I.LABop le},an)
+-          | T.ADD(64,e,x as (T.CONST _ | T.LABEL _))  => 
+-               mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
+-          | T.ADD(64,x as (T.CONST _ | T.LABEL _),e)  => 
+-               mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
++          | T.ADD(64,e,x as T.CONST _) => mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
++          | T.ADD(64,e,x as T.LABEL _) => mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
++          | T.ADD(64,x as T.CONST _,e) => mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
++          | T.ADD(64,x as T.LABEL _,e) => mark(I.LDA{r=d,b=expr e,d=I.LABop x},an)
+           | T.ADD(64,e,T.LI i)     => loadImmed(i, expr e, d, an)
+           | T.ADD(64,T.LI i,e)     => loadImmed(i, expr e, d, an)
+ 	  | T.SUB(sz, a, b as T.LI z)    =>
+@@ -1067,8 +1261,13 @@
+           | T.SX(_,_,T.LOAD(8,ea,mem)) => load8s(ea,d,mem,an)
+           | T.SX(_,_,T.LOAD(16,ea,mem))=> load16s(ea,d,mem,an)
+           | T.SX(_,_,T.LOAD(32,ea,mem))=> load32s(ea,d,mem,an)
+-          | T.ZX((8|16|32|64),_,T.LOAD(8,ea,mem)) => load8(ea,d,mem,an)
+-          | T.ZX((16|32|64),_,T.LOAD(16,ea,mem))=> load16(ea,d,mem,an)
++          | T.ZX(8,_,T.LOAD(8,ea,mem)) => load8(ea,d,mem,an)
++          | T.ZX(16,_,T.LOAD(8,ea,mem)) => load8(ea,d,mem,an)
++          | T.ZX(32,_,T.LOAD(8,ea,mem)) => load8(ea,d,mem,an)
++          | T.ZX(64,_,T.LOAD(8,ea,mem)) => load8(ea,d,mem,an)
++          | T.ZX(16,_,T.LOAD(16,ea,mem))=> load16(ea,d,mem,an)
++          | T.ZX(32,_,T.LOAD(16,ea,mem))=> load16(ea,d,mem,an)
++          | T.ZX(64,_,T.LOAD(16,ea,mem))=> load16(ea,d,mem,an)
+           | T.ZX(64,_,T.LOAD(64,ea,mem)) => load(I.LDQ,ea,d,mem,an)
+           | T.LOAD(8,ea,mem) => load8(ea,d,mem,an)
+           | T.LOAD(16,ea,mem) => load16(ea,d,mem,an)
+@@ -1391,8 +1590,10 @@
+               val (cond,a,b) = 
+                 (* move the immed operand to b *)
+                 case a of
+-                  (T.LI _ | T.CONST _ | T.LABEL _ | T.LABEXP _) => 
+-                    (T.Basis.swapCond cond,b,a)
++                  T.LI _ => (T.Basis.swapCond cond,b,a)
++                | T.CONST _ => (T.Basis.swapCond cond,b,a)
++                | T.LABEL _ => (T.Basis.swapCond cond,b,a)
++                | T.LABEXP _ => (T.Basis.swapCond cond,b,a)
+                 | _ => (cond,a,b)
+ 
+               fun sub(a, T.LI z) = 
+@@ -1455,8 +1656,10 @@
+                   end
+               val (cond,e1,e2) =
+ 		  case e1 of
+-                    (T.LI _ | T.CONST _ | T.LABEL _ | T.LABEXP _) => 
+-                       (T.Basis.swapCond cond,e2,e1)
++                    T.LI _ => (T.Basis.swapCond cond,e2,e1)
++                  | T.CONST _ => (T.Basis.swapCond cond,e2,e1)
++                  | T.LABEL _ => (T.Basis.swapCond cond,e2,e1)
++                  | T.LABEXP _ => (T.Basis.swapCond cond,e2,e1)
+                   | _ => (cond,e1,e2)
+           in  case cond of
+                 T.EQ  => eq(e1,e2,d)
+diff -Naur MLRISC/backpatch/backpatch.sml MLRISC-mlton/backpatch/backpatch.sml
+--- MLRISC/backpatch/backpatch.sml	2002-03-11 22:56:22.000000000 -0500
++++ MLRISC-mlton/backpatch/backpatch.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,13 +8,45 @@
+ 
+ functor BBSched2
+     (structure Emitter : INSTRUCTION_EMITTER
+-     structure CFG     : CONTROL_FLOW_GRAPH
+-			where I = Emitter.I
+-		          and P = Emitter.S.P
+-     structure Jumps   : SDI_JUMPS
+-     			where I = CFG.I
+-     structure Props   : INSN_PROPERTIES
+-			where I = CFG.I
++     structure CFG     : CONTROL_FLOW_GRAPH (* where I = Emitter.I and P = Emitter.S.P *)
++                         where type I.addressing_mode = Emitter.I.addressing_mode
++                           and type I.ea = Emitter.I.ea
++                           and type I.instr = Emitter.I.instr
++                           and type I.instruction = Emitter.I.instruction
++                           and type I.operand = Emitter.I.operand
++                         where type P.Client.pseudo_op = Emitter.S.P.Client.pseudo_op
++                           and type P.T.Basis.cond = Emitter.S.P.T.Basis.cond
++                           and type P.T.Basis.div_rounding_mode = Emitter.S.P.T.Basis.div_rounding_mode
++                           and type P.T.Basis.ext = Emitter.S.P.T.Basis.ext
++                           and type P.T.Basis.fcond = Emitter.S.P.T.Basis.fcond
++                           and type P.T.Basis.rounding_mode = Emitter.S.P.T.Basis.rounding_mode
++                           and type P.T.Constant.const = Emitter.S.P.T.Constant.const
++                           and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.ccx
++                           and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.fx
++                           and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.rx
++                           and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.sx
++                           and type P.T.I.div_rounding_mode = Emitter.S.P.T.I.div_rounding_mode
++                           and type P.T.Region.region = Emitter.S.P.T.Region.region
++                           and type P.T.ccexp = Emitter.S.P.T.ccexp
++                           and type P.T.fexp = Emitter.S.P.T.fexp
++                           (* and type P.T.labexp = Emitter.S.P.T.labexp *)
++                           and type P.T.mlrisc = Emitter.S.P.T.mlrisc
++                           and type P.T.oper = Emitter.S.P.T.oper
++                           and type P.T.rep = Emitter.S.P.T.rep
++                           and type P.T.rexp = Emitter.S.P.T.rexp
++                           and type P.T.stm = Emitter.S.P.T.stm
++     structure Jumps   : SDI_JUMPS (* where I = CFG.I *)
++                         where type I.addressing_mode = CFG.I.addressing_mode
++                           and type I.ea = CFG.I.ea
++                           and type I.instr = CFG.I.instr
++                           and type I.instruction = CFG.I.instruction
++                           and type I.operand = CFG.I.operand
++     structure Props   : INSN_PROPERTIES (* where I = CFG.I *)
++                         where type I.addressing_mode = CFG.I.addressing_mode
++                           and type I.ea = CFG.I.ea
++                           and type I.instr = CFG.I.instr
++                           and type I.instruction = CFG.I.instruction
++                           and type I.operand = CFG.I.operand
+     ) = 
+ struct
+ 
+diff -Naur MLRISC/backpatch/sdi-jumps.sig MLRISC-mlton/backpatch/sdi-jumps.sig
+--- MLRISC/backpatch/sdi-jumps.sig	2000-12-07 23:11:33.000000000 -0500
++++ MLRISC-mlton/backpatch/sdi-jumps.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -7,7 +7,7 @@
+ signature SDI_JUMPS = sig
+   structure I : INSTRUCTIONS
+   structure C : CELLS
+-    sharing I.C = C
++    (* sharing I.C = C *)
+ 
+   val branchDelayedArch : bool
+ 
+diff -Naur MLRISC/backpatch/spanDep.sml MLRISC-mlton/backpatch/spanDep.sml
+--- MLRISC/backpatch/spanDep.sml	2002-10-10 10:48:47.000000000 -0400
++++ MLRISC-mlton/backpatch/spanDep.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -9,18 +9,79 @@
+ 
+ functor SpanDependencyResolution
+     (structure Emitter   : INSTRUCTION_EMITTER
+-     structure CFG       : CONTROL_FLOW_GRAPH
+-                             where I = Emitter.I
+-                          and P = Emitter.S.P
+-     structure Jumps     : SDI_JUMPS
+-                             where I = CFG.I
+-     structure DelaySlot : DELAY_SLOT_PROPERTIES
+-                             where I = CFG.I
+-     structure Props     : INSN_PROPERTIES
+-                             where I = CFG.I
+-     structure Asm        : INSTRUCTION_EMITTER
+-                             where I = CFG.I
+-                             and   S = Emitter.S
++     structure CFG       : CONTROL_FLOW_GRAPH (* where I = Emitter.I and P = Emitter.S.P *)
++                           where type I.addressing_mode = Emitter.I.addressing_mode
++                             and type I.ea = Emitter.I.ea
++                             and type I.instr = Emitter.I.instr
++                             and type I.instruction = Emitter.I.instruction
++                             and type I.operand = Emitter.I.operand
++                           where type P.Client.pseudo_op = Emitter.S.P.Client.pseudo_op
++                             and type P.T.Basis.cond = Emitter.S.P.T.Basis.cond
++                             and type P.T.Basis.div_rounding_mode = Emitter.S.P.T.Basis.div_rounding_mode
++                             and type P.T.Basis.ext = Emitter.S.P.T.Basis.ext
++                             and type P.T.Basis.fcond = Emitter.S.P.T.Basis.fcond
++                             and type P.T.Basis.rounding_mode = Emitter.S.P.T.Basis.rounding_mode
++                             and type P.T.Constant.const = Emitter.S.P.T.Constant.const
++                             and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.ccx
++                             and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.fx
++                             and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.rx
++                             and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.sx
++                             and type P.T.I.div_rounding_mode = Emitter.S.P.T.I.div_rounding_mode
++                             and type P.T.Region.region = Emitter.S.P.T.Region.region
++                             and type P.T.ccexp = Emitter.S.P.T.ccexp
++                             and type P.T.fexp = Emitter.S.P.T.fexp
++                             (* and type P.T.labexp = Emitter.S.P.T.labexp *)
++                             and type P.T.mlrisc = Emitter.S.P.T.mlrisc
++                             and type P.T.oper = Emitter.S.P.T.oper
++                             and type P.T.rep = Emitter.S.P.T.rep
++                             and type P.T.rexp = Emitter.S.P.T.rexp
++                             and type P.T.stm = Emitter.S.P.T.stm
++     structure Jumps     : SDI_JUMPS (* where I = CFG.I *)
++                           where type I.addressing_mode = CFG.I.addressing_mode
++                             and type I.ea = CFG.I.ea
++                             and type I.instr = CFG.I.instr
++                             and type I.instruction = CFG.I.instruction
++                             and type I.operand = CFG.I.operand
++     structure DelaySlot : DELAY_SLOT_PROPERTIES (* where I = CFG.I *)
++                           where type I.addressing_mode = CFG.I.addressing_mode
++                             and type I.ea = CFG.I.ea
++                             and type I.instr = CFG.I.instr
++                             and type I.instruction = CFG.I.instruction
++                             and type I.operand = CFG.I.operand
++     structure Props     : INSN_PROPERTIES (* where I = CFG.I *)
++                           where type I.addressing_mode = CFG.I.addressing_mode
++                             and type I.ea = CFG.I.ea
++                             and type I.instr = CFG.I.instr
++                             and type I.instruction = CFG.I.instruction
++                             and type I.operand = CFG.I.operand
++     structure Asm       : INSTRUCTION_EMITTER (* where I = CFG.I and S = Emitter.S *)
++                           where type I.addressing_mode = CFG.I.addressing_mode
++                             and type I.ea = CFG.I.ea
++                             and type I.instr = CFG.I.instr
++                             and type I.instruction = CFG.I.instruction
++                             and type I.operand = CFG.I.operand
++                           where type S.P.Client.pseudo_op = Emitter.S.P.Client.pseudo_op
++                             and type S.P.T.Basis.cond = Emitter.S.P.T.Basis.cond
++                             and type S.P.T.Basis.div_rounding_mode = Emitter.S.P.T.Basis.div_rounding_mode
++                             and type S.P.T.Basis.ext = Emitter.S.P.T.Basis.ext
++                             and type S.P.T.Basis.fcond = Emitter.S.P.T.Basis.fcond
++                             and type S.P.T.Basis.rounding_mode = Emitter.S.P.T.Basis.rounding_mode
++                             and type S.P.T.Constant.const = Emitter.S.P.T.Constant.const
++                             and type ('s,'r,'f,'c) S.P.T.Extension.ccx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.ccx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.fx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.fx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.rx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.rx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.sx = ('s,'r,'f,'c) Emitter.S.P.T.Extension.sx
++                             and type S.P.T.I.div_rounding_mode = Emitter.S.P.T.I.div_rounding_mode
++                             and type S.P.T.Region.region = Emitter.S.P.T.Region.region
++                             and type S.P.T.ccexp = Emitter.S.P.T.ccexp
++                             and type S.P.T.fexp = Emitter.S.P.T.fexp
++                             (* and type S.P.T.labexp = Emitter.S.P.T.labexp *)
++                             and type S.P.T.mlrisc = Emitter.S.P.T.mlrisc
++                             and type S.P.T.oper = Emitter.S.P.T.oper
++                             and type S.P.T.rep = Emitter.S.P.T.rep
++                             and type S.P.T.rexp = Emitter.S.P.T.rexp
++                             and type S.P.T.stm = Emitter.S.P.T.stm
++                             and type ('a,'b,'c,'d) S.stream = ('a,'b,'c,'d) Emitter.S.stream
+      ) : BBSCHED = 
+ struct
+ 
+@@ -275,7 +336,9 @@
+ 
+               and eliminateNop(jmp) = 
+                   case (nop,nOn) of
+-                     (true,(D.D_FALLTHRU | D.D_NONE)) =>
++                     (true,D.D_FALLTHRU) =>
++                          D.enableDelaySlot{n=true,nop=false,instr=jmp}
++                  |  (true,D.D_NONE) =>
+                           D.enableDelaySlot{n=true,nop=false,instr=jmp}
+                   |  _ => jmp
+ 
+diff -Naur MLRISC/backpatch/vlBackPatch.sml MLRISC-mlton/backpatch/vlBackPatch.sml
+--- MLRISC/backpatch/vlBackPatch.sml	2002-03-11 22:56:22.000000000 -0500
++++ MLRISC-mlton/backpatch/vlBackPatch.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -26,14 +26,31 @@
+ functor BackPatch
+   (structure CodeString : CODE_STRING
+    structure Jumps      : SDI_JUMPS 
+-   structure Props      : INSN_PROPERTIES 
+-                        where I = Jumps.I
+-   structure Emitter    : MC_EMIT
+-                        where I = Props.I
+-   structure CFG        : CONTROL_FLOW_GRAPH
+-                        where I = Emitter.I
+-   structure Asm        : INSTRUCTION_EMITTER
+-                        where I = CFG.I) =
++   structure Props      : INSN_PROPERTIES (* where I = Jumps.I *)
++                          where type I.addressing_mode = Jumps.I.addressing_mode
++                            and type I.ea = Jumps.I.ea
++                            and type I.instr = Jumps.I.instr
++                            and type I.instruction = Jumps.I.instruction
++                            and type I.operand = Jumps.I.operand
++   structure Emitter    : MC_EMIT (* where I = Props.I *)
++                          where type I.addressing_mode = Props.I.addressing_mode
++                            and type I.ea = Props.I.ea
++                            and type I.instr = Props.I.instr
++                            and type I.instruction = Props.I.instruction
++                            and type I.operand = Props.I.operand
++   structure CFG        : CONTROL_FLOW_GRAPH (* where I = Emitter.I *)
++                          where type I.addressing_mode = Emitter.I.addressing_mode
++                            and type I.ea = Emitter.I.ea
++                            and type I.instr = Emitter.I.instr
++                            and type I.instruction = Emitter.I.instruction
++                            and type I.operand = Emitter.I.operand
++   structure Asm        : INSTRUCTION_EMITTER (* where I = CFG.I *)
++                          where type I.addressing_mode = CFG.I.addressing_mode
++                            and type I.ea = CFG.I.ea
++                            and type I.instr = CFG.I.instr
++                            and type I.instruction = CFG.I.instruction
++                            and type I.operand = CFG.I.operand
++  ) =
+ struct 
+   structure I   = Jumps.I
+   structure C   = I.C
+diff -Naur MLRISC/block-placement/block-placement.sml MLRISC-mlton/block-placement/block-placement.sml
+--- MLRISC/block-placement/block-placement.sml	2002-03-21 17:33:35.000000000 -0500
++++ MLRISC-mlton/block-placement/block-placement.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,9 +5,13 @@
+ 
+ functor BlockPlacement 
+    (structure CFG : CONTROL_FLOW_GRAPH
+-    structure Props : INSN_PROPERTIES)
+-
+-   : BLOCK_PLACEMENT =
++    structure Props : INSN_PROPERTIES (* where I = CFG.I *)
++                      where type I.addressing_mode = CFG.I.addressing_mode
++                        and type I.ea = CFG.I.ea
++                        and type I.instr = CFG.I.instr
++                        and type I.instruction = CFG.I.instruction
++                        and type I.operand = CFG.I.operand
++   ) : BLOCK_PLACEMENT =
+ 
+ struct
+   structure CFG = CFG
+diff -Naur MLRISC/block-placement/check-placement-fn.sml MLRISC-mlton/block-placement/check-placement-fn.sml
+--- MLRISC/block-placement/check-placement-fn.sml	2002-03-22 11:59:28.000000000 -0500
++++ MLRISC-mlton/block-placement/check-placement-fn.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -9,8 +9,12 @@
+ functor CheckPlacementFn (
+ 
+     structure CFG : CONTROL_FLOW_GRAPH
+-    structure InsnProps : INSN_PROPERTIES
+-      where I = CFG.I
++    structure InsnProps : INSN_PROPERTIES (* where I = CFG.I *)
++                          where type I.addressing_mode = CFG.I.addressing_mode
++                            and type I.ea = CFG.I.ea
++                            and type I.instr = CFG.I.instr
++                            and type I.instruction = CFG.I.instruction
++                            and type I.operand = CFG.I.operand
+ 
+   ) : sig
+ 
+@@ -81,7 +85,11 @@
+ 		(* end case *))
+ 	(* check that FALLSTHRU and BRANCH false edges connect adjacent nodes *)
+ 	  fun chkEdge (src, dst, CFG.EDGE{k, ...}) = (case k
+-		 of (CFG.FALLSTHRU | CFG.BRANCH false) =>
++		 of CFG.FALLSTHRU =>
++		      if adjacentNodes(src, dst)
++			then ()
++			else reportNotAdjacent(src, dst)
++		  | CFG.BRANCH false =>
+ 		      if adjacentNodes(src, dst)
+ 			then ()
+ 			else reportNotAdjacent(src, dst)
+diff -Naur MLRISC/block-placement/jump-chain-elim-fn.sml MLRISC-mlton/block-placement/jump-chain-elim-fn.sml
+--- MLRISC/block-placement/jump-chain-elim-fn.sml	2003-05-22 18:46:19.000000000 -0400
++++ MLRISC-mlton/block-placement/jump-chain-elim-fn.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -12,8 +12,12 @@
+ functor JumpChainElimFn (
+ 
+     structure CFG : CONTROL_FLOW_GRAPH
+-    structure InsnProps : INSN_PROPERTIES
+-      where I = CFG.I
++    structure InsnProps : INSN_PROPERTIES (* where I = CFG.I *)
++                          where type I.addressing_mode = CFG.I.addressing_mode
++                            and type I.ea = CFG.I.ea
++                            and type I.instr = CFG.I.instr
++                            and type I.instruction = CFG.I.instruction
++                            and type I.operand = CFG.I.operand
+ 
+   (* Control flag that when set true allows jumps to labels outside
+    * of the CFG to be chained.  Set this false when there are many
+diff -Naur MLRISC/block-placement/weighted-block-placement-fn.sml MLRISC-mlton/block-placement/weighted-block-placement-fn.sml
+--- MLRISC/block-placement/weighted-block-placement-fn.sml	2003-05-22 18:46:19.000000000 -0400
++++ MLRISC-mlton/block-placement/weighted-block-placement-fn.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -12,8 +12,12 @@
+ functor WeightedBlockPlacementFn (
+ 
+     structure CFG : CONTROL_FLOW_GRAPH
+-    structure InsnProps : INSN_PROPERTIES
+-      where I = CFG.I
++    structure InsnProps : INSN_PROPERTIES (* where I = CFG.I *)
++                          where type I.addressing_mode = CFG.I.addressing_mode
++                            and type I.ea = CFG.I.ea
++                            and type I.instr = CFG.I.instr
++                            and type I.instruction = CFG.I.instruction
++                            and type I.operand = CFG.I.operand
+ 
+   ) : BLOCK_PLACEMENT = struct
+ 
+diff -Naur MLRISC/c-calls/unimplemented-c-calls.sml MLRISC-mlton/c-calls/unimplemented-c-calls.sml
+--- MLRISC/c-calls/unimplemented-c-calls.sml	2004-07-28 19:23:13.000000000 -0400
++++ MLRISC-mlton/c-calls/unimplemented-c-calls.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,7 +6,27 @@
+  *)
+ functor UnimplementedCCallsFn
+ 	    (structure T: MLTREE
+-	     val impossible: string -> 'a) :> C_CALLS where T = T =
++	     val impossible: string -> 'a) :> C_CALLS (* where T = T *)
++                                              where type T.Basis.cond = T.Basis.cond
++                                                and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                                                and type T.Basis.ext = T.Basis.ext
++                                                and type T.Basis.fcond = T.Basis.fcond
++                                                and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                                                and type T.Constant.const = T.Constant.const
++                                                and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                                                and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                                                and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                                                and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                                                and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                                                and type T.Region.region = T.Region.region
++                                                and type T.ccexp = T.ccexp
++                                                and type T.fexp = T.fexp
++                                                (* and type T.labexp = T.labexp *)
++                                                and type T.mlrisc = T.mlrisc
++                                                and type T.oper = T.oper
++                                                and type T.rep = T.rep
++                                                and type T.rexp = T.rexp
++                                                and type T.stm = T.stm =
+ struct
+     structure T = T
+ 
+diff -Naur MLRISC/cm/proxyLib.cm MLRISC-mlton/cm/proxyLib.cm
+--- MLRISC/cm/proxyLib.cm	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/cm/proxyLib.cm	2006-03-04 11:14:21.000000000 -0500
+@@ -0,0 +1,50 @@
++Group
++        group(proxyGrp.cm)
++is
++	proxyGrp.cm 
++(
++bind:(anchor:ALPHA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ALPHA-GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ALPHA-Peephole.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ALPHA-RTL.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ALPHA-Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ALPHA-SSA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Control.cm value:$SMLNJ-MLRISC)
++bind:(anchor:GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Graphs.cm value:$SMLNJ-MLRISC)
++bind:(anchor:HPPA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:HPPA-GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:HPPA-RTL.cm value:$SMLNJ-MLRISC)
++bind:(anchor:HPPA-Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:HPPA-SSA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32-GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32-Peephole.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32-RTL.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32-Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IA32-SSA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:ir-archive.cm value:$SMLNJ-MLRISC)
++bind:(anchor:IR.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Lib.cm value:$SMLNJ-MLRISC)
++bind:(anchor:MIPS.cm value:$SMLNJ-MLRISC)
++bind:(anchor:MLRISC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:MLTREE.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Opt.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Peephole.cm value:$SMLNJ-MLRISC)
++bind:(anchor:PPC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:PPC-GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:PPC-Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:RA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Region.cm value:$SMLNJ-MLRISC)
++bind:(anchor:RTL.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC-GC.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC-Peephole.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC-RTL.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC-Sched.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SPARC-SSA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:SSA.cm value:$SMLNJ-MLRISC)
++bind:(anchor:Visual.cm value:$SMLNJ-MLRISC)
++bind:(anchor:VLIW.cm value:$SMLNJ-MLRISC)
++)
+diff -Naur MLRISC/emit/cfgEmit.sml MLRISC-mlton/emit/cfgEmit.sml
+--- MLRISC/emit/cfgEmit.sml	2002-05-15 10:02:06.000000000 -0400
++++ MLRISC-mlton/emit/cfgEmit.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -13,9 +13,34 @@
+ 
+ functor CFGEmit
+   (structure E   : INSTRUCTION_EMITTER
+-   structure CFG : CONTROL_FLOW_GRAPH
+-		   where I = E.I
+-		     and P = E.S.P)  : ASSEMBLY_EMITTER = 
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = E.I and P = E.S.P *)
++                   where type I.addressing_mode = E.I.addressing_mode
++                     and type I.ea = E.I.ea
++                     and type I.instr = E.I.instr
++                     and type I.instruction = E.I.instruction
++                     and type I.operand = E.I.operand
++                   where type P.Client.pseudo_op = E.S.P.Client.pseudo_op
++                     and type P.T.Basis.cond = E.S.P.T.Basis.cond
++                     and type P.T.Basis.div_rounding_mode = E.S.P.T.Basis.div_rounding_mode
++                     and type P.T.Basis.ext = E.S.P.T.Basis.ext
++                     and type P.T.Basis.fcond = E.S.P.T.Basis.fcond
++                     and type P.T.Basis.rounding_mode = E.S.P.T.Basis.rounding_mode
++                     and type P.T.Constant.const = E.S.P.T.Constant.const
++                     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) E.S.P.T.Extension.ccx
++                     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) E.S.P.T.Extension.fx
++                     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) E.S.P.T.Extension.rx
++                     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) E.S.P.T.Extension.sx
++                     and type P.T.I.div_rounding_mode = E.S.P.T.I.div_rounding_mode
++                     and type P.T.Region.region = E.S.P.T.Region.region
++                     and type P.T.ccexp = E.S.P.T.ccexp
++                     and type P.T.fexp = E.S.P.T.fexp
++                     (* and type P.T.labexp = E.S.P.T.labexp *)
++                     and type P.T.mlrisc = E.S.P.T.mlrisc
++                     and type P.T.oper = E.S.P.T.oper
++                     and type P.T.rep = E.S.P.T.rep
++                     and type P.T.rexp = E.S.P.T.rexp
++                     and type P.T.stm = E.S.P.T.stm
++  )  : ASSEMBLY_EMITTER = 
+ struct
+   structure CFG = CFG
+ 
+diff -Naur MLRISC/flowgraph/buildFlowgraph.sml MLRISC-mlton/flowgraph/buildFlowgraph.sml
+--- MLRISC/flowgraph/buildFlowgraph.sml	2002-05-15 10:02:06.000000000 -0400
++++ MLRISC-mlton/flowgraph/buildFlowgraph.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -9,9 +9,34 @@
+    structure S   : INSTRUCTION_STREAM
+    structure I   : INSTRUCTIONS
+    structure P   : PSEUDO_OPS
+-   structure CFG : CONTROL_FLOW_GRAPH
+-   		where I = I
+-                  and P = P
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = I and P = P *)
++                   where type I.addressing_mode = I.addressing_mode
++                     and type I.ea = I.ea
++                     and type I.instr = I.instr
++                     and type I.instruction = I.instruction
++                     and type I.operand = I.operand
++                   where type P.Client.pseudo_op = P.Client.pseudo_op
++                     and type P.T.Basis.cond = P.T.Basis.cond
++                     and type P.T.Basis.div_rounding_mode = P.T.Basis.div_rounding_mode
++                     and type P.T.Basis.ext = P.T.Basis.ext
++                     and type P.T.Basis.fcond = P.T.Basis.fcond
++                     and type P.T.Basis.rounding_mode = P.T.Basis.rounding_mode
++                     and type P.T.Constant.const = P.T.Constant.const
++                     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) P.T.Extension.ccx
++                     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) P.T.Extension.fx
++                     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) P.T.Extension.rx
++                     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) P.T.Extension.sx
++                     and type P.T.I.div_rounding_mode = P.T.I.div_rounding_mode
++                     and type P.T.Region.region = P.T.Region.region
++                     and type P.T.ccexp = P.T.ccexp
++                     and type P.T.fexp = P.T.fexp
++                     (* and type P.T.labexp = P.T.labexp *)
++                     and type P.T.mlrisc = P.T.mlrisc
++                     and type P.T.oper = P.T.oper
++                     and type P.T.rep = P.T.rep
++                     and type P.T.rexp = P.T.rexp
++                     and type P.T.stm = P.T.stm
++
+    (*
+     * This creates an emitter which can be used to build a CFG incrementally
+     *)
+@@ -26,9 +51,33 @@
+ functor BuildFlowgraph 
+   (structure Props  : INSN_PROPERTIES
+    structure Stream : INSTRUCTION_STREAM
+-   structure CFG    : CONTROL_FLOW_GRAPH  
+-			  where I = Props.I
+-			    and P = Stream.P
++   structure CFG    : CONTROL_FLOW_GRAPH (* where I = Props.I and P = Stream.P *)
++                      where type I.addressing_mode = Props.I.addressing_mode
++                        and type I.ea = Props.I.ea
++                        and type I.instr = Props.I.instr
++                        and type I.instruction = Props.I.instruction
++                        and type I.operand = Props.I.operand
++                      where type P.Client.pseudo_op = Stream.P.Client.pseudo_op
++                        and type P.T.Basis.cond = Stream.P.T.Basis.cond
++                        and type P.T.Basis.div_rounding_mode = Stream.P.T.Basis.div_rounding_mode
++                        and type P.T.Basis.ext = Stream.P.T.Basis.ext
++                        and type P.T.Basis.fcond = Stream.P.T.Basis.fcond
++                        and type P.T.Basis.rounding_mode = Stream.P.T.Basis.rounding_mode
++                        and type P.T.Constant.const = Stream.P.T.Constant.const
++                        and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Stream.P.T.Extension.ccx
++                        and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Stream.P.T.Extension.fx
++                        and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Stream.P.T.Extension.rx
++                        and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Stream.P.T.Extension.sx
++                        and type P.T.I.div_rounding_mode = Stream.P.T.I.div_rounding_mode
++                        and type P.T.Region.region = Stream.P.T.Region.region
++                        and type P.T.ccexp = Stream.P.T.ccexp
++                        and type P.T.fexp = Stream.P.T.fexp
++                        (* and type P.T.labexp = Stream.P.T.labexp *)
++                        and type P.T.mlrisc = Stream.P.T.mlrisc
++                        and type P.T.oper = Stream.P.T.oper
++                        and type P.T.rep = Stream.P.T.rep
++                        and type P.T.rexp = Stream.P.T.rexp
++                        and type P.T.stm = Stream.P.T.stm
+   ) : CONTROL_FLOWGRAPH_GEN =
+ struct
+   structure CFG = CFG
+diff -Naur MLRISC/flowgraph/cfgCountCopies.sml MLRISC-mlton/flowgraph/cfgCountCopies.sml
+--- MLRISC/flowgraph/cfgCountCopies.sml	2002-03-07 16:16:24.000000000 -0500
++++ MLRISC-mlton/flowgraph/cfgCountCopies.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -4,10 +4,18 @@
+  *)
+ functor CFGCountCopies
+    ( structure CFG : CONTROL_FLOW_GRAPH
+-     structure InsnProps : INSN_PROPERTIES
+-     		where I = CFG.I
+-     structure SdiJumps : SDI_JUMPS
+-     		where I = CFG.I
++     structure InsnProps : INSN_PROPERTIES (* where I = CFG.I *)
++                           where type I.addressing_mode = CFG.I.addressing_mode
++                             and type I.ea = CFG.I.ea
++                             and type I.instr = CFG.I.instr
++                             and type I.instruction = CFG.I.instruction
++                             and type I.operand = CFG.I.operand
++     structure SdiJumps : SDI_JUMPS (* where I = CFG.I *)
++                          where type I.addressing_mode = CFG.I.addressing_mode
++                            and type I.ea = CFG.I.ea
++                            and type I.instr = CFG.I.instr
++                            and type I.instruction = CFG.I.instruction
++                            and type I.operand = CFG.I.operand
+     ) : CFG_OPTIMIZATION =
+ struct
+    structure CFG = CFG
+diff -Naur MLRISC/flowgraph/cfgExpandCopies.sml MLRISC-mlton/flowgraph/cfgExpandCopies.sml
+--- MLRISC/flowgraph/cfgExpandCopies.sml	2002-01-15 18:10:05.000000000 -0500
++++ MLRISC-mlton/flowgraph/cfgExpandCopies.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,8 +7,12 @@
+ 
+ functor CFGExpandCopies
+    (structure CFG    : CONTROL_FLOW_GRAPH
+-    structure Shuffle : SHUFFLE
+-    			where I = CFG.I
++    structure Shuffle : SHUFFLE (* where I = CFG.I *)
++                        where type I.addressing_mode = CFG.I.addressing_mode
++                          and type I.ea = CFG.I.ea
++                          and type I.instr = CFG.I.instr
++                          and type I.instruction = CFG.I.instruction
++                          and type I.operand = CFG.I.operand
+    ) : CFG_OPTIMIZATION =
+   struct
+     structure CFG = CFG
+diff -Naur MLRISC/flowgraph/cfgPeephole.sml MLRISC-mlton/flowgraph/cfgPeephole.sml
+--- MLRISC/flowgraph/cfgPeephole.sml	2001-09-19 15:31:18.000000000 -0400
++++ MLRISC-mlton/flowgraph/cfgPeephole.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -3,8 +3,12 @@
+  *)
+ functor CFGPeephole
+   (structure CFG      : CONTROL_FLOW_GRAPH
+-   structure PeepHole : PEEPHOLE
+-     sharing CFG.I = PeepHole.I
++   structure PeepHole : PEEPHOLE (* sharing CFG.I = PeepHole.I *)
++                        where type I.addressing_mode = CFG.I.addressing_mode
++                          and type I.ea = CFG.I.ea
++                          and type I.instr = CFG.I.instr
++                          and type I.instruction = CFG.I.instruction
++                          and type I.operand = CFG.I.operand
+   ) : CFG_OPTIMIZATION =
+ struct
+    structure CFG = CFG
+diff -Naur MLRISC/flowgraph/cfg.sml MLRISC-mlton/flowgraph/cfg.sml
+--- MLRISC/flowgraph/cfg.sml	2002-05-15 10:02:06.000000000 -0400
++++ MLRISC-mlton/flowgraph/cfg.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -10,8 +10,18 @@
+ functor ControlFlowGraph
+    (structure I : INSTRUCTIONS
+     structure GraphImpl : GRAPH_IMPLEMENTATION
+-    structure InsnProps : INSN_PROPERTIES where I = I
+-    structure Asm : INSTRUCTION_EMITTER where I = I
++    structure InsnProps : INSN_PROPERTIES (* where I = I *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
++    structure Asm : INSTRUCTION_EMITTER (* where I = I *)
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
+    ) : CONTROL_FLOW_GRAPH =
+ struct
+ 
+@@ -314,7 +324,10 @@
+    fun mustPreceed (G.GRAPH cfg) (i,j) =
+    let val visited = H.mkTable(23,NotFound)
+        fun chase [] = false
+-         | chase((u,v,EDGE{k=(FALLSTHRU|BRANCH false),...})::_) =
++         | chase((u,v,EDGE{k= FALLSTHRU,...})::_) =
++           if H.inDomain visited u then false
++           else u = i orelse (H.insert visited (u,true); chase(#in_edges cfg u))
++         | chase((u,v,EDGE{k= BRANCH false,...})::_) =
+            if H.inDomain visited u then false
+            else u = i orelse (H.insert visited (u,true); chase(#in_edges cfg u))
+          | chase(_::es) = chase es
+@@ -355,7 +368,8 @@
+        |  BLOCK{insns=insns as ref(jmp::rest),...} => 
+              (case #out_edges cfg node of
+                 [] => ()
+-             |  [(_,_,EDGE{k=(ENTRY | EXIT),...})] => ()
++             |  [(_,_,EDGE{k=ENTRY,...})] => ()
++             |  [(_,_,EDGE{k=EXIT,...})] => ()
+              |  [(i,j,_)] =>
+                   if InsnProps.instrKind jmp = InsnProps.IK_JUMP then
+                        insns := InsnProps.setJumpTarget(jmp,labelOf j)::rest
+@@ -388,7 +402,8 @@
+     *=====================================================================*)
+    fun mergeEdge (CFG as G.GRAPH cfg) (i,j,e as EDGE{w,k,...}) = 
+    let val _ = case k of
+-                  (ENTRY | EXIT) => raise Can'tMerge
++                  ENTRY => raise Can'tMerge
++               |  EXIT => raise Can'tMerge
+                |  _ => () 
+        val _ = case (#out_edges cfg i,#in_edges cfg j) of
+                   ([(_,j',_)],[(i',_,_)]) => 
+@@ -713,7 +728,8 @@
+     *========================================================================*)
+    fun cdgEdge(EDGE{k, ...}) = 
+         case k of
+-           (JUMP | FALLSTHRU) => false
++           JUMP => false
++        |  FALLSTHRU => false
+         |  _ => true
+ 
+    (*========================================================================
+diff -Naur MLRISC/flowgraph/printFlowgraph.sml MLRISC-mlton/flowgraph/printFlowgraph.sml
+--- MLRISC/flowgraph/printFlowgraph.sml	2002-03-07 16:04:12.000000000 -0500
++++ MLRISC-mlton/flowgraph/printFlowgraph.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,9 +5,33 @@
+ signature PRINT_FLOWGRAPH = 
+ sig
+    structure Asm : INSTRUCTION_EMITTER
+-   structure CFG : CONTROL_FLOW_GRAPH
+-		      where I = Asm.I 
+-			and P = Asm.S.P
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = Asm.I and P = Asm.S.P *)
++                   where type I.addressing_mode = Asm.I.addressing_mode
++                     and type I.ea = Asm.I.ea
++                     and type I.instr = Asm.I.instr
++                     and type I.instruction = Asm.I.instruction
++                     and type I.operand = Asm.I.operand
++                   where type P.Client.pseudo_op = Asm.S.P.Client.pseudo_op
++                     and type P.T.Basis.cond = Asm.S.P.T.Basis.cond
++                     and type P.T.Basis.div_rounding_mode = Asm.S.P.T.Basis.div_rounding_mode
++                     and type P.T.Basis.ext = Asm.S.P.T.Basis.ext
++                     and type P.T.Basis.fcond = Asm.S.P.T.Basis.fcond
++                     and type P.T.Basis.rounding_mode = Asm.S.P.T.Basis.rounding_mode
++                     and type P.T.Constant.const = Asm.S.P.T.Constant.const
++                     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Asm.S.P.T.Extension.ccx
++                     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Asm.S.P.T.Extension.fx
++                     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Asm.S.P.T.Extension.rx
++                     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Asm.S.P.T.Extension.sx
++                     and type P.T.I.div_rounding_mode = Asm.S.P.T.I.div_rounding_mode
++                     and type P.T.Region.region = Asm.S.P.T.Region.region
++                     and type P.T.ccexp = Asm.S.P.T.ccexp
++                     and type P.T.fexp = Asm.S.P.T.fexp
++                     (* and type P.T.labexp = Asm.S.P.T.labexp *)
++                     and type P.T.mlrisc = Asm.S.P.T.mlrisc
++                     and type P.T.oper = Asm.S.P.T.oper
++                     and type P.T.rep = Asm.S.P.T.rep
++                     and type P.T.rexp = Asm.S.P.T.rexp
++                     and type P.T.stm = Asm.S.P.T.stm
+ 
+    val printCFG : TextIO.outstream -> string -> CFG.cfg -> unit
+ end
+@@ -15,9 +39,33 @@
+ 
+ functor PrintFlowgraph 
+    (structure Asm : INSTRUCTION_EMITTER
+-    structure CFG : CONTROL_FLOW_GRAPH
+-		    where I = Asm.I
+-		      and P = Asm.S.P
++    structure CFG : CONTROL_FLOW_GRAPH (* where I = Asm.I and P = Asm.S.P *)
++                    where type I.addressing_mode = Asm.I.addressing_mode
++                      and type I.ea = Asm.I.ea
++                      and type I.instr = Asm.I.instr
++                      and type I.instruction = Asm.I.instruction
++                      and type I.operand = Asm.I.operand
++                    where type P.Client.pseudo_op = Asm.S.P.Client.pseudo_op
++                      and type P.T.Basis.cond = Asm.S.P.T.Basis.cond
++                      and type P.T.Basis.div_rounding_mode = Asm.S.P.T.Basis.div_rounding_mode
++                      and type P.T.Basis.ext = Asm.S.P.T.Basis.ext
++                      and type P.T.Basis.fcond = Asm.S.P.T.Basis.fcond
++                      and type P.T.Basis.rounding_mode = Asm.S.P.T.Basis.rounding_mode
++                      and type P.T.Constant.const = Asm.S.P.T.Constant.const
++                      and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Asm.S.P.T.Extension.ccx
++                      and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Asm.S.P.T.Extension.fx
++                      and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Asm.S.P.T.Extension.rx
++                      and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Asm.S.P.T.Extension.sx
++                      and type P.T.I.div_rounding_mode = Asm.S.P.T.I.div_rounding_mode
++                      and type P.T.Region.region = Asm.S.P.T.Region.region
++                      and type P.T.ccexp = Asm.S.P.T.ccexp
++                      and type P.T.fexp = Asm.S.P.T.fexp
++                      (* and type P.T.labexp = Asm.S.P.T.labexp *)
++                      and type P.T.mlrisc = Asm.S.P.T.mlrisc
++                      and type P.T.oper = Asm.S.P.T.oper
++                      and type P.T.rep = Asm.S.P.T.rep
++                      and type P.T.rexp = Asm.S.P.T.rexp
++                      and type P.T.stm = Asm.S.P.T.stm
+    ) : PRINT_FLOWGRAPH =
+ struct
+    structure Asm = Asm
+diff -Naur MLRISC/flowgraph/pseudo-ops-big.sml MLRISC-mlton/flowgraph/pseudo-ops-big.sml
+--- MLRISC/flowgraph/pseudo-ops-big.sml	2003-05-22 18:46:19.000000000 -0400
++++ MLRISC-mlton/flowgraph/pseudo-ops-big.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,8 +7,27 @@
+ 
+ functor PseudoOpsBig
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL 
+-			     where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+      val  icache_alignment : int	(* cache line size *)
+      val max_alignment : int option	(* maximum alignment for internal labels *)
+      val nop: {sz:int, en:Word32.word}	(* encoding for noop *)
+diff -Naur MLRISC/flowgraph/pseudo-ops-little.sml MLRISC-mlton/flowgraph/pseudo-ops-little.sml
+--- MLRISC/flowgraph/pseudo-ops-little.sml	2003-05-22 18:46:19.000000000 -0400
++++ MLRISC-mlton/flowgraph/pseudo-ops-little.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,8 +7,27 @@
+ 
+ functor PseudoOpsLittle
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL
+-			    where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+      val icache_alignment : int		(* cache line size *)
+      val max_alignment : int option	(* maximum alignment for internal labels *)
+      val nop: {sz:int, en:Word32.word}	(* encoding for noop *)
+diff -Naur MLRISC/flowgraph/pseudo-ops.sig MLRISC-mlton/flowgraph/pseudo-ops.sig
+--- MLRISC/flowgraph/pseudo-ops.sig	2001-11-22 09:25:11.000000000 -0500
++++ MLRISC-mlton/flowgraph/pseudo-ops.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,27 @@
+ 
+ signature PSEUDO_OPS = sig
+   structure T : MLTREE
+-  structure Client : CLIENT_PSEUDO_OPS where AsmPseudoOps.T = T
++  structure Client : CLIENT_PSEUDO_OPS (* where AsmPseudoOps.T = T *)
++                     where type AsmPseudoOps.T.Basis.cond = T.Basis.cond
++                       and type AsmPseudoOps.T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                       and type AsmPseudoOps.T.Basis.ext = T.Basis.ext
++                       and type AsmPseudoOps.T.Basis.fcond = T.Basis.fcond
++                       and type AsmPseudoOps.T.Basis.rounding_mode = T.Basis.rounding_mode
++                       and type AsmPseudoOps.T.Constant.const = T.Constant.const
++                       and type ('s,'r,'f,'c) AsmPseudoOps.T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                       and type ('s,'r,'f,'c) AsmPseudoOps.T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                       and type ('s,'r,'f,'c) AsmPseudoOps.T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                       and type ('s,'r,'f,'c) AsmPseudoOps.T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                       and type AsmPseudoOps.T.I.div_rounding_mode = T.I.div_rounding_mode
++                       and type AsmPseudoOps.T.Region.region = T.Region.region
++                       and type AsmPseudoOps.T.ccexp = T.ccexp
++                       and type AsmPseudoOps.T.fexp = T.fexp
++                       (* and type AsmPseudoOps.T.labexp = T.labexp *)
++                       and type AsmPseudoOps.T.mlrisc = T.mlrisc
++                       and type AsmPseudoOps.T.oper = T.oper
++                       and type AsmPseudoOps.T.rep = T.rep
++                       and type AsmPseudoOps.T.rexp = T.rexp
++                       and type AsmPseudoOps.T.stm = T.stm
+ 
+   type pseudo_op = (T.labexp, Client.pseudo_op) PseudoOpsBasisTyp.pseudo_op
+ 
+diff -Naur MLRISC/frequencies/compute-freqs-fn.sml MLRISC-mlton/frequencies/compute-freqs-fn.sml
+--- MLRISC/frequencies/compute-freqs-fn.sml	2003-05-22 18:46:20.000000000 -0400
++++ MLRISC-mlton/frequencies/compute-freqs-fn.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -40,9 +40,9 @@
+ 
+   (***** Representation of equations *****)
+     type var = Graph.node_id
++    type term = (real * var)
++    type sum = {terms : term list, c : real}
+     datatype def = Unknown | Sum of sum
+-    withtype term = (real * var)
+-	 and sum = {terms : term list, c : real}
+ 
+     val zero = {c = 0.0, terms = []}
+     val one = {c = 1.0, terms = []}
+diff -Naur MLRISC/gc-safety/gc-cells.sig MLRISC-mlton/gc-safety/gc-cells.sig
+--- MLRISC/gc-safety/gc-cells.sig	2001-07-19 16:35:14.000000000 -0400
++++ MLRISC-mlton/gc-safety/gc-cells.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ 
+    structure C  : CELLS
+    structure GC : GC_TYPE
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+ 
+    (* Generate a virtual register and update the gc info at the same time. *)
+    val newCell   : CB.cellkind -> GC.gctype -> CB.cell
+diff -Naur MLRISC/graphs/bigraph.sig MLRISC-mlton/graphs/bigraph.sig
+--- MLRISC/graphs/bigraph.sig	2000-06-01 14:33:07.000000000 -0400
++++ MLRISC-mlton/graphs/bigraph.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -9,8 +9,7 @@
+ 
+    include GRAPH
+ 
+-   datatype ('m,'n,'e,'g) bigraph = BIGRAPH of ('m,'n,'e,'g) bigraph_methods
+-   withtype ('m,'n,'e,'g) bigraph_methods =
++   type ('m,'n,'e,'g) bigraph_methods =
+        {  name        : string,
+           graph_info  : 'g,
+ 
+@@ -50,5 +49,6 @@
+           forall_dst   : ('n node -> unit) -> unit,
+           forall_edges : ('e edge -> unit) -> unit
+        }
++   datatype ('m,'n,'e,'g) bigraph = BIGRAPH of ('m,'n,'e,'g) bigraph_methods
+ end
+ 
+diff -Naur MLRISC/graphs/digraph.sml MLRISC-mlton/graphs/digraph.sml
+--- MLRISC/graphs/digraph.sml	2003-09-05 17:34:24.000000000 -0400
++++ MLRISC-mlton/graphs/digraph.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,7 +7,33 @@
+  * -- Allen
+  *)
+ 
+-functor DirectedGraph(A : ARRAY) : 
++functor DirectedGraph(A : sig type 'a array
++                              type 'a vector
++                                 
++                              val all: ('a -> bool) -> 'a array -> bool
++                              val app: ('a -> unit) -> 'a array -> unit 
++                              val appi: (int * 'a -> unit) -> 'a array -> unit 
++                              val array: int * 'a -> 'a array 
++                              val collate: ('a * 'a -> order) -> 'a array * 'a array -> order
++                              val copy: {src: 'a array, dst: 'a array, di: int} -> unit 
++                              val copyVec: {src: 'a vector, dst: 'a array, di: int} -> unit 
++                              val exists: ('a -> bool) -> 'a array -> bool
++                              val find: ('a -> bool) -> 'a array -> 'a option
++                              val findi: (int * 'a -> bool) -> 'a array -> (int * 'a) option
++                              val foldl: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++                              val foldli: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++                              val foldr: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++                              val foldri: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++                              val fromList: 'a list -> 'a array 
++                              val length: 'a array -> int 
++                              val maxLen: int 
++                              val modify: ('a -> 'a) -> 'a array -> unit 
++                              val modifyi: (int * 'a -> 'a) -> 'a array -> unit 
++                              val sub: 'a array * int -> 'a 
++                              val tabulate: int * (int -> 'a) -> 'a array 
++                              val update: 'a array * int * 'a -> unit 
++                              val vector: 'a array -> 'a vector
++                          end) : 
+ sig include GRAPH_IMPLEMENTATION 
+ 
+     type 'e adjlist   = 'e Graph.edge list A.array
+diff -Naur MLRISC/graphs/graph.sig MLRISC-mlton/graphs/graph.sig
+--- MLRISC/graphs/graph.sig	2002-03-01 16:05:07.000000000 -0500
++++ MLRISC-mlton/graphs/graph.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -25,8 +25,7 @@
+    type 'n node = node_id * 'n 
+    type 'e edge = node_id * node_id * 'e
+ 
+-   datatype ('n,'e,'g) graph = GRAPH of ('n,'e,'g) graph_methods
+-   withtype ('n,'e,'g) graph_methods = 
++   type ('n,'e,'g) graph_methods = 
+        {  name            : string,
+           graph_info      : 'g,
+ 
+@@ -65,6 +64,7 @@
+           forall_nodes    : ('n node -> unit) -> unit,
+           forall_edges    : ('e edge -> unit) -> unit
+        }
++   datatype ('n,'e,'g) graph = GRAPH of ('n,'e,'g) graph_methods
+    val unimplemented : 'a -> 'b
+ 
+          (* remove one edge i->j from graph *)
+diff -Naur MLRISC/hppa/backpatch/hppaDelaySlotProps.sml MLRISC-mlton/hppa/backpatch/hppaDelaySlotProps.sml
+--- MLRISC/hppa/backpatch/hppaDelaySlotProps.sml	2001-12-06 21:45:27.000000000 -0500
++++ MLRISC-mlton/hppa/backpatch/hppaDelaySlotProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -4,7 +4,12 @@
+ 
+ functor HppaDelaySlots
+    (structure I : HPPAINSTR
+-    structure P : INSN_PROPERTIES where I = I
++    structure P : INSN_PROPERTIES (* where I = I *)
++                  where type I.addressing_mode = I.addressing_mode
++                    and type I.ea = I.ea
++                    and type I.instr = I.instr
++                    and type I.instruction = I.instruction
++                    and type I.operand = I.operand
+    ) : DELAY_SLOT_PROPERTIES =
+ struct
+    structure I  = I
+@@ -100,11 +105,19 @@
+         in  clash(defUseInt) orelse clash(defUseReal) 
+         end
+ 
+-    fun delaySlotCandidate{jmp,delaySlot=
+-             (  I.INSTR(I.BCOND _) | I.INSTR(I.BCONDI _) | I.INSTR(I.BB _) | I.INSTR(I.FBRANCH _) 
+-              | I.INSTR(I.BV _) | I.INSTR(I.BE _) | I.INSTR(I.COMCLR_LDO _) | I.INSTR(I.COMICLR_LDO _) 
+-	      | I.INSTR(I.B _) | I.INSTR(I.LONGJUMP _) | I.INSTR(I.BLR _) | I.INSTR(I.BL _) 
+-	      | I.INSTR(I.BLE _))} = false
++    fun delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BCOND _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BCONDI _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BB _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.FBRANCH _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BV _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BE _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.COMCLR_LDO _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.COMICLR_LDO _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.B _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.LONGJUMP _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BLR _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BL _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BLE _)} = false
+       | delaySlotCandidate{jmp=I.ANNOTATION{i,...},delaySlot} = 
+            delaySlotCandidate{jmp=i,delaySlot=delaySlot}
+       | delaySlotCandidate{jmp,delaySlot=I.ANNOTATION{i,...}} = 
+diff -Naur MLRISC/hppa/backpatch/hppaJumps.sml MLRISC-mlton/hppa/backpatch/hppaJumps.sml
+--- MLRISC/hppa/backpatch/hppaJumps.sml	2003-05-22 18:46:20.000000000 -0400
++++ MLRISC-mlton/hppa/backpatch/hppaJumps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,10 +5,75 @@
+  *)
+ functor HppaJumps
+   ( structure Instr:HPPAINSTR
+-    structure Shuffle:HPPASHUFFLE 
+-			 where I = Instr
+-    structure MLTreeEval : MLTREE_EVAL 
+-		         where T = Instr.T
++    structure Shuffle:HPPASHUFFLE (* where I = Instr *)
++                      where type I.Constant.const = Instr.Constant.const
++                        and type I.Region.region = Instr.Region.region
++                        and type I.T.Basis.cond = Instr.T.Basis.cond
++                        and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                        and type I.T.Basis.ext = Instr.T.Basis.ext
++                        and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                        and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                        and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                        and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                        and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                        and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                        and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                        and type I.T.ccexp = Instr.T.ccexp
++                        and type I.T.fexp = Instr.T.fexp
++                        (* and type I.T.labexp = Instr.T.labexp *)
++                        and type I.T.mlrisc = Instr.T.mlrisc
++                        and type I.T.oper = Instr.T.oper
++                        and type I.T.rep = Instr.T.rep
++                        and type I.T.rexp = Instr.T.rexp
++                        and type I.T.stm = Instr.T.stm
++                        and type I.addressing_mode = Instr.addressing_mode
++                        and type I.arith = Instr.arith
++                        and type I.arithi = Instr.arithi
++                        and type I.bcond = Instr.bcond
++                        and type I.bitcond = Instr.bitcond
++                        and type I.cmp = Instr.cmp
++                        and type I.cmpi = Instr.cmpi
++                        and type I.ea = Instr.ea
++                        and type I.farith = Instr.farith
++                        and type I.fcnv = Instr.fcnv
++                        and type I.fcond = Instr.fcond
++                        and type I.field_selector = Instr.field_selector
++                        and type I.fload = Instr.fload
++                        and type I.floadx = Instr.floadx
++                        and type I.fmt = Instr.fmt
++                        and type I.fstore = Instr.fstore
++                        and type I.fstorex = Instr.fstorex
++                        and type I.funary = Instr.funary
++                        and type I.instr = Instr.instr
++                        and type I.instruction = Instr.instruction
++                        and type I.load = Instr.load
++                        and type I.loadi = Instr.loadi
++                        and type I.operand = Instr.operand
++                        and type I.scond = Instr.scond
++                        and type I.shift = Instr.shift
++                        and type I.shiftv = Instr.shiftv
++                        and type I.store = Instr.store
++    structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                           where type T.Basis.cond = Instr.T.Basis.cond
++                             and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                             and type T.Basis.ext = Instr.T.Basis.ext
++                             and type T.Basis.fcond = Instr.T.Basis.fcond
++                             and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                             and type T.Constant.const = Instr.T.Constant.const
++                             and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                             and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                             and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                             and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                             and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                             and type T.Region.region = Instr.T.Region.region
++                             and type T.ccexp = Instr.T.ccexp
++                             and type T.fexp = Instr.T.fexp
++                             (* and type T.labexp = Instr.T.labexp *)
++                             and type T.mlrisc = Instr.T.mlrisc
++                             and type T.oper = Instr.T.oper
++                             and type T.rep = Instr.T.rep
++                             and type T.rexp = Instr.T.rexp
++                             and type T.stm = Instr.T.stm
+   ) : SDI_JUMPS =				
+ struct
+   structure I = Instr
+diff -Naur MLRISC/hppa/emit/hppaAsm.sml MLRISC-mlton/hppa/emit/hppaAsm.sml
+--- MLRISC/hppa/emit/hppaAsm.sml	2002-05-18 14:21:52.000000000 -0400
++++ MLRISC-mlton/hppa/emit/hppaAsm.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,12 +6,96 @@
+ 
+ 
+ functor HppaAsmEmitter(structure S : INSTRUCTION_STREAM
+-                       structure Instr : HPPAINSTR
+-                          where T = S.P.T
+-                       structure Shuffle : HPPASHUFFLE
+-                          where I = Instr
+-                       structure MLTreeEval : MLTREE_EVAL
+-                          where T = Instr.T
++                       structure Instr : HPPAINSTR (* where T = S.P.T *)
++                                         where type T.Basis.cond = S.P.T.Basis.cond
++                                           and type T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++                                           and type T.Basis.ext = S.P.T.Basis.ext
++                                           and type T.Basis.fcond = S.P.T.Basis.fcond
++                                           and type T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++                                           and type T.Constant.const = S.P.T.Constant.const
++                                           and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++                                           and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++                                           and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++                                           and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++                                           and type T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++                                           and type T.Region.region = S.P.T.Region.region
++                                           and type T.ccexp = S.P.T.ccexp
++                                           and type T.fexp = S.P.T.fexp
++                                           (* and type T.labexp = S.P.T.labexp *)
++                                           and type T.mlrisc = S.P.T.mlrisc
++                                           and type T.oper = S.P.T.oper
++                                           and type T.rep = S.P.T.rep
++                                           and type T.rexp = S.P.T.rexp
++                                           and type T.stm = S.P.T.stm
++                       structure Shuffle : HPPASHUFFLE (* where I = Instr *)
++                                           where type I.Constant.const = Instr.Constant.const
++                                             and type I.Region.region = Instr.Region.region
++                                             and type I.T.Basis.cond = Instr.T.Basis.cond
++                                             and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                             and type I.T.Basis.ext = Instr.T.Basis.ext
++                                             and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                             and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                             and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                             and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                             and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                             and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                             and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                             and type I.T.ccexp = Instr.T.ccexp
++                                             and type I.T.fexp = Instr.T.fexp
++                                             (* and type I.T.labexp = Instr.T.labexp *)
++                                             and type I.T.mlrisc = Instr.T.mlrisc
++                                             and type I.T.oper = Instr.T.oper
++                                             and type I.T.rep = Instr.T.rep
++                                             and type I.T.rexp = Instr.T.rexp
++                                             and type I.T.stm = Instr.T.stm
++                                             and type I.addressing_mode = Instr.addressing_mode
++                                             and type I.arith = Instr.arith
++                                             and type I.arithi = Instr.arithi
++                                             and type I.bcond = Instr.bcond
++                                             and type I.bitcond = Instr.bitcond
++                                             and type I.cmp = Instr.cmp
++                                             and type I.cmpi = Instr.cmpi
++                                             and type I.ea = Instr.ea
++                                             and type I.farith = Instr.farith
++                                             and type I.fcnv = Instr.fcnv
++                                             and type I.fcond = Instr.fcond
++                                             and type I.field_selector = Instr.field_selector
++                                             and type I.fload = Instr.fload
++                                             and type I.floadx = Instr.floadx
++                                             and type I.fmt = Instr.fmt
++                                             and type I.fstore = Instr.fstore
++                                             and type I.fstorex = Instr.fstorex
++                                             and type I.funary = Instr.funary
++                                             and type I.instr = Instr.instr
++                                             and type I.instruction = Instr.instruction
++                                             and type I.load = Instr.load
++                                             and type I.loadi = Instr.loadi
++                                             and type I.operand = Instr.operand
++                                             and type I.scond = Instr.scond
++                                             and type I.shift = Instr.shift
++                                             and type I.shiftv = Instr.shiftv
++                                             and type I.store = Instr.store
++                       structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                              where type T.Basis.cond = Instr.T.Basis.cond
++                                                and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                                and type T.Basis.ext = Instr.T.Basis.ext
++                                                and type T.Basis.fcond = Instr.T.Basis.fcond
++                                                and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                                and type T.Constant.const = Instr.T.Constant.const
++                                                and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                                and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                                and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                                and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                                and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                                and type T.Region.region = Instr.T.Region.region
++                                                and type T.ccexp = Instr.T.ccexp
++                                                and type T.fexp = Instr.T.fexp
++                                                (* and type T.labexp = Instr.T.labexp *)
++                                                and type T.mlrisc = Instr.T.mlrisc
++                                                and type T.oper = Instr.T.oper
++                                                and type T.rep = Instr.T.rep
++                                                and type T.rexp = Instr.T.rexp
++                                                and type T.stm = Instr.T.stm
+                       ) : INSTRUCTION_EMITTER =
+ struct
+    structure I  = Instr
+diff -Naur MLRISC/hppa/emit/hppaMC.sml MLRISC-mlton/hppa/emit/hppaMC.sml
+--- MLRISC/hppa/emit/hppaMC.sml	2002-05-18 14:21:53.000000000 -0400
++++ MLRISC-mlton/hppa/emit/hppaMC.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,7 +6,27 @@
+ 
+ 
+ functor HppaMCEmitter(structure Instr : HPPAINSTR
+-                      structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++                      structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                             where type T.Basis.cond = Instr.T.Basis.cond
++                                               and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                               and type T.Basis.ext = Instr.T.Basis.ext
++                                               and type T.Basis.fcond = Instr.T.Basis.fcond
++                                               and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                               and type T.Constant.const = Instr.T.Constant.const
++                                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                               and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                               and type T.Region.region = Instr.T.Region.region
++                                               and type T.ccexp = Instr.T.ccexp
++                                               and type T.fexp = Instr.T.fexp
++                                               (* and type T.labexp = Instr.T.labexp *)
++                                               and type T.mlrisc = Instr.T.mlrisc
++                                               and type T.oper = Instr.T.oper
++                                               and type T.rep = Instr.T.rep
++                                               and type T.rexp = Instr.T.rexp
++                                               and type T.stm = Instr.T.stm
+                       structure Stream : INSTRUCTION_STREAM 
+                       structure CodeString : CODE_STRING
+                      ) : INSTRUCTION_EMITTER =
+@@ -47,6 +67,7 @@
+        (* note: fromLargeWord strips the high order bits! *)
+        fun eByteW w =
+        let val i = !loc
++           val w = W.toLargeWord w
+        in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
+    
+        fun doNothing _ = ()
+diff -Naur MLRISC/hppa/flowgraph/hppaGasPseudoOps.sml MLRISC-mlton/hppa/flowgraph/hppaGasPseudoOps.sml
+--- MLRISC/hppa/flowgraph/hppaGasPseudoOps.sml	2001-11-21 13:41:50.000000000 -0500
++++ MLRISC-mlton/hppa/flowgraph/hppaGasPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,26 @@
+ functor HppaGasPseudoOps 
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL  where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+     ) : PSEUDO_OPS_BASIS = 
+ 
+ struct
+diff -Naur MLRISC/hppa/instructions/hppaInstr.sml MLRISC-mlton/hppa/instructions/hppaInstr.sml
+--- MLRISC/hppa/instructions/hppaInstr.sml	2002-01-24 00:45:16.000000000 -0500
++++ MLRISC-mlton/hppa/instructions/hppaInstr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature HPPAINSTR =
+ sig
+    structure C : HPPACELLS
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    structure T : MLTREE
+    structure Constant: CONSTANT
+    structure Region : REGION
+diff -Naur MLRISC/hppa/instructions/hppaProps.sml MLRISC-mlton/hppa/instructions/hppaProps.sml
+--- MLRISC/hppa/instructions/hppaProps.sml	2003-05-22 18:46:20.000000000 -0400
++++ MLRISC-mlton/hppa/instructions/hppaProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,8 +6,48 @@
+ 
+ functor HppaProps
+    ( structure HppaInstr : HPPAINSTR
+-     structure MLTreeEval : MLTREE_EVAL where T = HppaInstr.T
+-     structure MLTreeHash : MLTREE_HASH where T = HppaInstr.T
++     structure MLTreeEval : MLTREE_EVAL (* where T = HppaInstr.T *)
++                            where type T.Basis.cond = HppaInstr.T.Basis.cond
++                              and type T.Basis.div_rounding_mode = HppaInstr.T.Basis.div_rounding_mode
++                              and type T.Basis.ext = HppaInstr.T.Basis.ext
++                              and type T.Basis.fcond = HppaInstr.T.Basis.fcond
++                              and type T.Basis.rounding_mode = HppaInstr.T.Basis.rounding_mode
++                              and type T.Constant.const = HppaInstr.T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) HppaInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) HppaInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) HppaInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) HppaInstr.T.Extension.sx
++                              and type T.I.div_rounding_mode = HppaInstr.T.I.div_rounding_mode
++                              and type T.Region.region = HppaInstr.T.Region.region
++                              and type T.ccexp = HppaInstr.T.ccexp
++                              and type T.fexp = HppaInstr.T.fexp
++                              (* and type T.labexp = HppaInstr.T.labexp *)
++                              and type T.mlrisc = HppaInstr.T.mlrisc
++                              and type T.oper = HppaInstr.T.oper
++                              and type T.rep = HppaInstr.T.rep
++                              and type T.rexp = HppaInstr.T.rexp
++                              and type T.stm = HppaInstr.T.stm
++     structure MLTreeHash : MLTREE_HASH (* where T = HppaInstr.T *)
++                            where type T.Basis.cond = HppaInstr.T.Basis.cond
++                              and type T.Basis.div_rounding_mode = HppaInstr.T.Basis.div_rounding_mode
++                              and type T.Basis.ext = HppaInstr.T.Basis.ext
++                              and type T.Basis.fcond = HppaInstr.T.Basis.fcond
++                              and type T.Basis.rounding_mode = HppaInstr.T.Basis.rounding_mode
++                              and type T.Constant.const = HppaInstr.T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) HppaInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) HppaInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) HppaInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) HppaInstr.T.Extension.sx
++                              and type T.I.div_rounding_mode = HppaInstr.T.I.div_rounding_mode
++                              and type T.Region.region = HppaInstr.T.Region.region
++                              and type T.ccexp = HppaInstr.T.ccexp
++                              and type T.fexp = HppaInstr.T.fexp
++                              (* and type T.labexp = HppaInstr.T.labexp *)
++                              and type T.mlrisc = HppaInstr.T.mlrisc
++                              and type T.oper = HppaInstr.T.oper
++                              and type T.rep = HppaInstr.T.rep
++                              and type T.rexp = HppaInstr.T.rexp
++                              and type T.stm = HppaInstr.T.stm
+     ) : INSN_PROPERTIES = 
+ struct
+   structure I = HppaInstr
+@@ -206,9 +246,12 @@
+    *========================================================================*)
+   fun defUseR instr = let
+     fun hppaDU instr = let
+-      fun trap((I.ADDO | I.SUBO | I.SH1ADDO), d, u) = (d, u)
++      fun trap(I.ADDO, d, u) = (d, u)
++        | trap(I.SUBO, d, u) = (d, u)
++        | trap(I.SH1ADDO, d, u) = (d, u)
+ 	| trap(_, d, u) = (d, u)
+-      fun trapi((I.ADDIO | I.SUBIO), d, u) = (d, u)
++      fun trapi(I.ADDIO, d, u) = (d, u)
++        | trapi(I.SUBIO, d, u) = (d, u)
+ 	| trapi(_, d, u) = (d, u)
+     in
+       case instr
+diff -Naur MLRISC/hppa/mltree/hppaMillicode.sig MLRISC-mlton/hppa/mltree/hppaMillicode.sig
+--- MLRISC/hppa/mltree/hppaMillicode.sig	2001-07-19 16:35:14.000000000 -0400
++++ MLRISC-mlton/hppa/mltree/hppaMillicode.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,15 @@
+ signature HPPA_MILLICODE = sig
+   structure I : HPPAINSTR
+-  structure CB : CELLS_BASIS =  CellsBasis
++  structure CB : CELLS_BASIS (* = CellsBasis *)
++                 where type CellSet.cellset = CellsBasis.CellSet.cellset
++                   and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                   and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                   and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                   and type cell = CellsBasis.cell
++                   and type cellColor = CellsBasis.cellColor
++                   and type cellkind = CellsBasis.cellkind
++                   and type cellkindDesc = CellsBasis.cellkindDesc
++                   and type cellkindInfo = CellsBasis.cellkindInfo
+ 
+   val divu : {rs:CB.cell, rt:CB.cell, rd:CB.cell} -> I.instruction list
+   val mulo : {rs:CB.cell, rt:CB.cell, rd:CB.cell} -> I.instruction list
+diff -Naur MLRISC/hppa/mltree/hppa.sml MLRISC-mlton/hppa/mltree/hppa.sml
+--- MLRISC/hppa/mltree/hppa.sml	2004-11-20 09:01:41.000000000 -0500
++++ MLRISC-mlton/hppa/mltree/hppa.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -14,14 +14,106 @@
+ 
+ functor Hppa
+   (structure HppaInstr : HPPAINSTR
+-   structure ExtensionComp : MLTREE_EXTENSION_COMP
+-      		where I = HppaInstr 
+-		  and T = HppaInstr.T
+-   structure MilliCode : HPPA_MILLICODE
+-      		where I = HppaInstr
+-   structure LabelComp : LABEL_COMP 
+-   		where I = HppaInstr  
+-		  and T = HppaInstr.T
++   structure ExtensionComp : MLTREE_EXTENSION_COMP (* where I = HppaInstr and T = HppaInstr.T *)
++                             where type I.addressing_mode = HppaInstr.addressing_mode
++                               and type I.ea = HppaInstr.ea
++                               and type I.instr = HppaInstr.instr
++                               and type I.instruction = HppaInstr.instruction
++                               and type I.operand = HppaInstr.operand
++                             where type T.Basis.cond = HppaInstr.T.Basis.cond
++                               and type T.Basis.div_rounding_mode = HppaInstr.T.Basis.div_rounding_mode
++                               and type T.Basis.ext = HppaInstr.T.Basis.ext
++                               and type T.Basis.fcond = HppaInstr.T.Basis.fcond
++                               and type T.Basis.rounding_mode = HppaInstr.T.Basis.rounding_mode
++                               and type T.Constant.const = HppaInstr.T.Constant.const
++                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) HppaInstr.T.Extension.ccx
++                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) HppaInstr.T.Extension.fx
++                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) HppaInstr.T.Extension.rx
++                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) HppaInstr.T.Extension.sx
++                               and type T.I.div_rounding_mode = HppaInstr.T.I.div_rounding_mode
++                               and type T.Region.region = HppaInstr.T.Region.region
++                               and type T.ccexp = HppaInstr.T.ccexp
++                               and type T.fexp = HppaInstr.T.fexp
++                               (* and type T.labexp = HppaInstr.T.labexp *)
++                               and type T.mlrisc = HppaInstr.T.mlrisc
++                               and type T.oper = HppaInstr.T.oper
++                               and type T.rep = HppaInstr.T.rep
++                               and type T.rexp = HppaInstr.T.rexp
++                               and type T.stm = HppaInstr.T.stm
++   structure MilliCode : HPPA_MILLICODE (* where I = HppaInstr *)
++                         where type I.Constant.const = HppaInstr.Constant.const
++                           and type I.Region.region = HppaInstr.Region.region
++                           and type I.T.Basis.cond = HppaInstr.T.Basis.cond
++                           and type I.T.Basis.div_rounding_mode = HppaInstr.T.Basis.div_rounding_mode
++                           and type I.T.Basis.ext = HppaInstr.T.Basis.ext
++                           and type I.T.Basis.fcond = HppaInstr.T.Basis.fcond
++                           and type I.T.Basis.rounding_mode = HppaInstr.T.Basis.rounding_mode
++                           and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) HppaInstr.T.Extension.ccx
++                           and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) HppaInstr.T.Extension.fx
++                           and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) HppaInstr.T.Extension.rx
++                           and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) HppaInstr.T.Extension.sx
++                           and type I.T.I.div_rounding_mode = HppaInstr.T.I.div_rounding_mode
++                           and type I.T.ccexp = HppaInstr.T.ccexp
++                           and type I.T.fexp = HppaInstr.T.fexp
++                           (* and type I.T.labexp = HppaInstr.T.labexp *)
++                           and type I.T.mlrisc = HppaInstr.T.mlrisc
++                           and type I.T.oper = HppaInstr.T.oper
++                           and type I.T.rep = HppaInstr.T.rep
++                           and type I.T.rexp = HppaInstr.T.rexp
++                           and type I.T.stm = HppaInstr.T.stm
++                           and type I.addressing_mode = HppaInstr.addressing_mode
++                           and type I.arith = HppaInstr.arith
++                           and type I.arithi = HppaInstr.arithi
++                           and type I.bcond = HppaInstr.bcond
++                           and type I.bitcond = HppaInstr.bitcond
++                           and type I.cmp = HppaInstr.cmp
++                           and type I.cmpi = HppaInstr.cmpi
++                           and type I.ea = HppaInstr.ea
++                           and type I.farith = HppaInstr.farith
++                           and type I.fcnv = HppaInstr.fcnv
++                           and type I.fcond = HppaInstr.fcond
++                           and type I.field_selector = HppaInstr.field_selector
++                           and type I.fload = HppaInstr.fload
++                           and type I.floadx = HppaInstr.floadx
++                           and type I.fmt = HppaInstr.fmt
++                           and type I.fstore = HppaInstr.fstore
++                           and type I.fstorex = HppaInstr.fstorex
++                           and type I.funary = HppaInstr.funary
++                           and type I.instr = HppaInstr.instr
++                           and type I.instruction = HppaInstr.instruction
++                           and type I.load = HppaInstr.load
++                           and type I.loadi = HppaInstr.loadi
++                           and type I.operand = HppaInstr.operand
++                           and type I.scond = HppaInstr.scond
++                           and type I.shift = HppaInstr.shift
++                           and type I.shiftv = HppaInstr.shiftv
++                           and type I.store = HppaInstr.store
++   structure LabelComp : LABEL_COMP (* where I = HppaInstr and T = HppaInstr.T *)
++                         where type I.addressing_mode = HppaInstr.addressing_mode
++                           and type I.ea = HppaInstr.ea
++                           and type I.instr = HppaInstr.instr
++                           and type I.instruction = HppaInstr.instruction
++                           and type I.operand = HppaInstr.operand
++                         where type T.Basis.cond = HppaInstr.T.Basis.cond
++                           and type T.Basis.div_rounding_mode = HppaInstr.T.Basis.div_rounding_mode
++                           and type T.Basis.ext = HppaInstr.T.Basis.ext
++                           and type T.Basis.fcond = HppaInstr.T.Basis.fcond
++                           and type T.Basis.rounding_mode = HppaInstr.T.Basis.rounding_mode
++                           and type T.Constant.const = HppaInstr.T.Constant.const
++                           and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) HppaInstr.T.Extension.ccx
++                           and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) HppaInstr.T.Extension.fx
++                           and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) HppaInstr.T.Extension.rx
++                           and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) HppaInstr.T.Extension.sx
++                           and type T.I.div_rounding_mode = HppaInstr.T.I.div_rounding_mode
++                           and type T.Region.region = HppaInstr.T.Region.region
++                           and type T.ccexp = HppaInstr.T.ccexp
++                           and type T.fexp = HppaInstr.T.fexp
++                           (* and type T.labexp = HppaInstr.T.labexp *)
++                           and type T.mlrisc = HppaInstr.T.mlrisc
++                           and type T.oper = HppaInstr.T.oper
++                           and type T.rep = HppaInstr.T.rep
++                           and type T.rexp = HppaInstr.T.rexp
++                           and type T.stm = HppaInstr.T.stm
+    val costOfMultiply : int ref
+    val costOfDivision : int ref
+   ) : MLTREECOMP =
+@@ -52,7 +144,9 @@
+    fun mkfcopy{dst, src, tmp} =
+        I.COPY{k=CB.FP, sz=64, dst=dst, src=src, tmp=tmp}
+    structure W = Word32
+-   functor Multiply32 = MLTreeMult
++
++   (* signed, trapping version of multiply and divide *)
++   structure Mult32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CB
+@@ -65,11 +159,8 @@
+      fun slli{r,i,d} = [I.shift{s=I.ZDEP,r=r,p=31-i,len=32-i,t=d}]
+      fun srli{r,i,d} = [I.shift{s=I.EXTRU,r=r,p=31-i,len=32-i,t=d}]
+      fun srai{r,i,d} = [I.shift{s=I.EXTRS,r=r,p=31-i,len=32-i,t=d}]
+-    )
+-
+-   (* signed, trapping version of multiply and divide *)
+-   structure Mult32 = Multiply32
+-    (val trapping = true
++     
++     val trapping = true
+      val multCost = costOfMultiply
+      val divCost  = costOfDivision
+      fun addv{r1,r2,d} = [I.arith{a=I.ADDO,r1=r1,r2=r2,t=d}]
+@@ -77,12 +168,25 @@
+      val sh1addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH1ADDO,r1=r1,r2=r2,t=d}])
+      val sh2addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH2ADDO,r1=r1,r2=r2,t=d}])
+      val sh3addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH3ADDO,r1=r1,r2=r2,t=d}])
+-    )
+-    (val signed = true)
++     
++     val signed = true)
+ 
+    (* unsigned, non-trapping version of multiply and divide *)
+-   structure Mulu32 = Multiply32
+-    (val trapping = false
++   structure Mulu32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CB
++     val intTy = 32
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++
++     fun mov{r,d} = mkcopy{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r1=r1,r2=r2,t=d}
++     fun slli{r,i,d} = [I.shift{s=I.ZDEP,r=r,p=31-i,len=32-i,t=d}]
++     fun srli{r,i,d} = [I.shift{s=I.EXTRU,r=r,p=31-i,len=32-i,t=d}]
++     fun srai{r,i,d} = [I.shift{s=I.EXTRS,r=r,p=31-i,len=32-i,t=d}]
++     
++     val trapping = false
+      val multCost = costOfMultiply
+      val divCost  = costOfDivision
+      fun addv{r1,r2,d} = [I.arith{a=I.ADD,r1=r1,r2=r2,t=d}]
+@@ -90,12 +194,25 @@
+      val sh1addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH1ADDL,r1=r1,r2=r2,t=d}])
+      val sh2addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH2ADDL,r1=r1,r2=r2,t=d}])
+      val sh3addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH3ADDL,r1=r1,r2=r2,t=d}])
+-    )
+-    (val signed   = false)
++     
++     val signed   = false)
+ 
+    (* signed, non-trapping version of multiply and divide *)
+-   structure Muls32 = Multiply32
+-    (val trapping = false
++   structure Muls32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CB
++     val intTy = 32
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++
++     fun mov{r,d} = mkcopy{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r1=r1,r2=r2,t=d}
++     fun slli{r,i,d} = [I.shift{s=I.ZDEP,r=r,p=31-i,len=32-i,t=d}]
++     fun srli{r,i,d} = [I.shift{s=I.EXTRU,r=r,p=31-i,len=32-i,t=d}]
++     fun srai{r,i,d} = [I.shift{s=I.EXTRS,r=r,p=31-i,len=32-i,t=d}]
++     
++     val trapping = false
+      val multCost = costOfMultiply
+      val divCost  = costOfDivision
+      fun addv{r1,r2,d} = [I.arith{a=I.ADD,r1=r1,r2=r2,t=d}]
+@@ -103,8 +220,8 @@
+      val sh1addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH1ADDL,r1=r1,r2=r2,t=d}])
+      val sh2addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH2ADDL,r1=r1,r2=r2,t=d}])
+      val sh3addv = SOME(fn{r1,r2,d} => [I.arith{a=I.SH3ADDL,r1=r1,r2=r2,t=d}])
+-    )
+-    (val signed   = true)
++     
++     val signed   = true)
+ 
+    fun error msg = MLRiscErrorMsg.error("Hppa",msg)
+ 
+diff -Naur MLRISC/instructions/insnProps.sig MLRISC-mlton/instructions/insnProps.sig
+--- MLRISC/instructions/insnProps.sig	2002-03-11 22:56:22.000000000 -0500
++++ MLRISC-mlton/instructions/insnProps.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -7,7 +7,7 @@
+ sig
+    structure I : INSTRUCTIONS
+    structure C : CELLS
+-     sharing I.C = C
++     (* sharing I.C = C *)
+ 
+       (* classify instructions *)
+    datatype kind = IK_JUMP   (* branches, including returns *)
+diff -Naur MLRISC/instructions/instructions.sig MLRISC-mlton/instructions/instructions.sig
+--- MLRISC/instructions/instructions.sig	2002-01-15 11:23:14.000000000 -0500
++++ MLRISC-mlton/instructions/instructions.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature INSTRUCTIONS =
+ sig
+    structure C   : CELLS
+-   structure CB  :CELLS_BASIS = CellsBasis
++   structure CB  : CELLS_BASIS (* = CellsBasis *)
++                   where type CellSet.cellset = CellsBasis.CellSet.cellset
++                     and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                     and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                     and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                     and type cell = CellsBasis.cell
++                     and type cellColor = CellsBasis.cellColor
++                     and type cellkind = CellsBasis.cellkind
++                     and type cellkindDesc = CellsBasis.cellkindDesc
++                     and type cellkindInfo = CellsBasis.cellkindInfo
+    type operand             (* operands supported by architecture *)
+    type addressing_mode                        (* addressing mode *)
+    type ea              (* effective address for accessing memory *)
+diff -Naur MLRISC/instructions/mlriscAnnotations.sig MLRISC-mlton/instructions/mlriscAnnotations.sig
+--- MLRISC/instructions/mlriscAnnotations.sig	2002-03-01 09:07:58.000000000 -0500
++++ MLRISC-mlton/instructions/mlriscAnnotations.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -15,7 +15,16 @@
+ signature MLRISC_ANNOTATIONS =
+ sig
+ 
+-    structure C : CELLS_BASIS = CellsBasis
++    structure C : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+ 
+     (* 
+      * The branch probability of conditional branches. 
+diff -Naur MLRISC/library/dynamic-array.sml MLRISC-mlton/library/dynamic-array.sml
+--- MLRISC/library/dynamic-array.sml	2003-09-05 17:34:24.000000000 -0400
++++ MLRISC-mlton/library/dynamic-array.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,7 +5,33 @@
+  *)
+ 
+ structure DynArray : 
+-  sig include ARRAY
++  sig type 'a array
++      type 'a vector
++
++      val all: ('a -> bool) -> 'a array -> bool
++      val app: ('a -> unit) -> 'a array -> unit 
++      val appi: (int * 'a -> unit) -> 'a array -> unit 
++      val array: int * 'a -> 'a array 
++      val collate: ('a * 'a -> order) -> 'a array * 'a array -> order
++      val copy: {src: 'a array, dst: 'a array, di: int} -> unit 
++      val copyVec: {src: 'a vector, dst: 'a array, di: int} -> unit 
++      val exists: ('a -> bool) -> 'a array -> bool
++      val find: ('a -> bool) -> 'a array -> 'a option
++      val findi: (int * 'a -> bool) -> 'a array -> (int * 'a) option
++      val foldl: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++      val foldli: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++      val foldr: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++      val foldri: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++      val fromList: 'a list -> 'a array 
++      val length: 'a array -> int 
++      val maxLen: int 
++      val modify: ('a -> 'a) -> 'a array -> unit 
++      val modifyi: (int * 'a -> 'a) -> 'a array -> unit 
++      val sub: 'a array * int -> 'a 
++      val tabulate: int * (int -> 'a) -> 'a array 
++      val update: 'a array * int * 'a -> unit 
++      val vector: 'a array -> 'a vector
++
+       val fromArray : 'a Array.array * 'a * int -> 'a array
+       val baseArray : 'a array -> 'a Array.array
+       val checkArray: 'a array * 'a Array.array -> unit
+diff -Naur MLRISC/library/hash-array.sml MLRISC-mlton/library/hash-array.sml
+--- MLRISC/library/hash-array.sml	2003-09-05 17:34:24.000000000 -0400
++++ MLRISC-mlton/library/hash-array.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,7 +5,33 @@
+  *)
+ 
+ structure HashArray : 
+-     sig include ARRAY
++     sig type 'a array
++         type 'a vector
++
++         val all: ('a -> bool) -> 'a array -> bool
++         val app: ('a -> unit) -> 'a array -> unit 
++         val appi: (int * 'a -> unit) -> 'a array -> unit 
++         val array: int * 'a -> 'a array 
++         val collate: ('a * 'a -> order) -> 'a array * 'a array -> order
++         val copy: {src: 'a array, dst: 'a array, di: int} -> unit 
++         val copyVec: {src: 'a vector, dst: 'a array, di: int} -> unit 
++         val exists: ('a -> bool) -> 'a array -> bool
++         val find: ('a -> bool) -> 'a array -> 'a option
++         val findi: (int * 'a -> bool) -> 'a array -> (int * 'a) option
++         val foldl: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++         val foldli: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++         val foldr: ('a * 'b -> 'b) -> 'b -> 'a array -> 'b 
++         val foldri: (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
++         val fromList: 'a list -> 'a array 
++         val length: 'a array -> int 
++         val maxLen: int 
++         val modify: ('a -> 'a) -> 'a array -> unit 
++         val modifyi: (int * 'a -> 'a) -> 'a array -> unit 
++         val sub: 'a array * int -> 'a 
++         val tabulate: int * (int -> 'a) -> 'a array 
++         val update: 'a array * int * 'a -> unit 
++         val vector: 'a array -> 'a vector
++
+          val array' : int * (int -> 'a) -> 'a array
+          val array'': int * (int -> 'a) -> 'a array
+          val clear  : 'a array -> unit 
+diff -Naur MLRISC/mlb/ALPHA.mlb MLRISC-mlton/mlb/ALPHA.mlb
+--- MLRISC/mlb/ALPHA.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/ALPHA.mlb	2006-03-04 12:08:27.000000000 -0500
+@@ -0,0 +1,476 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l42 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l137 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l50 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l9 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = FREQUENCY_PROPERTIES
++   end
++   local
++      open l9
++   in
++      signature gs_1 = PROBABILITY
++      structure gs_2 = Probability
++   end
++   local
++      open l4
++   in
++      structure gs_3 = MLRiscAnnotations
++   end
++   local
++      open l4
++   in
++      signature gs_4 = REGION
++   end
++   local
++      open l4
++   in
++      signature gs_5 = CONSTANT
++   end
++   local
++      open l4
++   in
++      signature gs_6 = MLTREE
++   end
++   local
++      open l4
++   in
++      signature gs_7 = CELLS_BASIS
++   end
++   local
++      open l4
++   in
++      structure gs_8 = CellsBasis
++   end
++   local
++      open l4
++   in
++      structure gs_9 = Label
++   end
++   local
++      open l9
++   in
++      structure gs_10 = Annotations
++   end
++   local
++      open l4
++   in
++      functor gs_11 = Cells
++   end
++   local
++      open l42
++   in
++      structure gs_12 = Int
++   end
++   local
++      open l4
++   in
++      signature gs_13 = CELLS
++   end
++   local
++      open l50
++   in
++      signature gs_14 = MLRISC_ERROR_MSG
++      structure gs_15 = MLRiscErrorMsg
++   end
++   local
++      signature CELLS = gs_13
++      functor Cells = gs_11
++      structure CellsBasis = gs_8
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      ../alpha/instructions/alphaCells.sml
++   in
++      signature gs_16 = ALPHACELLS
++      structure gs_17 = AlphaCells
++   end
++   local
++      signature ALPHACELLS = gs_16
++      structure AlphaCells = gs_17
++      structure Annotations = gs_10
++      signature CELLS_BASIS = gs_7
++      signature CONSTANT = gs_5
++      structure CellsBasis = gs_8
++      structure Label = gs_9
++      signature MLTREE = gs_6
++      signature REGION = gs_4
++      ../alpha/instructions/alphaInstr.sml
++   in
++      signature gs_18 = ALPHAINSTR
++      functor gs_19 = AlphaInstr
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      functor AlphaInstr = gs_19
++      signature FREQUENCY_PROPERTIES = gs_0
++      structure MLRiscAnnotations = gs_3
++      signature PROBABILITY = gs_1
++      structure Probability = gs_2
++      ../alpha/instructions/alphaFreqProps.sml
++   in
++      functor gs_20 = AlphaFreqProps
++   end
++   local
++      open l4
++   in
++      signature gs_21 = INSN_PROPERTIES
++   end
++   local
++      open l42
++   in
++      structure gs_22 = Option
++   end
++   local
++      open l42
++   in
++      structure gs_23 = Word
++   end
++   local
++      open l4
++   in
++      signature gs_24 = MLTREE_EVAL
++   end
++   local
++      open l4
++   in
++      signature gs_25 = MLTREE_HASH
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      signature INSN_PROPERTIES = gs_21
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_24
++      signature MLTREE_HASH = gs_25
++      structure Option = gs_22
++      structure Word = gs_23
++      ../alpha/instructions/alphaProps.sml
++   in
++      functor gs_26 = AlphaProps
++   end
++   local
++      open l4
++   in
++      signature gs_27 = SDI_JUMPS
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      ../alpha/instructions/alphaShuffle.sig
++   in
++      signature gs_28 = ALPHASHUFFLE
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      signature ALPHASHUFFLE = gs_28
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_24
++      structure Option = gs_22
++      signature SDI_JUMPS = gs_27
++      ../alpha/backpatch/alphaJumps.sml
++   in
++      functor gs_29 = AlphaJumps
++   end
++   local
++      open l4
++   in
++      signature gs_30 = INSTRUCTION_EMITTER
++   end
++   local
++      open l4
++   in
++      signature gs_31 = ASM_FORMAT_UTIL
++      structure gs_32 = AsmFormatUtil
++   end
++   local
++      open l4
++   in
++      signature gs_33 = ASM_STREAM
++      structure gs_34 = AsmStream
++   end
++   local
++      open l42
++   in
++      structure gs_35 = TextIO
++   end
++   local
++      open l42
++   in
++      structure gs_36 = String
++   end
++   local
++      open l4
++   in
++      structure gs_37 = AsmFlags
++   end
++   local
++      open l4
++   in
++      signature gs_38 = INSTRUCTION_STREAM
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      signature ALPHASHUFFLE = gs_28
++      signature ASM_FORMAT_UTIL = gs_31
++      signature ASM_STREAM = gs_33
++      functor AlphaInstr = gs_19
++      structure Annotations = gs_10
++      structure AsmFlags = gs_37
++      structure AsmFormatUtil = gs_32
++      structure AsmStream = gs_34
++      structure CellsBasis = gs_8
++      signature INSTRUCTION_EMITTER = gs_30
++      signature INSTRUCTION_STREAM = gs_38
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_24
++      structure String = gs_36
++      structure TextIO = gs_35
++      ../alpha/emit/alphaAsm.sml
++   in
++      functor gs_39 = AlphaAsmEmitter
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      ../alpha/ra/alphaRewrite.sml
++   in
++      functor gs_40 = AlphaRewrite
++   end
++   local
++      open l4
++   in
++      signature gs_41 = PSEUDO_OPS_BASIS
++   end
++   local
++      open l4
++   in
++      signature gs_42 = GAS_PSEUDO_OPS
++      functor gs_43 = GasPseudoOps
++   end
++   local
++      open l4
++   in
++      functor gs_44 = PseudoOpsLittle
++   end
++   local
++      open l137
++   in
++      structure gs_45 = Format
++   end
++   local
++      open l4
++   in
++      structure gs_46 = PseudoOpsBasisTyp
++   end
++   local
++      open l42
++   in
++      structure gs_47 = Word32
++   end
++   local
++      structure Format = gs_45
++      signature GAS_PSEUDO_OPS = gs_42
++      functor GasPseudoOps = gs_43
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE = gs_6
++      signature MLTREE_EVAL = gs_24
++      signature PSEUDO_OPS_BASIS = gs_41
++      structure PseudoOpsBasisTyp = gs_46
++      functor PseudoOpsLittle = gs_44
++      structure Word32 = gs_47
++      ../alpha/flowgraph/alphaGasPseudoOps.sml
++   in
++      functor gs_48 = AlphaGasPseudoOps
++   end
++   local
++      open l4
++   in
++      signature gs_49 = ARCH_SPILL_INSTR
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      signature ARCH_SPILL_INSTR = gs_49
++      functor AlphaInstr = gs_19
++      functor AlphaRewrite = gs_40
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      ../alpha/ra/alphaSpillInstr.sml
++   in
++      functor gs_50 = AlphaSpillInstr
++   end
++   local
++      open l4
++   in
++      functor gs_51 = MLTreeMult
++   end
++   local
++      open l4
++   in
++      functor gs_52 = MLTreeGen
++   end
++   local
++      open l137
++   in
++      structure gs_53 = IntInf
++   end
++   local
++      open l42
++   in
++      structure gs_54 = Int32
++   end
++   local
++      open l42
++   in
++      structure gs_55 = List
++   end
++   local
++      open l4
++   in
++      signature gs_56 = MLTREECOMP
++      signature gs_57 = MLTREE_EXTENSION_COMP
++   end
++   local
++      signature ALPHACELLS = gs_16
++      signature ALPHAINSTR = gs_18
++      structure AlphaCells = gs_17
++      functor AlphaInstr = gs_19
++      signature CELLS_BASIS = gs_7
++      structure CellsBasis = gs_8
++      signature MLTREE = gs_6
++      ../alpha/mltree/alphaPseudoInstr.sig
++   in
++      signature gs_58 = ALPHA_PSEUDO_INSTR
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      signature ALPHA_PSEUDO_INSTR = gs_58
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      structure Int32 = gs_54
++      structure IntInf = gs_53
++      structure Label = gs_9
++      structure List = gs_55
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscAnnotations = gs_3
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREECOMP = gs_56
++      signature MLTREE_EXTENSION_COMP = gs_57
++      functor MLTreeGen = gs_52
++      functor MLTreeMult = gs_51
++      structure Word = gs_23
++      structure Word32 = gs_47
++      ../alpha/mltree/alpha.sml
++   in
++      functor gs_59 = Alpha
++   end
++   local
++      open l4
++   in
++      functor gs_60 = Shuffle
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      signature ALPHASHUFFLE = gs_28
++      functor AlphaInstr = gs_19
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      structure Option = gs_22
++      functor Shuffle = gs_60
++      ../alpha/instructions/alphaShuffle.sml
++   in
++      functor gs_61 = AlphaShuffle
++   end
++   local
++      open l42
++   in
++      structure gs_62 = Word8
++   end
++   local
++      open l4
++   in
++      signature gs_63 = CODE_STRING
++   end
++   local
++      signature ALPHAINSTR = gs_18
++      functor AlphaInstr = gs_19
++      signature CODE_STRING = gs_63
++      structure CellsBasis = gs_8
++      signature INSTRUCTION_EMITTER = gs_30
++      signature INSTRUCTION_STREAM = gs_38
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_24
++      structure Option = gs_22
++      structure Word32 = gs_47
++      structure Word8 = gs_62
++      ../alpha/emit/alphaMC.sml
++   in
++      functor gs_64 = AlphaMCEmitter
++   end
++in
++   signature ALPHACELLS = gs_16
++   signature ALPHAINSTR = gs_18
++   signature ALPHASHUFFLE = gs_28
++   signature ALPHA_PSEUDO_INSTR = gs_58
++   functor Alpha = gs_59
++   functor AlphaAsmEmitter = gs_39
++   structure AlphaCells = gs_17
++   functor AlphaFreqProps = gs_20
++   functor AlphaGasPseudoOps = gs_48
++   functor AlphaInstr = gs_19
++   functor AlphaJumps = gs_29
++   functor AlphaMCEmitter = gs_64
++   functor AlphaProps = gs_26
++   functor AlphaRewrite = gs_40
++   functor AlphaShuffle = gs_61
++   functor AlphaSpillInstr = gs_50
++end
++end
++
++end
+diff -Naur MLRISC/mlb/Control.mlb MLRISC-mlton/mlb/Control.mlb
+--- MLRISC/mlb/Control.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/Control.mlb	2006-03-04 12:08:27.000000000 -0500
+@@ -0,0 +1,104 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l4 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l28 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l12 = 
++    bas
++      (* $/controls-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Controls/controls-lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      structure gs_0 = Timer
++   end
++   local
++      open l4
++   in
++      structure gs_1 = Time
++   end
++   local
++      open l12
++   in
++      structure gs_2 = Controls
++   end
++   local
++      open l12
++   in
++      structure gs_3 = ControlUtil
++   end
++   local
++      open l12
++   in
++      structure gs_4 = ControlSet
++   end
++   local
++      open l12
++   in
++      structure gs_5 = ControlRegistry
++   end
++   local
++      open l4
++   in
++      structure gs_6 = TextIO
++   end
++   local
++      open l28
++   in
++      structure gs_7 = Atom
++   end
++   local
++      structure Atom = gs_7
++      structure ControlRegistry = gs_5
++      structure ControlSet = gs_4
++      structure ControlUtil = gs_3
++      structure Controls = gs_2
++      structure TextIO = gs_6
++      structure Time = gs_1
++      ../control/mlrisc-control.sml
++   in
++      signature gs_8 = MLRISC_CONTROL
++      structure gs_9 = MLRiscControl
++   end
++   local
++      signature MLRISC_CONTROL = gs_8
++      structure MLRiscControl = gs_9
++      structure Time = gs_1
++      structure Timer = gs_0
++      ../control/mlrisc-timing.sml
++   in
++      signature gs_10 = MLRISC_TIMING
++      structure gs_11 = MLRiscTiming
++   end
++   local
++      structure TextIO = gs_6
++      ../control/mlriscErrormsg.sml
++   in
++      signature gs_12 = MLRISC_ERROR_MSG
++      structure gs_13 = MLRiscErrorMsg
++   end
++in
++   signature MLRISC_CONTROL = gs_8
++   signature MLRISC_ERROR_MSG = gs_12
++   signature MLRISC_TIMING = gs_10
++   structure MLRiscControl = gs_9
++   structure MLRiscErrorMsg = gs_13
++   structure MLRiscTiming = gs_11
++end
++end
++
++end
+diff -Naur MLRISC/mlb/Graphs.mlb MLRISC-mlton/mlb/Graphs.mlb
+--- MLRISC/mlb/Graphs.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/Graphs.mlb	2006-03-04 12:08:27.000000000 -0500
+@@ -0,0 +1,708 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l8 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l4 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l29 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      structure gs_0 = ListMergeSort
++   end
++   local
++      open l8
++   in
++      structure gs_1 = Int
++   end
++   local
++      open l8
++   in
++      structure gs_2 = List
++   end
++   local
++      ../graphs/graph.sig
++   in
++      signature gs_3 = GRAPH
++   end
++   local
++      signature GRAPH = gs_3
++      structure List = gs_2
++      ../graphs/graph.sml
++   in
++      structure gs_4 = Graph
++   end
++   local
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure ListMergeSort = gs_0
++      ../graphs/uniongraph.sml
++   in
++      signature gs_5 = UNION_GRAPH_VIEW
++      structure gs_6 = UnionGraphView
++   end
++   local
++      open l29
++   in
++      signature gs_7 = CATNETABLE_LIST
++      structure gs_8 = CatnetableList
++   end
++   local
++      open l8
++   in
++      structure gs_9 = Array
++   end
++   local
++      ../graphs/group.sig
++   in
++      signature gs_10 = ABELIAN_GROUP
++      signature gs_11 = ABELIAN_GROUP_WITH_INF
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      structure Graph = gs_4
++      ../graphs/min-cut.sig
++   in
++      signature gs_12 = MIN_CUT
++   end
++   local
++      open l8
++   in
++      signature gs_13 = ARRAY
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/node-priqueue.sig
++   in
++      signature gs_14 = NODE_PRIORITY_QUEUE
++   end
++   local
++      signature ARRAY = gs_13
++      structure Graph = gs_4
++      signature NODE_PRIORITY_QUEUE = gs_14
++      ../graphs/node-priqueue.sml
++   in
++      functor gs_15 = NodePriorityQueue
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      structure Array = gs_9
++      signature CATNETABLE_LIST = gs_7
++      structure CatnetableList = gs_8
++      structure Graph = gs_4
++      signature MIN_CUT = gs_12
++      functor NodePriorityQueue = gs_15
++      ../graphs/min-cut.sml
++   in
++      functor gs_16 = MinCut
++   end
++   local
++      structure Graph = gs_4
++      structure List = gs_2
++      ../graphs/isograph.sml
++   in
++      signature gs_17 = ISOMORPHIC_GRAPH_VIEW
++      structure gs_18 = IsomorphicGraphView
++   end
++   local
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure List = gs_2
++      ../graphs/seme.sml
++   in
++      signature gs_19 = SINGLE_ENTRY_MULTIPLE_EXIT_VIEW
++      structure gs_20 = SingleEntryMultipleExit
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-comb.sig
++   in
++      signature gs_21 = GRAPH_COMBINATIONS
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/revgraph.sml
++   in
++      signature gs_22 = REVERSED_GRAPH_VIEW
++      structure gs_23 = ReversedGraphView
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/renamegraph.sml
++   in
++      signature gs_24 = RENAMED_GRAPH_VIEW
++      structure gs_25 = RenamedGraphView
++   end
++   local
++      signature GRAPH_COMBINATIONS = gs_21
++      structure Graph = gs_4
++      signature RENAMED_GRAPH_VIEW = gs_24
++      signature REVERSED_GRAPH_VIEW = gs_22
++      structure RenamedGraphView = gs_25
++      structure ReversedGraphView = gs_23
++      signature UNION_GRAPH_VIEW = gs_5
++      structure UnionGraphView = gs_6
++      ../graphs/graph-comb.sml
++   in
++      structure gs_26 = GraphCombinations
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/readonly.sml
++   in
++      signature gs_27 = READONLY_GRAPH_VIEW
++      structure gs_28 = ReadOnlyGraphView
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graphimpl.sig
++   in
++      signature gs_29 = GRAPH_IMPLEMENTATION
++   end
++   local
++      open l8
++   in
++      structure gs_30 = Word8Array
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-scc.sig
++   in
++      signature gs_31 = GRAPH_STRONGLY_CONNECTED_COMPONENTS
++   end
++   local
++      structure Array = gs_9
++      signature GRAPH_STRONGLY_CONNECTED_COMPONENTS = gs_31
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure Word8Array = gs_30
++      ../graphs/graph-scc.sml
++   in
++      structure gs_32 = GraphSCC
++   end
++   local
++      open l29
++   in
++      structure gs_33 = BitSet
++   end
++   local
++      structure Array = gs_9
++      structure Graph = gs_4
++      ../graphs/graph-dfs.sig
++   in
++      signature gs_34 = GRAPH_DEPTH_FIRST_SEARCH
++   end
++   local
++      structure Array = gs_9
++      structure BitSet = gs_33
++      signature GRAPH_DEPTH_FIRST_SEARCH = gs_34
++      structure Graph = gs_4
++      ../graphs/graph-dfs.sml
++   in
++      structure gs_35 = GraphDFS
++   end
++   local
++      structure Array = gs_9
++      structure Graph = gs_4
++      ../graphs/graph-bfs.sig
++   in
++      signature gs_36 = GRAPH_BREATH_FIRST_SEARCH
++   end
++   local
++      structure Array = gs_9
++      structure BitSet = gs_33
++      signature GRAPH_BREATH_FIRST_SEARCH = gs_36
++      structure Graph = gs_4
++      ../graphs/graph-bfs.sml
++   in
++      structure gs_37 = GraphBFS
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-bcc.sig
++   in
++      signature gs_38 = GRAPH_BICONNECTED_COMPONENTS
++   end
++   local
++      structure Array = gs_9
++      signature GRAPH_BICONNECTED_COMPONENTS = gs_38
++      structure Graph = gs_4
++      ../graphs/graph-bcc.sml
++   in
++      structure gs_39 = GraphBCC
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-topsort.sig
++   in
++      signature gs_40 = GRAPH_TOPOLOGICAL_SORT
++   end
++   local
++      open l8
++   in
++      structure gs_41 = String
++   end
++   local
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure List = gs_2
++      structure String = gs_41
++      ../graphs/printgraph.sml
++   in
++      signature gs_42 = PRINT_GRAPH
++      structure gs_43 = PrintGraph
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/no-exit.sml
++   in
++      signature gs_44 = NO_ENTRY_VIEW
++      signature gs_45 = NO_EXIT_VIEW
++      structure gs_46 = NoEntryView
++      structure gs_47 = NoExitView
++   end
++   local
++      open l29
++   in
++      structure gs_48 = PriorityQueue
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/spanning-tree.sig
++   in
++      signature gs_49 = MIN_COST_SPANNING_TREE
++   end
++   local
++      open l4
++   in
++      structure gs_50 = HashTable
++   end
++   local
++      open l4
++   in
++      structure gs_51 = URef
++   end
++   local
++      open l8
++   in
++      structure gs_52 = Word
++   end
++   local
++      structure Graph = gs_4
++      structure HashTable = gs_50
++      structure URef = gs_51
++      structure Word = gs_52
++      ../graphs/node-partition.sml
++   in
++      signature gs_53 = NODE_PARTITION
++      structure gs_54 = NodePartition
++   end
++   local
++      structure Graph = gs_4
++      signature MIN_COST_SPANNING_TREE = gs_49
++      signature NODE_PARTITION = gs_53
++      structure NodePartition = gs_54
++      structure PriorityQueue = gs_48
++      ../graphs/kruskal.sml
++   in
++      structure gs_55 = Kruskal
++   end
++   local
++      open l29
++   in
++      structure gs_56 = HashArray
++   end
++   local
++      structure Graph = gs_4
++      structure List = gs_2
++      ../graphs/subgraph-p.sml
++   in
++      signature gs_57 = SUBGRAPH_P_VIEW
++      structure gs_58 = Subgraph_P_View
++   end
++   local
++      structure Graph = gs_4
++      structure HashArray = gs_56
++      signature SUBGRAPH_P_VIEW = gs_57
++      structure Subgraph_P_View = gs_58
++      ../graphs/trace-graph.sml
++   in
++      signature gs_59 = TRACE_SUBGRAPH_VIEW
++      structure gs_60 = TraceView
++   end
++   local
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure List = gs_2
++      ../graphs/start-stop.sml
++   in
++      signature gs_61 = START_STOP_VIEW
++      structure gs_62 = StartStopView
++   end
++   local
++      signature GRAPH_IMPLEMENTATION = gs_29
++      structure Graph = gs_4
++      ../graphs/snap-shot.sml
++   in
++      signature gs_63 = GRAPH_SNAPSHOT
++      functor gs_64 = GraphSnapShot
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      structure Graph = gs_4
++      ../graphs/max-flow.sig
++   in
++      signature gs_65 = MAX_FLOW
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      structure Array = gs_9
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure List = gs_2
++      signature MAX_FLOW = gs_65
++      ../graphs/max-flow.sml
++   in
++      functor gs_66 = MaxFlow
++   end
++   local
++      open l8
++   in
++      structure gs_67 = Array2
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      structure Array = gs_9
++      structure Array2 = gs_67
++      structure Graph = gs_4
++      ../graphs/shortest-paths.sig
++   in
++      signature gs_68 = ALL_PAIRS_SHORTEST_PATHS
++      signature gs_69 = SINGLE_SOURCE_SHORTEST_PATHS
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      signature ALL_PAIRS_SHORTEST_PATHS = gs_68
++      structure Array2 = gs_67
++      structure Graph = gs_4
++      signature SINGLE_SOURCE_SHORTEST_PATHS = gs_69
++      ../graphs/floyd-warshall.sml
++   in
++      functor gs_70 = FloydWarshall
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-is-cyclic.sig
++   in
++      signature gs_71 = GRAPH_IS_CYCLIC
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/update-graph-info.sml
++   in
++      signature gs_72 = UPDATE_GRAPH_INFO
++      structure gs_73 = UpdateGraphInfo
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/graph-cycles.sig
++   in
++      signature gs_74 = GRAPH_SIMPLE_CYCLES
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      signature ALL_PAIRS_SHORTEST_PATHS = gs_68
++      structure Array = gs_9
++      structure Graph = gs_4
++      structure Int = gs_1
++      signature SINGLE_SOURCE_SHORTEST_PATHS = gs_69
++      ../graphs/bellman-ford.sml
++   in
++      functor gs_75 = BellmanFord
++   end
++   local
++      signature GRAPH_TOPOLOGICAL_SORT = gs_40
++      structure Graph = gs_4
++      structure Word8Array = gs_30
++      ../graphs/graph-topsort.sml
++   in
++      structure gs_76 = GraphTopsort
++   end
++   local
++      structure Array = gs_9
++      structure Graph = gs_4
++      structure GraphTopsort = gs_76
++      ../graphs/trans-closure.sml
++   in
++      signature gs_77 = TRANSITIVE_CLOSURE
++      structure gs_78 = TransitiveClosure
++   end
++   local
++      open l29
++   in
++      structure gs_79 = DynArray
++   end
++   local
++      structure DynArray = gs_79
++      signature GRAPH_IMPLEMENTATION = gs_29
++      structure Graph = gs_4
++      structure List = gs_2
++      ../graphs/digraph.sml
++   in
++      functor gs_80 = DirectedGraph
++      structure gs_81 = DirectedGraph
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/wrappers.sml
++   in
++      signature gs_82 = GRAPH_WRAPPERS
++      structure gs_83 = GraphWrappers
++   end
++   local
++      structure BitSet = gs_33
++      signature GRAPH_IS_CYCLIC = gs_71
++      structure Graph = gs_4
++      ../graphs/graph-is-cyclic.sml
++   in
++      structure gs_84 = GraphIsCyclic
++   end
++   local
++      open l4
++   in
++      structure gs_85 = IntHashTable
++   end
++   local
++      structure Graph = gs_4
++      structure IntHashTable = gs_85
++      structure List = gs_2
++      ../graphs/subgraph.sml
++   in
++      signature gs_86 = SUBGRAPH_VIEW
++      structure gs_87 = SubgraphView
++   end
++   local
++      structure Graph = gs_4
++      structure Int = gs_1
++      structure ListMergeSort = gs_0
++      ../graphs/ugraph.sml
++   in
++      signature gs_88 = UNDIRECTED_GRAPH_VIEW
++      structure gs_89 = UndirectedGraphView
++   end
++   local
++      structure Graph = gs_4
++      structure HashArray = gs_56
++      structure List = gs_2
++      structure URef = gs_51
++      ../graphs/graph-minor.sml
++   in
++      signature gs_90 = GRAPH_MINOR_VIEW
++      structure gs_91 = GraphMinorView
++   end
++   local
++      signature ARRAY = gs_13
++      signature GRAPH_IMPLEMENTATION = gs_29
++      structure Graph = gs_4
++      structure List = gs_2
++      ../graphs/udgraph.sml
++   in
++      functor gs_92 = UndirectedGraph
++   end
++   local
++      signature GRAPH = gs_3
++      ../graphs/bigraph.sig
++   in
++      signature gs_93 = BIPARTITE_GRAPH
++   end
++   local
++      structure Graph = gs_4
++      structure HashArray = gs_56
++      signature SUBGRAPH_P_VIEW = gs_57
++      structure Subgraph_P_View = gs_58
++      ../graphs/acyclic-graph.sml
++   in
++      signature gs_94 = ACYCLIC_SUBGRAPH_VIEW
++      structure gs_95 = AcyclicSubgraphView
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/singleton.sml
++   in
++      signature gs_96 = SINGLETON_GRAPH_VIEW
++      structure gs_97 = SingletonGraphView
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      signature ALL_PAIRS_SHORTEST_PATHS = gs_68
++      structure Array = gs_9
++      structure Graph = gs_4
++      functor NodePriorityQueue = gs_15
++      signature SINGLE_SOURCE_SHORTEST_PATHS = gs_69
++      ../graphs/dijkstra.sml
++   in
++      functor gs_98 = Dijkstra
++   end
++   local
++      signature ABELIAN_GROUP = gs_10
++      signature ABELIAN_GROUP_WITH_INF = gs_11
++      signature ALL_PAIRS_SHORTEST_PATHS = gs_68
++      structure Array = gs_9
++      structure Array2 = gs_67
++      functor BellmanFord = gs_75
++      functor Dijkstra = gs_98
++      functor DirectedGraph = gs_80
++      structure DirectedGraph = gs_81
++      structure Graph = gs_4
++      structure HashArray = gs_56
++      signature SINGLE_SOURCE_SHORTEST_PATHS = gs_69
++      signature UNION_GRAPH_VIEW = gs_5
++      structure UnionGraphView = gs_6
++      ../graphs/johnson.sml
++   in
++      functor gs_99 = Johnson
++   end
++   local
++      structure Graph = gs_4
++      ../graphs/matching.sig
++   in
++      signature gs_100 = BIPARTITE_MATCHING
++   end
++   local
++      structure Array = gs_9
++      signature GRAPH_SIMPLE_CYCLES = gs_74
++      structure Graph = gs_4
++      structure GraphSCC = gs_32
++      ../graphs/graph-cycles.sml
++   in
++      structure gs_101 = GraphCycles
++   end
++   local
++      structure Array = gs_9
++      signature BIPARTITE_MATCHING = gs_100
++      structure Graph = gs_4
++      structure List = gs_2
++      ../graphs/matching.sml
++   in
++      structure gs_102 = BipartiteMatching
++   end
++   local
++      ../graphs/closed-semi-ring.sig
++   in
++      signature gs_103 = CLOSED_SEMI_RING
++   end
++in
++   signature ABELIAN_GROUP = gs_10
++   signature ABELIAN_GROUP_WITH_INF = gs_11
++   signature ACYCLIC_SUBGRAPH_VIEW = gs_94
++   signature ALL_PAIRS_SHORTEST_PATHS = gs_68
++   structure AcyclicSubgraphView = gs_95
++   signature BIPARTITE_GRAPH = gs_93
++   signature BIPARTITE_MATCHING = gs_100
++   functor BellmanFord = gs_75
++   structure BipartiteMatching = gs_102
++   signature CLOSED_SEMI_RING = gs_103
++   functor Dijkstra = gs_98
++   functor DirectedGraph = gs_80
++   structure DirectedGraph = gs_81
++   functor FloydWarshall = gs_70
++   signature GRAPH = gs_3
++   signature GRAPH_BICONNECTED_COMPONENTS = gs_38
++   signature GRAPH_BREATH_FIRST_SEARCH = gs_36
++   signature GRAPH_COMBINATIONS = gs_21
++   signature GRAPH_DEPTH_FIRST_SEARCH = gs_34
++   signature GRAPH_IMPLEMENTATION = gs_29
++   signature GRAPH_IS_CYCLIC = gs_71
++   signature GRAPH_MINOR_VIEW = gs_90
++   signature GRAPH_SIMPLE_CYCLES = gs_74
++   signature GRAPH_SNAPSHOT = gs_63
++   signature GRAPH_STRONGLY_CONNECTED_COMPONENTS = gs_31
++   signature GRAPH_TOPOLOGICAL_SORT = gs_40
++   signature GRAPH_WRAPPERS = gs_82
++   structure Graph = gs_4
++   structure GraphBCC = gs_39
++   structure GraphBFS = gs_37
++   structure GraphCombinations = gs_26
++   structure GraphCycles = gs_101
++   structure GraphDFS = gs_35
++   structure GraphIsCyclic = gs_84
++   structure GraphMinorView = gs_91
++   structure GraphSCC = gs_32
++   functor GraphSnapShot = gs_64
++   structure GraphTopsort = gs_76
++   structure GraphWrappers = gs_83
++   signature ISOMORPHIC_GRAPH_VIEW = gs_17
++   structure IsomorphicGraphView = gs_18
++   functor Johnson = gs_99
++   structure Kruskal = gs_55
++   signature MAX_FLOW = gs_65
++   signature MIN_COST_SPANNING_TREE = gs_49
++   signature MIN_CUT = gs_12
++   functor MaxFlow = gs_66
++   functor MinCut = gs_16
++   signature NODE_PARTITION = gs_53
++   signature NODE_PRIORITY_QUEUE = gs_14
++   signature NO_ENTRY_VIEW = gs_44
++   signature NO_EXIT_VIEW = gs_45
++   structure NoEntryView = gs_46
++   structure NoExitView = gs_47
++   structure NodePartition = gs_54
++   functor NodePriorityQueue = gs_15
++   signature PRINT_GRAPH = gs_42
++   structure PrintGraph = gs_43
++   signature READONLY_GRAPH_VIEW = gs_27
++   signature RENAMED_GRAPH_VIEW = gs_24
++   signature REVERSED_GRAPH_VIEW = gs_22
++   structure ReadOnlyGraphView = gs_28
++   structure RenamedGraphView = gs_25
++   structure ReversedGraphView = gs_23
++   signature SINGLETON_GRAPH_VIEW = gs_96
++   signature SINGLE_ENTRY_MULTIPLE_EXIT_VIEW = gs_19
++   signature SINGLE_SOURCE_SHORTEST_PATHS = gs_69
++   signature START_STOP_VIEW = gs_61
++   signature SUBGRAPH_P_VIEW = gs_57
++   signature SUBGRAPH_VIEW = gs_86
++   structure SingleEntryMultipleExit = gs_20
++   structure SingletonGraphView = gs_97
++   structure StartStopView = gs_62
++   structure SubgraphView = gs_87
++   structure Subgraph_P_View = gs_58
++   signature TRACE_SUBGRAPH_VIEW = gs_59
++   signature TRANSITIVE_CLOSURE = gs_77
++   structure TraceView = gs_60
++   structure TransitiveClosure = gs_78
++   signature UNDIRECTED_GRAPH_VIEW = gs_88
++   signature UNION_GRAPH_VIEW = gs_5
++   signature UPDATE_GRAPH_INFO = gs_72
++   functor UndirectedGraph = gs_92
++   structure UndirectedGraphView = gs_89
++   structure UnionGraphView = gs_6
++   structure UpdateGraphInfo = gs_73
++end
++end
++
++end
+diff -Naur MLRISC/mlb/HPPA.mlb MLRISC-mlton/mlb/HPPA.mlb
+--- MLRISC/mlb/HPPA.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/HPPA.mlb	2006-03-04 12:08:28.000000000 -0500
+@@ -0,0 +1,494 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l11 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l69 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l16 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l37 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      structure gs_0 = CellsBasis
++   end
++   local
++      open l4
++   in
++      functor gs_1 = Shuffle
++   end
++   local
++      open l11
++   in
++      structure gs_2 = Option
++   end
++   local
++      open l16
++   in
++      signature gs_3 = MLRISC_ERROR_MSG
++      structure gs_4 = MLRiscErrorMsg
++   end
++   local
++      open l4
++   in
++      signature gs_5 = REGION
++   end
++   local
++      open l4
++   in
++      signature gs_6 = CONSTANT
++   end
++   local
++      open l4
++   in
++      signature gs_7 = MLTREE
++   end
++   local
++      open l4
++   in
++      signature gs_8 = CELLS_BASIS
++   end
++   local
++      open l4
++   in
++      structure gs_9 = Label
++   end
++   local
++      open l37
++   in
++      structure gs_10 = Annotations
++   end
++   local
++      open l4
++   in
++      functor gs_11 = Cells
++   end
++   local
++      open l11
++   in
++      structure gs_12 = Int
++   end
++   local
++      open l4
++   in
++      signature gs_13 = CELLS
++   end
++   local
++      signature CELLS = gs_13
++      functor Cells = gs_11
++      structure CellsBasis = gs_0
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      ../hppa/instructions/hppaCells.sml
++   in
++      signature gs_14 = HPPACELLS
++      structure gs_15 = HppaCells
++   end
++   local
++      structure Annotations = gs_10
++      signature CELLS_BASIS = gs_8
++      signature CONSTANT = gs_6
++      structure CellsBasis = gs_0
++      signature HPPACELLS = gs_14
++      structure HppaCells = gs_15
++      structure Label = gs_9
++      signature MLTREE = gs_7
++      signature REGION = gs_5
++      ../hppa/instructions/hppaInstr.sml
++   in
++      signature gs_16 = HPPAINSTR
++      functor gs_17 = HppaInstr
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      ../hppa/instructions/hppaShuffle.sig
++   in
++      signature gs_18 = HPPASHUFFLE
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      signature HPPASHUFFLE = gs_18
++      functor HppaInstr = gs_17
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      structure Option = gs_2
++      functor Shuffle = gs_1
++      ../hppa/instructions/hppaShuffle.sml
++   in
++      functor gs_19 = HppaShuffle
++   end
++   local
++      open l4
++   in
++      signature gs_20 = INSTRUCTION_EMITTER
++   end
++   local
++      open l69
++   in
++      structure gs_21 = IntInf
++   end
++   local
++      open l11
++   in
++      structure gs_22 = Word8
++   end
++   local
++      open l11
++   in
++      structure gs_23 = Word32
++   end
++   local
++      open l4
++   in
++      signature gs_24 = CODE_STRING
++   end
++   local
++      open l4
++   in
++      signature gs_25 = INSTRUCTION_STREAM
++   end
++   local
++      open l4
++   in
++      signature gs_26 = MLTREE_EVAL
++   end
++   local
++      signature CODE_STRING = gs_24
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      signature INSTRUCTION_EMITTER = gs_20
++      signature INSTRUCTION_STREAM = gs_25
++      structure IntInf = gs_21
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREE_EVAL = gs_26
++      structure Option = gs_2
++      structure Word32 = gs_23
++      structure Word8 = gs_22
++      ../hppa/emit/hppaMC.sml
++   in
++      functor gs_27 = HppaMCEmitter
++   end
++   local
++      signature CELLS_BASIS = gs_8
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      ../hppa/mltree/hppaMillicode.sig
++   in
++      signature gs_28 = HPPA_MILLICODE
++   end
++   local
++      open l4
++   in
++      signature gs_29 = ASM_FORMAT_UTIL
++      structure gs_30 = AsmFormatUtil
++   end
++   local
++      open l4
++   in
++      signature gs_31 = ASM_STREAM
++      structure gs_32 = AsmStream
++   end
++   local
++      open l11
++   in
++      structure gs_33 = TextIO
++   end
++   local
++      open l11
++   in
++      structure gs_34 = String
++   end
++   local
++      open l4
++   in
++      structure gs_35 = AsmFlags
++   end
++   local
++      signature ASM_FORMAT_UTIL = gs_29
++      signature ASM_STREAM = gs_31
++      structure Annotations = gs_10
++      structure AsmFlags = gs_35
++      structure AsmFormatUtil = gs_30
++      structure AsmStream = gs_32
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      signature HPPASHUFFLE = gs_18
++      functor HppaInstr = gs_17
++      signature INSTRUCTION_EMITTER = gs_20
++      signature INSTRUCTION_STREAM = gs_25
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREE_EVAL = gs_26
++      structure String = gs_34
++      structure TextIO = gs_33
++      ../hppa/emit/hppaAsm.sml
++   in
++      functor gs_36 = HppaAsmEmitter
++   end
++   local
++      open l4
++   in
++      signature gs_37 = INSTRUCTIONS
++   end
++   local
++      structure CellsBasis = gs_0
++      signature INSTRUCTIONS = gs_37
++      signature MLTREE = gs_7
++      ../hppa/mltree/hppaLabelComp.sig
++   in
++      signature gs_38 = LABEL_COMP
++   end
++   local
++      open l4
++   in
++      signature gs_39 = ARCH_SPILL_INSTR
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      ../hppa/ra/hppaRewrite.sml
++   in
++      functor gs_40 = HppaRewrite
++   end
++   local
++      signature ARCH_SPILL_INSTR = gs_39
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      functor HppaRewrite = gs_40
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      ../hppa/ra/hppaSpillInstr.sml
++   in
++      functor gs_41 = HppaSpillInstr
++   end
++   local
++      open l4
++   in
++      signature gs_42 = FREQUENCY_PROPERTIES
++   end
++   local
++      open l37
++   in
++      signature gs_43 = PROBABILITY
++      structure gs_44 = Probability
++   end
++   local
++      open l4
++   in
++      structure gs_45 = MLRiscAnnotations
++   end
++   local
++      signature FREQUENCY_PROPERTIES = gs_42
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      structure MLRiscAnnotations = gs_45
++      signature PROBABILITY = gs_43
++      structure Probability = gs_44
++      ../hppa/instructions/hppaFreqProps.sml
++   in
++      functor gs_46 = HppaFreqProps
++   end
++   local
++      open l4
++   in
++      signature gs_47 = PSEUDO_OPS_BASIS
++   end
++   local
++      open l4
++   in
++      signature gs_48 = GAS_PSEUDO_OPS
++      functor gs_49 = GasPseudoOps
++   end
++   local
++      open l4
++   in
++      functor gs_50 = PseudoOpsBig
++   end
++   local
++      open l69
++   in
++      structure gs_51 = Format
++   end
++   local
++      open l4
++   in
++      structure gs_52 = PseudoOpsBasisTyp
++   end
++   local
++      structure Format = gs_51
++      signature GAS_PSEUDO_OPS = gs_48
++      functor GasPseudoOps = gs_49
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREE = gs_7
++      signature MLTREE_EVAL = gs_26
++      signature PSEUDO_OPS_BASIS = gs_47
++      structure PseudoOpsBasisTyp = gs_52
++      functor PseudoOpsBig = gs_50
++      structure Word32 = gs_23
++      ../hppa/flowgraph/hppaGasPseudoOps.sml
++   in
++      functor gs_53 = HppaGasPseudoOps
++   end
++   local
++      open l4
++   in
++      signature gs_54 = DELAY_SLOT_PROPERTIES
++   end
++   local
++      open l4
++   in
++      signature gs_55 = INSN_PROPERTIES
++   end
++   local
++      structure CellsBasis = gs_0
++      signature DELAY_SLOT_PROPERTIES = gs_54
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      signature INSN_PROPERTIES = gs_55
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      structure Option = gs_2
++      ../hppa/backpatch/hppaDelaySlotProps.sml
++   in
++      functor gs_56 = HppaDelaySlots
++   end
++   local
++      open l11
++   in
++      structure gs_57 = Word
++   end
++   local
++      open l4
++   in
++      signature gs_58 = MLTREE_HASH
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      functor HppaInstr = gs_17
++      signature INSN_PROPERTIES = gs_55
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREE_EVAL = gs_26
++      signature MLTREE_HASH = gs_58
++      structure Option = gs_2
++      structure Word = gs_57
++      ../hppa/instructions/hppaProps.sml
++   in
++      functor gs_59 = HppaProps
++   end
++   local
++      open l4
++   in
++      signature gs_60 = SDI_JUMPS
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      signature HPPASHUFFLE = gs_18
++      functor HppaInstr = gs_17
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREE_EVAL = gs_26
++      signature SDI_JUMPS = gs_60
++      structure Word = gs_57
++      ../hppa/backpatch/hppaJumps.sml
++   in
++      functor gs_61 = HppaJumps
++   end
++   local
++      open l4
++   in
++      functor gs_62 = MLTreeMult
++   end
++   local
++      open l4
++   in
++      functor gs_63 = MLTreeGen
++   end
++   local
++      open l4
++   in
++      signature gs_64 = MLTREECOMP
++      signature gs_65 = MLTREE_EXTENSION_COMP
++   end
++   local
++      structure CellsBasis = gs_0
++      signature HPPAINSTR = gs_16
++      signature HPPA_MILLICODE = gs_28
++      functor HppaInstr = gs_17
++      signature LABEL_COMP = gs_38
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_3
++      structure MLRiscAnnotations = gs_45
++      structure MLRiscErrorMsg = gs_4
++      signature MLTREECOMP = gs_64
++      signature MLTREE_EXTENSION_COMP = gs_65
++      functor MLTreeGen = gs_63
++      functor MLTreeMult = gs_62
++      structure Word32 = gs_23
++      ../hppa/mltree/hppa.sml
++   in
++      functor gs_66 = Hppa
++   end
++in
++   signature HPPACELLS = gs_14
++   signature HPPAINSTR = gs_16
++   signature HPPASHUFFLE = gs_18
++   signature HPPA_MILLICODE = gs_28
++   functor Hppa = gs_66
++   functor HppaAsmEmitter = gs_36
++   structure HppaCells = gs_15
++   functor HppaDelaySlots = gs_56
++   functor HppaFreqProps = gs_46
++   functor HppaGasPseudoOps = gs_53
++   functor HppaInstr = gs_17
++   functor HppaJumps = gs_61
++   functor HppaMCEmitter = gs_27
++   functor HppaProps = gs_59
++   functor HppaRewrite = gs_40
++   functor HppaShuffle = gs_19
++   functor HppaSpillInstr = gs_41
++   signature LABEL_COMP = gs_38
++end
++end
++
++end
+diff -Naur MLRISC/mlb/IA32.mlb MLRISC-mlton/mlb/IA32.mlb
+--- MLRISC/mlb/IA32.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/IA32.mlb	2006-03-04 12:08:29.000000000 -0500
+@@ -0,0 +1,781 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l35 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l138 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l12 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l230 = 
++    bas
++      (* $Graphs.cm(=$SMLNJ-MLRISC)/Graphs.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Graphs.mlb
++    end
++  basis l39 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++  basis l311 = 
++    bas
++      (* $MLTREE.cm(=$SMLNJ-MLRISC)/MLTREE.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLTREE.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = ARCH_SPILL_INSTR
++   end
++   local
++      open l4
++   in
++      structure gs_1 = CellsBasis
++   end
++   local
++      open l12
++   in
++      signature gs_2 = MLRISC_ERROR_MSG
++      structure gs_3 = MLRiscErrorMsg
++   end
++   local
++      open l4
++   in
++      signature gs_4 = INSN_PROPERTIES
++   end
++   local
++      open l4
++   in
++      signature gs_5 = REGION
++   end
++   local
++      open l4
++   in
++      signature gs_6 = CONSTANT
++   end
++   local
++      open l4
++   in
++      signature gs_7 = MLTREE
++   end
++   local
++      open l4
++   in
++      signature gs_8 = CELLS_BASIS
++   end
++   local
++      open l4
++   in
++      structure gs_9 = Label
++   end
++   local
++      open l35
++   in
++      structure gs_10 = Int32
++   end
++   local
++      open l39
++   in
++      structure gs_11 = Annotations
++   end
++   local
++      open l4
++   in
++      functor gs_12 = Cells
++   end
++   local
++      open l35
++   in
++      structure gs_13 = Int
++   end
++   local
++      open l4
++   in
++      signature gs_14 = CELLS
++   end
++   local
++      signature CELLS = gs_14
++      functor Cells = gs_12
++      structure CellsBasis = gs_1
++      structure Int = gs_13
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      ../x86/instructions/x86Cells.sml
++   in
++      signature gs_15 = X86CELLS
++      structure gs_16 = X86Cells
++   end
++   local
++      structure Annotations = gs_11
++      signature CELLS_BASIS = gs_8
++      signature CONSTANT = gs_6
++      structure CellsBasis = gs_1
++      structure Int32 = gs_10
++      structure Label = gs_9
++      signature MLTREE = gs_7
++      signature REGION = gs_5
++      signature X86CELLS = gs_15
++      structure X86Cells = gs_16
++      ../x86/instructions/x86Instr.sml
++   in
++      signature gs_17 = X86INSTR
++      functor gs_18 = X86Instr
++   end
++   local
++      signature ARCH_SPILL_INSTR = gs_0
++      structure CellsBasis = gs_1
++      signature INSN_PROPERTIES = gs_4
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/ra/x86SpillInstr.sml
++   in
++      functor gs_19 = X86SpillInstr
++   end
++   local
++      structure CellsBasis = gs_1
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/instructions/x86MemRegs.sig
++   in
++      signature gs_20 = MEMORY_REGISTERS
++   end
++   local
++      open l4
++   in
++      signature gs_21 = MC_EMIT
++   end
++   local
++      open l35
++   in
++      structure gs_22 = Word32
++   end
++   local
++      open l35
++   in
++      structure gs_23 = Word8
++   end
++   local
++      open l35
++   in
++      structure gs_24 = LargeWord
++   end
++   local
++      open l35
++   in
++      structure gs_25 = Word8Vector
++   end
++   local
++      open l35
++   in
++      structure gs_26 = Option
++   end
++   local
++      open l35
++   in
++      structure gs_27 = Word
++   end
++   local
++      open l4
++   in
++      signature gs_28 = INSTRUCTION_EMITTER
++   end
++   local
++      open l4
++   in
++      signature gs_29 = MLTREE_EVAL
++   end
++   local
++      structure CellsBasis = gs_1
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/instructions/x86Shuffle.sig
++   in
++      signature gs_30 = X86SHUFFLE
++   end
++   local
++      structure CellsBasis = gs_1
++      signature INSTRUCTION_EMITTER = gs_28
++      structure Int32 = gs_10
++      structure LargeWord = gs_24
++      signature MC_EMIT = gs_21
++      signature MEMORY_REGISTERS = gs_20
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE_EVAL = gs_29
++      structure Option = gs_26
++      structure Word = gs_27
++      structure Word32 = gs_22
++      structure Word8 = gs_23
++      structure Word8Vector = gs_25
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      signature X86SHUFFLE = gs_30
++      ../x86/x86MC.sml
++   in
++      functor gs_31 = X86MCEmitter
++   end
++   local
++      open l4
++   in
++      functor gs_32 = Shuffle
++   end
++   local
++      open l35
++   in
++      structure gs_33 = List
++   end
++   local
++      structure CellsBasis = gs_1
++      structure List = gs_33
++      functor Shuffle = gs_32
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      signature X86SHUFFLE = gs_30
++      ../x86/instructions/x86Shuffle.sml
++   in
++      functor gs_34 = X86Shuffle
++   end
++   local
++      open l4
++   in
++      signature gs_35 = CONTROL_FLOW_GRAPH
++   end
++   local
++      open l4
++   in
++      signature gs_36 = MLTREE_STREAM
++   end
++   local
++      ../x86/instructions/x86instr-ext.sml
++   in
++      structure gs_37 = X86InstrExt
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_35
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE_STREAM = gs_36
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      structure X86InstrExt = gs_37
++      ../x86/instructions/x86comp-instr-ext.sml
++   in
++      signature gs_38 = X86COMP_INSTR_EXT
++      functor gs_39 = X86CompInstrExt
++   end
++   local
++      open l4
++   in
++      signature gs_40 = PSEUDO_OPS_BASIS
++   end
++   local
++      open l4
++   in
++      signature gs_41 = GAS_PSEUDO_OPS
++      functor gs_42 = GasPseudoOps
++   end
++   local
++      open l4
++   in
++      functor gs_43 = PseudoOpsLittle
++   end
++   local
++      open l138
++   in
++      structure gs_44 = Format
++   end
++   local
++      open l4
++   in
++      structure gs_45 = PseudoOpsBasisTyp
++   end
++   local
++      structure Format = gs_44
++      signature GAS_PSEUDO_OPS = gs_41
++      functor GasPseudoOps = gs_42
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE = gs_7
++      signature MLTREE_EVAL = gs_29
++      signature PSEUDO_OPS_BASIS = gs_40
++      structure PseudoOpsBasisTyp = gs_45
++      functor PseudoOpsLittle = gs_43
++      structure Word32 = gs_22
++      ../x86/flowgraph/x86GasPseudoOps.sml
++   in
++      functor gs_46 = X86GasPseudoOps
++   end
++   local
++      open l4
++   in
++      signature gs_47 = C_CALLS
++   end
++   local
++      open l4
++   in
++      structure gs_48 = CTypes
++   end
++   local
++      open l138
++   in
++      structure gs_49 = IntInf
++   end
++   local
++      open l4
++   in
++      structure gs_50 = MLRiscAnnotations
++   end
++   local
++      open l35
++   in
++      structure gs_51 = String
++   end
++   local
++      structure CTypes = gs_48
++      signature C_CALLS = gs_47
++      structure Int = gs_13
++      structure Int32 = gs_10
++      structure IntInf = gs_49
++      structure List = gs_33
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscAnnotations = gs_50
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE = gs_7
++      structure String = gs_51
++      structure Word = gs_27
++      signature X86CELLS = gs_15
++      structure X86Cells = gs_16
++      structure X86InstrExt = gs_37
++      ../x86/c-calls/ia32-svid.sml
++   in
++      functor gs_52 = IA32SVID_CCalls
++   end
++   local
++      open l4
++   in
++      signature gs_53 = FREQUENCY_PROPERTIES
++   end
++   local
++      open l39
++   in
++      signature gs_54 = PROBABILITY
++      structure gs_55 = Probability
++   end
++   local
++      signature FREQUENCY_PROPERTIES = gs_53
++      structure MLRiscAnnotations = gs_50
++      signature PROBABILITY = gs_54
++      structure Probability = gs_55
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/instructions/x86FreqProps.sml
++   in
++      functor gs_56 = X86FreqProps
++   end
++   local
++      open l4
++   in
++      signature gs_57 = MLTREE_HASH
++   end
++   local
++      structure CellsBasis = gs_1
++      signature INSN_PROPERTIES = gs_4
++      structure Int = gs_13
++      structure Int32 = gs_10
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE_EVAL = gs_29
++      signature MLTREE_HASH = gs_57
++      structure Word = gs_27
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/instructions/x86Props.sml
++   in
++      functor gs_58 = X86Props
++   end
++   local
++      open l4
++   in
++      signature gs_59 = SDI_JUMPS
++   end
++   local
++      signature MC_EMIT = gs_21
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE_EVAL = gs_29
++      signature SDI_JUMPS = gs_59
++      structure Word8Vector = gs_25
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      signature X86SHUFFLE = gs_30
++      ../x86/backpatch/x86Jumps.sml
++   in
++      functor gs_60 = X86Jumps
++   end
++   local
++      signature CELLS_BASIS = gs_8
++      structure CellsBasis = gs_1
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/ra/x86Rewrite.sig
++   in
++      signature gs_61 = X86REWRITE
++   end
++   local
++      open l4
++   in
++      signature gs_62 = CFG_OPTIMIZATION
++   end
++   local
++      open l4
++   in
++      functor gs_63 = GetReg
++   end
++   local
++      open l4
++   in
++      functor gs_64 = RegisterAllocator
++   end
++   local
++      open l4
++   in
++      functor gs_65 = MemoryRA
++   end
++   local
++      open l4
++   in
++      functor gs_66 = RADeadCodeElim
++   end
++   local
++      open l4
++   in
++      functor gs_67 = ClusterRA
++   end
++   local
++      open l4
++   in
++      signature gs_68 = LIVENESS
++      functor gs_69 = Liveness
++   end
++   local
++      open l4
++   in
++      signature gs_70 = PRINT_FLOWGRAPH
++      functor gs_71 = PrintFlowgraph
++   end
++   local
++      open l138
++   in
++      structure gs_72 = IntHashTable
++   end
++   local
++      open l12
++   in
++      signature gs_73 = MLRISC_CONTROL
++      structure gs_74 = MLRiscControl
++   end
++   local
++      open l230
++   in
++      structure gs_75 = Graph
++   end
++   local
++      open l35
++   in
++      structure gs_76 = Array
++   end
++   local
++      open l4
++   in
++      signature gs_77 = RA_SPILL
++   end
++   local
++      open l4
++   in
++      signature gs_78 = RA_SPILL_HEURISTICS
++   end
++   local
++      open l4
++   in
++      structure gs_79 = RAGraph
++   end
++   local
++      open l138
++   in
++      structure gs_80 = IntRedBlackMap
++   end
++   local
++      open l39
++   in
++      structure gs_81 = StringOutStream
++   end
++   local
++      open l4
++   in
++      signature gs_82 = ASM_STREAM
++      structure gs_83 = AsmStream
++   end
++   local
++      open l138
++   in
++      structure gs_84 = ListMergeSort
++   end
++   local
++      open l35
++   in
++      structure gs_85 = TextIO
++   end
++   local
++      open l35
++   in
++      structure gs_86 = ListPair
++   end
++   local
++      signature ASM_STREAM = gs_82
++      structure Annotations = gs_11
++      structure Array = gs_76
++      structure AsmStream = gs_83
++      signature CFG_OPTIMIZATION = gs_62
++      signature CONTROL_FLOW_GRAPH = gs_35
++      structure CellsBasis = gs_1
++      structure Graph = gs_75
++      signature INSN_PROPERTIES = gs_4
++      signature INSTRUCTION_EMITTER = gs_28
++      structure Int = gs_13
++      structure IntHashTable = gs_72
++      structure IntRedBlackMap = gs_80
++      signature LIVENESS = gs_68
++      structure Label = gs_9
++      structure List = gs_33
++      structure ListMergeSort = gs_84
++      structure ListPair = gs_86
++      functor Liveness = gs_69
++      signature MLRISC_CONTROL = gs_73
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscAnnotations = gs_50
++      structure MLRiscControl = gs_74
++      structure MLRiscErrorMsg = gs_3
++      structure String = gs_51
++      structure StringOutStream = gs_81
++      structure TextIO = gs_85
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/mltree/x86-fp.sml
++   in
++      functor gs_87 = X86FP
++   end
++   local
++      structure Annotations = gs_11
++      structure Array = gs_76
++      signature CFG_OPTIMIZATION = gs_62
++      signature CONTROL_FLOW_GRAPH = gs_35
++      structure CellsBasis = gs_1
++      functor ClusterRA = gs_67
++      functor GetReg = gs_63
++      structure Graph = gs_75
++      signature INSN_PROPERTIES = gs_4
++      signature INSTRUCTION_EMITTER = gs_28
++      structure IntHashTable = gs_72
++      signature LIVENESS = gs_68
++      structure List = gs_33
++      functor Liveness = gs_69
++      signature MLRISC_CONTROL = gs_73
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscControl = gs_74
++      structure MLRiscErrorMsg = gs_3
++      functor MemoryRA = gs_65
++      signature PRINT_FLOWGRAPH = gs_70
++      functor PrintFlowgraph = gs_71
++      functor RADeadCodeElim = gs_66
++      structure RAGraph = gs_79
++      signature RA_SPILL = gs_77
++      signature RA_SPILL_HEURISTICS = gs_78
++      functor RegisterAllocator = gs_64
++      functor X86FP = gs_87
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      functor X86SpillInstr = gs_19
++      ../x86/ra/x86RA.sml
++   in
++      functor gs_88 = X86RA
++   end
++   local
++      open l4
++   in
++      signature gs_89 = OMIT_FRAME_POINTER
++   end
++   local
++      open l35
++   in
++      structure gs_90 = General
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_35
++      structure CellsBasis = gs_1
++      structure General = gs_90
++      structure Graph = gs_75
++      structure Int32 = gs_10
++      structure IntHashTable = gs_72
++      structure ListPair = gs_86
++      signature MEMORY_REGISTERS = gs_20
++      signature MLRISC_CONTROL = gs_73
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscAnnotations = gs_50
++      structure MLRiscControl = gs_74
++      structure MLRiscErrorMsg = gs_3
++      signature OMIT_FRAME_POINTER = gs_89
++      structure Option = gs_26
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/omit-frameptr/x86omit-frameptr.sml
++   in
++      functor gs_91 = X86OmitFramePointer
++   end
++   local
++      open l4
++   in
++      signature gs_92 = ASM_FORMAT_UTIL
++      structure gs_93 = AsmFormatUtil
++   end
++   local
++      open l35
++   in
++      structure gs_94 = Char
++   end
++   local
++      open l4
++   in
++      structure gs_95 = AsmFlags
++   end
++   local
++      open l4
++   in
++      signature gs_96 = INSTRUCTION_STREAM
++   end
++   local
++      signature ASM_FORMAT_UTIL = gs_92
++      signature ASM_STREAM = gs_82
++      structure Annotations = gs_11
++      structure AsmFlags = gs_95
++      structure AsmFormatUtil = gs_93
++      structure AsmStream = gs_83
++      structure CellsBasis = gs_1
++      structure Char = gs_94
++      signature INSTRUCTION_EMITTER = gs_28
++      signature INSTRUCTION_STREAM = gs_96
++      structure Int = gs_13
++      structure Int32 = gs_10
++      signature MEMORY_REGISTERS = gs_20
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREE_EVAL = gs_29
++      structure Option = gs_26
++      structure String = gs_51
++      structure TextIO = gs_85
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      signature X86SHUFFLE = gs_30
++      ../x86/emit/x86Asm.sml
++   in
++      functor gs_97 = X86AsmEmitter
++   end
++   local
++      structure CellsBasis = gs_1
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscErrorMsg = gs_3
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      signature X86REWRITE = gs_61
++      ../x86/ra/x86Rewrite.sml
++   in
++      functor gs_98 = X86Rewrite
++   end
++   local
++      open l4
++   in
++      functor gs_99 = MLTreeGen
++   end
++   local
++      open l4
++   in
++      signature gs_100 = MLTREECOMP
++      signature gs_101 = MLTREE_EXTENSION_COMP
++   end
++   local
++      open l311
++   in
++      signature gs_102 = MLTREE_UTILS
++   end
++   local
++      structure Annotations = gs_11
++      structure CellsBasis = gs_1
++      structure Int = gs_13
++      structure Int32 = gs_10
++      structure Label = gs_9
++      structure List = gs_33
++      signature MLRISC_ERROR_MSG = gs_2
++      structure MLRiscAnnotations = gs_50
++      structure MLRiscErrorMsg = gs_3
++      signature MLTREECOMP = gs_100
++      signature MLTREE_EXTENSION_COMP = gs_101
++      signature MLTREE_STREAM = gs_36
++      signature MLTREE_UTILS = gs_102
++      functor MLTreeGen = gs_99
++      signature PROBABILITY = gs_54
++      structure Probability = gs_55
++      functor Shuffle = gs_32
++      structure Word = gs_27
++      structure Word32 = gs_22
++      signature X86INSTR = gs_17
++      functor X86Instr = gs_18
++      ../x86/mltree/x86.sml
++   in
++      functor gs_103 = X86
++   end
++in
++   functor IA32SVID_CCalls = gs_52
++   signature MEMORY_REGISTERS = gs_20
++   functor X86 = gs_103
++   functor X86AsmEmitter = gs_97
++   signature X86CELLS = gs_15
++   signature X86COMP_INSTR_EXT = gs_38
++   structure X86Cells = gs_16
++   functor X86CompInstrExt = gs_39
++   functor X86FP = gs_87
++   functor X86FreqProps = gs_56
++   functor X86GasPseudoOps = gs_46
++   signature X86INSTR = gs_17
++   functor X86Instr = gs_18
++   structure X86InstrExt = gs_37
++   functor X86Jumps = gs_60
++   functor X86MCEmitter = gs_31
++   functor X86OmitFramePointer = gs_91
++   functor X86Props = gs_58
++   functor X86RA = gs_88
++   signature X86REWRITE = gs_61
++   functor X86Rewrite = gs_98
++   signature X86SHUFFLE = gs_30
++   functor X86Shuffle = gs_34
++   functor X86SpillInstr = gs_19
++end
++end
++
++end
+diff -Naur MLRISC/mlb/IA32-Peephole.mlb MLRISC-mlton/mlb/IA32-Peephole.mlb
+--- MLRISC/mlb/IA32-Peephole.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/IA32-Peephole.mlb	2006-03-04 12:08:29.000000000 -0500
+@@ -0,0 +1,60 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l8 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l16 = 
++    bas
++      (* $IA32.cm(=$SMLNJ-MLRISC)/IA32.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/IA32.mlb
++    end
++  basis l4 = 
++    bas
++      (* $Peephole.cm(=$SMLNJ-MLRISC)/Peephole.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Peephole.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = PEEPHOLE
++   end
++   local
++      open l8
++   in
++      structure gs_1 = CellsBasis
++   end
++   local
++      open l8
++   in
++      signature gs_2 = MLTREE_EVAL
++   end
++   local
++      open l16
++   in
++      signature gs_3 = X86INSTR
++      functor gs_4 = X86Instr
++   end
++   local
++      structure CellsBasis = gs_1
++      signature MLTREE_EVAL = gs_2
++      signature PEEPHOLE = gs_0
++      signature X86INSTR = gs_3
++      functor X86Instr = gs_4
++      ../x86/instructions/x86Peephole.sml
++   in
++      functor gs_5 = X86Peephole
++   end
++in
++   functor X86Peephole = gs_5
++end
++end
++
++end
+diff -Naur MLRISC/mlb/Lib.mlb MLRISC-mlton/mlb/Lib.mlb
+--- MLRISC/mlb/Lib.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/Lib.mlb	2006-03-04 12:08:29.000000000 -0500
+@@ -0,0 +1,267 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l4 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l60 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      structure gs_0 = ArraySlice
++   end
++   local
++      open l4
++   in
++      structure gs_1 = Array
++   end
++   local
++      open l4
++   in
++      structure gs_2 = Vector
++   end
++   local
++      open l4
++   in
++      structure gs_3 = General
++   end
++   local
++      open l4
++   in
++      structure gs_4 = List
++   end
++   local
++      open l4
++   in
++      structure gs_5 = Int
++   end
++   local
++      structure Array = gs_1
++      structure ArraySlice = gs_0
++      structure General = gs_3
++      structure Int = gs_5
++      structure List = gs_4
++      structure Vector = gs_2
++      ../library/dynamic-array.sml
++   in
++      structure gs_6 = DynArray
++   end
++   local
++      open l4
++   in
++      structure gs_7 = String
++   end
++   local
++      open l4
++   in
++      structure gs_8 = Word
++   end
++   local
++      open l4
++   in
++      structure gs_9 = Word8
++   end
++   local
++      open l4
++   in
++      structure gs_10 = Word8Array
++   end
++   local
++      ../library/bitset.sig
++   in
++      signature gs_11 = BITSET
++   end
++   local
++      signature BITSET = gs_11
++      structure String = gs_7
++      structure Word = gs_8
++      structure Word8 = gs_9
++      structure Word8Array = gs_10
++      ../library/bitset.sml
++   in
++      structure gs_12 = BitSet
++   end
++   local
++      open l4
++   in
++      structure gs_13 = TextIO
++   end
++   local
++      structure TextIO = gs_13
++      ../library/stringOutStream.sig
++   in
++      signature gs_14 = STRING_OUTSTREAM
++   end
++   local
++      structure String = gs_7
++      ../library/line-break.sml
++   in
++      signature gs_15 = LINE_BREAK
++      structure gs_16 = LineBreak
++   end
++   local
++      open l4
++   in
++      structure gs_17 = Real
++   end
++   local
++      open l60
++   in
++      structure gs_18 = IntInf
++   end
++   local
++      structure Int = gs_5
++      structure IntInf = gs_18
++      structure List = gs_4
++      structure Real = gs_17
++      ../library/probability.sml
++   in
++      signature gs_19 = PROBABILITY
++      structure gs_20 = Probability
++   end
++   local
++      open l4
++   in
++      structure gs_21 = TextPrimIO
++   end
++   local
++      open l4
++   in
++      structure gs_22 = CharArraySlice
++   end
++   local
++      open l4
++   in
++      structure gs_23 = CharVectorSlice
++   end
++   local
++      open l4
++   in
++      structure gs_24 = IO
++   end
++   local
++      structure CharArraySlice = gs_22
++      structure CharVectorSlice = gs_23
++      structure IO = gs_24
++      structure List = gs_4
++      signature STRING_OUTSTREAM = gs_14
++      structure String = gs_7
++      structure TextIO = gs_13
++      structure TextPrimIO = gs_21
++      ../library/stringOutStream.sml
++   in
++      structure gs_25 = StringOutStream
++   end
++   local
++      ../library/catlist.sml
++   in
++      signature gs_26 = CATNETABLE_LIST
++      structure gs_27 = CatnetableList
++   end
++   local
++      ../library/priQueue.sig
++   in
++      signature gs_28 = PRIORITY_QUEUE
++   end
++   local
++      structure Array = gs_1
++      signature PRIORITY_QUEUE = gs_28
++      ../library/heap.sml
++   in
++      structure gs_29 = PriorityHeap
++   end
++   local
++      ../library/annotations.sig
++   in
++      signature gs_30 = ANNOTATIONS
++   end
++   local
++      signature ANNOTATIONS = gs_30
++      ../library/annotations.sml
++   in
++      structure gs_31 = Annotations
++   end
++   local
++      structure Array = gs_1
++      structure List = gs_4
++      structure Vector = gs_2
++      structure Word = gs_8
++      ../library/hash-array.sml
++   in
++      structure gs_32 = HashArray
++   end
++   local
++      ../library/cache.sml
++   in
++      signature gs_33 = CACHE_REF
++      structure gs_34 = CacheRef
++   end
++   local
++      ../library/sortedlist.sml
++   in
++      structure gs_35 = SortedList
++   end
++   local
++      structure Int = gs_5
++      signature PRIORITY_QUEUE = gs_28
++      ../library/priQueue.sml
++   in
++      structure gs_36 = PriorityQueue
++   end
++   local
++      open l4
++   in
++      signature gs_37 = INTEGER
++   end
++   local
++      signature INTEGER = gs_37
++      ../library/freq.sig
++   in
++      signature gs_38 = FREQ
++   end
++   local
++      signature FREQ = gs_38
++      structure Int = gs_5
++      ../library/freq.sml
++   in
++      structure gs_39 = Freq
++   end
++in
++   signature ANNOTATIONS = gs_30
++   structure Annotations = gs_31
++   signature BITSET = gs_11
++   structure BitSet = gs_12
++   signature CACHE_REF = gs_33
++   signature CATNETABLE_LIST = gs_26
++   structure CacheRef = gs_34
++   structure CatnetableList = gs_27
++   structure DynArray = gs_6
++   signature FREQ = gs_38
++   structure Freq = gs_39
++   structure HashArray = gs_32
++   signature LINE_BREAK = gs_15
++   structure LineBreak = gs_16
++   signature PRIORITY_QUEUE = gs_28
++   signature PROBABILITY = gs_19
++   structure PriorityHeap = gs_29
++   structure PriorityQueue = gs_36
++   structure Probability = gs_20
++   signature STRING_OUTSTREAM = gs_14
++   structure SortedList = gs_35
++   structure StringOutStream = gs_25
++end
++end
++
++end
+diff -Naur MLRISC/mlb/MLRISC.mlb MLRISC-mlton/mlb/MLRISC.mlb
+--- MLRISC/mlb/MLRISC.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/MLRISC.mlb	2006-03-04 12:08:30.000000000 -0500
+@@ -0,0 +1,1705 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l13 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l19 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l44 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l5 = 
++    bas
++      (* $Graphs.cm(=$SMLNJ-MLRISC)/Graphs.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Graphs.mlb
++    end
++  basis l9 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l5
++   in
++      structure gs_0 = Graph
++   end
++   local
++      open l9
++   in
++      structure gs_1 = Annotations
++   end
++   local
++      open l13
++   in
++      structure gs_2 = TextIO
++   end
++   local
++      open l19
++   in
++      signature gs_3 = MONO_HASH_TABLE
++   end
++   local
++      open l13
++   in
++      structure gs_4 = Array
++   end
++   local
++      structure Annotations = gs_1
++      structure Array = gs_4
++      signature MONO_HASH_TABLE = gs_3
++      ../instructions/cells-basis.sig
++   in
++      signature gs_5 = CELLS_BASIS
++   end
++   local
++      open l19
++   in
++      functor gs_6 = HashTableFn
++   end
++   local
++      open l13
++   in
++      structure gs_7 = String
++   end
++   local
++      open l13
++   in
++      structure gs_8 = Word
++   end
++   local
++      open l13
++   in
++      structure gs_9 = List
++   end
++   local
++      open l44
++   in
++      signature gs_10 = MLRISC_ERROR_MSG
++      structure gs_11 = MLRiscErrorMsg
++   end
++   local
++      open l13
++   in
++      structure gs_12 = Int
++   end
++   local
++      structure Annotations = gs_1
++      structure Array = gs_4
++      signature CELLS_BASIS = gs_5
++      functor HashTableFn = gs_6
++      structure Int = gs_12
++      structure List = gs_9
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      structure String = gs_7
++      structure Word = gs_8
++      ../instructions/cells-basis.sml
++   in
++      structure gs_13 = CellsBasis
++   end
++   local
++      structure CellsBasis = gs_13
++      ../instructions/cells.sig
++   in
++      signature gs_14 = CELLS
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      ../instructions/instructions.sig
++   in
++      signature gs_15 = INSTRUCTIONS
++   end
++   local
++      open l13
++   in
++      structure gs_16 = Word8
++   end
++   local
++      open l13
++   in
++      structure gs_17 = Int32
++   end
++   local
++      open l19
++   in
++      structure gs_18 = IntInf
++   end
++   local
++      open l13
++   in
++      structure gs_19 = Word32
++   end
++   local
++      structure Int32 = gs_17
++      structure IntInf = gs_18
++      structure Word32 = gs_19
++      ../mltree/machine-int.sig
++   in
++      signature gs_20 = MACHINE_INT
++   end
++   local
++      ../mltree/mltree-extension.sig
++   in
++      signature gs_21 = MLTREE_EXTENSION
++   end
++   local
++      ../mltree/mltree-basis.sig
++   in
++      signature gs_22 = MLTREE_BASIS
++   end
++   local
++      ../instructions/region.sig
++   in
++      signature gs_23 = REGION
++   end
++   local
++      ../instructions/constant.sig
++   in
++      signature gs_24 = CONSTANT
++   end
++   local
++      ../instructions/label-sig.sml
++   in
++      signature gs_25 = LABEL
++   end
++   local
++      signature LABEL = gs_25
++      structure Word = gs_8
++      ../instructions/label.sml
++   in
++      structure gs_26 = Label
++   end
++   local
++      structure Annotations = gs_1
++      signature CONSTANT = gs_24
++      structure CellsBasis = gs_13
++      structure Int32 = gs_17
++      structure Label = gs_26
++      signature MACHINE_INT = gs_20
++      signature MLTREE_BASIS = gs_22
++      signature MLTREE_EXTENSION = gs_21
++      signature REGION = gs_23
++      ../mltree/mltree.sig
++   in
++      signature gs_27 = MLTREE
++   end
++   local
++      open l19
++   in
++      structure gs_28 = Atom
++   end
++   local
++      structure Atom = gs_28
++      structure Label = gs_26
++      ../flowgraph/pseudo-ops-basis-typ.sml
++   in
++      structure gs_29 = PseudoOpsBasisTyp
++   end
++   local
++      structure Label = gs_26
++      signature MLTREE = gs_27
++      structure PseudoOpsBasisTyp = gs_29
++      structure Word8 = gs_16
++      ../flowgraph/pseudo-ops-basis.sig
++   in
++      signature gs_30 = PSEUDO_OPS_BASIS
++   end
++   local
++      signature PSEUDO_OPS_BASIS = gs_30
++      structure Word8 = gs_16
++      ../flowgraph/client-pseudo-ops.sig
++   in
++      signature gs_31 = CLIENT_PSEUDO_OPS
++   end
++   local
++      signature CLIENT_PSEUDO_OPS = gs_31
++      signature MLTREE = gs_27
++      structure PseudoOpsBasisTyp = gs_29
++      structure Word8 = gs_16
++      ../flowgraph/pseudo-ops.sig
++   in
++      signature gs_32 = PSEUDO_OPS
++   end
++   local
++      structure Annotations = gs_1
++      structure Graph = gs_0
++      signature INSTRUCTIONS = gs_15
++      structure Label = gs_26
++      signature PSEUDO_OPS = gs_32
++      structure TextIO = gs_2
++      ../flowgraph/cfg.sig
++   in
++      signature gs_33 = CONTROL_FLOW_GRAPH
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      ../emit/asmEmit.sig
++   in
++      signature gs_34 = ASSEMBLY_EMITTER
++   end
++   local
++      open l5
++   in
++      signature gs_35 = GRAPH_IMPLEMENTATION
++   end
++   local
++      structure Array = gs_4
++      signature GRAPH_IMPLEMENTATION = gs_35
++      structure Graph = gs_0
++      ../ir-archive/dominator.sig
++   in
++      signature gs_36 = DOMINATOR_TREE
++   end
++   local
++      structure Array = gs_4
++      signature DOMINATOR_TREE = gs_36
++      signature GRAPH_IMPLEMENTATION = gs_35
++      structure Graph = gs_0
++      ../ir-archive/loop-structure.sig
++   in
++      signature gs_37 = LOOP_STRUCTURE
++   end
++   local
++      open l9
++   in
++      structure gs_38 = BitSet
++   end
++   local
++      open l5
++   in
++      signature gs_39 = REVERSED_GRAPH_VIEW
++      structure gs_40 = ReversedGraphView
++   end
++   local
++      structure Array = gs_4
++      structure BitSet = gs_38
++      signature DOMINATOR_TREE = gs_36
++      signature GRAPH_IMPLEMENTATION = gs_35
++      structure Graph = gs_0
++      structure List = gs_9
++      signature REVERSED_GRAPH_VIEW = gs_39
++      structure ReversedGraphView = gs_40
++      ../ir-archive/dominator.sml
++   in
++      functor gs_41 = DominatorTree
++   end
++   local
++      structure Annotations = gs_1
++      structure Label = gs_26
++      signature PSEUDO_OPS = gs_32
++      ../instructions/stream.sig
++   in
++      signature gs_42 = INSTRUCTION_STREAM
++   end
++   local
++      structure Annotations = gs_1
++      signature INSTRUCTION_STREAM = gs_42
++      structure Label = gs_26
++      signature PSEUDO_OPS = gs_32
++      ../instructions/stream.sml
++   in
++      functor gs_43 = InstructionStream
++   end
++   local
++      signature MLTREE = gs_27
++      ../mltree/mltree-size.sig
++   in
++      signature gs_44 = MLTREE_SIZE
++   end
++   local
++      structure Annotations = gs_1
++      structure CellsBasis = gs_13
++      signature MLTREE = gs_27
++      signature MLTREE_SIZE = gs_44
++      ../mltree/mltree-gen.sig
++   in
++      signature gs_45 = MLTREEGEN
++   end
++   local
++      signature INSTRUCTION_STREAM = gs_42
++      signature MLTREE = gs_27
++      ../mltree/mltree-stream.sig
++   in
++      signature gs_46 = MLTREE_STREAM
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      signature MLTREE = gs_27
++      signature MLTREEGEN = gs_45
++      signature MLTREE_STREAM = gs_46
++      ../mltree/mltreecomp.sig
++   in
++      signature gs_47 = MLTREECOMP
++      signature gs_48 = MLTREE_EXTENSION_COMP
++   end
++   local
++      open l19
++   in
++      structure gs_49 = Format
++   end
++   local
++      structure TextIO = gs_2
++      ../emit/asmStream.sml
++   in
++      signature gs_50 = ASM_STREAM
++      structure gs_51 = AsmStream
++   end
++   local
++      structure Annotations = gs_1
++      signature INSTRUCTIONS = gs_15
++      signature INSTRUCTION_STREAM = gs_42
++      ../emit/instruction-emitter.sig
++   in
++      signature gs_52 = INSTRUCTION_EMITTER
++   end
++   local
++      signature ASM_STREAM = gs_50
++      structure AsmStream = gs_51
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Format = gs_49
++      structure Graph = gs_0
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Int = gs_12
++      structure List = gs_9
++      structure TextIO = gs_2
++      ../flowgraph/printFlowgraph.sml
++   in
++      signature gs_53 = PRINT_FLOWGRAPH
++      functor gs_54 = PrintFlowgraph
++   end
++   local
++      structure Array = gs_4
++      ../ra/getreg.sig
++   in
++      signature gs_55 = GETREG
++   end
++   local
++      structure Array = gs_4
++      signature GETREG = gs_55
++      ../ra/getreg.sml
++   in
++      functor gs_56 = GetReg
++   end
++   local
++      signature INSTRUCTIONS = gs_15
++      structure Label = gs_26
++      ../backpatch/delaySlotProps.sig
++   in
++      signature gs_57 = DELAY_SLOT_PROPERTIES
++   end
++   local
++      ../c-calls/c-types.sml
++   in
++      structure gs_58 = CTypes
++   end
++   local
++      structure CTypes = gs_58
++      signature MLTREE = gs_27
++      ../c-calls/c-calls.sig
++   in
++      signature gs_59 = C_CALLS
++   end
++   local
++      signature C_CALLS = gs_59
++      signature MLTREE = gs_27
++      ../c-calls/unimplemented-c-calls.sml
++   in
++      functor gs_60 = UnimplementedCCallsFn
++   end
++   local
++      open l44
++   in
++      signature gs_61 = MLRISC_CONTROL
++      structure gs_62 = MLRiscControl
++   end
++   local
++      open l19
++   in
++      structure gs_63 = ListMergeSort
++   end
++   local
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      ../aliasing/pointsTo.sig
++   in
++      signature gs_64 = POINTS_TO
++   end
++   local
++      structure CellsBasis = gs_13
++      structure Int = gs_12
++      structure ListMergeSort = gs_63
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      signature POINTS_TO = gs_64
++      ../aliasing/pointsTo.sml
++   in
++      structure gs_65 = PointsTo
++   end
++   local
++      open l13
++   in
++      structure gs_66 = Char
++   end
++   local
++      signature MLTREE = gs_27
++      structure PseudoOpsBasisTyp = gs_29
++      structure Word8 = gs_16
++      ../flowgraph/pseudo-ops-endian.sig
++   in
++      signature gs_67 = PSEUDO_OPS_ENDIAN
++   end
++   local
++      structure IntInf = gs_18
++      structure Label = gs_26
++      signature MLTREE = gs_27
++      ../mltree/mltree-eval.sig
++   in
++      signature gs_68 = MLTREE_EVAL
++   end
++   local
++      structure Char = gs_66
++      structure Int = gs_12
++      structure IntInf = gs_18
++      structure Label = gs_26
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      signature MLTREE_EVAL = gs_68
++      signature PSEUDO_OPS_ENDIAN = gs_67
++      structure PseudoOpsBasisTyp = gs_29
++      structure String = gs_7
++      structure Word = gs_8
++      structure Word32 = gs_19
++      structure Word8 = gs_16
++      ../flowgraph/pseudo-ops-big.sml
++   in
++      functor gs_69 = PseudoOpsBig
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      ../backpatch/bbsched.sig
++   in
++      signature gs_70 = BBSCHED
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure Label = gs_26
++      ../instructions/insnProps.sig
++   in
++      signature gs_71 = INSN_PROPERTIES
++   end
++   local
++      signature CELLS = gs_14
++      signature INSTRUCTIONS = gs_15
++      structure Label = gs_26
++      ../backpatch/sdi-jumps.sig
++   in
++      signature gs_72 = SDI_JUMPS
++   end
++   local
++      structure Array = gs_4
++      signature BBSCHED = gs_70
++      signature CONTROL_FLOW_GRAPH = gs_33
++      signature DELAY_SLOT_PROPERTIES = gs_57
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Label = gs_26
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      signature SDI_JUMPS = gs_72
++      ../backpatch/spanDep.sml
++   in
++      functor gs_73 = SpanDependencyResolution
++   end
++   local
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      ../ra/ra-flowgraph-part.sig
++   in
++      signature gs_74 = RA_FLOWGRAPH_PARTITIONER
++   end
++   local
++      structure Word8 = gs_16
++      ../emit/code-string.sig
++   in
++      signature gs_75 = CODE_STRING
++   end
++   local
++      open l9
++   in
++      signature gs_76 = PROBABILITY
++      structure gs_77 = Probability
++   end
++   local
++      open l13
++   in
++      structure gs_78 = Real
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      ../frequencies/compute-execution-freqs.sig
++   in
++      signature gs_79 = COMPUTE_EXECUTION_FREQUENCIES
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../instructions/mlriscAnnotations.sig
++   in
++      signature gs_80 = MLRISC_ANNOTATIONS
++   end
++   local
++      structure Annotations = gs_1
++      structure CellsBasis = gs_13
++      structure Int = gs_12
++      signature MLRISC_ANNOTATIONS = gs_80
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../instructions/mlriscAnnotations.sml
++   in
++      structure gs_81 = MLRiscAnnotations
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscAnnotations = gs_81
++      structure MLRiscControl = gs_62
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../frequencies/complete-probs-fn.sml
++   in
++      functor gs_82 = CompleteProbsFn
++   end
++   local
++      structure Array = gs_4
++      signature COMPUTE_EXECUTION_FREQUENCIES = gs_79
++      signature CONTROL_FLOW_GRAPH = gs_33
++      functor CompleteProbsFn = gs_82
++      structure Format = gs_49
++      structure Graph = gs_0
++      structure Int = gs_12
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      structure Real = gs_78
++      structure TextIO = gs_2
++      ../frequencies/compute-freqs-fn.sml
++   in
++      functor gs_83 = ComputeFreqsFn
++   end
++   local
++      signature MLTREE = gs_27
++      ../mltree/mltree-hash.sig
++   in
++      signature gs_84 = MLTREE_HASH
++   end
++   local
++      ../aliasing/mlriscRegion.sig
++   in
++      signature gs_85 = MLRISC_REGION
++   end
++   local
++      ../instructions/mlriscOptimization.sig
++   in
++      signature gs_86 = MLRISC_OPTIMIZATION
++   end
++   local
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      ../instructions/shuffle.sig
++   in
++      signature gs_87 = SHUFFLE
++   end
++   local
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      ../ra/arch-spill-instr.sig
++   in
++      signature gs_88 = ARCH_SPILL_INSTR
++   end
++   local
++      structure Atom = gs_28
++      structure Format = gs_49
++      structure Int = gs_12
++      structure IntInf = gs_18
++      structure Label = gs_26
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      structure PseudoOpsBasisTyp = gs_29
++      structure String = gs_7
++      ../flowgraph/gasPseudoOps.sml
++   in
++      signature gs_89 = GAS_PSEUDO_OPS
++      functor gs_90 = GasPseudoOps
++   end
++   local
++      structure Array = gs_4
++      ../ra/ra-bitmatrix.sig
++   in
++      signature gs_91 = RA_BITMATRIX
++   end
++   local
++      ../ra/ra-priqueue.sig
++   in
++      signature gs_92 = RA_PRIORITY_QUEUE
++   end
++   local
++      open l13
++   in
++      structure gs_93 = Unsafe
++   end
++   local
++      structure Array = gs_4
++      signature RA_BITMATRIX = gs_91
++      structure Unsafe = gs_93
++      structure Word = gs_8
++      ../ra/raBitmatrix.sml
++   in
++      structure gs_94 = RaBitmatrix
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      structure Label = gs_26
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure TextIO = gs_2
++      ../block-placement/jump-chain-elim-fn.sml
++   in
++      functor gs_95 = JumpChainElimFn
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      ../flowgraph/cfg-optimization.sig
++   in
++      signature gs_96 = CFG_OPTIMIZATION
++   end
++   local
++      signature CFG_OPTIMIZATION = gs_96
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      structure Graph = gs_0
++      structure List = gs_9
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature SHUFFLE = gs_87
++      ../flowgraph/cfgExpandCopies.sml
++   in
++      functor gs_97 = CFGExpandCopies
++   end
++   local
++      signature INSTRUCTION_STREAM = gs_42
++      signature MLTREE = gs_27
++      signature MLTREE_STREAM = gs_46
++      ../mltree/mltree-stream.sml
++   in
++      functor gs_98 = MLTreeStream
++   end
++   local
++      structure Char = gs_66
++      structure Int = gs_12
++      structure IntInf = gs_18
++      structure Label = gs_26
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      signature MLTREE_EVAL = gs_68
++      signature PSEUDO_OPS_ENDIAN = gs_67
++      structure PseudoOpsBasisTyp = gs_29
++      structure String = gs_7
++      structure Word = gs_8
++      structure Word32 = gs_19
++      structure Word8 = gs_16
++      ../flowgraph/pseudo-ops-little.sml
++   in
++      functor gs_99 = PseudoOpsLittle
++   end
++   local
++      signature MLTREE = gs_27
++      signature MLTREE_SIZE = gs_44
++      ../mltree/mltree-size.sml
++   in
++      functor gs_100 = MLTreeSize
++   end
++   local
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      structure Int = gs_12
++      structure Label = gs_26
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      signature MLTREEGEN = gs_45
++      functor MLTreeSize = gs_100
++      ../mltree/mltree-gen.sml
++   in
++      functor gs_101 = MLTreeGen
++   end
++   local
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE_BASIS = gs_22
++      ../mltree/mltree-basis.sml
++   in
++      structure gs_102 = MLTreeBasis
++   end
++   local
++      signature CLIENT_PSEUDO_OPS = gs_31
++      signature PSEUDO_OPS = gs_32
++      structure PseudoOpsBasisTyp = gs_29
++      ../flowgraph/pseudo-ops.sml
++   in
++      functor gs_103 = PseudoOps
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      ../block-placement/block-placement.sig
++   in
++      signature gs_104 = BLOCK_PLACEMENT
++   end
++   local
++      open l19
++   in
++      structure gs_105 = IntHashTable
++   end
++   local
++      structure Array = gs_4
++      signature CELLS_BASIS = gs_5
++      structure IntHashTable = gs_105
++      signature MONO_HASH_TABLE = gs_3
++      signature RA_BITMATRIX = gs_91
++      structure RaBitmatrix = gs_94
++      ../ra/ra-graph.sig
++   in
++      signature gs_106 = RA_GRAPH
++   end
++   local
++      structure Array = gs_4
++      structure CellsBasis = gs_13
++      functor HashTableFn = gs_6
++      structure IntHashTable = gs_105
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature RA_GRAPH = gs_106
++      structure RaBitmatrix = gs_94
++      structure Word = gs_8
++      ../ra/ra-graph.sml
++   in
++      structure gs_107 = RAGraph
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure RAGraph = gs_107
++      signature RA_GRAPH = gs_106
++      ../ra/ra-spill.sig
++   in
++      signature gs_108 = RA_SPILL
++   end
++   local
++      signature INSTRUCTIONS = gs_15
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../instructions/freqProps.sig
++   in
++      signature gs_109 = FREQUENCY_PROPERTIES
++   end
++   local
++      signature FREQUENCY_PROPERTIES = gs_109
++      signature INSN_PROPERTIES = gs_71
++      structure MLRiscAnnotations = gs_81
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../instructions/freqProps.sml
++   in
++      functor gs_110 = FreqProps
++   end
++   local
++      structure Annotations = gs_1
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Format = gs_49
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTIONS = gs_15
++      signature INSTRUCTION_STREAM = gs_42
++      structure IntHashTable = gs_105
++      structure Label = gs_26
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscAnnotations = gs_81
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      signature PSEUDO_OPS = gs_32
++      structure PseudoOpsBasisTyp = gs_29
++      structure Word = gs_8
++      ../flowgraph/buildFlowgraph.sml
++   in
++      functor gs_111 = BuildFlowgraph
++      signature gs_112 = CONTROL_FLOWGRAPH_GEN
++   end
++   local
++      structure RAGraph = gs_107
++      signature RA_GRAPH = gs_106
++      ../ra/ra-spillheur.sig
++   in
++      signature gs_113 = RA_SPILL_HEURISTICS
++   end
++   local
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      ../emit/asm-flags.sml
++   in
++      structure gs_114 = AsmFlags
++   end
++   local
++      structure Annotations = gs_1
++      structure IntInf = gs_18
++      ../gc-safety/gc-type.sig
++   in
++      signature gs_115 = GC_TYPE
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature GC_TYPE = gs_115
++      ../gc-safety/gc-cells.sig
++   in
++      signature gs_116 = GC_CELLS
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure RAGraph = gs_107
++      signature RA_GRAPH = gs_106
++      signature RA_SPILL = gs_108
++      structure TextIO = gs_2
++      ../ra/ra-flowgraph.sig
++   in
++      signature gs_117 = RA_FLOWGRAPH
++   end
++   local
++      structure Array = gs_4
++      signature CELLS = gs_14
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure RAGraph = gs_107
++      signature RA_FLOWGRAPH = gs_117
++      ../ra/ra.sig
++   in
++      signature gs_118 = RA
++   end
++   local
++      open l13
++   in
++      structure gs_119 = Word8Array
++   end
++   local
++      structure RAGraph = gs_107
++      signature RA_BITMATRIX = gs_91
++      signature RA_GRAPH = gs_106
++      signature RA_PRIORITY_QUEUE = gs_92
++      structure TextIO = gs_2
++      ../ra/ra-core.sig
++   in
++      signature gs_120 = RA_CORE
++   end
++   local
++      signature RA_PRIORITY_QUEUE = gs_92
++      ../ra/raPriQueue.sml
++   in
++      functor gs_121 = RaPriQueue
++   end
++   local
++      structure Array = gs_4
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      structure List = gs_9
++      structure ListMergeSort = gs_63
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure RAGraph = gs_107
++      signature RA_CORE = gs_120
++      functor RaPriQueue = gs_121
++      structure Real = gs_78
++      structure TextIO = gs_2
++      structure Unsafe = gs_93
++      structure Word = gs_8
++      structure Word8 = gs_16
++      structure Word8Array = gs_119
++      ../ra/ra-core.sml
++   in
++      structure gs_122 = RACore
++   end
++   local
++      structure Array = gs_4
++      structure CellsBasis = gs_13
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      signature RA = gs_118
++      structure RACore = gs_122
++      signature RA_FLOWGRAPH = gs_117
++      signature RA_SPILL_HEURISTICS = gs_113
++      structure Real = gs_78
++      structure TextIO = gs_2
++      structure Word = gs_8
++      ../ra/ra.sml
++   in
++      functor gs_123 = RegisterAllocator
++   end
++   local
++      structure CellsBasis = gs_13
++      structure IntHashTable = gs_105
++      structure RACore = gs_122
++      signature RA_FLOWGRAPH = gs_117
++      structure Word = gs_8
++      ../ra/ra-deadCodeE.sml
++   in
++      functor gs_124 = RADeadCodeElim
++   end
++   local
++      open l19
++   in
++      structure gs_125 = URef
++   end
++   local
++      structure Array = gs_4
++      signature DOMINATOR_TREE = gs_36
++      signature GRAPH_IMPLEMENTATION = gs_35
++      structure Graph = gs_0
++      signature LOOP_STRUCTURE = gs_37
++      structure List = gs_9
++      structure URef = gs_125
++      ../ir-archive/loop-structure.sml
++   in
++      functor gs_126 = LoopStructure
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Label = gs_26
++      structure List = gs_9
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature SDI_JUMPS = gs_72
++      ../backpatch/backpatch.sml
++   in
++      functor gs_127 = BBSched2
++   end
++   local
++      structure Array = gs_4
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      structure List = gs_9
++      structure ListMergeSort = gs_63
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure RACore = gs_122
++      structure RAGraph = gs_107
++      signature RA_FLOWGRAPH = gs_117
++      signature RA_SPILL = gs_108
++      structure TextIO = gs_2
++      structure Unsafe = gs_93
++      structure Word = gs_8
++      ../ra/cluster-ra.sml
++   in
++      functor gs_128 = ClusterRA
++   end
++   local
++      structure RACore = gs_122
++      structure RAGraph = gs_107
++      signature RA_SPILL_HEURISTICS = gs_113
++      ../ra/chaitin-spillheur.sml
++   in
++      structure gs_129 = ChaitinSpillHeur
++   end
++   local
++      open l19
++   in
++      functor gs_130 = LeftPriorityQFn
++   end
++   local
++      signature BLOCK_PLACEMENT = gs_104
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      functor LeftPriorityQFn = gs_130
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      structure Real = gs_78
++      structure TextIO = gs_2
++      structure URef = gs_125
++      ../block-placement/weighted-block-placement-fn.sml
++   in
++      functor gs_131 = WeightedBlockPlacementFn
++   end
++   local
++      structure Array = gs_4
++      signature BLOCK_PLACEMENT = gs_104
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      structure Int = gs_12
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure TextIO = gs_2
++      ../block-placement/default-block-placement.sml
++   in
++      functor gs_132 = DefaultBlockPlacement
++   end
++   local
++      signature BLOCK_PLACEMENT = gs_104
++      signature CONTROL_FLOW_GRAPH = gs_33
++      functor DefaultBlockPlacement = gs_132
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      functor WeightedBlockPlacementFn = gs_131
++      ../block-placement/block-placement.sml
++   in
++      functor gs_133 = BlockPlacement
++   end
++   local
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      signature MLTREE = gs_27
++      ../mltree/mltree-mult.sig
++   in
++      signature gs_134 = MLTREE_MULT_DIV
++   end
++   local
++      structure Array = gs_4
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      signature MLTREE_MULT_DIV = gs_134
++      structure Word = gs_8
++      ../mltree/mltree-mult.sml
++   in
++      functor gs_135 = MLTreeMult
++   end
++   local
++      structure CellsBasis = gs_13
++      structure Char = gs_66
++      structure Int = gs_12
++      structure Label = gs_26
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      signature MLTREE = gs_27
++      signature MLTREE_HASH = gs_84
++      structure String = gs_7
++      structure Word = gs_8
++      ../mltree/mltree-hash.sml
++   in
++      functor gs_136 = MLTreeHash
++   end
++   local
++      structure CellsBasis = gs_13
++      structure IntInf = gs_18
++      structure Label = gs_26
++      signature MLTREE = gs_27
++      signature MLTREE_EVAL = gs_68
++      ../mltree/mltree-eval.sml
++   in
++      functor gs_137 = MLTreeEval
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      signature GC_CELLS = gs_116
++      signature GC_TYPE = gs_115
++      ../gc-safety/gc-cells.sml
++   in
++      functor gs_138 = GCCells
++   end
++   local
++      structure Array = gs_4
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      structure Int = gs_12
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure TextIO = gs_2
++      ../block-placement/check-placement-fn.sml
++   in
++      functor gs_139 = CheckPlacementFn
++   end
++   local
++      structure Array = gs_4
++      signature CELLS = gs_14
++      structure CellsBasis = gs_13
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      ../instructions/cells.sml
++   in
++      functor gs_140 = Cells
++   end
++   local
++      signature DELAY_SLOT_PROPERTIES = gs_57
++      signature INSTRUCTIONS = gs_15
++      ../backpatch/noDelaySlots.sml
++   in
++      functor gs_141 = NoDelaySlots
++   end
++   local
++      structure Annotations = gs_1
++      signature CELLS_BASIS = gs_5
++      structure CellsBasis = gs_13
++      structure Label = gs_26
++      structure List = gs_9
++      structure MLRiscAnnotations = gs_81
++      ../emit/asmUtil.sml
++   in
++      signature gs_142 = ASM_FORMAT_UTIL
++      structure gs_143 = AsmFormatUtil
++   end
++   local
++      open l13
++   in
++      structure gs_144 = ListPair
++   end
++   local
++      open l13
++   in
++      structure gs_145 = Option
++   end
++   local
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure List = gs_9
++      structure ListPair = gs_144
++      structure Option = gs_145
++      ../instructions/shuffle.sml
++   in
++      functor gs_146 = Shuffle
++   end
++   local
++      open l5
++   in
++      functor gs_147 = DirectedGraph
++      structure gs_148 = DirectedGraph
++   end
++   local
++      structure Annotations = gs_1
++      signature CONTROL_FLOW_GRAPH = gs_33
++      functor DirectedGraph = gs_147
++      structure DirectedGraph = gs_148
++      functor DominatorTree = gs_41
++      structure Graph = gs_0
++      structure List = gs_9
++      functor LoopStructure = gs_126
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscAnnotations = gs_81
++      structure MLRiscControl = gs_62
++      signature PROBABILITY = gs_76
++      structure Probability = gs_77
++      ../frequencies/estimate-loop-probs-fn.sml
++   in
++      functor gs_149 = EstimateLoopProbsFn
++   end
++   local
++      open l13
++   in
++      structure gs_150 = StringCvt
++   end
++   local
++      structure Array = gs_4
++      structure Int32 = gs_17
++      structure IntInf = gs_18
++      signature MACHINE_INT = gs_20
++      structure String = gs_7
++      structure StringCvt = gs_150
++      structure Word = gs_8
++      structure Word32 = gs_19
++      ../mltree/machine-int.sml
++   in
++      structure gs_151 = MachineInt
++   end
++   local
++      structure Array = gs_4
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure RACore = gs_122
++      structure RAGraph = gs_107
++      signature RA_FLOWGRAPH = gs_117
++      structure Real = gs_78
++      structure Word = gs_8
++      ../ra/mem-ra.sml
++   in
++      functor gs_152 = MemoryRA
++   end
++   local
++      structure Annotations = gs_1
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure RAGraph = gs_107
++      ../ra/ra-spill-types.sml
++   in
++      functor gs_153 = RASpillTypes
++   end
++   local
++      open l13
++   in
++      structure gs_154 = Word8Vector
++   end
++   local
++      signature INSTRUCTIONS = gs_15
++      structure Word8Vector = gs_154
++      ../emit/mc-emit.sig
++   in
++      signature gs_155 = MC_EMIT
++   end
++   local
++      signature CODE_STRING = gs_75
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Label = gs_26
++      structure List = gs_9
++      signature MC_EMIT = gs_155
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      signature SDI_JUMPS = gs_72
++      structure Word8 = gs_16
++      structure Word8Vector = gs_154
++      ../backpatch/vlBackPatch.sml
++   in
++      functor gs_156 = BackPatch
++   end
++   local
++      open l9
++   in
++      structure gs_157 = PriorityHeap
++   end
++   local
++      structure IntHashTable = gs_105
++      structure Option = gs_145
++      structure PriorityHeap = gs_157
++      structure RACore = gs_122
++      structure RAGraph = gs_107
++      signature RA_SPILL_HEURISTICS = gs_113
++      structure Real = gs_78
++      ../ra/chow-hennessy-spillheur.sml
++   in
++      structure gs_158 = ChowHennessySpillHeur
++   end
++   local
++      open l9
++   in
++      signature gs_159 = LINE_BREAK
++      structure gs_160 = LineBreak
++   end
++   local
++      open l9
++   in
++      structure gs_161 = StringOutStream
++   end
++   local
++      open l5
++   in
++      signature gs_162 = UPDATE_GRAPH_INFO
++      structure gs_163 = UpdateGraphInfo
++   end
++   local
++      open l13
++   in
++      structure gs_164 = Bool
++   end
++   local
++      signature ASM_STREAM = gs_50
++      structure Annotations = gs_1
++      structure Array = gs_4
++      structure AsmStream = gs_51
++      structure Bool = gs_164
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      structure Char = gs_66
++      structure Format = gs_49
++      signature GRAPH_IMPLEMENTATION = gs_35
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTIONS = gs_15
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      signature LINE_BREAK = gs_159
++      structure Label = gs_26
++      structure LineBreak = gs_160
++      structure List = gs_9
++      structure ListMergeSort = gs_63
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      structure Real = gs_78
++      structure String = gs_7
++      structure StringOutStream = gs_161
++      structure TextIO = gs_2
++      signature UPDATE_GRAPH_INFO = gs_162
++      structure UpdateGraphInfo = gs_163
++      ../flowgraph/cfg.sml
++   in
++      functor gs_165 = ControlFlowGraph
++   end
++   local
++      structure Annotations = gs_1
++      signature CONSTANT = gs_24
++      structure CellsBasis = gs_13
++      structure Int32 = gs_17
++      structure Label = gs_26
++      signature MLTREE = gs_27
++      signature MLTREE_EXTENSION = gs_21
++      structure MLTreeBasis = gs_102
++      structure MachineInt = gs_151
++      signature REGION = gs_23
++      ../mltree/mltree.sml
++   in
++      functor gs_166 = MLTreeF
++   end
++   local
++      open l13
++   in
++      structure gs_167 = General
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      structure General = gs_167
++      structure Graph = gs_0
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscErrorMsg = gs_11
++      ../ra/liveness.sml
++   in
++      signature gs_168 = LIVENESS
++      functor gs_169 = Liveness
++   end
++   local
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      ../instructions/rewrite.sig
++   in
++      signature gs_170 = REWRITE_INSTRUCTIONS
++   end
++   local
++      signature ARCH_SPILL_INSTR = gs_88
++      structure Annotations = gs_1
++      structure Array = gs_4
++      signature CFG_OPTIMIZATION = gs_96
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      functor ClusterRA = gs_128
++      functor GetReg = gs_56
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTIONS = gs_15
++      signature INSTRUCTION_EMITTER = gs_52
++      structure List = gs_9
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure RAGraph = gs_107
++      signature RA_SPILL = gs_108
++      signature RA_SPILL_HEURISTICS = gs_113
++      signature REWRITE_INSTRUCTIONS = gs_170
++      functor RegisterAllocator = gs_123
++      structure Word = gs_8
++      ../ra/risc-ra.sml
++   in
++      functor gs_171 = RISC_RA
++   end
++   local
++      signature CFG_OPTIMIZATION = gs_96
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSN_PROPERTIES = gs_71
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      signature SDI_JUMPS = gs_72
++      ../flowgraph/cfgCountCopies.sml
++   in
++      functor gs_172 = CFGCountCopies
++   end
++   local
++      signature ASSEMBLY_EMITTER = gs_34
++      structure Annotations = gs_1
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure Graph = gs_0
++      signature INSTRUCTION_EMITTER = gs_52
++      structure List = gs_9
++      structure PseudoOpsBasisTyp = gs_29
++      ../emit/cfgEmit.sml
++   in
++      functor gs_173 = CFGEmit
++   end
++   local
++      structure Array = gs_4
++      signature GETREG = gs_55
++      ../ra/getreg2.sml
++   in
++      functor gs_174 = GetReg2
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_33
++      structure CellsBasis = gs_13
++      signature INSTRUCTIONS = gs_15
++      structure Int32 = gs_17
++      ../omit-frameptr/omit-frame-pointer.sig
++   in
++      signature gs_175 = OMIT_FRAME_POINTER
++   end
++   local
++      signature MLRISC_CONTROL = gs_61
++      structure MLRiscControl = gs_62
++      signature RA = gs_118
++      structure RACore = gs_122
++      signature RA_FLOWGRAPH_PARTITIONER = gs_74
++      ../ra/region-based-ra.sml
++   in
++      functor gs_176 = RegionBasedRA
++   end
++   local
++      signature MLRISC_REGION = gs_85
++      structure String = gs_7
++      ../aliasing/mlriscRegion.sml
++   in
++      structure gs_177 = MLRiscRegion
++   end
++   local
++      structure CellsBasis = gs_13
++      signature INSN_PROPERTIES = gs_71
++      signature INSTRUCTION_EMITTER = gs_52
++      structure Int = gs_12
++      structure IntHashTable = gs_105
++      signature MLRISC_CONTROL = gs_61
++      signature MLRISC_ERROR_MSG = gs_10
++      structure MLRiscControl = gs_62
++      structure MLRiscErrorMsg = gs_11
++      structure RACore = gs_122
++      functor RASpillTypes = gs_153
++      signature RA_SPILL = gs_108
++      structure Word = gs_8
++      ../ra/ra-spill.sml
++   in
++      functor gs_178 = RASpill
++   end
++in
++   signature ARCH_SPILL_INSTR = gs_88
++   signature ASM_FORMAT_UTIL = gs_142
++   signature ASM_STREAM = gs_50
++   signature ASSEMBLY_EMITTER = gs_34
++   structure AsmFlags = gs_114
++   structure AsmFormatUtil = gs_143
++   structure AsmStream = gs_51
++   signature BBSCHED = gs_70
++   functor BBSched2 = gs_127
++   signature BLOCK_PLACEMENT = gs_104
++   functor BackPatch = gs_156
++   functor BlockPlacement = gs_133
++   functor BuildFlowgraph = gs_111
++   signature CELLS = gs_14
++   signature CELLS_BASIS = gs_5
++   functor CFGCountCopies = gs_172
++   functor CFGEmit = gs_173
++   functor CFGExpandCopies = gs_97
++   signature CFG_OPTIMIZATION = gs_96
++   signature CLIENT_PSEUDO_OPS = gs_31
++   signature CODE_STRING = gs_75
++   signature COMPUTE_EXECUTION_FREQUENCIES = gs_79
++   signature CONSTANT = gs_24
++   signature CONTROL_FLOWGRAPH_GEN = gs_112
++   signature CONTROL_FLOW_GRAPH = gs_33
++   structure CTypes = gs_58
++   signature C_CALLS = gs_59
++   functor Cells = gs_140
++   structure CellsBasis = gs_13
++   structure ChaitinSpillHeur = gs_129
++   functor CheckPlacementFn = gs_139
++   structure ChowHennessySpillHeur = gs_158
++   functor ClusterRA = gs_128
++   functor CompleteProbsFn = gs_82
++   functor ComputeFreqsFn = gs_83
++   functor ControlFlowGraph = gs_165
++   signature DELAY_SLOT_PROPERTIES = gs_57
++   signature DOMINATOR_TREE = gs_36
++   functor DefaultBlockPlacement = gs_132
++   functor DominatorTree = gs_41
++   functor EstimateLoopProbsFn = gs_149
++   signature FREQUENCY_PROPERTIES = gs_109
++   functor FreqProps = gs_110
++   signature GAS_PSEUDO_OPS = gs_89
++   functor GCCells = gs_138
++   signature GC_CELLS = gs_116
++   signature GC_TYPE = gs_115
++   signature GETREG = gs_55
++   functor GasPseudoOps = gs_90
++   functor GetReg = gs_56
++   functor GetReg2 = gs_174
++   signature INSN_PROPERTIES = gs_71
++   signature INSTRUCTIONS = gs_15
++   signature INSTRUCTION_EMITTER = gs_52
++   signature INSTRUCTION_STREAM = gs_42
++   functor InstructionStream = gs_43
++   functor JumpChainElimFn = gs_95
++   signature LABEL = gs_25
++   signature LIVENESS = gs_168
++   signature LOOP_STRUCTURE = gs_37
++   structure Label = gs_26
++   functor Liveness = gs_169
++   functor LoopStructure = gs_126
++   signature MACHINE_INT = gs_20
++   signature MC_EMIT = gs_155
++   signature MLRISC_ANNOTATIONS = gs_80
++   signature MLRISC_OPTIMIZATION = gs_86
++   signature MLRISC_REGION = gs_85
++   structure MLRiscAnnotations = gs_81
++   structure MLRiscRegion = gs_177
++   signature MLTREE = gs_27
++   signature MLTREECOMP = gs_47
++   signature MLTREEGEN = gs_45
++   signature MLTREE_BASIS = gs_22
++   signature MLTREE_EVAL = gs_68
++   signature MLTREE_EXTENSION = gs_21
++   signature MLTREE_EXTENSION_COMP = gs_48
++   signature MLTREE_HASH = gs_84
++   signature MLTREE_MULT_DIV = gs_134
++   signature MLTREE_SIZE = gs_44
++   signature MLTREE_STREAM = gs_46
++   structure MLTreeBasis = gs_102
++   functor MLTreeEval = gs_137
++   functor MLTreeF = gs_166
++   functor MLTreeGen = gs_101
++   functor MLTreeHash = gs_136
++   functor MLTreeMult = gs_135
++   functor MLTreeSize = gs_100
++   functor MLTreeStream = gs_98
++   structure MachineInt = gs_151
++   functor MemoryRA = gs_152
++   functor NoDelaySlots = gs_141
++   signature OMIT_FRAME_POINTER = gs_175
++   signature POINTS_TO = gs_64
++   signature PRINT_FLOWGRAPH = gs_53
++   signature PSEUDO_OPS = gs_32
++   signature PSEUDO_OPS_BASIS = gs_30
++   signature PSEUDO_OPS_ENDIAN = gs_67
++   structure PointsTo = gs_65
++   functor PrintFlowgraph = gs_54
++   functor PseudoOps = gs_103
++   structure PseudoOpsBasisTyp = gs_29
++   functor PseudoOpsBig = gs_69
++   functor PseudoOpsLittle = gs_99
++   signature RA = gs_118
++   structure RACore = gs_122
++   functor RADeadCodeElim = gs_124
++   structure RAGraph = gs_107
++   functor RASpill = gs_178
++   functor RASpillTypes = gs_153
++   signature RA_BITMATRIX = gs_91
++   signature RA_CORE = gs_120
++   signature RA_FLOWGRAPH = gs_117
++   signature RA_FLOWGRAPH_PARTITIONER = gs_74
++   signature RA_GRAPH = gs_106
++   signature RA_PRIORITY_QUEUE = gs_92
++   signature RA_SPILL = gs_108
++   signature RA_SPILL_HEURISTICS = gs_113
++   signature REGION = gs_23
++   signature REWRITE_INSTRUCTIONS = gs_170
++   functor RISC_RA = gs_171
++   structure RaBitmatrix = gs_94
++   functor RaPriQueue = gs_121
++   functor RegionBasedRA = gs_176
++   functor RegisterAllocator = gs_123
++   signature SDI_JUMPS = gs_72
++   signature SHUFFLE = gs_87
++   functor Shuffle = gs_146
++   functor SpanDependencyResolution = gs_73
++   functor UnimplementedCCallsFn = gs_60
++   functor WeightedBlockPlacementFn = gs_131
++end
++end
++
++end
+diff -Naur MLRISC/mlb/MLTREE.mlb MLRISC-mlton/mlb/MLTREE.mlb
+--- MLRISC/mlb/MLTREE.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/MLTREE.mlb	2006-03-04 12:08:30.000000000 -0500
+@@ -0,0 +1,213 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l18 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l25 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l42 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l68 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = MLTREE
++   end
++   local
++      signature MLTREE = gs_0
++      ../mltree/mltree-rewrite.sig
++   in
++      signature gs_1 = MLTREE_REWRITE
++   end
++   local
++      signature MLTREE = gs_0
++      signature MLTREE_REWRITE = gs_1
++      ../mltree/mltree-rewrite.sml
++   in
++      functor gs_2 = MLTreeRewrite
++   end
++   local
++      signature MLTREE = gs_0
++      ../mltree/mltree-fold.sig
++   in
++      signature gs_3 = MLTREE_FOLD
++   end
++   local
++      open l18
++   in
++      structure gs_4 = Word
++   end
++   local
++      open l4
++   in
++      structure gs_5 = CellsBasis
++   end
++   local
++      open l25
++   in
++      structure gs_6 = IntInf
++   end
++   local
++      open l4
++   in
++      structure gs_7 = Label
++   end
++   local
++      open l18
++   in
++      structure gs_8 = String
++   end
++   local
++      open l18
++   in
++      structure gs_9 = List
++   end
++   local
++      open l18
++   in
++      structure gs_10 = Char
++   end
++   local
++      open l42
++   in
++      signature gs_11 = MLRISC_ERROR_MSG
++      structure gs_12 = MLRiscErrorMsg
++   end
++   local
++      open l18
++   in
++      structure gs_13 = Int
++   end
++   local
++      signature MLTREE = gs_0
++      ../mltree/mltree-utils.sig
++   in
++      signature gs_14 = MLTREE_UTILS
++   end
++   local
++      structure CellsBasis = gs_5
++      structure Char = gs_10
++      structure Int = gs_13
++      structure IntInf = gs_6
++      structure Label = gs_7
++      structure List = gs_9
++      signature MLRISC_ERROR_MSG = gs_11
++      structure MLRiscErrorMsg = gs_12
++      signature MLTREE = gs_0
++      signature MLTREE_UTILS = gs_14
++      structure String = gs_8
++      structure Word = gs_4
++      ../mltree/mltree-utils.sml
++   in
++      functor gs_15 = MLTreeUtils
++   end
++   local
++      open l4
++   in
++      signature gs_16 = CONTROL_FLOW_GRAPH
++   end
++   local
++      open l4
++   in
++      signature gs_17 = INSTRUCTION_STREAM
++   end
++   local
++      open l4
++   in
++      signature gs_18 = INSTRUCTIONS
++   end
++   local
++      open l4
++   in
++      signature gs_19 = CELLS
++   end
++   local
++      open l68
++   in
++      structure gs_20 = Annotations
++   end
++   local
++      structure Annotations = gs_20
++      signature CELLS = gs_19
++      signature CONTROL_FLOW_GRAPH = gs_16
++      signature INSTRUCTIONS = gs_18
++      signature INSTRUCTION_STREAM = gs_17
++      ../mltree/instr-gen.sig
++   in
++      signature gs_21 = INSTR_GEN
++   end
++   local
++      signature MLTREE = gs_0
++      signature MLTREE_FOLD = gs_3
++      ../mltree/mltree-fold.sml
++   in
++      functor gs_22 = MLTreeFold
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_16
++      signature INSTRUCTIONS = gs_18
++      signature INSTRUCTION_STREAM = gs_17
++      signature INSTR_GEN = gs_21
++      signature MLRISC_ERROR_MSG = gs_11
++      structure MLRiscErrorMsg = gs_12
++      ../mltree/instr-gen.sml
++   in
++      functor gs_23 = InstrGen
++   end
++   local
++      signature MLTREE = gs_0
++      ../mltree/mltree-simplify.sig
++   in
++      signature gs_24 = MLTREE_SIMPLIFIER
++   end
++   local
++      open l4
++   in
++      signature gs_25 = MLTREE_SIZE
++   end
++   local
++      structure IntInf = gs_6
++      signature MLTREE = gs_0
++      signature MLTREE_SIMPLIFIER = gs_24
++      signature MLTREE_SIZE = gs_25
++      functor MLTreeRewrite = gs_2
++      ../mltree/mltree-simplify.sml
++   in
++      functor gs_26 = MLTreeSimplifier
++   end
++in
++   signature INSTR_GEN = gs_21
++   functor InstrGen = gs_23
++   signature MLTREE_FOLD = gs_3
++   signature MLTREE_REWRITE = gs_1
++   signature MLTREE_SIMPLIFIER = gs_24
++   signature MLTREE_UTILS = gs_14
++   functor MLTreeFold = gs_22
++   functor MLTreeRewrite = gs_2
++   functor MLTreeSimplifier = gs_26
++   functor MLTreeUtils = gs_15
++end
++end
++
++end
+diff -Naur MLRISC/mlb/Peephole.mlb MLRISC-mlton/mlb/Peephole.mlb
+--- MLRISC/mlb/Peephole.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/Peephole.mlb	2006-03-04 12:08:30.000000000 -0500
+@@ -0,0 +1,61 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l14 = 
++    bas
++      (* $Graphs.cm(=$SMLNJ-MLRISC)/Graphs.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Graphs.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = INSTRUCTIONS
++   end
++   local
++      signature INSTRUCTIONS = gs_0
++      ../instructions/peephole.sig
++   in
++      signature gs_1 = PEEPHOLE
++   end
++   local
++      open l4
++   in
++      signature gs_2 = CFG_OPTIMIZATION
++   end
++   local
++      open l14
++   in
++      structure gs_3 = Graph
++   end
++   local
++      open l4
++   in
++      signature gs_4 = CONTROL_FLOW_GRAPH
++   end
++   local
++      signature CFG_OPTIMIZATION = gs_2
++      signature CONTROL_FLOW_GRAPH = gs_4
++      structure Graph = gs_3
++      signature PEEPHOLE = gs_1
++      ../flowgraph/cfgPeephole.sml
++   in
++      functor gs_5 = CFGPeephole
++   end
++in
++   functor CFGPeephole = gs_5
++   signature PEEPHOLE = gs_1
++end
++end
++
++end
+diff -Naur MLRISC/mlb/PPC.mlb MLRISC-mlton/mlb/PPC.mlb
+--- MLRISC/mlb/PPC.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/PPC.mlb	2006-03-04 12:08:31.000000000 -0500
+@@ -0,0 +1,575 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l42 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l116 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l50 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l9 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = FREQUENCY_PROPERTIES
++   end
++   local
++      open l9
++   in
++      signature gs_1 = PROBABILITY
++      structure gs_2 = Probability
++   end
++   local
++      open l4
++   in
++      structure gs_3 = MLRiscAnnotations
++   end
++   local
++      open l4
++   in
++      signature gs_4 = REGION
++   end
++   local
++      open l4
++   in
++      signature gs_5 = CONSTANT
++   end
++   local
++      open l4
++   in
++      signature gs_6 = MLTREE
++   end
++   local
++      open l4
++   in
++      signature gs_7 = CELLS_BASIS
++   end
++   local
++      open l4
++   in
++      structure gs_8 = CellsBasis
++   end
++   local
++      open l4
++   in
++      structure gs_9 = Label
++   end
++   local
++      open l9
++   in
++      structure gs_10 = Annotations
++   end
++   local
++      open l4
++   in
++      functor gs_11 = Cells
++   end
++   local
++      open l42
++   in
++      structure gs_12 = Int
++   end
++   local
++      open l4
++   in
++      signature gs_13 = CELLS
++   end
++   local
++      open l50
++   in
++      signature gs_14 = MLRISC_ERROR_MSG
++      structure gs_15 = MLRiscErrorMsg
++   end
++   local
++      open l50
++   in
++      signature gs_16 = MLRISC_CONTROL
++      structure gs_17 = MLRiscControl
++   end
++   local
++      signature MLRISC_CONTROL = gs_16
++      structure MLRiscControl = gs_17
++      ../ppc/emit/ppcAsmSyntax.sml
++   in
++      structure gs_18 = PPCAsmSyntax
++   end
++   local
++      signature CELLS = gs_13
++      functor Cells = gs_11
++      structure CellsBasis = gs_8
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      structure PPCAsmSyntax = gs_18
++      ../ppc/instructions/ppcCells.sml
++   in
++      signature gs_19 = PPCCELLS
++      structure gs_20 = PPCCells
++   end
++   local
++      structure Annotations = gs_10
++      signature CELLS_BASIS = gs_7
++      signature CONSTANT = gs_5
++      structure CellsBasis = gs_8
++      structure Label = gs_9
++      signature MLTREE = gs_6
++      signature PPCCELLS = gs_19
++      structure PPCCells = gs_20
++      signature REGION = gs_4
++      ../ppc/instructions/ppcInstr.sml
++   in
++      signature gs_21 = PPCINSTR
++      functor gs_22 = PPCInstr
++   end
++   local
++      signature FREQUENCY_PROPERTIES = gs_0
++      structure MLRiscAnnotations = gs_3
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      signature PROBABILITY = gs_1
++      structure Probability = gs_2
++      ../ppc/instructions/ppcFreqProps.sml
++   in
++      functor gs_23 = PPCFreqProps
++   end
++   local
++      open l4
++   in
++      signature gs_24 = INSTRUCTION_EMITTER
++   end
++   local
++      open l4
++   in
++      signature gs_25 = ASM_FORMAT_UTIL
++      structure gs_26 = AsmFormatUtil
++   end
++   local
++      open l4
++   in
++      signature gs_27 = ASM_STREAM
++      structure gs_28 = AsmStream
++   end
++   local
++      open l42
++   in
++      structure gs_29 = TextIO
++   end
++   local
++      open l42
++   in
++      structure gs_30 = String
++   end
++   local
++      open l4
++   in
++      structure gs_31 = AsmFlags
++   end
++   local
++      open l4
++   in
++      signature gs_32 = MLTREE_EVAL
++   end
++   local
++      open l4
++   in
++      signature gs_33 = INSTRUCTION_STREAM
++   end
++   local
++      structure CellsBasis = gs_8
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      ../ppc/instructions/ppcShuffle.sig
++   in
++      signature gs_34 = PPCSHUFFLE
++   end
++   local
++      signature ASM_FORMAT_UTIL = gs_25
++      signature ASM_STREAM = gs_27
++      structure Annotations = gs_10
++      structure AsmFlags = gs_31
++      structure AsmFormatUtil = gs_26
++      structure AsmStream = gs_28
++      structure CellsBasis = gs_8
++      signature INSTRUCTION_EMITTER = gs_24
++      signature INSTRUCTION_STREAM = gs_33
++      structure Int = gs_12
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_32
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      signature PPCSHUFFLE = gs_34
++      structure String = gs_30
++      structure TextIO = gs_29
++      ../ppc/emit/ppcAsm.sml
++   in
++      functor gs_35 = PPCAsmEmitter
++   end
++   local
++      structure CellsBasis = gs_8
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      ../ppc/mltree/ppcPseudoInstr.sig
++   in
++      signature gs_36 = PPC_PSEUDO_INSTR
++   end
++   local
++      open l4
++   in
++      signature gs_37 = PSEUDO_OPS_BASIS
++   end
++   local
++      open l4
++   in
++      functor gs_38 = PseudoOpsBig
++   end
++   local
++      open l116
++   in
++      structure gs_39 = Format
++   end
++   local
++      open l4
++   in
++      structure gs_40 = PseudoOpsBasisTyp
++   end
++   local
++      open l116
++   in
++      structure gs_41 = IntInf
++   end
++   local
++      open l42
++   in
++      structure gs_42 = Word32
++   end
++   local
++      open l116
++   in
++      structure gs_43 = Atom
++   end
++   local
++      structure Atom = gs_43
++      structure Format = gs_39
++      structure Int = gs_12
++      structure IntInf = gs_41
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE = gs_6
++      signature MLTREE_EVAL = gs_32
++      signature PSEUDO_OPS_BASIS = gs_37
++      structure PseudoOpsBasisTyp = gs_40
++      functor PseudoOpsBig = gs_38
++      structure String = gs_30
++      structure Word32 = gs_42
++      ../ppc/flowgraph/ppcDarwinPseudoOps.sml
++   in
++      functor gs_44 = PPCDarwinPseudoOps
++   end
++   local
++      open l4
++   in
++      signature gs_45 = ARCH_SPILL_INSTR
++   end
++   local
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      ../ppc/ra/ppcRewrite.sml
++   in
++      functor gs_46 = PPCRewrite
++   end
++   local
++      signature ARCH_SPILL_INSTR = gs_45
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      functor PPCRewrite = gs_46
++      ../ppc/ra/ppcSpillInstr.sml
++   in
++      functor gs_47 = PPCSpillInstr
++   end
++   local
++      open l4
++   in
++      signature gs_48 = GAS_PSEUDO_OPS
++      functor gs_49 = GasPseudoOps
++   end
++   local
++      structure Format = gs_39
++      signature GAS_PSEUDO_OPS = gs_48
++      functor GasPseudoOps = gs_49
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE = gs_6
++      signature MLTREE_EVAL = gs_32
++      signature PSEUDO_OPS_BASIS = gs_37
++      structure PseudoOpsBasisTyp = gs_40
++      functor PseudoOpsBig = gs_38
++      structure Word32 = gs_42
++      ../ppc/flowgraph/ppcGasPseudoOps.sml
++   in
++      functor gs_50 = PPCGasPseudoOps
++   end
++   local
++      open l4
++   in
++      signature gs_51 = INSN_PROPERTIES
++   end
++   local
++      open l42
++   in
++      structure gs_52 = Word
++   end
++   local
++      open l4
++   in
++      signature gs_53 = MLTREE_HASH
++   end
++   local
++      structure CellsBasis = gs_8
++      signature INSN_PROPERTIES = gs_51
++      structure IntInf = gs_41
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_32
++      signature MLTREE_HASH = gs_53
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      structure Word = gs_52
++      ../ppc/instructions/ppcProps.sml
++   in
++      functor gs_54 = PPCProps
++   end
++   local
++      open l4
++   in
++      signature gs_55 = SDI_JUMPS
++   end
++   local
++      structure CellsBasis = gs_8
++      signature MLRISC_CONTROL = gs_16
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscControl = gs_17
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_32
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      signature PPCSHUFFLE = gs_34
++      signature SDI_JUMPS = gs_55
++      structure Word = gs_52
++      ../ppc/backpatch/ppcJumps.sml
++   in
++      functor gs_56 = PPCJumps
++   end
++   local
++      ../ppc/instructions/ppcInstrExt.sml
++   in
++      structure gs_57 = PPCInstrExt
++   end
++   local
++      open l4
++   in
++      signature gs_58 = CONTROL_FLOW_GRAPH
++   end
++   local
++      open l4
++   in
++      signature gs_59 = MLTREE_STREAM
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_58
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_STREAM = gs_59
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      structure PPCInstrExt = gs_57
++      ../ppc/instructions/ppcCompInstrExt.sml
++   in
++      signature gs_60 = PPCCOMP_INSTR_EXT
++      functor gs_61 = PPCCompInstrExt
++   end
++   local
++      open l4
++   in
++      signature gs_62 = DELAY_SLOT_PROPERTIES
++   end
++   local
++      signature DELAY_SLOT_PROPERTIES = gs_62
++      signature INSN_PROPERTIES = gs_51
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      ../ppc/backpatch/ppcDelaySlots.sml
++   in
++      functor gs_63 = PPCDelaySlots
++   end
++   local
++      open l4
++   in
++      structure gs_64 = CTypes
++   end
++   local
++      open l42
++   in
++      structure gs_65 = List
++   end
++   local
++      open l4
++   in
++      signature gs_66 = C_CALLS
++   end
++   local
++      structure CTypes = gs_64
++      signature C_CALLS = gs_66
++      structure Int = gs_12
++      structure IntInf = gs_41
++      structure List = gs_65
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscAnnotations = gs_3
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE = gs_6
++      signature PPCCELLS = gs_19
++      structure PPCCells = gs_20
++      structure String = gs_30
++      structure Word = gs_52
++      ../ppc/c-calls/ppc-macosx.sml
++   in
++      functor gs_67 = PPCMacOSX_CCalls
++      signature gs_68 = PPC_MACOSX_C_CALLS
++   end
++   local
++      open l4
++   in
++      functor gs_69 = Shuffle
++   end
++   local
++      structure CellsBasis = gs_8
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      functor Shuffle = gs_69
++      ../ppc/instructions/ppcShuffle.sml
++   in
++      functor gs_70 = PPCShuffle
++   end
++   local
++      open l42
++   in
++      structure gs_71 = Word8
++   end
++   local
++      open l4
++   in
++      signature gs_72 = CODE_STRING
++   end
++   local
++      signature CODE_STRING = gs_72
++      structure CellsBasis = gs_8
++      signature INSTRUCTION_EMITTER = gs_24
++      signature INSTRUCTION_STREAM = gs_33
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREE_EVAL = gs_32
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      structure Word32 = gs_42
++      structure Word8 = gs_71
++      ../ppc/emit/ppcMC.sml
++   in
++      functor gs_73 = PPCMCEmitter
++   end
++   local
++      open l4
++   in
++      functor gs_74 = MLTreeMult
++   end
++   local
++      open l4
++   in
++      functor gs_75 = MLTreeGen
++   end
++   local
++      open l4
++   in
++      signature gs_76 = MLTREECOMP
++      signature gs_77 = MLTREE_EXTENSION_COMP
++   end
++   local
++      structure CellsBasis = gs_8
++      structure Int = gs_12
++      structure Label = gs_9
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscAnnotations = gs_3
++      structure MLRiscErrorMsg = gs_15
++      signature MLTREECOMP = gs_76
++      signature MLTREE_EXTENSION_COMP = gs_77
++      functor MLTreeGen = gs_75
++      functor MLTreeMult = gs_74
++      signature PPCINSTR = gs_21
++      functor PPCInstr = gs_22
++      signature PPC_PSEUDO_INSTR = gs_36
++      structure Word32 = gs_42
++      ../ppc/mltree/ppc.sml
++   in
++      functor gs_78 = PPC
++   end
++in
++   functor PPC = gs_78
++   functor PPCAsmEmitter = gs_35
++   structure PPCAsmSyntax = gs_18
++   signature PPCCELLS = gs_19
++   signature PPCCOMP_INSTR_EXT = gs_60
++   structure PPCCells = gs_20
++   functor PPCCompInstrExt = gs_61
++   functor PPCDarwinPseudoOps = gs_44
++   functor PPCDelaySlots = gs_63
++   functor PPCFreqProps = gs_23
++   functor PPCGasPseudoOps = gs_50
++   signature PPCINSTR = gs_21
++   functor PPCInstr = gs_22
++   structure PPCInstrExt = gs_57
++   functor PPCJumps = gs_56
++   functor PPCMCEmitter = gs_73
++   functor PPCMacOSX_CCalls = gs_67
++   functor PPCProps = gs_54
++   functor PPCRewrite = gs_46
++   signature PPCSHUFFLE = gs_34
++   functor PPCShuffle = gs_70
++   functor PPCSpillInstr = gs_47
++   signature PPC_PSEUDO_INSTR = gs_36
++end
++end
++
++end
+diff -Naur MLRISC/mlb/RA.mlb MLRISC-mlton/mlb/RA.mlb
+--- MLRISC/mlb/RA.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/RA.mlb	2006-03-04 12:08:31.000000000 -0500
+@@ -0,0 +1,152 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l11 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l22 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l53 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l29 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = RA_SPILL_HEURISTICS
++   end
++   local
++      open l4
++   in
++      structure gs_1 = RACore
++   end
++   local
++      open l11
++   in
++      structure gs_2 = Real
++   end
++   local
++      open l4
++   in
++      structure gs_3 = RAGraph
++   end
++   local
++      structure RACore = gs_1
++      structure RAGraph = gs_3
++      signature RA_SPILL_HEURISTICS = gs_0
++      structure Real = gs_2
++      ../ra/chaitin-spillheur2.sml
++   in
++      functor gs_4 = ImprovedChaitinSpillHeur
++   end
++   local
++      open l22
++   in
++      structure gs_5 = IntHashTable
++   end
++   local
++      open l11
++   in
++      structure gs_6 = Option
++   end
++   local
++      open l29
++   in
++      structure gs_7 = PriorityHeap
++   end
++   local
++      structure IntHashTable = gs_5
++      structure Option = gs_6
++      structure PriorityHeap = gs_7
++      structure RACore = gs_1
++      structure RAGraph = gs_3
++      signature RA_SPILL_HEURISTICS = gs_0
++      structure Real = gs_2
++      ../ra/chow-hennessy-spillheur2.sml
++   in
++      functor gs_8 = ImprovedChowHennessySpillHeur
++   end
++   local
++      open l4
++   in
++      signature gs_9 = RA_SPILL
++   end
++   local
++      open l11
++   in
++      structure gs_10 = Int
++   end
++   local
++      open l4
++   in
++      functor gs_11 = RASpillTypes
++   end
++   local
++      open l4
++   in
++      structure gs_12 = CellsBasis
++   end
++   local
++      open l11
++   in
++      structure gs_13 = Word
++   end
++   local
++      open l53
++   in
++      signature gs_14 = MLRISC_ERROR_MSG
++      structure gs_15 = MLRiscErrorMsg
++   end
++   local
++      open l4
++   in
++      signature gs_16 = INSTRUCTION_EMITTER
++   end
++   local
++      open l4
++   in
++      signature gs_17 = INSN_PROPERTIES
++   end
++   local
++      structure CellsBasis = gs_12
++      signature INSN_PROPERTIES = gs_17
++      signature INSTRUCTION_EMITTER = gs_16
++      structure Int = gs_10
++      structure IntHashTable = gs_5
++      signature MLRISC_ERROR_MSG = gs_14
++      structure MLRiscErrorMsg = gs_15
++      structure RACore = gs_1
++      functor RASpillTypes = gs_11
++      signature RA_SPILL = gs_9
++      structure Word = gs_13
++      ../ra/ra-spill-with-renaming.sml
++   in
++      functor gs_18 = RASpillWithRenaming
++   end
++in
++   functor ImprovedChaitinSpillHeur = gs_4
++   functor ImprovedChowHennessySpillHeur = gs_8
++   functor RASpillWithRenaming = gs_18
++end
++end
++
++end
+diff -Naur MLRISC/mlb/SPARC.mlb MLRISC-mlton/mlb/SPARC.mlb
+--- MLRISC/mlb/SPARC.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/SPARC.mlb	2006-03-04 12:08:31.000000000 -0500
+@@ -0,0 +1,540 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l38 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l137 = 
++    bas
++      (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
++    end
++  basis l4 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l46 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l30 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l4
++   in
++      signature gs_0 = CONTROL_FLOW_GRAPH
++   end
++   local
++      open l4
++   in
++      signature gs_1 = MLTREE_STREAM
++   end
++   local
++      open l4
++   in
++      signature gs_2 = MLTREE
++   end
++   local
++      open l4
++   in
++      signature gs_3 = REGION
++   end
++   local
++      open l4
++   in
++      signature gs_4 = CONSTANT
++   end
++   local
++      open l4
++   in
++      signature gs_5 = CELLS_BASIS
++   end
++   local
++      open l4
++   in
++      structure gs_6 = CellsBasis
++   end
++   local
++      open l4
++   in
++      structure gs_7 = Label
++   end
++   local
++      open l30
++   in
++      structure gs_8 = Annotations
++   end
++   local
++      open l4
++   in
++      functor gs_9 = Cells
++   end
++   local
++      open l38
++   in
++      structure gs_10 = Int
++   end
++   local
++      open l4
++   in
++      signature gs_11 = CELLS
++   end
++   local
++      open l46
++   in
++      signature gs_12 = MLRISC_ERROR_MSG
++      structure gs_13 = MLRiscErrorMsg
++   end
++   local
++      signature CELLS = gs_11
++      functor Cells = gs_9
++      structure CellsBasis = gs_6
++      structure Int = gs_10
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      ../sparc/instructions/sparcCells.sml
++   in
++      signature gs_14 = SPARCCELLS
++      structure gs_15 = SparcCells
++   end
++   local
++      structure Annotations = gs_8
++      signature CELLS_BASIS = gs_5
++      signature CONSTANT = gs_4
++      structure CellsBasis = gs_6
++      structure Label = gs_7
++      signature MLTREE = gs_2
++      signature REGION = gs_3
++      signature SPARCCELLS = gs_14
++      structure SparcCells = gs_15
++      ../sparc/instructions/sparcInstr.sml
++   in
++      signature gs_16 = SPARCINSTR
++      functor gs_17 = SparcInstr
++   end
++   local
++      ../sparc/instructions/sparcinstr-ext.sml
++   in
++      structure gs_18 = SparcInstrExt
++   end
++   local
++      signature CONTROL_FLOW_GRAPH = gs_0
++      signature MLTREE = gs_2
++      signature MLTREE_STREAM = gs_1
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      structure SparcInstrExt = gs_18
++      ../sparc/instructions/sparccomp-instr-ext.sml
++   in
++      signature gs_19 = SPARCCOMP_INSTR_EXT
++      functor gs_20 = SparcCompInstrExt
++   end
++   local
++      open l4
++   in
++      signature gs_21 = INSTRUCTION_EMITTER
++   end
++   local
++      open l38
++   in
++      structure gs_22 = Word8
++   end
++   local
++      open l38
++   in
++      structure gs_23 = Word32
++   end
++   local
++      open l4
++   in
++      signature gs_24 = CODE_STRING
++   end
++   local
++      open l4
++   in
++      signature gs_25 = INSTRUCTION_STREAM
++   end
++   local
++      open l4
++   in
++      signature gs_26 = MLTREE_EVAL
++   end
++   local
++      signature CODE_STRING = gs_24
++      structure CellsBasis = gs_6
++      signature INSTRUCTION_EMITTER = gs_21
++      signature INSTRUCTION_STREAM = gs_25
++      structure Label = gs_7
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE_EVAL = gs_26
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      structure Word32 = gs_23
++      structure Word8 = gs_22
++      ../sparc/emit/sparcMC.sml
++   in
++      functor gs_27 = SparcMCEmitter
++   end
++   local
++      open l4
++   in
++      functor gs_28 = Shuffle
++   end
++   local
++      open l38
++   in
++      structure gs_29 = Option
++   end
++   local
++      structure CellsBasis = gs_6
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      ../sparc/instructions/sparcShuffle.sig
++   in
++      signature gs_30 = SPARCSHUFFLE
++   end
++   local
++      structure CellsBasis = gs_6
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      structure Option = gs_29
++      signature SPARCINSTR = gs_16
++      signature SPARCSHUFFLE = gs_30
++      functor Shuffle = gs_28
++      functor SparcInstr = gs_17
++      structure Word32 = gs_23
++      ../sparc/instructions/sparcShuffle.sml
++   in
++      functor gs_31 = SparcShuffle
++   end
++   local
++      open l4
++   in
++      signature gs_32 = DELAY_SLOT_PROPERTIES
++   end
++   local
++      open l4
++   in
++      signature gs_33 = INSN_PROPERTIES
++   end
++   local
++      structure CellsBasis = gs_6
++      signature DELAY_SLOT_PROPERTIES = gs_32
++      signature INSN_PROPERTIES = gs_33
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      structure Option = gs_29
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      ../sparc/backpatch/sparcDelaySlotProps.sml
++   in
++      functor gs_34 = SparcDelaySlots
++   end
++   local
++      open l4
++   in
++      signature gs_35 = FREQUENCY_PROPERTIES
++   end
++   local
++      open l30
++   in
++      signature gs_36 = PROBABILITY
++      structure gs_37 = Probability
++   end
++   local
++      open l4
++   in
++      structure gs_38 = MLRiscAnnotations
++   end
++   local
++      signature FREQUENCY_PROPERTIES = gs_35
++      structure MLRiscAnnotations = gs_38
++      signature PROBABILITY = gs_36
++      structure Probability = gs_37
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      ../sparc/instructions/sparcFreqProps.sml
++   in
++      functor gs_39 = SparcFreqProps
++   end
++   local
++      open l4
++   in
++      signature gs_40 = PSEUDO_OPS_BASIS
++   end
++   local
++      open l4
++   in
++      signature gs_41 = GAS_PSEUDO_OPS
++      functor gs_42 = GasPseudoOps
++   end
++   local
++      open l4
++   in
++      functor gs_43 = PseudoOpsBig
++   end
++   local
++      open l137
++   in
++      structure gs_44 = Format
++   end
++   local
++      open l4
++   in
++      structure gs_45 = PseudoOpsBasisTyp
++   end
++   local
++      structure Format = gs_44
++      signature GAS_PSEUDO_OPS = gs_41
++      functor GasPseudoOps = gs_42
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE = gs_2
++      signature MLTREE_EVAL = gs_26
++      signature PSEUDO_OPS_BASIS = gs_40
++      structure PseudoOpsBasisTyp = gs_45
++      functor PseudoOpsBig = gs_43
++      structure Word32 = gs_23
++      ../sparc/flowgraph/sparcGasPseudoOps.sml
++   in
++      functor gs_46 = SparcGasPseudoOps
++   end
++   local
++      open l4
++   in
++      functor gs_47 = MLTreeMult
++   end
++   local
++      open l4
++   in
++      functor gs_48 = MLTreeGen
++   end
++   local
++      open l4
++   in
++      signature gs_49 = MLTREECOMP
++      signature gs_50 = MLTREE_EXTENSION_COMP
++   end
++   local
++      structure CellsBasis = gs_6
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      ../sparc/mltree/sparcPseudoInstr.sig
++   in
++      signature gs_51 = SPARC_PSEUDO_INSTR
++   end
++   local
++      structure CellsBasis = gs_6
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscAnnotations = gs_38
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREECOMP = gs_49
++      signature MLTREE_EXTENSION_COMP = gs_50
++      functor MLTreeGen = gs_48
++      functor MLTreeMult = gs_47
++      signature SPARCINSTR = gs_16
++      signature SPARC_PSEUDO_INSTR = gs_51
++      functor SparcInstr = gs_17
++      structure Word32 = gs_23
++      ../sparc/mltree/sparc.sml
++   in
++      functor gs_52 = Sparc
++   end
++   local
++      open l137
++   in
++      structure gs_53 = IntInf
++   end
++   local
++      open l38
++   in
++      structure gs_54 = Word
++   end
++   local
++      open l4
++   in
++      signature gs_55 = MLTREE_HASH
++   end
++   local
++      structure CellsBasis = gs_6
++      signature INSN_PROPERTIES = gs_33
++      structure IntInf = gs_53
++      structure Label = gs_7
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE_EVAL = gs_26
++      signature MLTREE_HASH = gs_55
++      structure Option = gs_29
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      structure Word = gs_54
++      ../sparc/instructions/sparcProps.sml
++   in
++      functor gs_56 = SparcProps
++   end
++   local
++      open l4
++   in
++      signature gs_57 = SDI_JUMPS
++   end
++   local
++      structure CellsBasis = gs_6
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE_EVAL = gs_26
++      signature SDI_JUMPS = gs_57
++      signature SPARCINSTR = gs_16
++      signature SPARCSHUFFLE = gs_30
++      functor SparcInstr = gs_17
++      structure Word32 = gs_23
++      ../sparc/backpatch/sparcJumps.sml
++   in
++      functor gs_58 = SparcJumps
++   end
++   local
++      open l4
++   in
++      signature gs_59 = C_CALLS
++   end
++   local
++      open l4
++   in
++      structure gs_60 = CTypes
++   end
++   local
++      open l38
++   in
++      structure gs_61 = String
++   end
++   local
++      open l38
++   in
++      structure gs_62 = List
++   end
++   local
++      structure CTypes = gs_60
++      signature C_CALLS = gs_59
++      structure Int = gs_10
++      structure List = gs_62
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscAnnotations = gs_38
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE = gs_2
++      signature SPARCCELLS = gs_14
++      structure SparcCells = gs_15
++      structure SparcInstrExt = gs_18
++      structure String = gs_61
++      ../sparc/c-calls/sparc-c-calls.sml
++   in
++      functor gs_63 = Sparc_CCalls
++   end
++   local
++      open l4
++   in
++      signature gs_64 = ASM_FORMAT_UTIL
++      structure gs_65 = AsmFormatUtil
++   end
++   local
++      open l4
++   in
++      signature gs_66 = ASM_STREAM
++      structure gs_67 = AsmStream
++   end
++   local
++      open l38
++   in
++      structure gs_68 = TextIO
++   end
++   local
++      open l4
++   in
++      structure gs_69 = AsmFlags
++   end
++   local
++      signature ASM_FORMAT_UTIL = gs_64
++      signature ASM_STREAM = gs_66
++      structure Annotations = gs_8
++      structure AsmFlags = gs_69
++      structure AsmFormatUtil = gs_65
++      structure AsmStream = gs_67
++      structure CellsBasis = gs_6
++      signature INSTRUCTION_EMITTER = gs_21
++      signature INSTRUCTION_STREAM = gs_25
++      structure Int = gs_10
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature MLTREE_EVAL = gs_26
++      signature SPARCINSTR = gs_16
++      signature SPARCSHUFFLE = gs_30
++      functor SparcInstr = gs_17
++      structure String = gs_61
++      structure TextIO = gs_68
++      structure Word32 = gs_23
++      ../sparc/emit/sparcAsm.sml
++   in
++      functor gs_70 = SparcAsmEmitter
++   end
++   local
++      structure CellsBasis = gs_6
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      ../sparc/ra/sparcRewrite.sml
++   in
++      functor gs_71 = SparcRewrite
++   end
++   local
++      open l4
++   in
++      signature gs_72 = ARCH_SPILL_INSTR
++   end
++   local
++      signature ARCH_SPILL_INSTR = gs_72
++      structure CellsBasis = gs_6
++      signature MLRISC_ERROR_MSG = gs_12
++      structure MLRiscErrorMsg = gs_13
++      signature SPARCINSTR = gs_16
++      functor SparcInstr = gs_17
++      functor SparcRewrite = gs_71
++      ../sparc/ra/sparcSpillInstr.sml
++   in
++      functor gs_73 = SparcSpillInstr
++   end
++in
++   signature SPARCCELLS = gs_14
++   signature SPARCCOMP_INSTR_EXT = gs_19
++   signature SPARCINSTR = gs_16
++   signature SPARCSHUFFLE = gs_30
++   signature SPARC_PSEUDO_INSTR = gs_51
++   functor Sparc = gs_52
++   functor SparcAsmEmitter = gs_70
++   structure SparcCells = gs_15
++   functor SparcCompInstrExt = gs_20
++   functor SparcDelaySlots = gs_34
++   functor SparcFreqProps = gs_39
++   functor SparcGasPseudoOps = gs_46
++   functor SparcInstr = gs_17
++   structure SparcInstrExt = gs_18
++   functor SparcJumps = gs_58
++   functor SparcMCEmitter = gs_27
++   functor SparcProps = gs_56
++   functor SparcRewrite = gs_71
++   functor SparcShuffle = gs_31
++   functor SparcSpillInstr = gs_73
++   functor Sparc_CCalls = gs_63
++end
++end
++
++end
+diff -Naur MLRISC/mlb/Visual.mlb MLRISC-mlton/mlb/Visual.mlb
+--- MLRISC/mlb/Visual.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlb/Visual.mlb	2006-03-04 12:08:31.000000000 -0500
+@@ -0,0 +1,252 @@
++
++ann
++  "nonexhaustiveMatch warn" "redundantMatch warn"
++  "sequenceNonUnit ignore"
++  "warnUnused false" "forceUsed"
++in
++
++local
++  basis l23 = 
++    bas
++      (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb
++    end
++  basis l66 = 
++    bas
++      (* $MLRISC.cm(=$SMLNJ-MLRISC)/MLRISC.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/MLRISC.mlb
++    end
++  basis l5 = 
++    bas
++      (* $Control.cm(=$SMLNJ-MLRISC)/Control.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Control.mlb
++    end
++  basis l12 = 
++    bas
++      (* $Graphs.cm(=$SMLNJ-MLRISC)/Graphs.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Graphs.mlb
++    end
++  basis l19 = 
++    bas
++      (* $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm ====> *) /home/fluet/mlton/smlnj-libs/MLRISC/MLRISC.cvs.HEAD-mlton/mlb/Lib.mlb
++    end
++in
++local
++   $(SML_LIB)/basis/pervasive.mlb
++   local
++      open l5
++   in
++      signature gs_0 = MLRISC_CONTROL
++      structure gs_1 = MLRiscControl
++   end
++   local
++      open l12
++   in
++      signature gs_2 = ISOMORPHIC_GRAPH_VIEW
++      structure gs_3 = IsomorphicGraphView
++   end
++   local
++      open l12
++   in
++      structure gs_4 = Graph
++   end
++   local
++      open l19
++   in
++      structure gs_5 = Annotations
++   end
++   local
++      open l23
++   in
++      structure gs_6 = Int
++   end
++   local
++      structure Annotations = gs_5
++      structure Graph = gs_4
++      signature ISOMORPHIC_GRAPH_VIEW = gs_2
++      structure Int = gs_6
++      structure IsomorphicGraphView = gs_3
++      ../visualization/graphLayout.sml
++   in
++      structure gs_7 = GraphLayout
++   end
++   local
++      structure GraphLayout = gs_7
++      ../visualization/graphDisplay.sig
++   in
++      signature gs_8 = GRAPH_DISPLAY
++   end
++   local
++      open l23
++   in
++      structure gs_9 = String
++   end
++   local
++      open l23
++   in
++      structure gs_10 = List
++   end
++   local
++      signature GRAPH_DISPLAY = gs_8
++      structure Graph = gs_4
++      structure GraphLayout = gs_7
++      structure Int = gs_6
++      structure List = gs_10
++      structure String = gs_9
++      ../visualization/daVinci.sml
++   in
++      structure gs_11 = daVinci
++   end
++   local
++      signature GRAPH_DISPLAY = gs_8
++      structure Graph = gs_4
++      structure GraphLayout = gs_7
++      structure Int = gs_6
++      structure String = gs_9
++      ../visualization/vcg.sml
++   in
++      structure gs_12 = VCG
++   end
++   local
++      signature GRAPH_DISPLAY = gs_8
++      structure Graph = gs_4
++      structure GraphLayout = gs_7
++      structure Int = gs_6
++      structure String = gs_9
++      ../visualization/dot.sml
++   in
++      structure gs_13 = Dot
++   end
++   local
++      structure Dot = gs_13
++      signature GRAPH_DISPLAY = gs_8
++      signature MLRISC_CONTROL = gs_0
++      structure MLRiscControl = gs_1
++      structure VCG = gs_12
++      structure daVinci = gs_11
++      ../visualization/allDisplays.sml
++   in
++      structure gs_14 = AllDisplays
++   end
++   local
++      open l23
++   in
++      structure gs_15 = TextIO
++   end
++   local
++      open l23
++   in
++      structure gs_16 = OS
++   end
++   local
++      structure GraphLayout = gs_7
++      ../visualization/graphViewer.sig
++   in
++      signature gs_17 = GRAPH_VIEWER
++   end
++   local
++      signature GRAPH_DISPLAY = gs_8
++      signature GRAPH_VIEWER = gs_17
++      structure Graph = gs_4
++      structure GraphLayout = gs_7
++      structure Int = gs_6
++      signature MLRISC_CONTROL = gs_0
++      structure MLRiscControl = gs_1
++      structure OS = gs_16
++      structure TextIO = gs_15
++      ../visualization/graphViewer.sml
++   in
++      functor gs_18 = GraphViewer
++   end
++   local
++      open l66
++   in
++      structure gs_19 = Label
++   end
++   local
++      open l23
++   in
++      structure gs_20 = Array
++   end
++   local
++      open l23
++   in
++      structure gs_21 = Real
++   end
++   local
++      open l23
++   in
++      structure gs_22 = Math
++   end
++   local
++      open l66
++   in
++      signature gs_23 = INSTRUCTION_EMITTER
++   end
++   local
++      open l66
++   in
++      signature gs_24 = CONTROL_FLOW_GRAPH
++   end
++   local
++      open l19
++   in
++      structure gs_25 = StringOutStream
++   end
++   local
++      open l66
++   in
++      signature gs_26 = ASM_STREAM
++      structure gs_27 = AsmStream
++   end
++   local
++      open l66
++   in
++      signature gs_28 = INSTRUCTIONS
++   end
++   local
++      signature ASM_STREAM = gs_26
++      structure Annotations = gs_5
++      structure AsmStream = gs_27
++      signature INSTRUCTIONS = gs_28
++      signature INSTRUCTION_EMITTER = gs_23
++      structure String = gs_9
++      structure StringOutStream = gs_25
++      ../visualization/mlrisc-format-insn.sml
++   in
++      signature gs_29 = FORMAT_INSTRUCTION
++      functor gs_30 = FormatInstruction
++   end
++   local
++      structure Annotations = gs_5
++      structure Array = gs_20
++      signature CONTROL_FLOW_GRAPH = gs_24
++      signature FORMAT_INSTRUCTION = gs_29
++      functor FormatInstruction = gs_30
++      signature GRAPH_VIEWER = gs_17
++      structure Graph = gs_4
++      structure GraphLayout = gs_7
++      signature INSTRUCTION_EMITTER = gs_23
++      structure Int = gs_6
++      structure Label = gs_19
++      structure List = gs_10
++      signature MLRISC_CONTROL = gs_0
++      structure MLRiscControl = gs_1
++      structure Math = gs_22
++      structure Real = gs_21
++      structure String = gs_9
++      ../visualization/cfgViewer.sml
++   in
++      functor gs_31 = CFGViewer
++   end
++in
++   structure AllDisplays = gs_14
++   functor CFGViewer = gs_31
++   structure Dot = gs_13
++   functor FormatInstruction = gs_30
++   signature GRAPH_DISPLAY = gs_8
++   signature GRAPH_VIEWER = gs_17
++   structure GraphLayout = gs_7
++   functor GraphViewer = gs_18
++   structure VCG = gs_12
++   structure daVinci = gs_11
++end
++end
++
++end
+diff -Naur MLRISC/mlrisc-lib.mlb MLRISC-mlton/mlrisc-lib.mlb
+--- MLRISC/mlrisc-lib.mlb	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/mlrisc-lib.mlb	2006-03-04 12:08:31.000000000 -0500
+@@ -0,0 +1,17 @@
++(* DO NOT USE.  Only suitable for type-checking purposes. *)
++local
++mlb/ALPHA.mlb
++mlb/Control.mlb
++mlb/Graphs.mlb
++mlb/HPPA.mlb
++mlb/IA32.mlb
++mlb/IA32-Peephole.mlb
++mlb/Lib.mlb
++mlb/MLRISC.mlb
++mlb/MLTREE.mlb
++mlb/Peephole.mlb
++mlb/PPC.mlb
++mlb/RA.mlb
++mlb/SPARC.mlb
++mlb/Visual.mlb
++in end
+diff -Naur MLRISC/mltree/instr-gen.sig MLRISC-mlton/mltree/instr-gen.sig
+--- MLRISC/mltree/instr-gen.sig	2001-08-24 13:48:49.000000000 -0400
++++ MLRISC-mlton/mltree/instr-gen.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -8,8 +8,29 @@
+    structure S   : INSTRUCTION_STREAM
+    structure CFG : CONTROL_FLOW_GRAPH 
+ 
+-   sharing I.C = C 
+-   sharing CFG.P = S.P
++   (* sharing I.C = C *)
++   (* sharing CFG.P = S.P *)
++   where type P.Client.pseudo_op = S.P.Client.pseudo_op
++     and type P.T.Basis.cond = S.P.T.Basis.cond
++     and type P.T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++     and type P.T.Basis.ext = S.P.T.Basis.ext
++     and type P.T.Basis.fcond = S.P.T.Basis.fcond
++     and type P.T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++     and type P.T.Constant.const = S.P.T.Constant.const
++     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++     and type P.T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++     and type P.T.Region.region = S.P.T.Region.region
++     and type P.T.ccexp = S.P.T.ccexp
++     and type P.T.fexp = S.P.T.fexp
++     (* and type P.T.labexp = S.P.T.labexp *)
++     and type P.T.mlrisc = S.P.T.mlrisc
++     and type P.T.oper = S.P.T.oper
++     and type P.T.rep = S.P.T.rep
++     and type P.T.rexp = S.P.T.rexp
++     and type P.T.stm = S.P.T.stm
+ 
+    (* 
+     * This function creates an instruction stream, which can be 
+diff -Naur MLRISC/mltree/instr-gen.sml MLRISC-mlton/mltree/instr-gen.sml
+--- MLRISC/mltree/instr-gen.sml	2001-09-19 15:31:18.000000000 -0400
++++ MLRISC-mlton/mltree/instr-gen.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -4,9 +4,33 @@
+ functor InstrGen
+    (structure I      : INSTRUCTIONS
+     structure Stream : INSTRUCTION_STREAM
+-    structure CFG    : CONTROL_FLOW_GRAPH
+-    			where I = I
+-			  and P = Stream.P
++    structure CFG    : CONTROL_FLOW_GRAPH (* where I = I and P = Stream.P *)
++                       where type I.addressing_mode = I.addressing_mode
++                         and type I.ea = I.ea
++                         and type I.instr = I.instr
++                         and type I.instruction = I.instruction
++                         and type I.operand = I.operand
++                       where type P.Client.pseudo_op = Stream.P.Client.pseudo_op
++                         and type P.T.Basis.cond = Stream.P.T.Basis.cond
++                         and type P.T.Basis.div_rounding_mode = Stream.P.T.Basis.div_rounding_mode
++                         and type P.T.Basis.ext = Stream.P.T.Basis.ext
++                         and type P.T.Basis.fcond = Stream.P.T.Basis.fcond
++                         and type P.T.Basis.rounding_mode = Stream.P.T.Basis.rounding_mode
++                         and type P.T.Constant.const = Stream.P.T.Constant.const
++                         and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Stream.P.T.Extension.ccx
++                         and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Stream.P.T.Extension.fx
++                         and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Stream.P.T.Extension.rx
++                         and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Stream.P.T.Extension.sx
++                         and type P.T.I.div_rounding_mode = Stream.P.T.I.div_rounding_mode
++                         and type P.T.Region.region = Stream.P.T.Region.region
++                         and type P.T.ccexp = Stream.P.T.ccexp
++                         and type P.T.fexp = Stream.P.T.fexp
++                         (* and type P.T.labexp = Stream.P.T.labexp *)
++                         and type P.T.mlrisc = Stream.P.T.mlrisc
++                         and type P.T.oper = Stream.P.T.oper
++                         and type P.T.rep = Stream.P.T.rep
++                         and type P.T.rexp = Stream.P.T.rexp
++                         and type P.T.stm = Stream.P.T.stm
+    ) : INSTR_GEN =
+ struct
+    structure C   = I.C
+diff -Naur MLRISC/mltree/mltreecomp.sig MLRISC-mlton/mltree/mltreecomp.sig
+--- MLRISC/mltree/mltreecomp.sig	2001-11-21 14:00:04.000000000 -0500
++++ MLRISC-mlton/mltree/mltreecomp.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -9,11 +9,56 @@
+ signature MLTREE_EXTENSION_COMP =
+ sig
+    structure T : MLTREE
+-   structure TS : MLTREE_STREAM where T = T
++   structure TS : MLTREE_STREAM (* where T = T *)
++                  where type T.Basis.cond = T.Basis.cond
++                    and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                    and type T.Basis.ext = T.Basis.ext
++                    and type T.Basis.fcond = T.Basis.fcond
++                    and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                    and type T.Constant.const = T.Constant.const
++                    and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                    and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                    and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                    and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                    and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                    and type T.Region.region = T.Region.region
++                    and type T.ccexp = T.ccexp
++                    and type T.fexp = T.fexp
++                    (* and type T.labexp = T.labexp *)
++                    and type T.mlrisc = T.mlrisc
++                    and type T.oper = T.oper
++                    and type T.rep = T.rep
++                    and type T.rexp = T.rexp
++                    and type T.stm = T.stm
+    structure I : INSTRUCTIONS
+-   structure CFG : CONTROL_FLOW_GRAPH
+-		where I = I
+-	          and P = TS.S.P
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = I and P = TS.S.P *)
++                   where type I.addressing_mode = I.addressing_mode
++                     and type I.ea = I.ea
++                     and type I.instr = I.instr
++                     and type I.instruction = I.instruction
++                     and type I.operand = I.operand
++                   where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                     and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                     and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                     and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                     and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                     and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                     and type P.T.Constant.const = TS.S.P.T.Constant.const
++                     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                     and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                     and type P.T.Region.region = TS.S.P.T.Region.region
++                     and type P.T.ccexp = TS.S.P.T.ccexp
++                     and type P.T.fexp = TS.S.P.T.fexp
++	             (* and type P.T.labexp = TS.S.P.T.labexp *)
++                     and type P.T.mlrisc = TS.S.P.T.mlrisc
++                     and type P.T.oper = TS.S.P.T.oper
++                     and type P.T.rep = TS.S.P.T.rep
++                     and type P.T.rexp = TS.S.P.T.rexp
++                     and type P.T.stm = TS.S.P.T.stm
++
+    (* 
+     * The reducer is given to the client during the compilation of
+     * the user extensions.
+@@ -34,11 +79,54 @@
+ sig
+    structure TS : MLTREE_STREAM
+    structure I : INSTRUCTIONS 
+-   structure CFG : CONTROL_FLOW_GRAPH 
+-      		where I = I
+-		  and P = TS.S.P
+-   structure Gen : MLTREEGEN 
+-   		where T = TS.T
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = I and P = TS.S.P *)
++                   where type I.addressing_mode = I.addressing_mode
++                     and type I.ea = I.ea
++                     and type I.instr = I.instr
++                     and type I.instruction = I.instruction
++                     and type I.operand = I.operand
++                   where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                     and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                     and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                     and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                     and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                     and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                     and type P.T.Constant.const = TS.S.P.T.Constant.const
++                     and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                     and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                     and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                     and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                     and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                     and type P.T.Region.region = TS.S.P.T.Region.region
++                     and type P.T.ccexp = TS.S.P.T.ccexp
++                     and type P.T.fexp = TS.S.P.T.fexp
++                     (* and type P.T.labexp = TS.S.P.T.labexp *)
++                     and type P.T.mlrisc = TS.S.P.T.mlrisc
++                     and type P.T.oper = TS.S.P.T.oper
++                     and type P.T.rep = TS.S.P.T.rep
++                     and type P.T.rexp = TS.S.P.T.rexp
++                     and type P.T.stm = TS.S.P.T.stm
++   structure Gen : MLTREEGEN (* where T = TS.T *)
++                   where type T.Basis.cond = TS.T.Basis.cond
++                     and type T.Basis.div_rounding_mode = TS.T.Basis.div_rounding_mode
++                     and type T.Basis.ext = TS.T.Basis.ext
++                     and type T.Basis.fcond = TS.T.Basis.fcond
++                     and type T.Basis.rounding_mode = TS.T.Basis.rounding_mode
++                     and type T.Constant.const = TS.T.Constant.const
++                     and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) TS.T.Extension.ccx
++                     and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) TS.T.Extension.fx
++                     and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) TS.T.Extension.rx
++                     and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) TS.T.Extension.sx
++                     and type T.I.div_rounding_mode = TS.T.I.div_rounding_mode
++                     and type T.Region.region = TS.T.Region.region
++                     and type T.ccexp = TS.T.ccexp
++                     and type T.fexp = TS.T.fexp
++                     (* and type T.labexp = TS.T.labexp *)
++                     and type T.mlrisc = TS.T.mlrisc
++                     and type T.oper = TS.T.oper
++                     and type T.rep = TS.T.rep
++                     and type T.rexp = TS.T.rexp
++                     and type T.stm = TS.T.stm
+ 
+    type instrStream = (I.instruction, I.C.cellset, CFG.cfg) TS.stream  
+    type mltreeStream = (TS.T.stm, TS.T.mlrisc list, CFG.cfg) TS.stream 
+diff -Naur MLRISC/mltree/mltree-gen.sig MLRISC-mlton/mltree/mltree-gen.sig
+--- MLRISC/mltree/mltree-gen.sig	2001-09-19 15:31:18.000000000 -0400
++++ MLRISC-mlton/mltree/mltree-gen.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -9,8 +9,27 @@
+ sig
+ 
+    structure T : MLTREE
+-   structure Size : MLTREE_SIZE
+-   	where T = T
++   structure Size : MLTREE_SIZE (* where T = T *)
++                    where type T.Basis.cond = T.Basis.cond
++                      and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                      and type T.Basis.ext = T.Basis.ext
++                      and type T.Basis.fcond = T.Basis.fcond
++                      and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                      and type T.Constant.const = T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                      and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                      and type T.Region.region = T.Region.region
++                      and type T.ccexp = T.ccexp
++                      and type T.fexp = T.fexp
++                      (* and type T.labexp = T.labexp *)
++                      and type T.mlrisc = T.mlrisc
++                      and type T.oper = T.oper
++                      and type T.rep = T.rep
++                      and type T.rexp = T.rexp
++                      and type T.stm = T.stm
+ 
+    val condOf : T.ccexp -> T.Basis.cond
+    val fcondOf : T.ccexp -> T.Basis.fcond
+diff -Naur MLRISC/mltree/mltree-mult.sig MLRISC-mlton/mltree/mltree-mult.sig
+--- MLRISC/mltree/mltree-mult.sig	2001-09-19 15:31:18.000000000 -0400
++++ MLRISC-mlton/mltree/mltree-mult.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,7 @@
+ 
+    structure T : MLTREE
+    structure C : CELLS 
+-   structure I : INSTRUCTIONS where C=C
++   structure I : INSTRUCTIONS (* where C = C *)
+ 
+    exception TooComplex
+ 
+diff -Naur MLRISC/mltree/mltree-mult.sml MLRISC-mlton/mltree/mltree-mult.sml
+--- MLRISC/mltree/mltree-mult.sml	2003-08-28 17:58:47.000000000 -0400
++++ MLRISC-mlton/mltree/mltree-mult.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+   (structure I : INSTRUCTIONS
+    structure T : MLTREE
+ 
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    val intTy : int (* width of integer type *)
+ 
+    type argi = {r:CB.cell, i:int, d:CB.cell}
+@@ -20,8 +29,8 @@
+    val slli  : argi -> I.instruction list
+    val srli  : argi -> I.instruction list
+    val srai  : argi -> I.instruction list
+-  )
+-  (val trapping : bool (* trap on overflow? *)
++  
++   val trapping : bool (* trap on overflow? *)
+    val multCost : int ref  (* cost of multiplication *)
+ 
+        (* basic ops; these have to implemented by the architecture *)
+@@ -37,8 +46,8 @@
+    val sh1addv  : (arg -> I.instruction list) option (* a*2 + b *)
+    val sh2addv  : (arg -> I.instruction list) option (* a*4 + b *)  
+    val sh3addv  : (arg -> I.instruction list) option (* a*8 + b *)
+-  )  
+-  (val signed   : bool (* signed? *)
++    
++   val signed   : bool (* signed? *)
+   ) : MLTREE_MULT_DIV =
+ struct
+    structure T = T 
+diff -Naur MLRISC/mltree/mltree.sig MLRISC-mlton/mltree/mltree.sig
+--- MLRISC/mltree/mltree.sig	2002-03-29 14:09:46.000000000 -0500
++++ MLRISC-mlton/mltree/mltree.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -30,6 +30,10 @@
+    * extension type.  Unfortunately, this has to be made polymorphic to make
+    * it possible for recursive type definitions to work.
+    *)
++  type controlflow = Label.label list (* control flow info *)
++  type ctrl   = var                   (* control dependence info *)
++  type ctrls  = ctrl list
++
+   datatype stm =
+       (* assignment *)
+       MV      of ty * dst * rexp
+@@ -70,7 +74,7 @@
+     | DEFINE of Label.label   (* define local label *)
+ 
+     | ANNOTATION of stm * an
+-    | EXT of sext  (* extension *)
++    | EXT of (stm, rexp, fexp, ccexp) Extension.sx  (* extension *)
+ 
+       (* synthetic instructions to indicated that the regs are live or
+        * killed at this program point. The spilled list must always
+@@ -152,7 +156,7 @@
+ 
+     | LET of stm * rexp
+ 
+-    | REXT of ty * rext
++    | REXT of ty * (stm, rexp, fexp, ccexp) Extension.rx
+ 
+     | MARK of rexp * an
+ 
+@@ -187,7 +191,7 @@
+ 
+     | FPRED of fexp * ctrl
+ 
+-    | FEXT of fty * fext
++    | FEXT of fty * (stm, rexp, fexp, ccexp) Extension.fx
+ 
+     | FMARK of fexp * an
+ 
+@@ -204,21 +208,18 @@
+     | CMP    of ty * Basis.cond * rexp * rexp
+     | FCMP   of fty * Basis.fcond * fexp * fexp
+     | CCMARK of ccexp * an
+-    | CCEXT  of ty * ccext
++    | CCEXT  of ty * (stm, rexp, fexp, ccexp) Extension.ccx
+ 
+   and mlrisc =
+       CCR of ccexp
+     | GPR of rexp
+     | FPR of fexp
+ 
+-  withtype controlflow = Label.label list (* control flow info *)
+-       and ctrl   = var                   (* control dependence info *)
+-       and ctrls  = ctrl list
+-       and sext   = (stm, rexp, fexp, ccexp) Extension.sx
+-       and rext   = (stm, rexp, fexp, ccexp) Extension.rx
+-       and fext   = (stm, rexp, fexp, ccexp) Extension.fx
+-       and ccext  = (stm, rexp, fexp, ccexp) Extension.ccx
+-       and labexp = rexp
++  type sext   = (stm, rexp, fexp, ccexp) Extension.sx
++   and rext   = (stm, rexp, fexp, ccexp) Extension.rx
++   and fext   = (stm, rexp, fexp, ccexp) Extension.fx
++   and ccext  = (stm, rexp, fexp, ccexp) Extension.ccx
++   and labexp = rexp
+   (*
+    * Useful type abbreviations for working for MLTree.
+    *)
+diff -Naur MLRISC/mltree/mltree-simplify.in MLRISC-mlton/mltree/mltree-simplify.in
+--- MLRISC/mltree/mltree-simplify.in	2002-03-29 14:09:45.000000000 -0500
++++ MLRISC-mlton/mltree/mltree-simplify.in	2006-03-04 11:14:21.000000000 -0500
+@@ -14,8 +14,27 @@
+ 
+ functor MLTreeSimplifier
+   (structure T    : MLTREE
+-   structure Size : MLTREE_SIZE
+-      where T = T
++   structure Size : MLTREE_SIZE (* where T = T *)
++                    where type T.Basis.cond = T.Basis.cond
++                      and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                      and type T.Basis.ext = T.Basis.ext
++                      and type T.Basis.fcond = T.Basis.fcond
++                      and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                      and type T.Constant.const = T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                      and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                      and type T.Region.region = T.Region.region
++                      and type T.ccexp = T.ccexp
++                      and type T.fexp = T.fexp
++                      (* and type T.labexp = T.labexp *)
++                      and type T.mlrisc = T.mlrisc
++                      and type T.oper = T.oper
++                      and type T.rep = T.rep
++                      and type T.rexp = T.rexp
++                      and type T.stm = T.stm
+    (* Extension *)
+    val sext : T.rewriter -> T.sext -> T.sext
+    val rext : T.rewriter -> T.rext -> T.rext
+diff -Naur MLRISC/mltree/mltree-simplify.sml MLRISC-mlton/mltree/mltree-simplify.sml
+--- MLRISC/mltree/mltree-simplify.sml	2002-03-29 14:09:45.000000000 -0500
++++ MLRISC-mlton/mltree/mltree-simplify.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -9,7 +9,27 @@
+                          structure T : MLTREE
+ 
+ (*#line 17.4 "mltree-simplify.in"*)
+-                         structure Size : MLTREE_SIZE where T=T
++                         structure Size : MLTREE_SIZE (* where T=T *)
++                                          where type T.Basis.cond = T.Basis.cond
++                                            and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                                            and type T.Basis.ext = T.Basis.ext
++                                            and type T.Basis.fcond = T.Basis.fcond
++                                            and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                                            and type T.Constant.const = T.Constant.const
++                                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                                            and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                                            and type T.Region.region = T.Region.region
++                                            and type T.ccexp = T.ccexp
++                                            and type T.fexp = T.fexp
++                                            (* and type T.labexp = T.labexp *)
++                                            and type T.mlrisc = T.mlrisc
++                                            and type T.oper = T.oper
++                                            and type T.rep = T.rep
++                                            and type T.rexp = T.rexp
++                                            and type T.stm = T.stm
+ 
+ (*#line 20.4 "mltree-simplify.in"*)
+                          val sext : T.rewriter -> T.sext -> T.sext
+diff -Naur MLRISC/mltree/mltree.sml MLRISC-mlton/mltree/mltree.sml
+--- MLRISC/mltree/mltree.sml	2003-09-17 17:28:39.000000000 -0400
++++ MLRISC-mlton/mltree/mltree.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -32,6 +32,10 @@
+    * extension type.  Unfortunately, this has to be made polymorphic to make
+    * it possible for recursive type definitions to work.
+    *)
++  type controlflow = Label.label list (* control flow info *)
++  type ctrl   = var                   (* control dependence info *)
++  type ctrls  = ctrl list
++
+   datatype stm =
+       (* assignment *)
+       MV      of ty * dst * rexp
+@@ -199,10 +203,7 @@
+     | GPR of rexp
+     | FPR of fexp
+ 
+-  withtype controlflow = Label.label list (* control flow info *)
+-       and ctrl   = var                   (* control dependence info *)
+-       and ctrls  = ctrl list
+-       and sext   = (stm, rexp, fexp, ccexp) Extension.sx
++  withtype sext   = (stm, rexp, fexp, ccexp) Extension.sx
+        and rext   = (stm, rexp, fexp, ccexp) Extension.rx
+        and fext   = (stm, rexp, fexp, ccexp) Extension.fx
+        and ccext  = (stm, rexp, fexp, ccexp) Extension.ccx
+diff -Naur MLRISC/mltree/mltree-utils.sml MLRISC-mlton/mltree/mltree-utils.sml
+--- MLRISC/mltree/mltree-utils.sml	2004-11-20 09:01:42.000000000 -0500
++++ MLRISC-mlton/mltree/mltree-utils.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -518,9 +518,10 @@
+ 
+       and oper(T.OPER{name,...}) = name 
+ 
+-      and parenRexp
+-            (e as (T.REG _ | T.LI _ | T.$ _ | T.ARG _)) = 
+-              rexp e
++      and parenRexp (e as T.REG _) = rexp e
++        | parenRexp (e as T.LI _) = rexp e
++        | parenRexp (e as T.$ _) = rexp e
++        | parenRexp (e as T.ARG _) = rexp e
+         | parenRexp e = "("^rexp e^")"
+ 
+       and slices sc = listify' (fn (from,to) => i2s from^".."^i2s to) sc
+diff -Naur MLRISC/omit-frameptr/omit-frame-pointer.sig MLRISC-mlton/omit-frameptr/omit-frame-pointer.sig
+--- MLRISC/omit-frameptr/omit-frame-pointer.sig	2001-09-19 15:31:18.000000000 -0400
++++ MLRISC-mlton/omit-frameptr/omit-frame-pointer.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -2,7 +2,12 @@
+ 
+ signature OMIT_FRAME_POINTER = sig
+   structure I : INSTRUCTIONS
+-  structure CFG : CONTROL_FLOW_GRAPH where I = I
++  structure CFG : CONTROL_FLOW_GRAPH (* where I = I *)
++                  where type I.addressing_mode = I.addressing_mode
++                    and type I.ea = I.ea
++                    and type I.instr = I.instr
++                    and type I.instruction = I.instruction
++                    and type I.operand = I.operand
+   
+   (* idelta is the intial displacement between the fp and sp. *)
+   val omitframeptr : {vfp:CellsBasis.cell, idelta:Int32.int option, cfg:CFG.cfg} -> unit
+diff -Naur MLRISC/ppc/backpatch/ppcDelaySlots.sml MLRISC-mlton/ppc/backpatch/ppcDelaySlots.sml
+--- MLRISC/ppc/backpatch/ppcDelaySlots.sml	2000-12-07 23:11:36.000000000 -0500
++++ MLRISC-mlton/ppc/backpatch/ppcDelaySlots.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,8 +5,12 @@
+ 
+ 
+ functor PPCDelaySlots(structure I : PPCINSTR
+-                      structure P : INSN_PROPERTIES
+-                         where I = I
++                      structure P : INSN_PROPERTIES (* where I = I *)
++                                    where type I.addressing_mode = I.addressing_mode
++                                      and type I.ea = I.ea
++                                      and type I.instr = I.instr
++                                      and type I.instruction = I.instruction
++                                      and type I.operand = I.operand
+                      ) : DELAY_SLOT_PROPERTIES =
+ struct
+    structure I = I
+diff -Naur MLRISC/ppc/backpatch/ppcJumps.sml MLRISC-mlton/ppc/backpatch/ppcJumps.sml
+--- MLRISC/ppc/backpatch/ppcJumps.sml	2004-09-24 17:21:31.000000000 -0400
++++ MLRISC-mlton/ppc/backpatch/ppcJumps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,7 +1,70 @@
+ functor PPCJumps 
+   (structure Instr: PPCINSTR
+-   structure Shuffle : PPCSHUFFLE where I = Instr
+-   structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++   structure Shuffle : PPCSHUFFLE (* where I = Instr *)
++                       where type I.Constant.const = Instr.Constant.const
++                         and type I.Region.region = Instr.Region.region
++                         and type I.T.Basis.cond = Instr.T.Basis.cond
++                         and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                         and type I.T.Basis.ext = Instr.T.Basis.ext
++                         and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                         and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                         and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                         and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                         and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                         and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                         and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                         and type I.T.ccexp = Instr.T.ccexp
++                         and type I.T.fexp = Instr.T.fexp
++                         (* and type I.T.labexp = Instr.T.labexp *)
++                         and type I.T.mlrisc = Instr.T.mlrisc
++                         and type I.T.oper = Instr.T.oper
++                         and type I.T.rep = Instr.T.rep
++                         and type I.T.rexp = Instr.T.rexp
++                         and type I.T.stm = Instr.T.stm
++                         and type I.arith = Instr.arith
++                         and type I.arithi = Instr.arithi
++                         and type I.bit = Instr.bit
++                         and type I.bo = Instr.bo
++                         and type I.ccarith = Instr.ccarith
++                         and type I.cmp = Instr.cmp
++                         and type I.ea = Instr.ea
++                         and type I.farith = Instr.farith
++                         and type I.farith3 = Instr.farith3
++                         and type I.fcmp = Instr.fcmp
++                         and type I.fload = Instr.fload
++                         and type I.fstore = Instr.fstore
++                         and type I.funary = Instr.funary
++                         and type I.instr = Instr.instr
++                         and type I.instruction = Instr.instruction
++                         and type I.load = Instr.load
++                         and type I.operand = Instr.operand
++                         and type I.rotate = Instr.rotate
++                         and type I.rotatei = Instr.rotatei
++                         and type I.spr = Instr.spr
++                         and type I.store = Instr.store
++                         and type I.unary = Instr.unary
++                         and type I.xerbit = Instr.xerbit
++   structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
+   ) : SDI_JUMPS = 
+ struct
+   structure I = Instr
+@@ -68,22 +131,35 @@
+ 	  | operand _ = error "sdiSize:operand"
+       in
+ 	case instr
+-	of I.L{ld=(I.LBZ | I.LHZ | I.LHA | I.LWZ),d,...} => 
+-	      operand(d, signed16, 4, 8)
++	of I.L{ld=I.LBZ,d,...} => operand(d, signed16, 4, 8)
++	 | I.L{ld=I.LHZ,d,...} => operand(d, signed16, 4, 8)
++	 | I.L{ld=I.LHA,d,...} => operand(d, signed16, 4, 8)
++	 | I.L{ld=I.LWZ,d,...} => operand(d, signed16, 4, 8)
+ 	 | I.L{d,...} => operand(d, signed12, 4, 8)
+-	 | I.LF{ld=(I.LFS | I.LFD), d, ...} => operand(d, signed16, 4, 8)
++	 | I.LF{ld=I.LFS, d, ...} => operand(d, signed16, 4, 8)
++	 | I.LF{ld=I.LFD, d, ...} => operand(d, signed16, 4, 8)
+ 	 | I.LF{d, ...} => operand(d, signed12, 4, 8)
+-	 | I.ST{st=(I.STB | I.STH | I.STW), d, ...} => operand(d, signed16, 4, 8)
++	 | I.ST{st=I.STB, d, ...} => operand(d, signed16, 4, 8)
++	 | I.ST{st=I.STH, d, ...} => operand(d, signed16, 4, 8)
++	 | I.ST{st=I.STW, d, ...} => operand(d, signed16, 4, 8)
+ 	 | I.ST{d, ...} => operand(d, signed12, 4, 8)
+-	 | I.STF{st=(I.STFS | I.STFD), d, ...} => operand(d, signed16, 4, 8)
++	 | I.STF{st=I.STFS, d, ...} => operand(d, signed16, 4, 8)
++	 | I.STF{st=I.STFD, d, ...} => operand(d, signed16, 4, 8)
+ 	 | I.STF{d, ...} => operand(d, signed12, 4, 8)
+ 	 | I.ARITHI{oper, im, ...} => 
+ 	   (case oper
+ 	    of I.ADDI => operand(im, signed16, 4, 8)
+-	     | (I.ADDIS | I.SUBFIC | I.MULLI) => operand(im, signed16, 4, 12)
+-	     | (I.ANDI_Rc | I.ANDIS_Rc | I.ORI | I.ORIS | I.XORI | I.XORIS) => 
+-		   operand(im, unsigned16, 4, 12)
+-	     | (I.SRAWI | I.SRADI) => operand(im, unsigned5, 4, 12)
++	     | I.ADDIS => operand(im, signed16, 4, 12)
++	     | I.SUBFIC => operand(im, signed16, 4, 12)
++	     | I.MULLI => operand(im, signed16, 4, 12)
++	     | I.ANDI_Rc => operand(im, unsigned16, 4, 12)
++	     | I.ANDIS_Rc => operand(im, unsigned16, 4, 12)
++	     | I.ORI => operand(im, unsigned16, 4, 12)
++	     | I.ORIS => operand(im, unsigned16, 4, 12)
++	     | I.XORI => operand(im, unsigned16, 4, 12)
++	     | I.XORIS => operand(im, unsigned16, 4, 12)
++	     | I.SRAWI => operand(im, unsigned5, 4, 12)
++	     | I.SRADI => operand(im, unsigned5, 4, 12)
+ 	    (*esac*))
+ 	 | I.ROTATEI{sh, ...} => error "sdiSize:ROTATE"
+ 	 | I.COMPARE{cmp, rb, ...} => 
+diff -Naur MLRISC/ppc/c-calls/ppc-macosx.sml MLRISC-mlton/ppc/c-calls/ppc-macosx.sml
+--- MLRISC/ppc/c-calls/ppc-macosx.sml	2005-02-11 12:30:17.000000000 -0500
++++ MLRISC-mlton/ppc/c-calls/ppc-macosx.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -277,7 +277,9 @@
+ 		      assignFPR (tys, offset, availGPRs, availFPRs, layout)
+ 		  | CTy.C_long_double =>
+ 		      assignFPR (tys, offset, availGPRs, availFPRs, layout)
+-		  | (CTy.C_unsigned isz | CTy.C_signed isz) =>
++		  | CTy.C_unsigned isz =>
++		      assignGPR([sizeOfInt isz], tys, offset, availGPRs, availFPRs, layout)
++		  | CTy.C_signed isz =>
+ 		      assignGPR([sizeOfInt isz], tys, offset, availGPRs, availFPRs, layout)
+ 		  | CTy.C_PTR =>
+ 		      assignGPR([sizeOfPtr], tys, offset, availGPRs, availFPRs, layout)
+@@ -464,7 +466,8 @@
+ 	  in
+ 	  (* check calling convention *)
+ 	    case conv
+-	     of ("" | "ccall") => ()
++	     of ("") => ()
++	      | ("ccall") => ()
+ 	      | _ => error (concat [
+ 		    "unknown calling convention \"",
+ 		    String.toString conv, "\""
+diff -Naur MLRISC/ppc/emit/ppcAsm.sml MLRISC-mlton/ppc/emit/ppcAsm.sml
+--- MLRISC/ppc/emit/ppcAsm.sml	2004-08-05 18:19:44.000000000 -0400
++++ MLRISC-mlton/ppc/emit/ppcAsm.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,12 +6,92 @@
+ 
+ 
+ functor PPCAsmEmitter(structure S : INSTRUCTION_STREAM
+-                      structure Instr : PPCINSTR
+-                         where T = S.P.T
+-                      structure Shuffle : PPCSHUFFLE
+-                         where I = Instr
+-                      structure MLTreeEval : MLTREE_EVAL
+-                         where T = Instr.T
++                      structure Instr : PPCINSTR (* where T = S.P.T *)
++                                        where type T.Basis.cond = S.P.T.Basis.cond
++                                          and type T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++                                          and type T.Basis.ext = S.P.T.Basis.ext
++                                          and type T.Basis.fcond = S.P.T.Basis.fcond
++                                          and type T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++                                          and type T.Constant.const = S.P.T.Constant.const
++                                          and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++                                          and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++                                          and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++                                          and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++                                          and type T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++                                          and type T.Region.region = S.P.T.Region.region
++                                          and type T.ccexp = S.P.T.ccexp
++                                          and type T.fexp = S.P.T.fexp
++                                          (* and type T.labexp = S.P.T.labexp *)
++                                          and type T.mlrisc = S.P.T.mlrisc
++                                          and type T.oper = S.P.T.oper
++                                          and type T.rep = S.P.T.rep
++                                          and type T.rexp = S.P.T.rexp
++                                          and type T.stm = S.P.T.stm
++                      structure Shuffle : PPCSHUFFLE (* where I = Instr *)
++                                          where type I.Constant.const = Instr.Constant.const
++                                            and type I.Region.region = Instr.Region.region
++                                            and type I.T.Basis.cond = Instr.T.Basis.cond
++                                            and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                            and type I.T.Basis.ext = Instr.T.Basis.ext
++                                            and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                            and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                            and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                            and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                            and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                            and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                            and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                            and type I.T.ccexp = Instr.T.ccexp
++                                            and type I.T.fexp = Instr.T.fexp
++                                            (* and type I.T.labexp = Instr.T.labexp *)
++                                            and type I.T.mlrisc = Instr.T.mlrisc
++                                            and type I.T.oper = Instr.T.oper
++                                            and type I.T.rep = Instr.T.rep
++                                            and type I.T.rexp = Instr.T.rexp
++                                            and type I.T.stm = Instr.T.stm
++                                            and type I.arith = Instr.arith
++                                            and type I.arithi = Instr.arithi
++                                            and type I.bit = Instr.bit
++                                            and type I.bo = Instr.bo
++                                            and type I.ccarith = Instr.ccarith
++                                            and type I.cmp = Instr.cmp
++                                            and type I.ea = Instr.ea
++                                            and type I.farith = Instr.farith
++                                            and type I.farith3 = Instr.farith3
++                                            and type I.fcmp = Instr.fcmp
++                                            and type I.fload = Instr.fload
++                                            and type I.fstore = Instr.fstore
++                                            and type I.funary = Instr.funary
++                                            and type I.instr = Instr.instr
++                                            and type I.instruction = Instr.instruction
++                                            and type I.load = Instr.load
++                                            and type I.operand = Instr.operand
++                                            and type I.rotate = Instr.rotate
++                                            and type I.rotatei = Instr.rotatei
++                                            and type I.spr = Instr.spr
++                                            and type I.store = Instr.store
++                                            and type I.unary = Instr.unary
++                                            and type I.xerbit = Instr.xerbit
++                      structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                             where type T.Basis.cond = Instr.T.Basis.cond
++                                               and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                               and type T.Basis.ext = Instr.T.Basis.ext
++                                               and type T.Basis.fcond = Instr.T.Basis.fcond
++                                               and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                               and type T.Constant.const = Instr.T.Constant.const
++                                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                               and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                               and type T.Region.region = Instr.T.Region.region
++                                               and type T.ccexp = Instr.T.ccexp
++                                               and type T.fexp = Instr.T.fexp
++                                               (* and type T.labexp = Instr.T.labexp *)
++                                               and type T.mlrisc = Instr.T.mlrisc
++                                               and type T.oper = Instr.T.oper
++                                               and type T.rep = Instr.T.rep
++                                               and type T.rexp = Instr.T.rexp
++                                               and type T.stm = Instr.T.stm
+                      ) : INSTRUCTION_EMITTER =
+ struct
+    structure I  = Instr
+diff -Naur MLRISC/ppc/emit/ppcMC.sml MLRISC-mlton/ppc/emit/ppcMC.sml
+--- MLRISC/ppc/emit/ppcMC.sml	2004-08-05 18:19:44.000000000 -0400
++++ MLRISC-mlton/ppc/emit/ppcMC.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,7 +6,27 @@
+ 
+ 
+ functor PPCMCEmitter(structure Instr : PPCINSTR
+-                     structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++                     structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                            where type T.Basis.cond = Instr.T.Basis.cond
++                                              and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                              and type T.Basis.ext = Instr.T.Basis.ext
++                                              and type T.Basis.fcond = Instr.T.Basis.fcond
++                                              and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                              and type T.Constant.const = Instr.T.Constant.const
++                                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                              and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                              and type T.Region.region = Instr.T.Region.region
++                                              and type T.ccexp = Instr.T.ccexp
++                                              and type T.fexp = Instr.T.fexp
++                                              (* and type T.labexp = Instr.T.labexp *)
++                                              and type T.mlrisc = Instr.T.mlrisc
++                                              and type T.oper = Instr.T.oper
++                                              and type T.rep = Instr.T.rep
++                                              and type T.rexp = Instr.T.rexp
++                                              and type T.stm = Instr.T.stm
+                      structure Stream : INSTRUCTION_STREAM 
+                      structure CodeString : CODE_STRING
+                     ) : INSTRUCTION_EMITTER =
+@@ -47,6 +67,7 @@
+        (* note: fromLargeWord strips the high order bits! *)
+        fun eByteW w =
+        let val i = !loc
++           val w = W.toLargeWord w
+        in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
+    
+        fun doNothing _ = ()
+@@ -380,14 +401,24 @@
+        end
+    and arith {oper, rt, ra, rb, OE, Rc} = 
+        (case oper of
+-         (I.ADD | I.SUBF | I.MULLW | I.MULLD | I.MULHW | I.MULHWU | I.DIVW | I.DIVD | I.DIVWU | I.DIVDU) => 
+-            arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++         I.ADD => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.SUBF => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.MULLW => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.MULLD => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.MULHW => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.MULHWU => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.DIVW => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.DIVD => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.DIVWU => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
++       | I.DIVDU => arith' {oper=oper, rt=rt, ra=ra, rb=rb, OE=OE, Rc=Rc}
+        | _ => arith' {oper=oper, rt=ra, ra=rt, rb=rb, OE=OE, Rc=Rc}
+        )
+    and arithi {oper, rt, ra, im} = 
+        (case oper of
+-         (I.ADDI | I.ADDIS | I.SUBFIC | I.MULLI) => arithi' {oper=oper, rt=rt, 
+-            ra=ra, im=im}
++         I.ADDI => arithi' {oper=oper, rt=rt, ra=ra, im=im}
++       | I.ADDIS => arithi' {oper=oper, rt=rt, ra=ra, im=im}
++       | I.SUBFIC => arithi' {oper=oper, rt=rt, ra=ra, im=im}
++       | I.MULLI => arithi' {oper=oper, rt=rt, ra=ra, im=im}
+        | I.SRAWI => srawi {rs=ra, ra=rt, sh=im}
+        | I.SRADI => sradi {rs=ra, ra=rt, sh=im}
+        | _ => arithi' {oper=oper, rt=ra, ra=rt, im=im}
+@@ -462,8 +493,8 @@
+               val (opcd, xo) = emit_farith oper
+           in 
+              (case oper of
+-               (I.FMUL | I.FMULS) => a_form {opcd=opcd, frt=ft, fra=fa, frb=0wx0, 
+-                  frc=fb, xo=xo, rc=Rc}
++               I.FMUL => a_form {opcd=opcd, frt=ft, fra=fa, frb=0wx0, frc=fb, xo=xo, rc=Rc}
++             | I.FMULS => a_form {opcd=opcd, frt=ft, fra=fa, frb=0wx0, frc=fb, xo=xo, rc=Rc}
+              | _ => a_form {opcd=opcd, frt=ft, fra=fa, frb=fb, frc=0wx0, xo=xo, 
+                   rc=Rc}
+              )
+diff -Naur MLRISC/ppc/flowgraph/ppcDarwinPseudoOps.sml MLRISC-mlton/ppc/flowgraph/ppcDarwinPseudoOps.sml
+--- MLRISC/ppc/flowgraph/ppcDarwinPseudoOps.sml	2003-05-22 18:46:21.000000000 -0400
++++ MLRISC-mlton/ppc/flowgraph/ppcDarwinPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,7 +7,27 @@
+ 
+ functor PPCDarwinPseudoOps (
+     structure T : MLTREE
+-    structure MLTreeEval : MLTREE_EVAL  where T = T
++    structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                           where type T.Basis.cond = T.Basis.cond
++                             and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                             and type T.Basis.ext = T.Basis.ext
++                             and type T.Basis.fcond = T.Basis.fcond
++                             and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                             and type T.Constant.const = T.Constant.const
++                             and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                             and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                             and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                             and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                             and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                             and type T.Region.region = T.Region.region
++                             and type T.ccexp = T.ccexp
++                             and type T.fexp = T.fexp
++                             (* and type T.labexp = T.labexp *)
++                             and type T.mlrisc = T.mlrisc
++                             and type T.oper = T.oper
++                             and type T.rep = T.rep
++                             and type T.rexp = T.rexp
++                             and type T.stm = T.stm
+   ) : PSEUDO_OPS_BASIS = struct
+ 
+     structure T = T
+diff -Naur MLRISC/ppc/flowgraph/ppcGasPseudoOps.sml MLRISC-mlton/ppc/flowgraph/ppcGasPseudoOps.sml
+--- MLRISC/ppc/flowgraph/ppcGasPseudoOps.sml	2001-11-21 13:43:31.000000000 -0500
++++ MLRISC-mlton/ppc/flowgraph/ppcGasPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,7 +1,27 @@
+ functor PPCGasPseudoOps 
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL  where T = T
+-    ) : PSEUDO_OPS_BASIS = 
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
++      ) : PSEUDO_OPS_BASIS = 
+ 
+ struct
+   structure T = T
+diff -Naur MLRISC/ppc/instructions/ppcCompInstrExt.sml MLRISC-mlton/ppc/instructions/ppcCompInstrExt.sml
+--- MLRISC/ppc/instructions/ppcCompInstrExt.sml	2004-08-06 16:38:57.000000000 -0400
++++ MLRISC-mlton/ppc/instructions/ppcCompInstrExt.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -9,11 +9,54 @@
+ signature PPCCOMP_INSTR_EXT =
+   sig
+     structure I : PPCINSTR
+-    structure TS : MLTREE_STREAM
+-      where T = I.T
+-    structure CFG : CONTROL_FLOW_GRAPH 
+-      where I = I
+-	and P = TS.S.P
++    structure TS : MLTREE_STREAM (* where T = I.T *)
++                   where type T.Basis.cond = I.T.Basis.cond
++                     and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                     and type T.Basis.ext = I.T.Basis.ext
++                     and type T.Basis.fcond = I.T.Basis.fcond
++                     and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                     and type T.Constant.const = I.T.Constant.const
++                     and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                     and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                     and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                     and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                     and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                     and type T.Region.region = I.T.Region.region
++                     and type T.ccexp = I.T.ccexp
++                     and type T.fexp = I.T.fexp
++                     (* and type T.labexp = I.T.labexp *)
++                     and type T.mlrisc = I.T.mlrisc
++                     and type T.oper = I.T.oper
++                     and type T.rep = I.T.rep
++                     and type T.rexp = I.T.rexp
++                     and type T.stm = I.T.stm
++    structure CFG : CONTROL_FLOW_GRAPH  (* where I = I and  and P = TS.S.P *)
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
++                    where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                      and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                      and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                      and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                      and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                      and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                      and type P.T.Constant.const = TS.S.P.T.Constant.const
++                      and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                      and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                      and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                      and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                      and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                      and type P.T.Region.region = TS.S.P.T.Region.region
++                      and type P.T.ccexp = TS.S.P.T.ccexp
++                      and type P.T.fexp = TS.S.P.T.fexp
++                      (* and type P.T.labexp = TS.S.P.T.labexp *)
++                      and type P.T.mlrisc = TS.S.P.T.mlrisc
++                      and type P.T.oper = TS.S.P.T.oper
++                      and type P.T.rep = TS.S.P.T.rep
++                      and type P.T.rexp = TS.S.P.T.rexp
++                      and type P.T.stm = TS.S.P.T.stm
+ 
+     type reducer = 
+       (I.instruction, I.C.cellset, I.operand, I.addressing_mode, CFG.cfg) TS.reducer
+@@ -28,12 +71,54 @@
+ functor PPCCompInstrExt (
+ 
+     structure I : PPCINSTR
+-    structure TS  : MLTREE_STREAM
+-      where T = I.T
+-    structure CFG : CONTROL_FLOW_GRAPH 
+-      where P = TS.S.P
+-	and I = I
+-
++    structure TS  : MLTREE_STREAM (* where T = I.T *)
++                    where type T.Basis.cond = I.T.Basis.cond
++                      and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                      and type T.Basis.ext = I.T.Basis.ext
++                      and type T.Basis.fcond = I.T.Basis.fcond
++                      and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                      and type T.Constant.const = I.T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                      and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                      and type T.Region.region = I.T.Region.region
++                      and type T.ccexp = I.T.ccexp
++                      and type T.fexp = I.T.fexp
++                      (* and type T.labexp = I.T.labexp *)
++                      and type T.mlrisc = I.T.mlrisc
++                      and type T.oper = I.T.oper
++                      and type T.rep = I.T.rep
++                      and type T.rexp = I.T.rexp
++                      and type T.stm = I.T.stm
++    structure CFG : CONTROL_FLOW_GRAPH (* where P = TS.S.P and I = I *)
++                    where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                      and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                      and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                      and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                      and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                      and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                      and type P.T.Constant.const = TS.S.P.T.Constant.const
++                      and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                      and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                      and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                      and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                      and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                      and type P.T.Region.region = TS.S.P.T.Region.region
++                      and type P.T.ccexp = TS.S.P.T.ccexp
++                      and type P.T.fexp = TS.S.P.T.fexp
++                      (* and type P.T.labexp = TS.S.P.T.labexp *)
++                      and type P.T.mlrisc = TS.S.P.T.mlrisc
++                      and type P.T.oper = TS.S.P.T.oper
++                      and type P.T.rep = TS.S.P.T.rep
++                      and type P.T.rexp = TS.S.P.T.rexp
++                      and type P.T.stm = TS.S.P.T.stm
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
+   ) : PPCCOMP_INSTR_EXT =  struct
+ 
+     structure CFG = CFG
+diff -Naur MLRISC/ppc/instructions/ppcInstr.sml MLRISC-mlton/ppc/instructions/ppcInstr.sml
+--- MLRISC/ppc/instructions/ppcInstr.sml	2004-07-14 14:38:08.000000000 -0400
++++ MLRISC-mlton/ppc/instructions/ppcInstr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature PPCINSTR =
+ sig
+    structure C : PPCCELLS
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    structure T : MLTREE
+    structure Constant: CONSTANT
+    structure Region : REGION
+diff -Naur MLRISC/ppc/instructions/ppcProps.sml MLRISC-mlton/ppc/instructions/ppcProps.sml
+--- MLRISC/ppc/instructions/ppcProps.sml	2004-07-13 15:05:29.000000000 -0400
++++ MLRISC-mlton/ppc/instructions/ppcProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,8 +5,48 @@
+ 
+ functor PPCProps
+    ( structure PPCInstr : PPCINSTR
+-     structure MLTreeEval : MLTREE_EVAL where T = PPCInstr.T
+-     structure MLTreeHash : MLTREE_HASH where T = PPCInstr.T
++     structure MLTreeEval : MLTREE_EVAL (* where T = PPCInstr.T *)
++                            where type T.Basis.cond = PPCInstr.T.Basis.cond
++                              and type T.Basis.div_rounding_mode = PPCInstr.T.Basis.div_rounding_mode
++                              and type T.Basis.ext = PPCInstr.T.Basis.ext
++                              and type T.Basis.fcond = PPCInstr.T.Basis.fcond
++                              and type T.Basis.rounding_mode = PPCInstr.T.Basis.rounding_mode
++                              and type T.Constant.const = PPCInstr.T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) PPCInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) PPCInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) PPCInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) PPCInstr.T.Extension.sx
++                              and type T.I.div_rounding_mode = PPCInstr.T.I.div_rounding_mode
++                              and type T.Region.region = PPCInstr.T.Region.region
++                              and type T.ccexp = PPCInstr.T.ccexp
++                              and type T.fexp = PPCInstr.T.fexp
++                              (* and type T.labexp = PPCInstr.T.labexp *)
++                              and type T.mlrisc = PPCInstr.T.mlrisc
++                              and type T.oper = PPCInstr.T.oper
++                              and type T.rep = PPCInstr.T.rep
++                              and type T.rexp = PPCInstr.T.rexp
++                              and type T.stm = PPCInstr.T.stm
++     structure MLTreeHash : MLTREE_HASH (* where T = PPCInstr.T *)
++                            where type T.Basis.cond = PPCInstr.T.Basis.cond
++                              and type T.Basis.div_rounding_mode = PPCInstr.T.Basis.div_rounding_mode
++                              and type T.Basis.ext = PPCInstr.T.Basis.ext
++                              and type T.Basis.fcond = PPCInstr.T.Basis.fcond
++                              and type T.Basis.rounding_mode = PPCInstr.T.Basis.rounding_mode
++                              and type T.Constant.const = PPCInstr.T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) PPCInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) PPCInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) PPCInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) PPCInstr.T.Extension.sx
++                              and type T.I.div_rounding_mode = PPCInstr.T.I.div_rounding_mode
++                              and type T.Region.region = PPCInstr.T.Region.region
++                              and type T.ccexp = PPCInstr.T.ccexp
++                              and type T.fexp = PPCInstr.T.fexp
++                              (* and type T.labexp = PPCInstr.T.labexp *)
++                              and type T.mlrisc = PPCInstr.T.mlrisc
++                              and type T.oper = PPCInstr.T.oper
++                              and type T.rep = PPCInstr.T.rep
++                              and type T.rexp = PPCInstr.T.rexp
++                              and type T.stm = PPCInstr.T.stm
+     ) : INSN_PROPERTIES = 
+ struct
+   structure I = PPCInstr
+diff -Naur MLRISC/ppc/mltree/ppc.sml MLRISC-mlton/ppc/mltree/ppc.sml
+--- MLRISC/ppc/mltree/ppc.sml	2004-12-16 20:26:53.000000000 -0500
++++ MLRISC-mlton/ppc/mltree/ppc.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -10,10 +10,76 @@
+ 
+ functor PPC
+   (structure PPCInstr : PPCINSTR
+-   structure PseudoInstrs : PPC_PSEUDO_INSTR 
+-   			where I = PPCInstr
+-   structure ExtensionComp : MLTREE_EXTENSION_COMP 
+-   			where I = PPCInstr and T = PPCInstr.T
++   structure PseudoInstrs : PPC_PSEUDO_INSTR (* where I = PPCInstr *)
++                            where type I.Constant.const = PPCInstr.Constant.const
++                              and type I.Region.region = PPCInstr.Region.region
++                              and type I.T.Basis.cond = PPCInstr.T.Basis.cond
++                              and type I.T.Basis.div_rounding_mode = PPCInstr.T.Basis.div_rounding_mode
++                              and type I.T.Basis.ext = PPCInstr.T.Basis.ext
++                              and type I.T.Basis.fcond = PPCInstr.T.Basis.fcond
++                              and type I.T.Basis.rounding_mode = PPCInstr.T.Basis.rounding_mode
++                              and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) PPCInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) PPCInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) PPCInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) PPCInstr.T.Extension.sx
++                              and type I.T.I.div_rounding_mode = PPCInstr.T.I.div_rounding_mode
++                              and type I.T.ccexp = PPCInstr.T.ccexp
++                              and type I.T.fexp = PPCInstr.T.fexp
++                              (* and type I.T.labexp = PPCInstr.T.labexp *)
++                              and type I.T.mlrisc = PPCInstr.T.mlrisc
++                              and type I.T.oper = PPCInstr.T.oper
++                              and type I.T.rep = PPCInstr.T.rep
++                              and type I.T.rexp = PPCInstr.T.rexp
++                              and type I.T.stm = PPCInstr.T.stm
++                              and type I.arith = PPCInstr.arith
++                              and type I.arithi = PPCInstr.arithi
++                              and type I.bit = PPCInstr.bit
++                              and type I.bo = PPCInstr.bo
++                              and type I.ccarith = PPCInstr.ccarith
++                              and type I.cmp = PPCInstr.cmp
++                              and type I.ea = PPCInstr.ea
++                              and type I.farith = PPCInstr.farith
++                              and type I.farith3 = PPCInstr.farith3
++                              and type I.fcmp = PPCInstr.fcmp
++                              and type I.fload = PPCInstr.fload
++                              and type I.fstore = PPCInstr.fstore
++                              and type I.funary = PPCInstr.funary
++                              and type I.instr = PPCInstr.instr
++                              and type I.instruction = PPCInstr.instruction
++                              and type I.load = PPCInstr.load
++                              and type I.operand = PPCInstr.operand
++                              and type I.rotate = PPCInstr.rotate
++                              and type I.rotatei = PPCInstr.rotatei
++                              and type I.spr = PPCInstr.spr
++                              and type I.store = PPCInstr.store
++                              and type I.unary = PPCInstr.unary
++                              and type I.xerbit = PPCInstr.xerbit
++   structure ExtensionComp : MLTREE_EXTENSION_COMP (* where I = PPCInstr and T = PPCInstr.T *)
++                             where type I.addressing_mode = PPCInstr.addressing_mode
++                               and type I.ea = PPCInstr.ea
++                               and type I.instr = PPCInstr.instr
++                               and type I.instruction = PPCInstr.instruction
++                               and type I.operand = PPCInstr.operand
++                             where type T.Basis.cond = PPCInstr.T.Basis.cond
++                               and type T.Basis.div_rounding_mode = PPCInstr.T.Basis.div_rounding_mode
++                               and type T.Basis.ext = PPCInstr.T.Basis.ext
++                               and type T.Basis.fcond = PPCInstr.T.Basis.fcond
++                               and type T.Basis.rounding_mode = PPCInstr.T.Basis.rounding_mode
++                               and type T.Constant.const = PPCInstr.T.Constant.const
++                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) PPCInstr.T.Extension.ccx
++                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) PPCInstr.T.Extension.fx
++                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) PPCInstr.T.Extension.rx
++                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) PPCInstr.T.Extension.sx
++                               and type T.I.div_rounding_mode = PPCInstr.T.I.div_rounding_mode
++                               and type T.Region.region = PPCInstr.T.Region.region
++                               and type T.ccexp = PPCInstr.T.ccexp
++                               and type T.fexp = PPCInstr.T.fexp
++                               (* and type T.labexp = PPCInstr.T.labexp *)
++                               and type T.mlrisc = PPCInstr.T.mlrisc
++                               and type T.oper = PPCInstr.T.oper
++                               and type T.rep = PPCInstr.T.rep
++                               and type T.rexp = PPCInstr.T.rexp
++                               and type T.stm = PPCInstr.T.stm
+ 
+    (* 
+     * Support 64 bit mode? 
+@@ -71,7 +137,7 @@
+   (*  
+    * Integer multiplication 
+    *)
+-  functor Multiply32 = MLTreeMult
++  structure Mulu32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CellsBasis
+@@ -84,40 +150,64 @@
+      fun slli{r,i,d} = [I.INSTR(SLLI32{r=r,i=i,d=d})]
+      fun srli{r,i,d} = [I.INSTR(SRLI32{r=r,i=i,d=d})]
+      fun srai{r,i,d} = [I.arithi{oper=I.SRAWI,rt=d,ra=r,im=I.ImmedOp i}]
+-    )
+-
+-  structure Mulu32 = Multiply32
+-    (val trapping = false
++     
++     val trapping = false
+      val multCost = multCost
+      fun addv{r1,r2,d}=[I.arith{oper=I.ADD,ra=r1,rb=r2,rt=d,Rc=false,OE=false}]
+      fun subv{r1,r2,d}=[I.arith{oper=I.SUBF,ra=r2,rb=r1,rt=d,Rc=false,OE=false}]
+      val sh1addv = NONE
+      val sh2addv = NONE
+      val sh3addv = NONE
+-    )
+-    (val signed = false)
++     
++     val signed = false)
++
++  structure Muls32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     val intTy = 32
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
+ 
+-  structure Muls32 = Multiply32
+-    (val trapping = false
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d}= I.arith{oper=I.ADD,ra=r1,rb=r2,rt=d,Rc=false,OE=false}
++     fun slli{r,i,d} = [I.INSTR(SLLI32{r=r,i=i,d=d})]
++     fun srli{r,i,d} = [I.INSTR(SRLI32{r=r,i=i,d=d})]
++     fun srai{r,i,d} = [I.arithi{oper=I.SRAWI,rt=d,ra=r,im=I.ImmedOp i}]
++     
++     val trapping = false
+      val multCost = multCost
+      fun addv{r1,r2,d}=[I.arith{oper=I.ADD,ra=r1,rb=r2,rt=d,Rc=false,OE=false}]
+      fun subv{r1,r2,d}=[I.arith{oper=I.SUBF,ra=r2,rb=r1,rt=d,Rc=false,OE=false}]
+      val sh1addv = NONE
+      val sh2addv = NONE
+      val sh3addv = NONE
+-    )
+-    (val signed = true)
++     
++     val signed = true)
+ 
+-  structure Mult32 = Multiply32
+-    (val trapping = true
++  structure Mult32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     val intTy = 32
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d}= I.arith{oper=I.ADD,ra=r1,rb=r2,rt=d,Rc=false,OE=false}
++     fun slli{r,i,d} = [I.INSTR(SLLI32{r=r,i=i,d=d})]
++     fun srli{r,i,d} = [I.INSTR(SRLI32{r=r,i=i,d=d})]
++     fun srai{r,i,d} = [I.arithi{oper=I.SRAWI,rt=d,ra=r,im=I.ImmedOp i}]
++     
++     val trapping = true
+      val multCost = multCost
+      fun addv{r1,r2,d} = error "Mult32.addv"
+      fun subv{r1,r2,d} = error "Mult32.subv"
+      val sh1addv = NONE
+      val sh2addv = NONE
+      val sh3addv = NONE
+-    )
+-    (val signed = true)
++     
++     val signed = true)
+ 
+   fun selectInstructions
+       (instrStream as 
+@@ -277,7 +367,9 @@
+         | stmt(T.FCOPY(_, dst, src), an) = fcopy(dst, src, an)
+         | stmt(T.JMP(T.LABEXP lexp, labs),an) =
+              mark(I.B{addr=I.LabelOp lexp, LK=false},an)
+-        | stmt(T.JMP(x as (T.LABEL _ | T.CONST _), labs),an) =
++        | stmt(T.JMP(x as T.LABEL _, labs),an) =
++             mark(I.B{addr=I.LabelOp x, LK=false},an)
++        | stmt(T.JMP(x as T.CONST _, labs),an) =
+              mark(I.B{addr=I.LabelOp x, LK=false},an)
+         | stmt(T.JMP(rexp, labs),an) =
+           let val rs = expr(rexp)
+@@ -326,7 +418,8 @@
+ 		| T.LEU => (I.FALSE, I.GT)
+ 		| T.GTU => (I.TRUE,  I.GT)
+ 		| T.GEU => (I.FALSE, I.LT)
+-		| (T.SETCC | T.MISC_COND _) => error "branch(CMP)"
++		| T.SETCC => error "branch(CMP)"
++		| T.MISC_COND _ => error "branch(CMP)"
+ 	     (*esac*))
+             val ccreg = if true then CR0 else newCCreg() (* XXX *)
+ 	    val addr = I.LabelOp(T.LABEL lab)
+@@ -354,13 +447,18 @@
+               fun branch(bo, bit) = 
+                  emitBranch{bo=bo, bf=cr, bit=bit, addr=addr, LK=false}
+           in  case cc of 
+-                T.EQ => branch(I.TRUE, I.EQ)
+-              | T.NE => branch(I.FALSE, I.EQ)
+-              | (T.LT | T.LTU) => branch(I.TRUE, I.LT)
+-              | (T.LE | T.LEU) => branch(I.FALSE, I.GT)
+-              | (T.GE | T.GEU) => branch(I.FALSE, I.LT)
+-              | (T.GT | T.GTU) => branch(I.TRUE, I.GT)
+-	      | (T.SETCC | T.MISC_COND _) => error "branch(CC)"
++                T.EQ  => branch(I.TRUE, I.EQ)
++              | T.NE  => branch(I.FALSE, I.EQ)
++              | T.LT  => branch(I.TRUE, I.LT)
++              | T.LTU => branch(I.TRUE, I.LT)
++              | T.LE  => branch(I.FALSE, I.GT)
++              | T.LEU => branch(I.FALSE, I.GT)
++              | T.GE  => branch(I.FALSE, I.LT)
++              | T.GEU => branch(I.FALSE, I.LT)
++              | T.GT  => branch(I.TRUE, I.GT)
++              | T.GTU => branch(I.TRUE, I.GT)
++	      | T.SETCC => error "branch(CC)"
++	      | T.MISC_COND _ => error "branch(CC)"
+           end  
+         | branch(cmp as T.FCMP(fty, cond, _, _), lab, an) = 
+           let val ccreg = if true then CR0 else newCCreg() (* XXX *)
+@@ -390,7 +488,8 @@
+               | T.?<= => branch(I.FALSE,  ccreg, I.FG)
+               | T.<>  => test2bits(I.FL, I.FG)
+               | T.?=  => test2bits(I.FU, I.FE)
+-	      | (T.SETFCC | T.MISC_FCOND _) => error "branch(FCMP)"
++	      | T.SETFCC => error "branch(FCMP)"
++	      | T.MISC_FCOND _ => error "branch(FCMP)"
+              (*esac*)
+           end
+         | branch _ = error "branch"
+@@ -496,7 +595,10 @@
+                            rb=expr e1, OE=false, Rc=false}, an)
+             )
+         | subtract(ty, T.LI i, e2, rt, an) = subfImmed(i, expr e2, rt, an)
+-        | subtract(ty, x as (T.CONST _ | T.LABEL _), e2, rt, an) =
++        | subtract(ty, x as T.CONST _, e2, rt, an) =
++             mark(I.ARITHI{oper=I.SUBFIC,rt=rt,ra=expr e2,
++                           im=I.LabelOp x},an)
++        | subtract(ty, x as T.LABEL _, e2, rt, an) =
+              mark(I.ARITHI{oper=I.SUBFIC,rt=rt,ra=expr e2,
+                            im=I.LabelOp x},an)
+         | subtract(ty, e1, e2, rt, an) =
+@@ -729,8 +831,10 @@
+                app emitInstruction (PseudoInstrs.cvti2d{reg=expr e,fd=ft})
+ 
+             (* Single/double precision support *)
+-          | T.FABS((32|64), e) => funary(I.FABS, e, ft, an)
+-          | T.FNEG((32|64), e) => funary(I.FNEG, e, ft, an)
++          | T.FABS(32, e) => funary(I.FABS, e, ft, an)
++          | T.FABS(64, e) => funary(I.FABS, e, ft, an)
++          | T.FNEG(32, e) => funary(I.FNEG, e, ft, an)
++          | T.FNEG(64, e) => funary(I.FNEG, e, ft, an)
+ 	  | T.FSQRT(32, e)     => funary(I.FSQRTS, e, ft, an)
+ 	  | T.FSQRT(64, e)     => funary(I.FSQRT, e, ft, an)
+ 
+@@ -757,8 +861,12 @@
+               T.CMP(ty, cc, e1, e2) => 
+               let val (opnds, cmp) =
+                    case cc of 
+-                     (T.LT | T.LE | T.EQ | T.NE | T.GT | T.GE) =>
+-                       (immedOpnd signed16, I.CMP)
++                     T.LT => (immedOpnd signed16, I.CMP)
++                   | T.LE => (immedOpnd signed16, I.CMP)
++                   | T.EQ => (immedOpnd signed16, I.CMP)
++                   | T.NE => (immedOpnd signed16, I.CMP)
++                   | T.GT => (immedOpnd signed16, I.CMP)
++                   | T.GE => (immedOpnd signed16, I.CMP)
+                    | _ => (immedOpnd unsigned16, I.CMPL)
+                   val (opndA, opndB) = opnds(e1, e2)
+                   val l  = case ty of
+diff -Naur MLRISC/ra/arch-spill-instr.sig MLRISC-mlton/ra/arch-spill-instr.sig
+--- MLRISC/ra/arch-spill-instr.sig	2002-01-24 00:45:17.000000000 -0500
++++ MLRISC-mlton/ra/arch-spill-instr.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -10,7 +10,16 @@
+  *)
+ signature ARCH_SPILL_INSTR = sig
+   structure I : INSTRUCTIONS
+-  structure CB : CELLS_BASIS = CellsBasis
++  structure CB : CELLS_BASIS (* = CellsBasis *)
++                 where type CellSet.cellset = CellsBasis.CellSet.cellset
++                   and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                   and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                   and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                   and type cell = CellsBasis.cell
++                   and type cellColor = CellsBasis.cellColor
++                   and type cellkind = CellsBasis.cellkind
++                   and type cellkindDesc = CellsBasis.cellkindDesc
++                   and type cellkindInfo = CellsBasis.cellkindInfo
+   
+   val spillToEA :
+       CB.cellkind ->
+diff -Naur MLRISC/ra/chaitin-spillheur2.sml MLRISC-mlton/ra/chaitin-spillheur2.sml
+--- MLRISC/ra/chaitin-spillheur2.sml	2002-03-21 17:01:10.000000000 -0500
++++ MLRISC-mlton/ra/chaitin-spillheur2.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -35,7 +35,35 @@
+           | moveSavings(NODE{movelist, ...}) = 
+             let fun loop([], savings) = 
+                      foldr (fn ((_,a),b) => Real.max(a,b)) 0.0 savings
+-                  | loop(MV{status=ref(WORKLIST | GEORGE_MOVE | BRIGGS_MOVE),
++                  | loop(MV{status=ref WORKLIST,
++                            dst, src, cost, ...}::mvs, savings) = 
++                    let fun add(c,[]) = [(c,cost)]
++                          | add(c,(x as (c':int,s))::savings) =
++                             if c = c' then (c',s+cost)::savings 
++                             else x::add(c,savings)
++                        val savings =
++                           case chase dst of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ =>
++                           case chase src of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ => savings
++                   in  loop(mvs, savings) end
++                  | loop(MV{status=ref GEORGE_MOVE,
++                            dst, src, cost, ...}::mvs, savings) = 
++                    let fun add(c,[]) = [(c,cost)]
++                          | add(c,(x as (c':int,s))::savings) =
++                             if c = c' then (c',s+cost)::savings 
++                             else x::add(c,savings)
++                        val savings =
++                           case chase dst of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ =>
++                           case chase src of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ => savings
++                   in  loop(mvs, savings) end
++                  | loop(MV{status=ref BRIGGS_MOVE,
+                             dst, src, cost, ...}::mvs, savings) = 
+                     let fun add(c,[]) = [(c,cost)]
+                           | add(c,(x as (c':int,s))::savings) =
+diff -Naur MLRISC/ra/chow-hennessy-spillheur2.sml MLRISC-mlton/ra/chow-hennessy-spillheur2.sml
+--- MLRISC/ra/chow-hennessy-spillheur2.sml	2002-03-21 17:01:10.000000000 -0500
++++ MLRISC-mlton/ra/chow-hennessy-spillheur2.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -32,7 +32,35 @@
+           | moveSavings(NODE{movelist, ...}) = 
+             let fun loop([], savings) = 
+                      foldr (fn ((_,a),b) => Real.max(a,b)) 0.0 savings
+-                  | loop(MV{status=ref(WORKLIST | GEORGE_MOVE | BRIGGS_MOVE),
++                  | loop(MV{status=ref WORKLIST,
++                            dst, src, cost, ...}::mvs, savings) = 
++                    let fun add(c,[]) = [(c,cost)]
++                          | add(c,(x as (c':int,s))::savings) =
++                             if c = c' then (c',s+cost)::savings 
++                             else x::add(c,savings)
++                        val savings =
++                           case chase dst of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ =>
++                           case chase src of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ => savings
++                   in  loop(mvs, savings) end
++                  | loop(MV{status=ref GEORGE_MOVE,
++                            dst, src, cost, ...}::mvs, savings) = 
++                    let fun add(c,[]) = [(c,cost)]
++                          | add(c,(x as (c':int,s))::savings) =
++                             if c = c' then (c',s+cost)::savings 
++                             else x::add(c,savings)
++                        val savings =
++                           case chase dst of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ =>
++                           case chase src of
++                             NODE{color=ref(COLORED c), ...} => add(c,savings)
++                           | _ => savings
++                   in  loop(mvs, savings) end
++                  | loop(MV{status=ref BRIGGS_MOVE,
+                             dst, src, cost, ...}::mvs, savings) = 
+                     let fun add(c,[]) = [(c,cost)]
+                           | add(c,(x as (c':int,s))::savings) =
+diff -Naur MLRISC/ra/cluster-ra.sml MLRISC-mlton/ra/cluster-ra.sml
+--- MLRISC/ra/cluster-ra.sml	2002-09-26 15:06:50.000000000 -0400
++++ MLRISC-mlton/ra/cluster-ra.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -14,13 +14,45 @@
+ 
+ functor ClusterRA
+    (structure Asm       : INSTRUCTION_EMITTER
+-    structure Flowgraph : CONTROL_FLOW_GRAPH
+-    			where I = Asm.I 
+-			  and P = Asm.S.P
+-    structure InsnProps : INSN_PROPERTIES
+-    			where I = Flowgraph.I 
+-    structure Spill : RA_SPILL 
+-    			where I = Flowgraph.I
++    structure Flowgraph : CONTROL_FLOW_GRAPH (* where I = Asm.I and P = Asm.S.P *)
++                          where type I.addressing_mode = Asm.I.addressing_mode
++                            and type I.ea = Asm.I.ea
++                            and type I.instr = Asm.I.instr
++                            and type I.instruction = Asm.I.instruction
++                            and type I.operand = Asm.I.operand
++                          where type P.Client.pseudo_op = Asm.S.P.Client.pseudo_op
++                            and type P.T.Basis.cond = Asm.S.P.T.Basis.cond
++                            and type P.T.Basis.div_rounding_mode = Asm.S.P.T.Basis.div_rounding_mode
++                            and type P.T.Basis.ext = Asm.S.P.T.Basis.ext
++                            and type P.T.Basis.fcond = Asm.S.P.T.Basis.fcond
++                            and type P.T.Basis.rounding_mode = Asm.S.P.T.Basis.rounding_mode
++                            and type P.T.Constant.const = Asm.S.P.T.Constant.const
++                            and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Asm.S.P.T.Extension.ccx
++                            and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Asm.S.P.T.Extension.fx
++                            and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Asm.S.P.T.Extension.rx
++                            and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Asm.S.P.T.Extension.sx
++                            and type P.T.I.div_rounding_mode = Asm.S.P.T.I.div_rounding_mode
++                            and type P.T.Region.region = Asm.S.P.T.Region.region
++                            and type P.T.ccexp = Asm.S.P.T.ccexp
++                            and type P.T.fexp = Asm.S.P.T.fexp
++                            (* and type P.T.labexp = Asm.S.P.T.labexp *)
++                            and type P.T.mlrisc = Asm.S.P.T.mlrisc
++                            and type P.T.oper = Asm.S.P.T.oper
++                            and type P.T.rep = Asm.S.P.T.rep
++                            and type P.T.rexp = Asm.S.P.T.rexp
++                            and type P.T.stm = Asm.S.P.T.stm
++    structure InsnProps : INSN_PROPERTIES (* where I = Flowgraph.I *)
++                          where type I.addressing_mode = Flowgraph.I.addressing_mode
++                            and type I.ea = Flowgraph.I.ea
++                            and type I.instr = Flowgraph.I.instr
++                            and type I.instruction = Flowgraph.I.instruction
++                            and type I.operand = Flowgraph.I.operand
++    structure Spill     : RA_SPILL (* where I = Flowgraph.I *)
++                          where type I.addressing_mode = Flowgraph.I.addressing_mode
++                            and type I.ea = Flowgraph.I.ea
++                            and type I.instr = Flowgraph.I.instr
++                            and type I.instruction = Flowgraph.I.instruction
++                            and type I.operand = Flowgraph.I.operand
+    ) : RA_FLOWGRAPH =
+ struct
+    structure CFG    = Flowgraph
+diff -Naur MLRISC/ra/mem-ra.sml MLRISC-mlton/ra/mem-ra.sml
+--- MLRISC/ra/mem-ra.sml	2002-03-07 16:16:25.000000000 -0500
++++ MLRISC-mlton/ra/mem-ra.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -51,7 +51,9 @@
+       fun collectMoves([], mv') = mv'
+ 	| collectMoves(NODE{movelist, color, ...}::ns, mv') = let
+ 	    fun ins([], mv') = collectMoves(ns, mv')
+-	      | ins(MV{status=ref(COALESCED | CONSTRAINED), ...}::mvs, mv') = 
++	      | ins(MV{status=ref COALESCED, ...}::mvs, mv') = 
++		  ins(mvs, mv')
++	      | ins(MV{status=ref CONSTRAINED, ...}::mvs, mv') = 
+ 		  ins(mvs, mv')
+ 	      | ins((mv as MV{dst, src, ...})::mvs, mv') = let
+ 		  val NODE{color=ref cd, number=nd, ...} = chase dst
+@@ -92,7 +94,19 @@
+ 		| union((n as NODE{color, adj=adjT, 
+ 				   number=t, ...})::adjDst, adjSrc) = 
+ 		  (case !color of
+-		     (SPILLED | MEMREG _ | SPILL_LOC _ | PSEUDO) =>
++		     SPILLED =>
++		       if addEdge(s, t) then 
++			  (adjT := src :: !adjT; union(adjDst, n::adjSrc))
++		       else union(adjDst, adjSrc)
++		   | MEMREG _ =>
++		       if addEdge(s, t) then 
++			  (adjT := src :: !adjT; union(adjDst, n::adjSrc))
++		       else union(adjDst, adjSrc)
++		   | SPILL_LOC _ =>
++		       if addEdge(s, t) then 
++			  (adjT := src :: !adjT; union(adjDst, n::adjSrc))
++		       else union(adjDst, adjSrc)
++		   | PSEUDO =>
+ 		       if addEdge(s, t) then 
+ 			  (adjT := src :: !adjT; union(adjDst, n::adjSrc))
+ 		       else union(adjDst, adjSrc)
+@@ -155,7 +169,10 @@
+                  x = y orelse member(x,y) orelse interferes(x, ns)
+ 
+           fun moveSavings([], pinned, total) = (pinned, total+total)
+-            | moveSavings(MV{status=ref(CONSTRAINED | COALESCED), ...}::mvs,
++            | moveSavings(MV{status=ref CONSTRAINED, ...}::mvs,
++                          pinned, total) = 
++                 moveSavings(mvs, pinned, total)
++            | moveSavings(MV{status=ref COALESCED, ...}::mvs,
+                           pinned, total) = 
+                  moveSavings(mvs, pinned, total)
+             | moveSavings(MV{dst, src, cost, ...}::mvs, pinned, total) =
+diff -Naur MLRISC/ra/ra-core.sig MLRISC-mlton/ra/ra-core.sig
+--- MLRISC/ra/ra-core.sig	2002-03-07 16:04:12.000000000 -0500
++++ MLRISC-mlton/ra/ra-core.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -11,7 +11,26 @@
+ signature RA_CORE = 
+ sig
+ 
+-   structure G  : RA_GRAPH = RAGraph
++   structure G  : RA_GRAPH (* = RAGraph *)
++                  where type C.CellSet.cellset = RAGraph.C.CellSet.cellset
++                    and type 'a C.ColorTable.hash_table = 'a RAGraph.C.ColorTable.hash_table
++                    and type 'a C.HashTable.hash_table = 'a RAGraph.C.HashTable.hash_table
++                    and type C.SortedCells.sorted_cells = RAGraph.C.SortedCells.sorted_cells
++                    and type C.cell = RAGraph.C.cell
++                    and type C.cellColor = RAGraph.C.cellColor
++                    and type C.cellkind = RAGraph.C.cellkind
++                    and type C.cellkindDesc = RAGraph.C.cellkindDesc
++                    and type C.cellkindInfo = RAGraph.C.cellkindInfo
++                    and type 'a PPtHashTable.hash_table = 'a RAGraph.PPtHashTable.hash_table
++                    and type 'a SpillLocHashTable.hash_table = 'a RAGraph.SpillLocHashTable.hash_table
++                    and type interferenceGraph = RAGraph.interferenceGraph
++                    and type move = RAGraph.move
++                    and type moveKind = RAGraph.moveKind
++                    and type moveStatus = RAGraph.moveStatus
++                    and type node = RAGraph.node
++                    and type nodeStatus = RAGraph.nodeStatus
++                    and type spillLoc = RAGraph.spillLoc
++                    and type trailInfo = RAGraph.trailInfo
+    structure BM : RA_BITMATRIX
+    structure MV : RA_PRIORITY_QUEUE where type elem = G.move
+    structure FZ : RA_PRIORITY_QUEUE where type elem = G.node
+diff -Naur MLRISC/ra/ra-core.sml MLRISC-mlton/ra/ra-core.sml
+--- MLRISC/ra/ra-core.sml	2002-03-07 16:16:25.000000000 -0500
++++ MLRISC-mlton/ra/ra-core.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -163,7 +163,15 @@
+   fun dumpGraph(G as G.GRAPH{nodes, showReg, K,...}) stream =
+   let fun pr s = TextIO.output(stream, s)
+       val show = show G
+-      fun prMove(MV{src, dst, status=ref(WORKLIST | BRIGGS_MOVE | GEORGE_MOVE),
++      fun prMove(MV{src, dst, status=ref WORKLIST,
++                    cost,...}) = 
++            pr(node2s(chase dst)^" <- "^node2s(chase src)^
++               "("^r2s(cost)^") ")
++        | prMove(MV{src, dst, status=ref BRIGGS_MOVE,
++                    cost,...}) = 
++            pr(node2s(chase dst)^" <- "^node2s(chase src)^
++               "("^r2s(cost)^") ")
++        | prMove(MV{src, dst, status=ref GEORGE_MOVE,
+                     cost,...}) = 
+             pr(node2s(chase dst)^" <- "^node2s(chase src)^
+                "("^r2s(cost)^") ")
+@@ -541,7 +549,13 @@
+                 | addMv((m as MV{status, hicount as ref hi, ...})::rest,
+                         ns, mv) = 
+                   (case !status of
+-                     (BRIGGS_MOVE | GEORGE_MOVE) => 
++                     BRIGGS_MOVE => 
++                       (* decrements hi, when hi <= 0 enable move *)
++                       if hi <= 1 then
++                         (status := WORKLIST; addMv(rest, ns, MV.add(m, mv)))
++                       else
++                         (hicount := hi-1; addMv(rest, ns, mv))
++                   | GEORGE_MOVE => 
+                        (* decrements hi, when hi <= 0 enable move *)
+                        if hi <= 1 then
+                          (status := WORKLIST; addMv(rest, ns, MV.add(m, mv)))
+@@ -623,7 +637,10 @@
+                 * nodes that are removed, since removed nodes either have
+                 * deg < K or else optimistic spilling must be in effect!
+                 *)
+-               NODE{degree,number,color=ref(PSEUDO | REMOVED), ...} => 
++               NODE{degree,number,color=ref PSEUDO, ...} => 
++               if !degree < K orelse member(reg, number) then loop(adj, hi)
++               else loop(adj, hi+1)
++             | NODE{degree,number,color=ref REMOVED, ...} => 
+                if !degree < K orelse member(reg, number) then loop(adj, hi)
+                else loop(adj, hi+1)
+              | _ => loop(adj, hi)
+@@ -706,7 +723,13 @@
+            | union((t as NODE{color, degree, ...})::adj, 
+                    mv, fz, stack) =
+               (case !color of
+-                 (COLORED _ | SPILL_LOC _ | MEMREG _ | SPILLED) => 
++                 COLORED _ => 
++                   (addEdge(t, u); union(adj, mv, fz, stack))
++               | SPILL_LOC _ => 
++                   (addEdge(t, u); union(adj, mv, fz, stack))
++               | MEMREG _ => 
++                   (addEdge(t, u); union(adj, mv, fz, stack))
++               | SPILLED => 
+                    (addEdge(t, u); union(adj, mv, fz, stack))
+                | PSEUDO =>
+                    (addEdge(t, u);
+@@ -864,7 +887,22 @@
+             | elimMoves(MV{status, src, dst, ...}::mvs, simp) =
+               case !status of 
+                 WORKLIST => error "elimMoves"
+-              | (BRIGGS_MOVE | GEORGE_MOVE) => (* mark move as lost *)
++              | BRIGGS_MOVE => (* mark move as lost *)
++                let val _ = status := LOST
++                    val src as NODE{number=s,...} = chase src
++                    val you = if s = me then chase dst else src
++                in  case you of
++                      NODE{color=ref(COLORED _),...} => 
++                        elimMoves(mvs, simp)
++                    | NODE{movecnt as ref c, degree, ...} => (* pseudo *)
++                        (movecnt := c - 1; 
++                         if c = 1 andalso !degree < K then 
++                            elimMoves(mvs, you::simp)
++                         else 
++                            elimMoves(mvs, simp)
++                        )
++                end
++              | GEORGE_MOVE => (* mark move as lost *)
+                 let val _ = status := LOST
+                     val src as NODE{number=s,...} = chase src
+                     val you = if s = me then chase dst else src
+@@ -1085,7 +1123,23 @@
+                * color the move with the same color
+                *)
+               fun getPref([], pref) = pref
+-                | getPref(MV{status=ref(LOST | BRIGGS_MOVE | GEORGE_MOVE), 
++                | getPref(MV{status=ref LOST, 
++                             src, dst, ...}::mvs, pref) =
++                  let val src as NODE{number=s,...} = chase src
++                      val other = if s = number then chase dst else src 
++                  in  case other of
++                        NODE{color=ref(COLORED c),...} => getPref(mvs, c::pref)
++                      | _ => getPref(mvs, pref)
++                  end
++                | getPref(MV{status=ref BRIGGS_MOVE, 
++                             src, dst, ...}::mvs, pref) =
++                  let val src as NODE{number=s,...} = chase src
++                      val other = if s = number then chase dst else src 
++                  in  case other of
++                        NODE{color=ref(COLORED c),...} => getPref(mvs, c::pref)
++                      | _ => getPref(mvs, pref)
++                  end
++                | getPref(MV{status=ref GEORGE_MOVE, 
+                              src, dst, ...}::mvs, pref) =
+                   let val src as NODE{number=s,...} = chase src
+                       val other = if s = number then chase dst else src 
+diff -Naur MLRISC/ra/ra-deadCodeE.sml MLRISC-mlton/ra/ra-deadCodeE.sml
+--- MLRISC/ra/ra-deadCodeE.sml	2001-10-11 23:54:43.000000000 -0400
++++ MLRISC-mlton/ra/ra-deadCodeE.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,9 +6,9 @@
+  * -- Allen
+  *)
+ 
+-functor RADeadCodeElim
+-   (Flowgraph : RA_FLOWGRAPH)
+-   (  (* check for dead code on these cellkinds only *)
++functor RADeadCodeElim (
++    structure Flowgraph : RA_FLOWGRAPH
++      (* check for dead code on these cellkinds only *)
+     val cellkind : CellsBasis.cellkind -> bool
+       (* Dead registers are stored here. *)
+     val deadRegs : bool IntHashTable.hash_table 
+diff -Naur MLRISC/ra/ra-flowgraph.sig MLRISC-mlton/ra/ra-flowgraph.sig
+--- MLRISC/ra/ra-flowgraph.sig	2002-03-07 16:04:12.000000000 -0500
++++ MLRISC-mlton/ra/ra-flowgraph.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -12,10 +12,34 @@
+ 
+    structure I     : INSTRUCTIONS
+    structure C     : CELLS  
+-   structure G     : RA_GRAPH = RAGraph
++   structure G     : RA_GRAPH (* = RAGraph *)
++                     where type C.CellSet.cellset = RAGraph.C.CellSet.cellset
++                       and type 'a C.ColorTable.hash_table = 'a RAGraph.C.ColorTable.hash_table
++                       and type 'a C.HashTable.hash_table = 'a RAGraph.C.HashTable.hash_table
++                       and type C.SortedCells.sorted_cells = RAGraph.C.SortedCells.sorted_cells
++                       and type C.cell = RAGraph.C.cell
++                       and type C.cellColor = RAGraph.C.cellColor
++                       and type C.cellkind = RAGraph.C.cellkind
++                       and type C.cellkindDesc = RAGraph.C.cellkindDesc
++                       and type C.cellkindInfo = RAGraph.C.cellkindInfo
++                       and type 'a PPtHashTable.hash_table = 'a RAGraph.PPtHashTable.hash_table
++                       and type 'a SpillLocHashTable.hash_table = 'a RAGraph.SpillLocHashTable.hash_table
++                       and type interferenceGraph = RAGraph.interferenceGraph
++                       and type move = RAGraph.move
++                       and type moveKind = RAGraph.moveKind
++                       and type moveStatus = RAGraph.moveStatus
++                       and type node = RAGraph.node
++                       and type nodeStatus = RAGraph.nodeStatus
++                       and type spillLoc = RAGraph.spillLoc
++                       and type trailInfo = RAGraph.trailInfo
+    structure Spill : RA_SPILL
+-     sharing Spill.I = I
+-     sharing I.C = C 
++     (* sharing Spill.I = I *)
++     where type I.addressing_mode = I.addressing_mode
++       and type I.ea = I.ea
++       and type I.instr = I.instr
++       and type I.instruction = I.instruction
++       and type I.operand = I.operand
++     (* sharing I.C = C *)
+ 
+    type flowgraph
+ 
+diff -Naur MLRISC/ra/ra-graph.sig MLRISC-mlton/ra/ra-graph.sig
+--- MLRISC/ra/ra-graph.sig	2002-03-07 16:04:12.000000000 -0500
++++ MLRISC-mlton/ra/ra-graph.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -11,7 +11,10 @@
+ sig
+ 
+   structure C : CELLS_BASIS
+-  structure BM : RA_BITMATRIX = RaBitmatrix
++  structure BM : RA_BITMATRIX (* = RaBitmatrix *)
++                 where type bitMatrix = RaBitmatrix.bitMatrix
++                   and type bucket = RaBitmatrix.bucket
++                   and type hashTable = RaBitmatrix.hashTable
+   (*
+    * The following are the data structures used in the register allocator.
+    *)
+diff -Naur MLRISC/ra/ra.sig MLRISC-mlton/ra/ra.sig
+--- MLRISC/ra/ra.sig	2001-07-19 16:35:16.000000000 -0400
++++ MLRISC-mlton/ra/ra.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -9,9 +9,23 @@
+    structure I : INSTRUCTIONS
+    structure C : CELLS
+    structure F : RA_FLOWGRAPH 
+-      sharing F.I   = I
+-      sharing I.C   = C
+-   structure CB : CELLS_BASIS = CellsBasis
++      (* sharing F.I = I *)
++     where type I.addressing_mode = I.addressing_mode
++       and type I.ea = I.ea
++       and type I.instr = I.instr
++       and type I.instruction = I.instruction
++       and type I.operand = I.operand
++      (* sharing I.C = C *)
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+ 
+    type getreg = { pref  : CB.cell_id list,
+                    stamp : int, 
+diff -Naur MLRISC/ra/ra.sml MLRISC-mlton/ra/ra.sml
+--- MLRISC/ra/ra.sml	2002-03-07 16:16:25.000000000 -0500
++++ MLRISC-mlton/ra/ra.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -37,9 +37,10 @@
+  * -- Allen Leung (leunga@cs.nyu.edu)
+  *)
+ 
+-functor RegisterAllocator
+-   (SpillHeuristics : RA_SPILL_HEURISTICS) 
+-   (Flowgraph : RA_FLOWGRAPH where C = CellsBasis) : RA =
++functor RegisterAllocator (
++   structure SpillHeuristics : RA_SPILL_HEURISTICS
++   structure Flowgraph : RA_FLOWGRAPH (* where C = CellsBasis *)
++) : RA =
+ struct
+ 
+    structure F      = Flowgraph
+diff -Naur MLRISC/ra/ra-spillheur.sig MLRISC-mlton/ra/ra-spillheur.sig
+--- MLRISC/ra/ra-spillheur.sig	2000-06-01 14:33:11.000000000 -0400
++++ MLRISC-mlton/ra/ra-spillheur.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -3,7 +3,26 @@
+  *)
+ signature RA_SPILL_HEURISTICS =
+ sig
+-   structure G : RA_GRAPH = RAGraph
++   structure G : RA_GRAPH (* = RAGraph *)
++                 where type C.CellSet.cellset = RAGraph.C.CellSet.cellset
++                   and type 'a C.ColorTable.hash_table = 'a RAGraph.C.ColorTable.hash_table
++                   and type 'a C.HashTable.hash_table = 'a RAGraph.C.HashTable.hash_table
++                   and type C.SortedCells.sorted_cells = RAGraph.C.SortedCells.sorted_cells
++                   and type C.cell = RAGraph.C.cell
++                   and type C.cellColor = RAGraph.C.cellColor
++                   and type C.cellkind = RAGraph.C.cellkind
++                   and type C.cellkindDesc = RAGraph.C.cellkindDesc
++                   and type C.cellkindInfo = RAGraph.C.cellkindInfo
++                   and type 'a PPtHashTable.hash_table = 'a RAGraph.PPtHashTable.hash_table
++                   and type 'a SpillLocHashTable.hash_table = 'a RAGraph.SpillLocHashTable.hash_table
++                   and type interferenceGraph = RAGraph.interferenceGraph
++                   and type move = RAGraph.move
++                   and type moveKind = RAGraph.moveKind
++                   and type moveStatus = RAGraph.moveStatus
++                   and type node = RAGraph.node
++                   and type nodeStatus = RAGraph.nodeStatus
++                   and type spillLoc = RAGraph.spillLoc
++                   and type trailInfo = RAGraph.trailInfo
+ 
+    exception NoCandidate
+ 
+diff -Naur MLRISC/ra/ra-spill.sig MLRISC-mlton/ra/ra-spill.sig
+--- MLRISC/ra/ra-spill.sig	2002-01-24 00:45:17.000000000 -0500
++++ MLRISC-mlton/ra/ra-spill.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -7,11 +7,39 @@
+ sig
+ 
+    structure I : INSTRUCTIONS
+-   structure G : RA_GRAPH = RAGraph
++   structure G : RA_GRAPH (* = RAGraph *)
++                 where type C.CellSet.cellset = RAGraph.C.CellSet.cellset
++                   and type 'a C.ColorTable.hash_table = 'a RAGraph.C.ColorTable.hash_table
++                   and type 'a C.HashTable.hash_table = 'a RAGraph.C.HashTable.hash_table
++                   and type C.SortedCells.sorted_cells = RAGraph.C.SortedCells.sorted_cells
++                   and type C.cell = RAGraph.C.cell
++                   and type C.cellColor = RAGraph.C.cellColor
++                   and type C.cellkind = RAGraph.C.cellkind
++                   and type C.cellkindDesc = RAGraph.C.cellkindDesc
++                   and type C.cellkindInfo = RAGraph.C.cellkindInfo
++                   and type 'a PPtHashTable.hash_table = 'a RAGraph.PPtHashTable.hash_table
++                   and type 'a SpillLocHashTable.hash_table = 'a RAGraph.SpillLocHashTable.hash_table
++                   and type interferenceGraph = RAGraph.interferenceGraph
++                   and type move = RAGraph.move
++                   and type moveKind = RAGraph.moveKind
++                   and type moveStatus = RAGraph.moveStatus
++                   and type node = RAGraph.node
++                   and type nodeStatus = RAGraph.nodeStatus
++                   and type spillLoc = RAGraph.spillLoc
++                   and type trailInfo = RAGraph.trailInfo
+    structure C : CELLS 
+-      sharing I.C = C
++      (* sharing I.C = C *)
+ 
+-   structure CB : CELLS_BASIS = CellsBasis 
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    type copyInstr =
+           (CB.cell list * CB.cell list) * I.instruction -> I.instruction list
+ 
+diff -Naur MLRISC/ra/ra-spill.sml MLRISC-mlton/ra/ra-spill.sml
+--- MLRISC/ra/ra-spill.sml	2002-08-06 09:33:17.000000000 -0400
++++ MLRISC-mlton/ra/ra-spill.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -48,18 +48,17 @@
+  * -- Allen
+  *)
+ 
+-local
+-
+-   val debug = false
+-
+-in
+-
+ functor RASpill
+    (structure InsnProps : INSN_PROPERTIES
+-    structure Asm       : INSTRUCTION_EMITTER
+-    			where I = InsnProps.I
++    structure Asm       : INSTRUCTION_EMITTER (* where I = InsnProps.I *)
++                          where type I.addressing_mode = InsnProps.I.addressing_mode
++                            and type I.ea = InsnProps.I.ea
++                            and type I.instr = InsnProps.I.instr
++                            and type I.instruction = InsnProps.I.instruction
++                            and type I.operand = InsnProps.I.operand
+    ) : RA_SPILL =
+ struct
++   val debug = false
+ 
+    structure I      = InsnProps.I
+    structure P      = InsnProps
+@@ -451,5 +450,3 @@
+    in  spillRewrite
+    end
+ end
+-
+-end (* local *)
+diff -Naur MLRISC/ra/ra-spill-with-renaming.sml MLRISC-mlton/ra/ra-spill-with-renaming.sml
+--- MLRISC/ra/ra-spill-with-renaming.sml	2001-10-11 23:54:43.000000000 -0400
++++ MLRISC-mlton/ra/ra-spill-with-renaming.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -79,16 +79,14 @@
+  * -- Allen
+  *)
+ 
+-local
+-
+-   val debug = false
+-
+-in
+-
+ functor RASpillWithRenaming
+    (structure InsnProps : INSN_PROPERTIES 
+-    structure Asm       : INSTRUCTION_EMITTER
+-    			where I = InsnProps.I
++    structure Asm       : INSTRUCTION_EMITTER (* where I = InsnProps.I *)
++                          where type I.addressing_mode = InsnProps.I.addressing_mode
++                            and type I.ea = InsnProps.I.ea
++                            and type I.instr = InsnProps.I.instr
++                            and type I.instruction = InsnProps.I.instruction
++                            and type I.operand = InsnProps.I.operand
+ 
+     (* Spilling a variable v creates tiny live-ranges at all its definitions
+      * and uses.  The following parameter is the maximal distance of
+@@ -107,6 +105,7 @@
+     val keep_multiple_values : bool ref
+    ) : RA_SPILL =
+ struct
++   val debug = false
+ 
+    structure I      = InsnProps.I
+    structure P      = InsnProps
+@@ -572,5 +571,3 @@
+    in  spillRewrite
+    end
+ end
+-
+-end (* local *)
+diff -Naur MLRISC/ra/region-based-ra.sml MLRISC-mlton/ra/region-based-ra.sml
+--- MLRISC/ra/region-based-ra.sml	2002-03-07 16:16:25.000000000 -0500
++++ MLRISC-mlton/ra/region-based-ra.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -4,10 +4,10 @@
+  * it into manageable pieces to be allocated.
+  *)
+ functor RegionBasedRA
+-   (RA : RA)
+-   (FlowgraphPartitioner : RA_FLOWGRAPH_PARTITIONER 
++   (structure RA : RA
++    structure FlowgraphPartitioner : RA_FLOWGRAPH_PARTITIONER 
+        where type flowgraph = RA.F.flowgraph
+-       where C = RA.C
++       (* where C = RA.C *)
+    ) : RA =
+ struct
+ 
+diff -Naur MLRISC/ra/risc-ra.sml MLRISC-mlton/ra/risc-ra.sml
+--- MLRISC/ra/risc-ra.sml	2003-05-22 18:46:22.000000000 -0400
++++ MLRISC-mlton/ra/risc-ra.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -4,18 +4,58 @@
+  * This works well for RISC machines; but not applicable to x86.
+  *)
+ functor RISC_RA
+-  (structure I         : INSTRUCTIONS
+-   structure Asm       : INSTRUCTION_EMITTER
+-   			where I = I 
+-   structure CFG       : CONTROL_FLOW_GRAPH 
+-   			where I = I
+-		          and P = Asm.S.P
+-   structure InsnProps : INSN_PROPERTIES
+-   			where I = I
+-   structure Rewrite   : REWRITE_INSTRUCTIONS
+-   			where I = I
+-   structure SpillInstr : ARCH_SPILL_INSTR
+-                        where I = I
++  (structure I          : INSTRUCTIONS
++   structure Asm        : INSTRUCTION_EMITTER (* where I = I *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
++   structure CFG        : CONTROL_FLOW_GRAPH (* where I = I and P = Asm.S.P *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
++                          where type P.Client.pseudo_op = Asm.S.P.Client.pseudo_op
++                            and type P.T.Basis.cond = Asm.S.P.T.Basis.cond
++                            and type P.T.Basis.div_rounding_mode = Asm.S.P.T.Basis.div_rounding_mode
++                            and type P.T.Basis.ext = Asm.S.P.T.Basis.ext
++                            and type P.T.Basis.fcond = Asm.S.P.T.Basis.fcond
++                            and type P.T.Basis.rounding_mode = Asm.S.P.T.Basis.rounding_mode
++                            and type P.T.Constant.const = Asm.S.P.T.Constant.const
++                            and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) Asm.S.P.T.Extension.ccx
++                            and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) Asm.S.P.T.Extension.fx
++                            and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) Asm.S.P.T.Extension.rx
++                            and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) Asm.S.P.T.Extension.sx
++                            and type P.T.I.div_rounding_mode = Asm.S.P.T.I.div_rounding_mode
++                            and type P.T.Region.region = Asm.S.P.T.Region.region
++                            and type P.T.ccexp = Asm.S.P.T.ccexp
++                            and type P.T.fexp = Asm.S.P.T.fexp
++                            (* and type P.T.labexp = Asm.S.P.T.labexp *)
++                            and type P.T.mlrisc = Asm.S.P.T.mlrisc
++                            and type P.T.oper = Asm.S.P.T.oper
++                            and type P.T.rep = Asm.S.P.T.rep
++                            and type P.T.rexp = Asm.S.P.T.rexp
++                            and type P.T.stm = Asm.S.P.T.stm
++   structure InsnProps  : INSN_PROPERTIES (* where I = I *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
++   structure Rewrite    : REWRITE_INSTRUCTIONS (* where I = I *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
++   structure SpillInstr : ARCH_SPILL_INSTR (* where I = I *)
++                          where type I.addressing_mode = I.addressing_mode
++                            and type I.ea = I.ea
++                            and type I.instr = I.instr
++                            and type I.instruction = I.instruction
++                            and type I.operand = I.operand
+ 
+       (* Spilling heuristics determines which node should be spilled.
+        * You can use Chaitin, ChowHenessey, or one of your own.
+@@ -26,7 +66,12 @@
+        * spill code.  You can use RASpill, or RASpillWithRenaming,
+        * or write your own if you are feeling adventurous.
+        *)
+-   structure Spill : RA_SPILL where I = I
++   structure Spill : RA_SPILL (* where I = I *)
++                     where type I.addressing_mode = I.addressing_mode
++                       and type I.ea = I.ea
++                       and type I.instr = I.instr
++                       and type I.instruction = I.instruction
++                       and type I.operand = I.operand
+           
+    val architecture : string
+ 
+@@ -85,9 +130,9 @@
+    (* The generic register allocator *)
+    structure Ra =
+       RegisterAllocator
+-        (SpillHeur) 
++        (structure SpillHeuristics = SpillHeur
+         (* (ChowHennessySpillHeur) *)
+-        (ClusterRA 
++         structure Flowgraph = ClusterRA 
+           (structure Flowgraph = CFG
+            structure Asm = Asm
+            structure InsnProps = InsnProps
+diff -Naur MLRISC/README.mlton MLRISC-mlton/README.mlton
+--- MLRISC/README.mlton	1969-12-31 19:00:00.000000000 -0500
++++ MLRISC-mlton/README.mlton	2006-03-04 12:08:00.000000000 -0500
+@@ -0,0 +1,8 @@
++The following changes were made to the MLRISC Library, in addition to
++deriving the {{{.mlb}}} file from the {{{.cm}}} files:
++ * eliminate or-patterns: Duplicate the whole match ({{{p => e}}}) at each of the patterns.
++ * eliminate vector constants: Change {{{#[}}} to {{{Vector.fromList [}}}.
++ * eliminate {{{withtype}}} in signatures
++ * eliminate sequential {{{withtype}}} expansions: Most could be rewritten as a sequence of type definitions and datatype definitions.
++ * eliminate higher-order functors: Every higher-order functor definition and application could be uncurried in the obvious way.
++ * eliminate {{{where <str> = <str>}}}: Quite painful to expand out all the flexible types in the respective structures.  Furthermore, many of the implied type equalities aren't needed, but it's too hard to pick out the right ones.
+diff -Naur MLRISC/sparc/backpatch/sparcDelaySlotProps.sml MLRISC-mlton/sparc/backpatch/sparcDelaySlotProps.sml
+--- MLRISC/sparc/backpatch/sparcDelaySlotProps.sml	2002-01-09 14:44:20.000000000 -0500
++++ MLRISC-mlton/sparc/backpatch/sparcDelaySlotProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,11 @@
+ functor SparcDelaySlots
+    (structure I : SPARCINSTR
+-    structure P : INSN_PROPERTIES where I = I
++    structure P : INSN_PROPERTIES (* where I = I *)
++                  where type I.addressing_mode = I.addressing_mode
++                    and type I.ea = I.ea
++                    and type I.instr = I.instr
++                    and type I.instruction = I.instruction
++                    and type I.operand = I.operand
+     (* sharing/defn conflict:   sharing P.I = I*)
+    ) : DELAY_SLOT_PROPERTIES =
+ struct
+@@ -113,10 +118,16 @@
+             clash(toSL defUseOther)
+         end
+ 
+-    fun delaySlotCandidate{jmp,delaySlot=
+-              (  I.INSTR(I.CALL _) | I.INSTR(I.Bicc _) | I.INSTR(I.FBfcc _) 
+-               | I.INSTR(I.Ticc _) | I.INSTR(I.BR _) | I.INSTR(I.JMP _) | I.INSTR(I.JMPL _) 
+-	       | I.INSTR(I.RET _) | I.INSTR(I.BP _) | I.INSTR(I.FCMP _))} = false
++    fun delaySlotCandidate{jmp,delaySlot=I.INSTR(I.CALL _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.Bicc _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.FBfcc _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.Ticc _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BR _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.JMP _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.JMPL _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.RET _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.BP _)} = false
++      | delaySlotCandidate{jmp,delaySlot=I.INSTR(I.FCMP _)} = false
+       | delaySlotCandidate{jmp=I.ANNOTATION{i,...},delaySlot} = 
+            delaySlotCandidate{jmp=i,delaySlot=delaySlot}
+       | delaySlotCandidate{jmp,delaySlot=I.ANNOTATION{i,...}} = 
+diff -Naur MLRISC/sparc/backpatch/sparcJumps.sml MLRISC-mlton/sparc/backpatch/sparcJumps.sml
+--- MLRISC/sparc/backpatch/sparcJumps.sml	2003-05-22 18:46:23.000000000 -0400
++++ MLRISC-mlton/sparc/backpatch/sparcJumps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,8 +5,67 @@
+  *)
+ functor SparcJumps
+   (structure Instr:SPARCINSTR
+-   structure Shuffle:SPARCSHUFFLE where I = Instr
+-   structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++   structure Shuffle:SPARCSHUFFLE (* where I = Instr *)
++                     where type I.Constant.const = Instr.Constant.const
++                       and type I.Region.region = Instr.Region.region
++                       and type I.T.Basis.cond = Instr.T.Basis.cond
++                       and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                       and type I.T.Basis.ext = Instr.T.Basis.ext
++                       and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                       and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                       and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                       and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                       and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                       and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                       and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                       and type I.T.ccexp = Instr.T.ccexp
++                       and type I.T.fexp = Instr.T.fexp
++                       (* and type I.T.labexp = Instr.T.labexp *)
++                       and type I.T.mlrisc = Instr.T.mlrisc
++                       and type I.T.oper = Instr.T.oper
++                       and type I.T.rep = Instr.T.rep
++                       and type I.T.rexp = Instr.T.rexp
++                       and type I.T.stm = Instr.T.stm
++                       and type I.arith = Instr.arith
++                       and type I.branch = Instr.branch
++                       and type I.cc = Instr.cc
++                       and type I.ea = Instr.ea
++                       and type I.farith1 = Instr.farith1
++                       and type I.farith2 = Instr.farith2
++                       and type I.fbranch = Instr.fbranch
++                       and type I.fcmp = Instr.fcmp
++                       and type I.fload = Instr.fload
++                       and type I.fsize = Instr.fsize
++                       and type I.fstore = Instr.fstore
++                       and type I.instr = Instr.instr
++                       and type I.instruction = Instr.instruction
++                       and type I.load = Instr.load
++                       and type I.operand = Instr.operand
++                       and type I.prediction = Instr.prediction
++                       and type I.rcond = Instr.rcond
++                       and type I.shift = Instr.shift
++                       and type I.store = Instr.store
++   structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
+   ) : SDI_JUMPS = 
+ struct
+   structure I = Instr
+@@ -51,7 +110,9 @@
+ 	    | I.SAVE{i,...} => oper i
+ 	    | I.RESTORE{i,...} => oper i
+ 	    (* The following is only true of Version 8 *)
+-	    | I.FPop1{a=(I.FMOVd | I.FNEGd | I.FABSd), ...} => true
++	    | I.FPop1{a=I.FMOVd, ...} => true
++	    | I.FPop1{a=I.FNEGd, ...} => true
++	    | I.FPop1{a=I.FABSd, ...} => true
+ 	    | _ => false
+ 	end
+ 
+@@ -70,11 +131,15 @@
+ 	 | (I.BP{nop=true,...}) => 8
+ 	 | (I.RET{nop=true,...}) => 8
+ 	 | (I.FCMP{nop=true,...}) => 8
+-	 | (I.FPop1{a=(I.FMOVd | I.FNEGd | I.FABSd),...}) => 8
++	 | (I.FPop1{a=I.FMOVd,...}) => 8
++	 | (I.FPop1{a=I.FNEGd,...}) => 8
++	 | (I.FPop1{a=I.FABSd,...}) => 8
+ 	 |  _          => 4
+       (*esac*))
+ 
+-  fun maxSize (I.INSTR(I.FPop1{a=(I.FMOVd | I.FNEGd | I.FABSd),...})) = 8
++  fun maxSize (I.INSTR(I.FPop1{a=I.FMOVd,...})) = 8
++    | maxSize (I.INSTR(I.FPop1{a=I.FNEGd,...})) = 8
++    | maxSize (I.INSTR(I.FPop1{a=I.FABSd,...})) = 8
+     | maxSize (I.ANNOTATION{i,...}) = maxSize i
+     | maxSize _		   = 4
+ 
+@@ -85,7 +150,11 @@
+   fun immed30 n = ~0x4000000 <= n andalso n < 0x3ffffff
+ 
+   fun instrLength([],n) = n
+-    | instrLength(I.INSTR(I.FPop1{a=(I.FMOVd | I.FNEGd | I.FABSd),...})::is,n) =
++    | instrLength(I.INSTR(I.FPop1{a=I.FMOVd,...})::is,n) =
++        instrLength(is,n+8)
++    | instrLength(I.INSTR(I.FPop1{a=I.FNEGd,...})::is,n) =
++        instrLength(is,n+8)
++    | instrLength(I.INSTR(I.FPop1{a=I.FABSd,...})::is,n) =
+         instrLength(is,n+8)
+     | instrLength(_::is,n) = instrLength(is,n+4)
+ 
+@@ -135,7 +204,9 @@
+ 	  | I.BP{label,nop,...} => branch19 label + delaySlot nop
+ 	  | I.CALL{label,...} => call label
+ 	  | I.WRY{i,...} => oper(i,12)
+- 	  | I.FPop1{a=(I.FMOVd | I.FNEGd | I.FABSd),...} => 8	    
++ 	  | I.FPop1{a=I.FMOVd,...} => 8	    
++ 	  | I.FPop1{a=I.FNEGd,...} => 8	    
++ 	  | I.FPop1{a=I.FABSd,...} => 8	    
+ 	  | _ => error "sdiSize"
+       end
+     | sdiSize _ = error "sdiSize"
+@@ -207,10 +278,15 @@
+ 	| (I.FBfcc _,8) => [instr]
+ 	| (I.BR _,8) => [instr]
+ 	| (I.BP _,8) => [instr]
+-	| (I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem},(12 | 16)) => 
++	| (I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem},12) => 
+ 	    expandImm(i,I.JMPL{r=r,i=I.REG C.asmTmpR,d=d,defs=defs,uses=uses,
+ 			       cutsTo=cutsTo,nop=nop,mem=mem})
+-	| (I.JMP{r,i,labs,nop},(12 | 16)) => 
++	| (I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem},16) => 
++	    expandImm(i,I.JMPL{r=r,i=I.REG C.asmTmpR,d=d,defs=defs,uses=uses,
++			       cutsTo=cutsTo,nop=nop,mem=mem})
++	| (I.JMP{r,i,labs,nop},12) => 
++	    expandImm(i,I.JMP{r=r,i=I.REG C.asmTmpR,labs=labs,nop=nop})
++	| (I.JMP{r,i,labs,nop},16) => 
+ 	    expandImm(i,I.JMP{r=r,i=I.REG C.asmTmpR,labs=labs,nop=nop})
+ 	| (I.Ticc{t,cc,r,i},12) =>
+ 	    expandImm(i,I.Ticc{t=t,cc=cc,r=r,i=I.REG C.asmTmpR})
+diff -Naur MLRISC/sparc/c-calls/sparc-c-calls.sml MLRISC-mlton/sparc/c-calls/sparc-c-calls.sml
+--- MLRISC/sparc/c-calls/sparc-c-calls.sml	2004-07-28 17:06:59.000000000 -0400
++++ MLRISC-mlton/sparc/c-calls/sparc-c-calls.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -105,15 +105,21 @@
+     fun roundup (i, a) = a * ((i + a - 1) div a)
+ 
+     (* calculate size and alignment for a C type *)
+-    fun szal (Ty.C_void | Ty.C_float | Ty.C_PTR |
+-	      Ty.C_signed (Ty.I_int | Ty.I_long) |
+-	      Ty.C_unsigned (Ty.I_int | Ty.I_long)) = (4, 4)
+-      | szal (Ty.C_double |
+-	      Ty.C_signed Ty.I_long_long |
+-	      Ty.C_unsigned Ty.I_long_long) = (8, 8)
++    fun szal Ty.C_void = (4, 4)
++      | szal Ty.C_float = (4, 4)
++      | szal Ty.C_PTR = (4, 4)
++      | szal (Ty.C_signed Ty.I_int) = (4, 4)
++      | szal (Ty.C_signed Ty.I_long) = (4, 4)
++      | szal (Ty.C_unsigned Ty.I_int) = (4, 4)
++      | szal (Ty.C_unsigned Ty.I_long) = (4, 4)
++      | szal Ty.C_double = (8, 8)
++      | szal (Ty.C_signed Ty.I_long_long) = (8, 8)
++      | szal (Ty.C_unsigned Ty.I_long_long) = (8, 8)
+       | szal (Ty.C_long_double) = (16, 8)
+-      | szal (Ty.C_signed Ty.I_char | Ty.C_unsigned Ty.I_char) = (1, 1)
+-      | szal (Ty.C_signed Ty.I_short | Ty.C_unsigned Ty.I_short) = (2, 2)
++      | szal (Ty.C_signed Ty.I_char) = (1, 1)
++      | szal (Ty.C_unsigned Ty.I_char) = (1, 1)
++      | szal (Ty.C_signed Ty.I_short) = (2, 2)
++      | szal (Ty.C_unsigned Ty.I_short) = (2, 2)
+       | szal (Ty.C_ARRAY (t, n)) = let val (s, a) = szal t in (n * s, a) end
+       | szal (Ty.C_STRUCT l) =
+ 	let (* i: next free memory address (relative to struct start);
+@@ -183,21 +189,24 @@
+ 		  callComment, args } = let
+ 	val { conv, retTy, paramTys } = proto
+ 	val _ = case conv of
+-		    ("" | "ccall") => ()
++		    "" => ()
++		  | "ccall" => ()
+ 		  | _ => error (concat ["unknown calling convention \"",
+ 					String.toString conv, "\""])
+ 	val res_szal =
+ 	    case retTy of
+-		(Ty.C_long_double | Ty.C_STRUCT _ | Ty.C_UNION _) =>
+-		  SOME (szal retTy)
++		Ty.C_long_double => SOME (szal retTy)
++	      | Ty.C_STRUCT _ => SOME (szal retTy)
++	      | Ty.C_UNION _ => SOME (szal retTy)
+ 	      | _ => NONE
+ 
+ 	val nargwords = let
+ 	    fun loop ([], n) = n
+ 	      | loop (t :: tl, n) =
+ 		loop (tl, (case t of
+-			       (Ty.C_double | Ty.C_signed Ty.I_long_long |
+-				Ty.C_unsigned Ty.I_long_long) => 2
++			       Ty.C_double => 2
++			     | (Ty.C_signed Ty.I_long_long) => 2
++			     | (Ty.C_unsigned Ty.I_long_long) => 2
+ 			     | _ => 1) + n)
+ 	in
+ 	    loop (paramTys, 0)
+@@ -225,17 +234,21 @@
+ 		    T.STORE (ty, addli (spreg, to_off), a, stack) :: cpc
+ 	    in
+ 		case t of
+-		    (Ty.C_void | Ty.C_PTR |
+-		     Ty.C_signed (Ty.I_int | Ty.I_long) |
+-		     Ty.C_unsigned (Ty.I_int | Ty.I_long)) => ldst 32
+-		  | (Ty.C_signed Ty.I_char | Ty.C_unsigned Ty.I_char) => ldst 8
+-		  | (Ty.C_signed Ty.I_short | Ty.C_unsigned Ty.I_short) =>
+-		    ldst 16
+-		  | (Ty.C_signed Ty.I_long_long |
+-		     Ty.C_unsigned Ty.I_long_long) => ldst 64
++		    Ty.C_void => ldst 32
++		  | Ty.C_PTR => ldst 32
++		  | (Ty.C_signed Ty.I_int) => ldst 32
++		  | (Ty.C_signed Ty.I_long) => ldst 32
++		  | (Ty.C_unsigned Ty.I_int) => ldst 32
++		  | (Ty.C_unsigned Ty.I_long) => ldst 32
++		  | (Ty.C_signed Ty.I_char) => ldst 8
++		  | (Ty.C_unsigned Ty.I_char) => ldst 8
++		  | (Ty.C_signed Ty.I_short) => ldst 16
++		  | (Ty.C_unsigned Ty.I_short) => ldst 16
++		  | (Ty.C_signed Ty.I_long_long) => ldst 64
++		  | (Ty.C_unsigned Ty.I_long_long) => ldst 64
+ 		  | (Ty.C_ARRAY _) =>
+ 		    error "ARRAY within gather/scatter struct"
+-		  | (Ty.C_STRUCT _ | Ty.C_UNION _) =>
++		  | (Ty.C_STRUCT _) =>
+ 		    (* Here we have to do the equivalent of a "memcpy". *)
+ 		    let val from = a (* argument is address of struct *)
+ 			fun cp (ty, incr) = let
+@@ -260,8 +273,34 @@
+ 			  | 2 => cp (16, 2)
+ 			  | _ => (* 4 or more *) cp (32, 4)
+ 		    end
+-		  | (Ty.C_float | Ty.C_double | Ty.C_long_double) =>
+-		    error "floating point type does not match ARG"
++		  | (Ty.C_UNION _) =>
++		    (* Here we have to do the equivalent of a "memcpy". *)
++		    let val from = a (* argument is address of struct *)
++			fun cp (ty, incr) = let
++			    fun load_from from_off =
++				T.LOAD (32, addli (from, from_off), mem)
++			    (* from_off is relative to from,
++			     * to_off is relative to %sp *)
++			    fun loop (i, from_off, to_off, cpc) =
++				if i <= 0 then cpc
++				else loop (i - incr,
++					   from_off + incr, to_off + incr,
++					   T.STORE (ty, addli (spreg, to_off),
++						    load_from from_off,
++						    stack)
++					   :: cpc)
++			in
++			    loop (sz, 0, to_off, cpc)
++			end
++		    in
++			case al of
++			    1 => cp (8, 1)
++			  | 2 => cp (16, 2)
++			  | _ => (* 4 or more *) cp (32, 4)
++		    end
++		  | Ty.C_float => error "floating point type does not match ARG"
++		  | Ty.C_double => error "floating point type does not match ARG"
++		  | Ty.C_long_double => error "floating point type does not match ARG"
+ 	    end
+ (*
+ 	  | struct_copy (_, _, ARGS args, Ty.C_STRUCT tl, to_off, cpc) =
+@@ -334,10 +373,13 @@
+ 			else dwordmemarg (tmpaddr, stack, [mkstore tmpaddr])
+ 		in
+ 		    case (t, a) of
+-			((Ty.C_void | Ty.C_PTR | Ty.C_ARRAY _ |
+-			  Ty.C_unsigned (Ty.I_int | Ty.I_long) |
+-			  Ty.C_signed (Ty.I_int | Ty.I_long)),
+-			 ARG a) => wordarg (a, cpc, ss)
++			(Ty.C_void, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_PTR, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_ARRAY _, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_unsigned Ty.I_int, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_unsigned Ty.I_long, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_signed Ty.I_int, ARG a) => wordarg (a, cpc, ss)
++		      | (Ty.C_signed Ty.I_long, ARG a) => wordarg (a, cpc, ss)
+ 		      | (Ty.C_signed Ty.I_char, ARG a) =>
+ 			wordarg (T.SX (32, 8, a), cpc, ss)
+ 		      | (Ty.C_unsigned Ty.I_char, ARG a) =>
+@@ -346,8 +388,13 @@
+ 			wordarg (T.SX (32, 16, a), cpc, ss)
+ 		      | (Ty.C_unsigned Ty.I_short, ARG a) =>
+ 			wordarg (T.ZX (32, 16, a), cpc, ss)
+-		      | ((Ty.C_signed Ty.I_long_long |
+-			  Ty.C_unsigned Ty.I_long_long), ARG a) =>
++		      | (Ty.C_signed Ty.I_long_long, ARG a) =>
++			(case a of
++			     T.LOAD (_, addr, region) =>
++			     dwordmemarg (addr, region, [])
++			   | _ => dwordarg (fn addr =>
++					       T.STORE (64, addr, a, stack)))
++		      | (Ty.C_unsigned Ty.I_long_long, ARG a) =>
+ 			(case a of
+ 			     T.LOAD (_, addr, region) =>
+ 			     dwordmemarg (addr, region, [])
+@@ -390,7 +437,20 @@
+ 				     T.FSTORE (128, ssaddr, a, stack) :: cpc,
+ 				     ss' + 16)
+ 			end
+-		      | (t as (Ty.C_STRUCT _ | Ty.C_UNION _), a) => let
++		      | (t as (Ty.C_STRUCT _), a) => let
++			    (* copy entire struct into scratch space
++			     * (aligned according to struct's alignment
++			     * requirements).  The address of the scratch
++			     * copy is then passed as a regular 32-bit
++			     * argument. *)
++			    val (sz, al) = szal t
++			    val ss' = roundup (ss, al)
++			    val ssaddr = addli (spreg, ss')
++			    val cpc' = struct_copy (sz, al, a, t, ss', cpc)
++			in
++			    wordarg (ssaddr, cpc', ss' + sz)
++			end
++		      | (t as (Ty.C_UNION _), a) => let
+ 			    (* copy entire struct into scratch space
+ 			     * (aligned according to struct's alignment
+ 			     * requirements).  The address of the scratch
+@@ -437,17 +497,32 @@
+ 		Ty.C_float => [T.FPR (T.FREG (32, FP 0))]
+ 	      | Ty.C_double => [T.FPR (T.FREG (64, FP 0))] (* %f0/%f1 *)
+ 	      | Ty.C_long_double => []
+-	      | (Ty.C_STRUCT _ | Ty.C_UNION _) => []
++	      | (Ty.C_STRUCT _) => []
++	      | (Ty.C_UNION _) => []
+ 	      | Ty.C_ARRAY _ => error "array return type"
+-	      | (Ty.C_PTR | Ty.C_void |
+-		 Ty.C_signed (Ty.I_int | Ty.I_long) |
+-		 Ty.C_unsigned (Ty.I_int | Ty.I_long)) =>
++	      | Ty.C_PTR =>
++		[T.GPR (T.REG (32, oreg 0))]
++	      | Ty.C_void =>
++		[T.GPR (T.REG (32, oreg 0))]
++	      | Ty.C_signed Ty.I_int =>
+ 		[T.GPR (T.REG (32, oreg 0))]
+-	      | (Ty.C_signed Ty.I_char | Ty.C_unsigned Ty.I_char) =>
++	      | Ty.C_signed Ty.I_long =>
++		[T.GPR (T.REG (32, oreg 0))]
++	      | Ty.C_unsigned Ty.I_int =>
++		[T.GPR (T.REG (32, oreg 0))]
++	      | Ty.C_unsigned Ty.I_long =>
++		[T.GPR (T.REG (32, oreg 0))]
++	      | Ty.C_signed Ty.I_char =>
+ 		[T.GPR (T.REG (8, oreg 0))]
+-	      | (Ty.C_signed Ty.I_short | Ty.C_unsigned Ty.I_short) =>
++	      | Ty.C_unsigned Ty.I_char =>
++		[T.GPR (T.REG (8, oreg 0))]
++	      | Ty.C_signed Ty.I_short =>
++		[T.GPR (T.REG (16, oreg 0))]
++	      | Ty.C_unsigned Ty.I_short =>
+ 		[T.GPR (T.REG (16, oreg 0))]
+-	      | (Ty.C_signed Ty.I_long_long | Ty.C_unsigned Ty.I_long_long) =>
++	      | Ty.C_signed Ty.I_long_long =>
++		[T.GPR (T.REG (64, oreg 0))]
++	      | Ty.C_unsigned Ty.I_long_long =>
+ 		[T.GPR (T.REG (64, oreg 0))]
+ 
+ 	val { save, restore } = saveRestoreDedicated defs
+diff -Naur MLRISC/sparc/emit/sparcAsm.sml MLRISC-mlton/sparc/emit/sparcAsm.sml
+--- MLRISC/sparc/emit/sparcAsm.sml	2002-05-18 14:21:53.000000000 -0400
++++ MLRISC-mlton/sparc/emit/sparcAsm.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,12 +6,88 @@
+ 
+ 
+ functor SparcAsmEmitter(structure S : INSTRUCTION_STREAM
+-                        structure Instr : SPARCINSTR
+-                           where T = S.P.T
+-                        structure Shuffle : SPARCSHUFFLE
+-                           where I = Instr
+-                        structure MLTreeEval : MLTREE_EVAL
+-                           where T = Instr.T
++                        structure Instr : SPARCINSTR (* where T = S.P.T *)
++                                          where type T.Basis.cond = S.P.T.Basis.cond
++                                            and type T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++                                            and type T.Basis.ext = S.P.T.Basis.ext
++                                            and type T.Basis.fcond = S.P.T.Basis.fcond
++                                            and type T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++                                            and type T.Constant.const = S.P.T.Constant.const
++                                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++                                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++                                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++                                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++                                            and type T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++                                            and type T.Region.region = S.P.T.Region.region
++                                            and type T.ccexp = S.P.T.ccexp
++                                            and type T.fexp = S.P.T.fexp
++                                            (* and type T.labexp = S.P.T.labexp *)
++                                            and type T.mlrisc = S.P.T.mlrisc
++                                            and type T.oper = S.P.T.oper
++                                            and type T.rep = S.P.T.rep
++	                                    and type T.rexp = S.P.T.rexp
++                                            and type T.stm = S.P.T.stm
++                        structure Shuffle : SPARCSHUFFLE (* where I = Instr *)
++                                            where type I.Constant.const = Instr.Constant.const
++                                              and type I.Region.region = Instr.Region.region
++                                              and type I.T.Basis.cond = Instr.T.Basis.cond
++                                              and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                              and type I.T.Basis.ext = Instr.T.Basis.ext
++                                              and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                              and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                              and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                              and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                              and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                              and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                              and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                              and type I.T.ccexp = Instr.T.ccexp
++                                              and type I.T.fexp = Instr.T.fexp
++                                              (* and type I.T.labexp = Instr.T.labexp *)
++                                              and type I.T.mlrisc = Instr.T.mlrisc
++                                              and type I.T.oper = Instr.T.oper
++                                              and type I.T.rep = Instr.T.rep
++                                              and type I.T.rexp = Instr.T.rexp
++                                              and type I.T.stm = Instr.T.stm
++                                              and type I.arith = Instr.arith
++                                              and type I.branch = Instr.branch
++                                              and type I.cc = Instr.cc
++                                              and type I.ea = Instr.ea
++                                              and type I.farith1 = Instr.farith1
++                                              and type I.farith2 = Instr.farith2
++                                              and type I.fbranch = Instr.fbranch
++                                              and type I.fcmp = Instr.fcmp
++                                              and type I.fload = Instr.fload
++                                              and type I.fsize = Instr.fsize
++                                              and type I.fstore = Instr.fstore
++                                              and type I.instr = Instr.instr
++                                              and type I.instruction = Instr.instruction
++                                              and type I.load = Instr.load
++                                              and type I.operand = Instr.operand
++                                              and type I.prediction = Instr.prediction
++                                              and type I.rcond = Instr.rcond
++                                              and type I.shift = Instr.shift
++                                              and type I.store = Instr.store
++                        structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                               where type T.Basis.cond = Instr.T.Basis.cond
++                                                 and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                                 and type T.Basis.ext = Instr.T.Basis.ext
++                                                 and type T.Basis.fcond = Instr.T.Basis.fcond
++                                                 and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                                 and type T.Constant.const = Instr.T.Constant.const
++                                                 and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                                 and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                                 and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                                 and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                                 and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                                 and type T.Region.region = Instr.T.Region.region
++                                                 and type T.ccexp = Instr.T.ccexp
++                                                 and type T.fexp = Instr.T.fexp
++                                                 (* and type T.labexp = Instr.T.labexp *)
++                                                 and type T.mlrisc = Instr.T.mlrisc
++                                                 and type T.oper = Instr.T.oper
++                                                 and type T.rep = Instr.T.rep
++                                                 and type T.rexp = Instr.T.rexp
++                                                 and type T.stm = Instr.T.stm
+ 
+ (*#line 466.21 "sparc/sparc.mdl"*)
+                         val V9 : bool
+diff -Naur MLRISC/sparc/emit/sparcMC.sml MLRISC-mlton/sparc/emit/sparcMC.sml
+--- MLRISC/sparc/emit/sparcMC.sml	2002-01-09 14:44:20.000000000 -0500
++++ MLRISC-mlton/sparc/emit/sparcMC.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,7 +6,27 @@
+ 
+ 
+ functor SparcMCEmitter(structure Instr : SPARCINSTR
+-                       structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++                       structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                              where type T.Basis.cond = Instr.T.Basis.cond
++                                                and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                                and type T.Basis.ext = Instr.T.Basis.ext
++                                                and type T.Basis.fcond = Instr.T.Basis.fcond
++                                                and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                                and type T.Constant.const = Instr.T.Constant.const
++                                                and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                                and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                                and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                                and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                                and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                                and type T.Region.region = Instr.T.Region.region
++                                                and type T.ccexp = Instr.T.ccexp
++                                                and type T.fexp = Instr.T.fexp
++                                                (* and type T.labexp = Instr.T.labexp *)
++                                                and type T.mlrisc = Instr.T.mlrisc
++                                                and type T.oper = Instr.T.oper
++                                                and type T.rep = Instr.T.rep
++                                                and type T.rexp = Instr.T.rexp
++                                                and type T.stm = Instr.T.stm
+                        structure Stream : INSTRUCTION_STREAM 
+                        structure CodeString : CODE_STRING
+                       ) : INSTRUCTION_EMITTER =
+@@ -47,6 +67,7 @@
+        (* note: fromLargeWord strips the high order bits! *)
+        fun eByteW w =
+        let val i = !loc
++           val w = W.toLargeWord w
+        in loc := i + 1; CodeString.update(i,Word8.fromLargeWord w) end
+    
+        fun doNothing _ = ()
+diff -Naur MLRISC/sparc/flowgraph/sparcGasPseudoOps.sml MLRISC-mlton/sparc/flowgraph/sparcGasPseudoOps.sml
+--- MLRISC/sparc/flowgraph/sparcGasPseudoOps.sml	2001-11-21 13:44:20.000000000 -0500
++++ MLRISC-mlton/sparc/flowgraph/sparcGasPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,26 @@
+ functor SparcGasPseudoOps 
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL  where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+     ) : PSEUDO_OPS_BASIS = 
+ 
+ struct
+diff -Naur MLRISC/sparc/instructions/sparccomp-instr-ext.sml MLRISC-mlton/sparc/instructions/sparccomp-instr-ext.sml
+--- MLRISC/sparc/instructions/sparccomp-instr-ext.sml	2001-12-06 21:45:29.000000000 -0500
++++ MLRISC-mlton/sparc/instructions/sparccomp-instr-ext.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -7,12 +7,54 @@
+  *)
+ signature SPARCCOMP_INSTR_EXT = sig
+     structure T : MLTREE
+-    structure I : SPARCINSTR
+-    		where T = T
+-    structure TS : MLTREE_STREAM
+-		where T = I.T
+-    structure CFG : CONTROL_FLOW_GRAPH 
+-    		where I = I 
++    structure I : SPARCINSTR (* where T = T *)
++                  where type T.Basis.cond = T.Basis.cond
++                    and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                    and type T.Basis.ext = T.Basis.ext
++                    and type T.Basis.fcond = T.Basis.fcond
++                    and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                    and type T.Constant.const = T.Constant.const
++                    and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                    and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                    and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                    and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                    and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                    and type T.Region.region = T.Region.region
++                    and type T.ccexp = T.ccexp
++                    and type T.fexp = T.fexp
++                    (* and type T.labexp = T.labexp *)
++                    and type T.mlrisc = T.mlrisc
++                    and type T.oper = T.oper
++                    and type T.rep = T.rep
++                    and type T.rexp = T.rexp
++                    and type T.stm = T.stm
++    structure TS : MLTREE_STREAM (* where T = I.T *)
++                   where type T.Basis.cond = I.T.Basis.cond
++                     and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                     and type T.Basis.ext = I.T.Basis.ext
++                     and type T.Basis.fcond = I.T.Basis.fcond
++                     and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                     and type T.Constant.const = I.T.Constant.const
++                     and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                     and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                     and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                     and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                     and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                     and type T.Region.region = I.T.Region.region
++                     and type T.ccexp = I.T.ccexp
++                     and type T.fexp = I.T.fexp
++                     (* and type T.labexp = I.T.labexp *)
++                     and type T.mlrisc = I.T.mlrisc
++                     and type T.oper = I.T.oper
++                     and type T.rep = I.T.rep
++                     and type T.rexp = I.T.rexp
++                     and type T.stm = I.T.stm
++    structure CFG : CONTROL_FLOW_GRAPH (* where I = I *)
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
+ 
+ 
+     type reducer =
+@@ -27,11 +69,54 @@
+ 
+ functor SparcCompInstrExt 
+   (structure I   : SPARCINSTR
+-   structure TS  : MLTREE_STREAM
+-		where T = I.T
+-   structure CFG : CONTROL_FLOW_GRAPH 
+-   		where I = I
+-                  and P = TS.S.P
++   structure TS  : MLTREE_STREAM (* where T = I.T *)
++                   where type T.Basis.cond = I.T.Basis.cond
++                     and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                     and type T.Basis.ext = I.T.Basis.ext
++                     and type T.Basis.fcond = I.T.Basis.fcond
++                     and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                     and type T.Constant.const = I.T.Constant.const
++                     and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                     and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                     and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                     and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                     and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                     and type T.Region.region = I.T.Region.region
++                     and type T.ccexp = I.T.ccexp
++                     and type T.fexp = I.T.fexp
++                     (* and type T.labexp = I.T.labexp *)
++                     and type T.mlrisc = I.T.mlrisc
++                     and type T.oper = I.T.oper
++                     and type T.rep = I.T.rep
++	             and type T.rexp = I.T.rexp
++                     and type T.stm = I.T.stm
++   structure CFG : CONTROL_FLOW_GRAPH (* where I = I and P = TS.S.P *)
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
++                    where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                      and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                      and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                      and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                      and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                      and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                      and type P.T.Constant.const = TS.S.P.T.Constant.const
++                      and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                      and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                      and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                      and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                      and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                      and type P.T.Region.region = TS.S.P.T.Region.region
++                      and type P.T.ccexp = TS.S.P.T.ccexp
++                      and type P.T.fexp = TS.S.P.T.fexp
++                      (* and type P.T.labexp = TS.S.P.T.labexp *)
++                      and type P.T.mlrisc = TS.S.P.T.mlrisc
++                      and type P.T.oper = TS.S.P.T.oper
++                      and type P.T.rep = TS.S.P.T.rep
++                      and type P.T.rexp = TS.S.P.T.rexp
++                      and type P.T.stm = TS.S.P.T.stm
+   ) : SPARCCOMP_INSTR_EXT = 
+ struct
+     structure CFG = CFG
+diff -Naur MLRISC/sparc/instructions/sparcInstr.sml MLRISC-mlton/sparc/instructions/sparcInstr.sml
+--- MLRISC/sparc/instructions/sparcInstr.sml	2002-01-24 00:45:17.000000000 -0500
++++ MLRISC-mlton/sparc/instructions/sparcInstr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature SPARCINSTR =
+ sig
+    structure C : SPARCCELLS
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    structure T : MLTREE
+    structure Constant: CONSTANT
+    structure Region : REGION
+@@ -234,7 +243,7 @@
+               sz: int,          (* in bits *)
+               dst: CellsBasis.cell list,
+               src: CellsBasis.cell list,
+-              tmp: ea option (* NONE if |dst| = {src| = 1 *)}
++              tmp: ea option (* NONE if |dst| = |src| = 1 *)}
+    | ANNOTATION of {i:instruction, a:Annotations.annotation}
+    | INSTR of instr
+    val load : {l:load, d:CellsBasis.cell, r:CellsBasis.cell, i:operand, mem:Region.region} -> instruction
+diff -Naur MLRISC/sparc/instructions/sparcProps.sml MLRISC-mlton/sparc/instructions/sparcProps.sml
+--- MLRISC/sparc/instructions/sparcProps.sml	2002-03-11 22:56:22.000000000 -0500
++++ MLRISC-mlton/sparc/instructions/sparcProps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,8 +5,48 @@
+ 
+ functor SparcProps
+   (structure SparcInstr : SPARCINSTR
+-   structure MLTreeEval : MLTREE_EVAL where T = SparcInstr.T
+-   structure MLTreeHash : MLTREE_HASH where T = SparcInstr.T
++   structure MLTreeEval : MLTREE_EVAL (* where T = SparcInstr.T *)
++                          where type T.Basis.cond = SparcInstr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = SparcInstr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = SparcInstr.T.Basis.ext
++                            and type T.Basis.fcond = SparcInstr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = SparcInstr.T.Basis.rounding_mode
++                            and type T.Constant.const = SparcInstr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) SparcInstr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) SparcInstr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) SparcInstr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) SparcInstr.T.Extension.sx
++                            and type T.I.div_rounding_mode = SparcInstr.T.I.div_rounding_mode
++                            and type T.Region.region = SparcInstr.T.Region.region
++                            and type T.ccexp = SparcInstr.T.ccexp
++                            and type T.fexp = SparcInstr.T.fexp
++                            (* and type T.labexp = SparcInstr.T.labexp *)
++                            and type T.mlrisc = SparcInstr.T.mlrisc
++                            and type T.oper = SparcInstr.T.oper
++                            and type T.rep = SparcInstr.T.rep
++                            and type T.rexp = SparcInstr.T.rexp
++                            and type T.stm = SparcInstr.T.stm
++   structure MLTreeHash : MLTREE_HASH (* where T = SparcInstr.T *)
++                          where type T.Basis.cond = SparcInstr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = SparcInstr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = SparcInstr.T.Basis.ext
++                            and type T.Basis.fcond = SparcInstr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = SparcInstr.T.Basis.rounding_mode
++                            and type T.Constant.const = SparcInstr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) SparcInstr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) SparcInstr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) SparcInstr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) SparcInstr.T.Extension.sx
++                            and type T.I.div_rounding_mode = SparcInstr.T.I.div_rounding_mode
++                            and type T.Region.region = SparcInstr.T.Region.region
++                            and type T.ccexp = SparcInstr.T.ccexp
++                            and type T.fexp = SparcInstr.T.fexp
++                            (* and type T.labexp = SparcInstr.T.labexp *)
++                            and type T.mlrisc = SparcInstr.T.mlrisc
++                            and type T.oper = SparcInstr.T.oper
++                            and type T.rep = SparcInstr.T.rep
++                            and type T.rexp = SparcInstr.T.rexp
++                            and type T.stm = SparcInstr.T.stm
+    ) : INSN_PROPERTIES =
+ struct
+   structure I = SparcInstr
+diff -Naur MLRISC/sparc/mltree/sparc.sml MLRISC-mlton/sparc/mltree/sparc.sml
+--- MLRISC/sparc/mltree/sparc.sml	2003-08-28 17:58:47.000000000 -0400
++++ MLRISC-mlton/sparc/mltree/sparc.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -14,12 +14,72 @@
+ 
+ functor Sparc
+   (structure SparcInstr : SPARCINSTR
+-   structure PseudoInstrs : SPARC_PSEUDO_INSTR 
+-   			where I = SparcInstr
+-   structure ExtensionComp : MLTREE_EXTENSION_COMP
+-   			where I = SparcInstr
+-			  and T = SparcInstr.T
+-
++   structure PseudoInstrs : SPARC_PSEUDO_INSTR (* where I = SparcInstr *)
++                            where type I.Constant.const = SparcInstr.Constant.const
++                              and type I.Region.region = SparcInstr.Region.region
++                              and type I.T.Basis.cond = SparcInstr.T.Basis.cond
++                              and type I.T.Basis.div_rounding_mode = SparcInstr.T.Basis.div_rounding_mode
++                              and type I.T.Basis.ext = SparcInstr.T.Basis.ext
++                              and type I.T.Basis.fcond = SparcInstr.T.Basis.fcond
++                              and type I.T.Basis.rounding_mode = SparcInstr.T.Basis.rounding_mode
++                              and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) SparcInstr.T.Extension.ccx
++                              and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) SparcInstr.T.Extension.fx
++                              and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) SparcInstr.T.Extension.rx
++                              and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) SparcInstr.T.Extension.sx
++                              and type I.T.I.div_rounding_mode = SparcInstr.T.I.div_rounding_mode
++                              and type I.T.ccexp = SparcInstr.T.ccexp
++                              and type I.T.fexp = SparcInstr.T.fexp
++                              (* and type I.T.labexp = SparcInstr.T.labexp *)
++                              and type I.T.mlrisc = SparcInstr.T.mlrisc
++                              and type I.T.oper = SparcInstr.T.oper
++                              and type I.T.rep = SparcInstr.T.rep
++                              and type I.T.rexp = SparcInstr.T.rexp
++                              and type I.T.stm = SparcInstr.T.stm
++                              and type I.arith = SparcInstr.arith
++                              and type I.branch = SparcInstr.branch
++                              and type I.cc = SparcInstr.cc
++                              and type I.ea = SparcInstr.ea
++                              and type I.farith1 = SparcInstr.farith1
++                              and type I.farith2 = SparcInstr.farith2
++                              and type I.fbranch = SparcInstr.fbranch
++                              and type I.fcmp = SparcInstr.fcmp
++                              and type I.fload = SparcInstr.fload
++                              and type I.fsize = SparcInstr.fsize
++                              and type I.fstore = SparcInstr.fstore
++                              and type I.instr = SparcInstr.instr
++                              and type I.instruction = SparcInstr.instruction
++                              and type I.load = SparcInstr.load
++                              and type I.operand = SparcInstr.operand
++                              and type I.prediction = SparcInstr.prediction
++                              and type I.rcond = SparcInstr.rcond
++                              and type I.shift = SparcInstr.shift
++                              and type I.store = SparcInstr.store
++   structure ExtensionComp : MLTREE_EXTENSION_COMP (* where I = SparcInstr and T = SparcInstr.T *)
++                             where type I.addressing_mode = SparcInstr.addressing_mode
++                               and type I.ea = SparcInstr.ea
++                               and type I.instr = SparcInstr.instr
++                               and type I.instruction = SparcInstr.instruction
++                               and type I.operand = SparcInstr.operand
++                             where type T.Basis.cond = SparcInstr.T.Basis.cond
++                               and type T.Basis.div_rounding_mode = SparcInstr.T.Basis.div_rounding_mode
++                               and type T.Basis.ext = SparcInstr.T.Basis.ext
++                               and type T.Basis.fcond = SparcInstr.T.Basis.fcond
++                               and type T.Basis.rounding_mode = SparcInstr.T.Basis.rounding_mode
++                               and type T.Constant.const = SparcInstr.T.Constant.const
++                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) SparcInstr.T.Extension.ccx
++                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) SparcInstr.T.Extension.fx
++                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) SparcInstr.T.Extension.rx
++                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) SparcInstr.T.Extension.sx
++                               and type T.I.div_rounding_mode = SparcInstr.T.I.div_rounding_mode
++                               and type T.Region.region = SparcInstr.T.Region.region
++                               and type T.ccexp = SparcInstr.T.ccexp
++                               and type T.fexp = SparcInstr.T.fexp
++                               (* and type T.labexp = SparcInstr.T.labexp *)
++                               and type T.mlrisc = SparcInstr.T.mlrisc
++                               and type T.oper = SparcInstr.T.oper
++                               and type T.rep = SparcInstr.T.rep
++                               and type T.rexp = SparcInstr.T.rexp
++                               and type T.stm = SparcInstr.T.stm
+ 			  
+    (* 
+     * The client should also specify these parameters.
+@@ -27,7 +87,7 @@
+     * The code generator will use alternative sequences that are
+     * cheaper when their costs are lower.
+     *)
+-   val muluCost : int ref  (* cost of unsigned multiplication in cycles *)
++   val muluCost : int ref (* cost of unsigned multiplication in cycles *)
+    val divuCost : int ref (* cost of unsigned division in cycles *)
+    val multCost : int ref (* cost of trapping/signed multiplication in cycles *)
+    val divtCost : int ref (* cost of trapping/signed division in cycles *)
+@@ -76,7 +136,8 @@
+                             val rep = NEITHER 
+                            )
+ 
+-  functor Multiply32 = MLTreeMult
++  (* signed, trapping version of multiply and divide *)
++  structure Mult32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CellsBasis
+@@ -89,54 +150,85 @@
+      fun slli{r,i,d} = [I.shift{s=I.SLL,r=r,i=I.IMMED i,d=d}]
+      fun srli{r,i,d} = [I.shift{s=I.SRL,r=r,i=I.IMMED i,d=d}]
+      fun srai{r,i,d} = [I.shift{s=I.SRA,r=r,i=I.IMMED i,d=d}]
+-    )
++    
++     val trapping = true
++     val multCost = multCost 
++     fun addv{r1,r2,d} = 
++         I.arith{a=I.ADDCC,r=r1,i=I.REG r2,d=d}::PseudoInstrs.overflowtrap32 
++     fun subv{r1,r2,d} = 
++         I.arith{a=I.SUBCC,r=r1,i=I.REG r2,d=d}::PseudoInstrs.overflowtrap32 
++     val sh1addv = NONE 
++     val sh2addv = NONE 
++     val sh3addv = NONE 
++     
++     val signed = true)
+ 
+-  functor Multiply64 = MLTreeMult
++  (* unsigned, non-trapping version of multiply and divide *)
++  structure Mulu32 = MLTreeMult
+     (structure I = I
+      structure T = T
+      structure CB = CellsBasis
+      type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
+      type argi = {r:CB.cell,i:int,d:CB.cell}
+-      
+-     val intTy = 64    
++  
++     val intTy = 32    
+      fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
+      fun add{r1,r2,d} = I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}
+-     fun slli{r,i,d} = [I.shift{s=I.SLLX,r=r,i=I.IMMED i,d=d}]
+-     fun srli{r,i,d} = [I.shift{s=I.SRLX,r=r,i=I.IMMED i,d=d}]
+-     fun srai{r,i,d} = [I.shift{s=I.SRAX,r=r,i=I.IMMED i,d=d}]
+-    )
+-
+-  (* signed, trapping version of multiply and divide *)
+-  structure Mult32 = Multiply32
+-    (val trapping = true
+-     val multCost = multCost 
+-     fun addv{r1,r2,d} = 
+-         I.arith{a=I.ADDCC,r=r1,i=I.REG r2,d=d}::PseudoInstrs.overflowtrap32 
+-     fun subv{r1,r2,d} = 
+-         I.arith{a=I.SUBCC,r=r1,i=I.REG r2,d=d}::PseudoInstrs.overflowtrap32 
++     fun slli{r,i,d} = [I.shift{s=I.SLL,r=r,i=I.IMMED i,d=d}]
++     fun srli{r,i,d} = [I.shift{s=I.SRL,r=r,i=I.IMMED i,d=d}]
++     fun srai{r,i,d} = [I.shift{s=I.SRA,r=r,i=I.IMMED i,d=d}]
++     
++     val trapping = false
++     val multCost = muluCost
++     fun addv{r1,r2,d} = [I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}]
++     fun subv{r1,r2,d} = [I.arith{a=I.SUB,r=r1,i=I.REG r2,d=d}]
+      val sh1addv = NONE 
+      val sh2addv = NONE 
+      val sh3addv = NONE 
+-    )
+-    (val signed = true)
++     
++     val signed = false)
+ 
+-  (* unsigned, non-trapping version of multiply and divide *)
+-  functor Mul32 = Multiply32
+-    (val trapping = false
++  (* signed, non-trapping version of multiply and divide *)
++  structure Muls32 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++  
++     val intTy = 32    
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}
++     fun slli{r,i,d} = [I.shift{s=I.SLL,r=r,i=I.IMMED i,d=d}]
++     fun srli{r,i,d} = [I.shift{s=I.SRL,r=r,i=I.IMMED i,d=d}]
++     fun srai{r,i,d} = [I.shift{s=I.SRA,r=r,i=I.IMMED i,d=d}]
++     
++     val trapping = false
+      val multCost = muluCost
+      fun addv{r1,r2,d} = [I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}]
+      fun subv{r1,r2,d} = [I.arith{a=I.SUB,r=r1,i=I.REG r2,d=d}]
+      val sh1addv = NONE 
+      val sh2addv = NONE 
+      val sh3addv = NONE 
+-    )
+-  structure Mulu32 = Mul32(val signed = false)
+-
+-  structure Muls32 = Mul32(val signed = true)
++     
++     val signed = true)
+ 
+   (* signed, trapping version of multiply and divide *)
+-  structure Mult64 = Multiply64
+-    (val trapping = true
++  structure Mult64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++      
++     val intTy = 64    
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}
++     fun slli{r,i,d} = [I.shift{s=I.SLLX,r=r,i=I.IMMED i,d=d}]
++     fun srli{r,i,d} = [I.shift{s=I.SRLX,r=r,i=I.IMMED i,d=d}]
++     fun srai{r,i,d} = [I.shift{s=I.SRAX,r=r,i=I.IMMED i,d=d}]
++     
++     val trapping = true
+      val multCost = multCost 
+      fun addv{r1,r2,d} = 
+          I.arith{a=I.ADDCC,r=r1,i=I.REG r2,d=d}::PseudoInstrs.overflowtrap64 
+@@ -145,22 +237,58 @@
+      val sh1addv = NONE 
+      val sh2addv = NONE 
+      val sh3addv = NONE 
+-    )
+-    (val signed = true)
++     
++     val signed = true)
+ 
+   (* unsigned, non-trapping version of multiply and divide *)
+-  functor Mul64 = Multiply64
+-    (val trapping = false
++  structure Mulu64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++      
++     val intTy = 64    
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}
++     fun slli{r,i,d} = [I.shift{s=I.SLLX,r=r,i=I.IMMED i,d=d}]
++     fun srli{r,i,d} = [I.shift{s=I.SRLX,r=r,i=I.IMMED i,d=d}]
++     fun srai{r,i,d} = [I.shift{s=I.SRAX,r=r,i=I.IMMED i,d=d}]
++     
++     val trapping = false
+      val multCost = muluCost
+      fun addv{r1,r2,d} = [I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}]
+      fun subv{r1,r2,d} = [I.arith{a=I.SUB,r=r1,i=I.REG r2,d=d}]
+      val sh1addv = NONE 
+      val sh2addv = NONE 
+      val sh3addv = NONE 
+-    )
+-  structure Mulu64 = Mul64(val signed = false)
++     
++     val signed = false)
+ 
+-  structure Muls64 = Mul64(val signed = true)
++  (* signed, non-trapping version of multiply and divide *)
++  structure Muls64 = MLTreeMult
++    (structure I = I
++     structure T = T
++     structure CB = CellsBasis
++     type arg  = {r1:CB.cell,r2:CB.cell,d:CB.cell}
++     type argi = {r:CB.cell,i:int,d:CB.cell}
++      
++     val intTy = 64    
++     fun mov{r,d} = COPY{dst=[d],src=[r],tmp=NONE}
++     fun add{r1,r2,d} = I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}
++     fun slli{r,i,d} = [I.shift{s=I.SLLX,r=r,i=I.IMMED i,d=d}]
++     fun srli{r,i,d} = [I.shift{s=I.SRLX,r=r,i=I.IMMED i,d=d}]
++     fun srai{r,i,d} = [I.shift{s=I.SRAX,r=r,i=I.IMMED i,d=d}]
++     
++     val trapping = false
++     val multCost = muluCost
++     fun addv{r1,r2,d} = [I.arith{a=I.ADD,r=r1,i=I.REG r2,d=d}]
++     fun subv{r1,r2,d} = [I.arith{a=I.SUB,r=r1,i=I.REG r2,d=d}]
++     val sh1addv = NONE 
++     val sh2addv = NONE 
++     val sh3addv = NONE 
++     
++     val signed = false)
+ 
+   datatype commutative = COMMUTE | NOCOMMUTE
+   datatype cc = REG    (* write to register *)
+@@ -215,7 +343,12 @@
+         | rcond T.GT  = I.RGZ
+         | rcond _ = error "rcond"
+ 
+-      fun signedCmp(T.LT | T.LE | T.EQ | T.NE | T.GE | T.GT) = true
++      fun signedCmp T.LT = true
++        | signedCmp T.LE = true
++        | signedCmp T.EQ = true
++        | signedCmp T.NE = true
++        | signedCmp T.GE = true
++        | signedCmp T.GT = true
+         | signedCmp _ = false
+ 
+       fun fcond T.==  = I.FBE
+@@ -367,8 +500,9 @@
+           mark(I.FPop2{a=a,r1=fexpr e1,r2=fexpr e2,d=d},an)
+ 
+       (* convert an expression into an addressing mode *)
+-      and addr(T.ADD(ty, (T.ADD (_, e, T.LI n)|
+-			  T.ADD (_, T.LI n, e)), T.LI n')) =
++      and addr(T.ADD(ty, T.ADD (_, e, T.LI n), T.LI n')) =
++	  addr(T.ADD (ty, e, T.LI (T.I.ADD (ty, n, n'))))
++	| addr(T.ADD(ty, T.ADD (_, T.LI n, e), T.LI n')) =
+ 	  addr(T.ADD (ty, e, T.LI (T.I.ADD (ty, n, n'))))
+ 	| addr(T.ADD(ty, T.SUB (_, e, T.LI n), T.LI n')) =
+ 	  addr(T.ADD (ty, e, T.LI (T.I.SUB (ty, n', n))))
+@@ -443,8 +577,9 @@
+       and branch(T.CMP(ty,cond,a,b),lab,an) =
+           let val (cond,a,b) =
+                   case a of
+-                    (T.LI _ | T.CONST _ | T.LABEL _) => 
+-                      (T.Basis.swapCond cond,b,a)
++                    T.LI _ => (T.Basis.swapCond cond,b,a)
++                  | T.CONST _ => (T.Basis.swapCond cond,b,a)
++                  | T.LABEL _ => (T.Basis.swapCond cond,b,a)
+                   | _ => (cond,a,b)
+           in  if V9 then
+                  branchV9(cond,a,b,lab,an)
+diff -Naur MLRISC/visualization/cfgViewer.sml MLRISC-mlton/visualization/cfgViewer.sml
+--- MLRISC/visualization/cfgViewer.sml	2002-07-09 12:00:15.000000000 -0400
++++ MLRISC-mlton/visualization/cfgViewer.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -1,10 +1,15 @@
+ functor CFGViewer
+    (structure CFG : CONTROL_FLOW_GRAPH
+     structure GraphViewer : GRAPH_VIEWER
+-    structure Asm	  : INSTRUCTION_EMITTER where I = CFG.I)
+-      : sig
+-	    val view : CFG.cfg -> unit
+-	end =
++    structure Asm	  : INSTRUCTION_EMITTER (* where I = CFG.I *)
++                            where type I.addressing_mode = CFG.I.addressing_mode
++                              and type I.ea = CFG.I.ea
++                              and type I.instr = CFG.I.instr
++                              and type I.instruction = CFG.I.instruction
++                              and type I.operand = CFG.I.operand
++   ) : sig
++	  val view : CFG.cfg -> unit
++       end =
+ struct
+    structure CFG = CFG
+    structure L = GraphLayout
+diff -Naur MLRISC/x86/backpatch/x86Jumps.sml MLRISC-mlton/x86/backpatch/x86Jumps.sml
+--- MLRISC/x86/backpatch/x86Jumps.sml	2002-01-09 14:44:21.000000000 -0500
++++ MLRISC-mlton/x86/backpatch/x86Jumps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,9 +5,72 @@
+ 
+ functor X86Jumps
+   (structure Instr : X86INSTR
+-   structure Eval : MLTREE_EVAL where T = Instr.T
+-   structure Shuffle : X86SHUFFLE where I = Instr
+-   structure MCEmitter : MC_EMIT where I = Instr) : SDI_JUMPS = 
++   structure Eval : MLTREE_EVAL (* where T = Instr.T *)
++                    where type T.Basis.cond = Instr.T.Basis.cond
++                      and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                      and type T.Basis.ext = Instr.T.Basis.ext
++                      and type T.Basis.fcond = Instr.T.Basis.fcond
++                      and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                      and type T.Constant.const = Instr.T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                      and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                      and type T.Region.region = Instr.T.Region.region
++                      and type T.ccexp = Instr.T.ccexp
++                      and type T.fexp = Instr.T.fexp
++                      (* and type T.labexp = Instr.T.labexp *)
++                      and type T.mlrisc = Instr.T.mlrisc
++                      and type T.oper = Instr.T.oper
++                      and type T.rep = Instr.T.rep
++                      and type T.rexp = Instr.T.rexp
++                      and type T.stm = Instr.T.stm
++   structure Shuffle : X86SHUFFLE (* where I = Instr *)
++                       where type I.Constant.const = Instr.Constant.const
++                         and type I.Region.region = Instr.Region.region
++                         and type I.T.Basis.cond = Instr.T.Basis.cond
++                         and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                         and type I.T.Basis.ext = Instr.T.Basis.ext
++                         and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                         and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                         and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                         and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                         and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                         and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                         and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                         and type I.T.ccexp = Instr.T.ccexp
++                         and type I.T.fexp = Instr.T.fexp
++                         (* and type I.T.labexp = Instr.T.labexp *)
++                         and type I.T.mlrisc = Instr.T.mlrisc
++                         and type I.T.oper = Instr.T.oper
++                         and type I.T.rep = Instr.T.rep
++                         and type I.T.rexp = Instr.T.rexp
++                         and type I.T.stm = Instr.T.stm
++                         (* and type I.addressing_mode = Instr.addressing_mode *)
++                         and type I.binaryOp = Instr.binaryOp
++                         and type I.bitOp = Instr.bitOp
++                         and type I.cond = Instr.cond
++                         and type I.fbinOp = Instr.fbinOp
++                         and type I.fenvOp = Instr.fenvOp
++                         and type I.fibinOp = Instr.fibinOp
++                         and type I.fsize = Instr.fsize
++                         and type I.funOp = Instr.funOp
++                         and type I.instr = Instr.instr
++                         and type I.instruction = Instr.instruction
++                         and type I.isize = Instr.isize
++                         and type I.move = Instr.move
++                         and type I.multDivOp = Instr.multDivOp
++                         and type I.operand = Instr.operand
++                         and type I.shiftOp = Instr.shiftOp
++                         and type I.unaryOp = Instr.unaryOp
++   structure MCEmitter : MC_EMIT (* where I = Instr *)
++                         where type I.addressing_mode = Instr.addressing_mode
++                           and type I.ea = Instr.ea
++                           and type I.instr = Instr.instr
++                           and type I.instruction = Instr.instruction
++                           and type I.operand = Instr.operand
++  ) : SDI_JUMPS = 
+ struct
+   structure I = Instr
+   structure C = I.C
+@@ -39,14 +102,20 @@
+ 	   | I.BINARY{src, dst, ...} => operand src orelse operand dst
+ 	   | I.MOVE{src, dst, ...} => operand src orelse operand dst
+ 	   | I.LEA{addr, ...} => operand addr
+-	   | ( I.CMPL arg | I.CMPW arg | I.CMPB arg 
+-	     | I.TESTL arg | I.TESTW arg | I.TESTB arg) => cmptest arg
++	   | I.CMPL arg => cmptest arg
++	   | I.CMPW arg => cmptest arg
++	   | I.CMPB arg => cmptest arg
++	   | I.TESTL arg => cmptest arg
++	   | I.TESTW arg => cmptest arg
++	   | I.TESTB arg => cmptest arg
+ 	   | I.MULTDIV{src, ...} => operand src
+ 	   | I.MUL3{src1, ...} => operand src1
+ 	   | I.UNARY{opnd, ...} => operand opnd
+ 	   | I.SET{opnd, ...} => operand opnd
+ 	   | I.CMOV{src, dst, ...} => operand src 
+-	   | (I.PUSHL opnd | I.PUSHW opnd | I.PUSHB opnd) => operand opnd
++	   | I.PUSHL opnd => operand opnd
++	   | I.PUSHW opnd => operand opnd
++	   | I.PUSHB opnd => operand opnd
+ 	   | I.POP opnd =>  operand opnd
+ 	   | I.FSTPT opnd => operand opnd
+ 	   | I.FSTPL opnd => operand opnd
+diff -Naur MLRISC/x86/c-calls/ia32-svid.sml MLRISC-mlton/x86/c-calls/ia32-svid.sml
+--- MLRISC/x86/c-calls/ia32-svid.sml	2006-02-24 23:33:34.000000000 -0500
++++ MLRISC-mlton/x86/c-calls/ia32-svid.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -399,7 +399,8 @@
+ 	 * differences there might be between the SVID and Windows ABIs. (JHR)
+ 	 *)
+ 	  val calleePops = (case #conv proto
+-		 of (""|"ccall") => false
++		 of "" => false
++	          | "ccall" => false
+ 		  | "stdcall" => true
+ 		  | conv => error (concat [
+ 			"unknown calling convention \"", String.toString conv, "\""
+diff -Naur MLRISC/x86/emit/x86Asm.sml MLRISC-mlton/x86/emit/x86Asm.sml
+--- MLRISC/x86/emit/x86Asm.sml	2005-10-29 13:12:26.000000000 -0400
++++ MLRISC-mlton/x86/emit/x86Asm.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,15 +6,126 @@
+ 
+ 
+ functor X86AsmEmitter(structure S : INSTRUCTION_STREAM
+-                      structure Instr : X86INSTR
+-                         where T = S.P.T
+-                      structure Shuffle : X86SHUFFLE
+-                         where I = Instr
+-                      structure MLTreeEval : MLTREE_EVAL
+-                         where T = Instr.T
++                      structure Instr : X86INSTR (* where T = S.P.T *)
++                                        where type T.Basis.cond = S.P.T.Basis.cond
++                                          and type T.Basis.div_rounding_mode = S.P.T.Basis.div_rounding_mode
++                                          and type T.Basis.ext = S.P.T.Basis.ext
++                                          and type T.Basis.fcond = S.P.T.Basis.fcond
++                                          and type T.Basis.rounding_mode = S.P.T.Basis.rounding_mode
++                                          and type T.Constant.const = S.P.T.Constant.const
++                                          and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) S.P.T.Extension.ccx
++                                          and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) S.P.T.Extension.fx
++                                          and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) S.P.T.Extension.rx
++                                          and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) S.P.T.Extension.sx
++                                          and type T.I.div_rounding_mode = S.P.T.I.div_rounding_mode
++                                          and type T.Region.region = S.P.T.Region.region
++                                          and type T.ccexp = S.P.T.ccexp
++                                          and type T.fexp = S.P.T.fexp
++                                          (* and type T.labexp = S.P.T.labexp *)
++                                          and type T.mlrisc = S.P.T.mlrisc
++                                          and type T.oper = S.P.T.oper
++                                          and type T.rep = S.P.T.rep
++                                          and type T.rexp = S.P.T.rexp
++                                          and type T.stm = S.P.T.stm
++                      structure Shuffle : X86SHUFFLE (* where I = Instr *)
++                                          where type I.Constant.const = Instr.Constant.const
++                                            and type I.Region.region = Instr.Region.region
++                                            and type I.T.Basis.cond = Instr.T.Basis.cond
++                                            and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                            and type I.T.Basis.ext = Instr.T.Basis.ext
++                                            and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                            and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                            and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                            and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                            and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                            and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                            and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                            and type I.T.ccexp = Instr.T.ccexp
++                                            and type I.T.fexp = Instr.T.fexp
++                                            (* and type I.T.labexp = Instr.T.labexp *)
++                                            and type I.T.mlrisc = Instr.T.mlrisc
++                                            and type I.T.oper = Instr.T.oper
++                                            and type I.T.rep = Instr.T.rep
++                                            and type I.T.rexp = Instr.T.rexp
++                                            and type I.T.stm = Instr.T.stm
++                                            (* and type I.addressing_mode = Instr.addressing_mode *)
++                                            and type I.binaryOp = Instr.binaryOp
++                                            and type I.bitOp = Instr.bitOp
++                                            and type I.cond = Instr.cond
++                                            and type I.fbinOp = Instr.fbinOp
++                                            and type I.fenvOp = Instr.fenvOp
++                                            and type I.fibinOp = Instr.fibinOp
++                                            and type I.fsize = Instr.fsize
++                                            and type I.funOp = Instr.funOp
++                                            and type I.instr = Instr.instr
++                                            and type I.instruction = Instr.instruction
++                                            and type I.isize = Instr.isize
++                                            and type I.move = Instr.move
++                                            and type I.multDivOp = Instr.multDivOp
++                                            and type I.operand = Instr.operand
++                                            and type I.shiftOp = Instr.shiftOp
++                                            and type I.unaryOp = Instr.unaryOp
++                      structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                                             where type T.Basis.cond = Instr.T.Basis.cond
++                                               and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                               and type T.Basis.ext = Instr.T.Basis.ext
++                                               and type T.Basis.fcond = Instr.T.Basis.fcond
++                                               and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                               and type T.Constant.const = Instr.T.Constant.const
++                                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                               and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                               and type T.Region.region = Instr.T.Region.region
++                                               and type T.ccexp = Instr.T.ccexp
++                                               and type T.fexp = Instr.T.fexp
++                                               (* and type T.labexp = Instr.T.labexp *)
++                                               and type T.mlrisc = Instr.T.mlrisc
++                                               and type T.oper = Instr.T.oper
++                                               and type T.rep = Instr.T.rep
++                                               and type T.rexp = Instr.T.rexp
++                                               and type T.stm = Instr.T.stm
+ 
+ (*#line 512.7 "x86/x86.mdl"*)
+-                      structure MemRegs : MEMORY_REGISTERS where I=Instr
++                      structure MemRegs : MEMORY_REGISTERS (* where I = Instr *)
++                                          where type I.Constant.const = Instr.Constant.const
++                                            and type I.Region.region = Instr.Region.region
++                                            and type I.T.Basis.cond = Instr.T.Basis.cond
++                                            and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                                            and type I.T.Basis.ext = Instr.T.Basis.ext
++                                            and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                                            and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                                            and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                                            and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                                            and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                                            and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                                            and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                                            and type I.T.ccexp = Instr.T.ccexp
++                                            and type I.T.fexp = Instr.T.fexp
++                                            (* and type I.T.labexp = Instr.T.labexp *)
++                                            and type I.T.mlrisc = Instr.T.mlrisc
++                                            and type I.T.oper = Instr.T.oper
++                                            and type I.T.rep = Instr.T.rep
++                                            and type I.T.rexp = Instr.T.rexp
++                                            and type I.T.stm = Instr.T.stm
++                                            (* and type I.addressing_mode = Instr.addressing_mode *)
++                                            and type I.binaryOp = Instr.binaryOp
++                                            and type I.bitOp = Instr.bitOp
++                                            and type I.cond = Instr.cond
++                                            and type I.fbinOp = Instr.fbinOp
++                                            and type I.fenvOp = Instr.fenvOp
++                                            and type I.fibinOp = Instr.fibinOp
++                                            and type I.fsize = Instr.fsize
++                                            and type I.funOp = Instr.funOp
++                                            and type I.instr = Instr.instr
++                                            and type I.instruction = Instr.instruction
++                                            and type I.isize = Instr.isize
++                                            and type I.move = Instr.move
++                                            and type I.multDivOp = Instr.multDivOp
++                                            and type I.operand = Instr.operand
++                                            and type I.shiftOp = Instr.shiftOp
++                                            and type I.unaryOp = Instr.unaryOp
+ 
+ (*#line 513.7 "x86/x86.mdl"*)
+                       val memRegBase : CellsBasis.cell option
+@@ -370,7 +481,8 @@
+            val n = size fbinOp
+        in 
+           (case Char.toLower (String.sub (fbinOp, n - 1)) of
+-            (#"s" | #"l") => String.substring (fbinOp, 0, n - 1)
++            #"s" => String.substring (fbinOp, 0, n - 1)
++          | #"l" => String.substring (fbinOp, 0, n - 1)
+           | _ => fbinOp
+           )
+        end
+@@ -511,8 +623,39 @@
+            emit_lsrc lsrc )
+        | I.BINARY{binOp, src, dst} => 
+          (case (src, binOp) of
+-           (I.Direct _, (I.SARL | I.SHRL | I.SHLL | I.SARW | I.SHRW | I.SHLW | I.SARB | I.SHRB | I.SHLB)) => 
+-              
++           (I.Direct _, (I.SARL)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHRL)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHLL)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SARW)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHRW)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHLW)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SARB)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHRB)) => 
++           ( emit_binaryOp binOp; 
++             emit "\t%cl, "; 
++             emit_dst dst )
++         | (I.Direct _, (I.SHLB)) => 
+            ( emit_binaryOp binOp; 
+              emit "\t%cl, "; 
+              emit_dst dst )
+diff -Naur MLRISC/x86/flowgraph/x86GasPseudoOps.sml MLRISC-mlton/x86/flowgraph/x86GasPseudoOps.sml
+--- MLRISC/x86/flowgraph/x86GasPseudoOps.sml	2002-01-15 11:16:39.000000000 -0500
++++ MLRISC-mlton/x86/flowgraph/x86GasPseudoOps.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,7 +5,27 @@
+  *)
+ functor X86GasPseudoOps 
+    ( structure T : MLTREE
+-     structure MLTreeEval : MLTREE_EVAL  where T = T
++     structure MLTreeEval : MLTREE_EVAL (* where T = T *)
++                            where type T.Basis.cond = T.Basis.cond
++                              and type T.Basis.div_rounding_mode = T.Basis.div_rounding_mode
++                              and type T.Basis.ext = T.Basis.ext
++                              and type T.Basis.fcond = T.Basis.fcond
++                              and type T.Basis.rounding_mode = T.Basis.rounding_mode
++                              and type T.Constant.const = T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) T.Extension.sx
++                              and type T.I.div_rounding_mode = T.I.div_rounding_mode
++                              and type T.Region.region = T.Region.region
++                              and type T.ccexp = T.ccexp
++                              and type T.fexp = T.fexp
++                              (* and type T.labexp = T.labexp *)
++                              and type T.mlrisc = T.mlrisc
++                              and type T.oper = T.oper
++                              and type T.rep = T.rep
++                              and type T.rexp = T.rexp
++                              and type T.stm = T.stm
+     ) : PSEUDO_OPS_BASIS = 
+ 
+ struct
+diff -Naur MLRISC/x86/instructions/x86comp-instr-ext.sml MLRISC-mlton/x86/instructions/x86comp-instr-ext.sml
+--- MLRISC/x86/instructions/x86comp-instr-ext.sml	2002-02-06 14:11:13.000000000 -0500
++++ MLRISC-mlton/x86/instructions/x86comp-instr-ext.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -6,11 +6,54 @@
+  *)
+ signature X86COMP_INSTR_EXT = sig
+   structure I : X86INSTR
+-  structure TS : MLTREE_STREAM
+-		 where T = I.T
+-  structure CFG : CONTROL_FLOW_GRAPH 
+- 	         where I = I
+-                   and P = TS.S.P
++  structure TS : MLTREE_STREAM (* where T = I.T *)
++                 where type T.Basis.cond = I.T.Basis.cond
++                   and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                   and type T.Basis.ext = I.T.Basis.ext
++                   and type T.Basis.fcond = I.T.Basis.fcond
++                   and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                   and type T.Constant.const = I.T.Constant.const
++                   and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                   and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                   and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                   and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                   and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                   and type T.Region.region = I.T.Region.region
++                   and type T.ccexp = I.T.ccexp
++                   and type T.fexp = I.T.fexp
++                   (* and type T.labexp = I.T.labexp *)
++                   and type T.mlrisc = I.T.mlrisc
++                   and type T.oper = I.T.oper
++                   and type T.rep = I.T.rep
++	           and type T.rexp = I.T.rexp
++                   and type T.stm = I.T.stm
++  structure CFG : CONTROL_FLOW_GRAPH (* where I = I and P = TS.S.P *)
++                  where type I.addressing_mode = I.addressing_mode
++                    and type I.ea = I.ea
++                    and type I.instr = I.instr
++                    and type I.instruction = I.instruction
++                    and type I.operand = I.operand
++                  where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                    and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                    and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                    and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                    and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                    and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                    and type P.T.Constant.const = TS.S.P.T.Constant.const
++                    and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                    and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                    and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                    and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                    and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                    and type P.T.Region.region = TS.S.P.T.Region.region
++                    and type P.T.ccexp = TS.S.P.T.ccexp
++                    and type P.T.fexp = TS.S.P.T.fexp
++                    (* and type P.T.labexp = TS.S.P.T.labexp *)
++                    and type P.T.mlrisc = TS.S.P.T.mlrisc
++                    and type P.T.oper = TS.S.P.T.oper
++                    and type P.T.rep = TS.S.P.T.rep
++                    and type P.T.rexp = TS.S.P.T.rexp
++                    and type P.T.stm = TS.S.P.T.stm
+ 
+   type reducer = 
+     (I.instruction, I.C.cellset, I.operand, I.addressing_mode, CFG.cfg) TS.reducer
+@@ -27,11 +70,54 @@
+ 
+ functor X86CompInstrExt
+   ( structure I : X86INSTR
+-    structure TS  : MLTREE_STREAM
+-		   where T = I.T
+-    structure CFG : CONTROL_FLOW_GRAPH 
+-		   where P = TS.S.P
+-		     and I = I
++    structure TS  : MLTREE_STREAM (* where T = I.T *)
++                    where type T.Basis.cond = I.T.Basis.cond
++                      and type T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                      and type T.Basis.ext = I.T.Basis.ext
++                      and type T.Basis.fcond = I.T.Basis.fcond
++                      and type T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                      and type T.Constant.const = I.T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                      and type T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                      and type T.Region.region = I.T.Region.region
++                      and type T.ccexp = I.T.ccexp
++                      and type T.fexp = I.T.fexp
++                      (* and type T.labexp = I.T.labexp *)
++                      and type T.mlrisc = I.T.mlrisc
++                      and type T.oper = I.T.oper
++                      and type T.rep = I.T.rep
++                      and type T.rexp = I.T.rexp
++                      and type T.stm = I.T.stm
++    structure CFG : CONTROL_FLOW_GRAPH (* where P = TS.S.P and I = I *)
++                    where type P.Client.pseudo_op = TS.S.P.Client.pseudo_op
++                      and type P.T.Basis.cond = TS.S.P.T.Basis.cond
++                      and type P.T.Basis.div_rounding_mode = TS.S.P.T.Basis.div_rounding_mode
++                      and type P.T.Basis.ext = TS.S.P.T.Basis.ext
++                      and type P.T.Basis.fcond = TS.S.P.T.Basis.fcond
++                      and type P.T.Basis.rounding_mode = TS.S.P.T.Basis.rounding_mode
++                      and type P.T.Constant.const = TS.S.P.T.Constant.const
++                      and type ('s,'r,'f,'c) P.T.Extension.ccx = ('s,'r,'f,'c) TS.S.P.T.Extension.ccx
++                      and type ('s,'r,'f,'c) P.T.Extension.fx = ('s,'r,'f,'c) TS.S.P.T.Extension.fx
++                      and type ('s,'r,'f,'c) P.T.Extension.rx = ('s,'r,'f,'c) TS.S.P.T.Extension.rx
++                      and type ('s,'r,'f,'c) P.T.Extension.sx = ('s,'r,'f,'c) TS.S.P.T.Extension.sx
++                      and type P.T.I.div_rounding_mode = TS.S.P.T.I.div_rounding_mode
++                      and type P.T.Region.region = TS.S.P.T.Region.region
++                      and type P.T.ccexp = TS.S.P.T.ccexp
++                      and type P.T.fexp = TS.S.P.T.fexp
++                      (* and type P.T.labexp = TS.S.P.T.labexp *)
++                      and type P.T.mlrisc = TS.S.P.T.mlrisc
++                      and type P.T.oper = TS.S.P.T.oper
++                      and type P.T.rep = TS.S.P.T.rep
++                      and type P.T.rexp = TS.S.P.T.rexp
++                      and type P.T.stm = TS.S.P.T.stm
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
+    ) : X86COMP_INSTR_EXT = 
+ struct
+   structure CFG = CFG
+diff -Naur MLRISC/x86/instructions/x86Instr.sml MLRISC-mlton/x86/instructions/x86Instr.sml
+--- MLRISC/x86/instructions/x86Instr.sml	2002-03-21 17:01:10.000000000 -0500
++++ MLRISC-mlton/x86/instructions/x86Instr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,16 @@
+ signature X86INSTR =
+ sig
+    structure C : X86CELLS
+-   structure CB : CELLS_BASIS = CellsBasis
++   structure CB : CELLS_BASIS (* = CellsBasis *)
++                  where type CellSet.cellset = CellsBasis.CellSet.cellset
++                    and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                    and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                    and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                    and type cell = CellsBasis.cell
++                    and type cellColor = CellsBasis.cellColor
++                    and type cellkind = CellsBasis.cellkind
++                    and type cellkindDesc = CellsBasis.cellkindDesc
++                    and type cellkindInfo = CellsBasis.cellkindInfo
+    structure T : MLTREE
+    structure Constant: CONSTANT
+    structure Region : REGION
+diff -Naur MLRISC/x86/instructions/x86Peephole.peep MLRISC-mlton/x86/instructions/x86Peephole.peep
+--- MLRISC/x86/instructions/x86Peephole.peep	2002-02-07 16:05:19.000000000 -0500
++++ MLRISC-mlton/x86/instructions/x86Peephole.peep	2006-03-04 11:14:21.000000000 -0500
+@@ -21,6 +21,27 @@
+    (structure Instr : X86INSTR
+     structure Eval  : MLTREE_EVAL
+       sharing Instr.T = Eval.T
++      (* sharing Instr.T = Eval.T *)
++      where type T.Basis.cond = Instr.T.Basis.cond
++        and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++        and type T.Basis.ext = Instr.T.Basis.ext
++        and type T.Basis.fcond = Instr.T.Basis.fcond
++        and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++        and type T.Constant.const = Instr.T.Constant.const
++        and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++        and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++        and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++        and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++        and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++        and type T.Region.region = Instr.T.Region.region
++        and type T.ccexp = Instr.T.ccexp
++        and type T.fexp = Instr.T.fexp
++        (* and type T.labexp = Instr.T.labexp *)
++        and type T.mlrisc = Instr.T.mlrisc
++        and type T.oper = Instr.T.oper
++        and type T.rep = Instr.T.rep
++        and type T.rexp = Instr.T.rexp
++        and type T.stm = Instr.T.stm
+    ) : PEEPHOLE =
+ struct
+    structure I = Instr
+diff -Naur MLRISC/x86/instructions/x86Peephole.sml MLRISC-mlton/x86/instructions/x86Peephole.sml
+--- MLRISC/x86/instructions/x86Peephole.sml	2002-02-21 19:15:55.000000000 -0500
++++ MLRISC-mlton/x86/instructions/x86Peephole.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -12,7 +12,27 @@
+                     structure Eval : MLTREE_EVAL
+ 
+ (*#line 23.7 "x86Peephole.peep"*)
+-                    sharing Instr.T = Eval.T
++                    (* sharing Instr.T = Eval.T *)
++                    where type T.Basis.cond = Instr.T.Basis.cond
++                      and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                      and type T.Basis.ext = Instr.T.Basis.ext
++                      and type T.Basis.fcond = Instr.T.Basis.fcond
++                      and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                      and type T.Constant.const = Instr.T.Constant.const
++                      and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                      and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                      and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                      and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                      and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                      and type T.Region.region = Instr.T.Region.region
++                      and type T.ccexp = Instr.T.ccexp
++                      and type T.fexp = Instr.T.fexp
++                      (* and type T.labexp = Instr.T.labexp *)
++                      and type T.mlrisc = Instr.T.mlrisc
++                      and type T.oper = Instr.T.oper
++                      and type T.rep = Instr.T.rep
++                      and type T.rexp = Instr.T.rexp
++                      and type T.stm = Instr.T.stm
+                    ): PEEPHOLE =
+ struct
+ 
+diff -Naur MLRISC/x86/instructions/x86Props.sml MLRISC-mlton/x86/instructions/x86Props.sml
+--- MLRISC/x86/instructions/x86Props.sml	2002-03-21 17:01:10.000000000 -0500
++++ MLRISC-mlton/x86/instructions/x86Props.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -5,8 +5,48 @@
+ 
+ functor X86Props
+   (structure Instr : X86INSTR
+-   structure MLTreeHash : MLTREE_HASH where T = Instr.T
+-   structure MLTreeEval : MLTREE_EVAL where T = Instr.T
++   structure MLTreeHash : MLTREE_HASH (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
++   structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
+   ) : INSN_PROPERTIES =
+ struct
+   structure I = Instr
+@@ -230,8 +270,10 @@
+ 	val uses = operandUse src
+       in
+ 	case multDivOp
+-	 of (I.IDIVL1 | I.DIVL1) => (eaxPair, C.edx::C.eax::uses)
+-	  | (I.IMULL1 | I.MULL1) => (eaxPair, C.eax::uses)
++	 of I.IDIVL1 => (eaxPair, C.edx::C.eax::uses)
++	  | I.DIVL1 => (eaxPair, C.edx::C.eax::uses)
++	  | I.IMULL1 => (eaxPair, C.eax::uses)
++	  | I.MULL1 => (eaxPair, C.eax::uses)
+       end
+ 
+       fun unary opnd = (operandDef opnd, operandUse opnd)
+@@ -249,8 +291,12 @@
+ 	| I.MOVE{src, dst=I.MemReg r, ...} => ([r], operandUse src)
+ 	| I.MOVE{src, dst, ...} => ([], operandAcc(dst, operandUse src))
+ 	| I.LEA{r32, addr}      => ([r32], operandUse addr)
+-	| ( I.CMPL arg | I.CMPW arg | I.CMPB arg
+-	  | I.TESTL arg | I.TESTW arg | I.TESTB arg ) => cmptest arg 
++	| I.CMPL arg => cmptest arg 
++	| I.CMPW arg => cmptest arg 
++	| I.CMPB arg => cmptest arg 
++	| I.TESTL arg => cmptest arg 
++	| I.TESTW arg => cmptest arg 
++	| I.TESTB arg => cmptest arg 
+ 	| I.BITOP{lsrc, rsrc, ...} => cmptest{lsrc=lsrc,rsrc=rsrc}
+ 	| I.BINARY{binOp=I.XORL,src=I.Direct rs,dst=I.Direct rd,...} =>   
+ 	     if CB.sameColor(rs,rd) then ([rd],[]) else ([rd],[rs,rd])
+@@ -268,7 +314,9 @@
+ 
+ 	| I.UNARY{opnd, ...}    => unary opnd
+ 	| I.SET{opnd, ...}      => unary opnd
+-	| ( I.PUSHL arg | I.PUSHW arg | I.PUSHB arg ) => push arg
++	| I.PUSHL arg => push arg
++	| I.PUSHW arg => push arg
++	| I.PUSHB arg => push arg
+ 	| I.POP arg	      => (C.stackptrR::operandDef arg, [C.stackptrR])
+ 	| I.PUSHFD	      => espOnly()
+ 	| I.POPFD		      => espOnly()
+diff -Naur MLRISC/x86/mltree/x86-fp.sml MLRISC-mlton/x86/mltree/x86-fp.sml
+--- MLRISC/x86/mltree/x86-fp.sml	2004-10-25 23:59:52.000000000 -0400
++++ MLRISC-mlton/x86/mltree/x86-fp.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -53,27 +53,88 @@
+  * -- Allen Leung (leunga@cs.nyu.edu)
+  *) 
+ 
+-local
++functor X86FP
++   (structure X86Instr  : X86INSTR
++    structure X86Props  : INSN_PROPERTIES (* where I = X86Instr *)
++                          where type I.addressing_mode = X86Instr.addressing_mode
++                            and type I.ea = X86Instr.ea
++                            and type I.instr = X86Instr.instr
++                            and type I.instruction = X86Instr.instruction
++                            and type I.operand = X86Instr.operand
++    structure Flowgraph : CONTROL_FLOW_GRAPH (* where I = X86Instr *)
++                          where type I.addressing_mode = X86Instr.addressing_mode
++                            and type I.ea = X86Instr.ea
++                            and type I.instr = X86Instr.instr
++                            and type I.instruction = X86Instr.instruction
++                            and type I.operand = X86Instr.operand
++    structure Liveness  : LIVENESS (* where CFG = Flowgraph *)
++                          where type CFG.I.addressing_mode = Flowgraph.I.addressing_mode
++                            and type CFG.I.ea = Flowgraph.I.ea
++                            and type CFG.I.instr = Flowgraph.I.instr
++                            and type CFG.I.instruction = Flowgraph.I.instruction
++                            and type CFG.I.operand = Flowgraph.I.operand
++                            and type CFG.P.Client.pseudo_op = Flowgraph.P.Client.pseudo_op
++                            and type CFG.P.T.Basis.cond = Flowgraph.P.T.Basis.cond
++                            and type CFG.P.T.Basis.div_rounding_mode = Flowgraph.P.T.Basis.div_rounding_mode
++                            and type CFG.P.T.Basis.ext = Flowgraph.P.T.Basis.ext
++                            and type CFG.P.T.Basis.fcond = Flowgraph.P.T.Basis.fcond
++                            and type CFG.P.T.Basis.rounding_mode = Flowgraph.P.T.Basis.rounding_mode
++                            and type CFG.P.T.Constant.const = Flowgraph.P.T.Constant.const
++                            and type ('s,'r,'f,'c) CFG.P.T.Extension.ccx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.ccx
++                            and type ('s,'r,'f,'c) CFG.P.T.Extension.fx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.fx
++                            and type ('s,'r,'f,'c) CFG.P.T.Extension.rx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.rx
++                            and type ('s,'r,'f,'c) CFG.P.T.Extension.sx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.sx
++                            and type CFG.P.T.I.div_rounding_mode = Flowgraph.P.T.I.div_rounding_mode
++                            and type CFG.P.T.Region.region = Flowgraph.P.T.Region.region
++                            and type CFG.P.T.ccexp = Flowgraph.P.T.ccexp
++                            and type CFG.P.T.fexp = Flowgraph.P.T.fexp
++                            (* and type CFG.P.T.labexp = Flowgraph.P.T.labexp *)
++                            and type CFG.P.T.mlrisc = Flowgraph.P.T.mlrisc
++                            and type CFG.P.T.oper = Flowgraph.P.T.oper
++                            and type CFG.P.T.rep = Flowgraph.P.T.rep
++                            and type CFG.P.T.rexp = Flowgraph.P.T.rexp
++                            and type CFG.P.T.stm = Flowgraph.P.T.stm
++                            and type CFG.block = Flowgraph.block
++                            and type CFG.block_kind = Flowgraph.block_kind
++                            and type CFG.edge_info = Flowgraph.edge_info
++                            and type CFG.edge_kind = Flowgraph.edge_kind
++                            and type CFG.info = Flowgraph.info
++    structure Asm       : INSTRUCTION_EMITTER (* where I = X86Instr and S.P = Flowgraph.P *)
++                          where type I.addressing_mode = X86Instr.addressing_mode
++                            and type I.ea = X86Instr.ea
++                            and type I.instr = X86Instr.instr
++                            and type I.instruction = X86Instr.instruction
++                            and type I.operand = X86Instr.operand
++                          where type S.P.Client.pseudo_op = Flowgraph.P.Client.pseudo_op
++                            and type S.P.T.Basis.cond = Flowgraph.P.T.Basis.cond
++                            and type S.P.T.Basis.div_rounding_mode = Flowgraph.P.T.Basis.div_rounding_mode
++                            and type S.P.T.Basis.ext = Flowgraph.P.T.Basis.ext
++                            and type S.P.T.Basis.fcond = Flowgraph.P.T.Basis.fcond
++                            and type S.P.T.Basis.rounding_mode = Flowgraph.P.T.Basis.rounding_mode
++                            and type S.P.T.Constant.const = Flowgraph.P.T.Constant.const
++                            and type ('s,'r,'f,'c) S.P.T.Extension.ccx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.ccx
++                            and type ('s,'r,'f,'c) S.P.T.Extension.fx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.fx
++                            and type ('s,'r,'f,'c) S.P.T.Extension.rx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.rx
++                            and type ('s,'r,'f,'c) S.P.T.Extension.sx = ('s,'r,'f,'c) Flowgraph.P.T.Extension.sx
++                            and type S.P.T.I.div_rounding_mode = Flowgraph.P.T.I.div_rounding_mode
++                            and type S.P.T.Region.region = Flowgraph.P.T.Region.region
++                            and type S.P.T.ccexp = Flowgraph.P.T.ccexp
++                            and type S.P.T.fexp = Flowgraph.P.T.fexp
++                            (* and type S.P.T.labexp = Flowgraph.P.T.labexp *)
++                            and type S.P.T.mlrisc = Flowgraph.P.T.mlrisc
++                            and type S.P.T.oper = Flowgraph.P.T.oper
++                            and type S.P.T.rep = Flowgraph.P.T.rep
++                            and type S.P.T.rexp = Flowgraph.P.T.rexp
++                            and type S.P.T.stm = Flowgraph.P.T.stm
++   ) : CFG_OPTIMIZATION = 
++struct
+    val debug = false         (* set this to true to debug this module 
+                               * set this to false for production use.
+                               *) 
+    val debugLiveness = true (* debug liveness analysis *)
+    val debugDead = false     (* debug dead code removal *)
+    val sanityCheck = true
+-in
+-functor X86FP
+-   (structure X86Instr  : X86INSTR
+-    structure X86Props  : INSN_PROPERTIES 
+-			      where I = X86Instr
+-    structure Flowgraph : CONTROL_FLOW_GRAPH
+-			      where I = X86Instr
+-    structure Liveness  : LIVENESS 
+-			      where CFG = Flowgraph
+-    structure Asm       : INSTRUCTION_EMITTER 
+-			      where I = X86Instr
+-				and S.P = Flowgraph.P
+-   ) : CFG_OPTIMIZATION = 
+-struct
++
+    structure CFG = Flowgraph
+    structure G  = Graph
+    structure I  = X86Instr
+@@ -1543,14 +1604,36 @@
+ 		       * Catch instructions that absolutely 
+ 		       * should not have been generated at this point.
+ 		       *)
+-		   | (I.FLD1 | I.FLDL2E | I.FLDLG2 | I.FLDLN2 | I.FLDPI |
+-		      I.FLDZ | I.FLDL _ | I.FLDS _ | I.FLDT _ | 
+-		      I.FILD _ | I.FILDL _ | I.FILDLL _ | 
+-		      I.FENV _ | I.FBINARY _ | I.FIBINARY _ | I.FUNARY _ |
+-		      I.FUCOMPP | I.FUCOM _ | I.FUCOMP _ | I.FCOMPP | I.FXCH _ |
+-                      I.FCOMI _ | I.FCOMIP _ | I.FUCOMI _ | I.FUCOMIP _ |
+-		      I.FSTPL _ | I.FSTPS _ | I.FSTPT _ | I.FSTL _ | I.FSTS _ 
+-		     ) => bug("Illegal FP instructions")
++		   | I.FLD1 => bug("Illegal FP instructions")
++		   | I.FLDL2E => bug("Illegal FP instructions") 
++		   | I.FLDLG2 => bug("Illegal FP instructions") 
++		   | I.FLDLN2 => bug("Illegal FP instructions") 
++		   | I.FLDPI => bug("Illegal FP instructions") 
++		   | I.FLDZ => bug("Illegal FP instructions") 
++		   | I.FLDL _ => bug("Illegal FP instructions") 
++		   | I.FLDS _ => bug("Illegal FP instructions") 
++		   | I.FLDT _ => bug("Illegal FP instructions") 
++		   | I.FILD _ => bug("Illegal FP instructions") 
++		   | I.FILDL _ => bug("Illegal FP instructions") 
++		   | I.FILDLL _ => bug("Illegal FP instructions") 
++		   | I.FENV _ => bug("Illegal FP instructions") 
++		   | I.FBINARY _ => bug("Illegal FP instructions") 
++		   | I.FIBINARY _ => bug("Illegal FP instructions") 
++		   | I.FUNARY _ => bug("Illegal FP instructions") 
++		   | I.FUCOMPP => bug("Illegal FP instructions") 
++		   | I.FUCOM _ => bug("Illegal FP instructions") 
++		   | I.FUCOMP _ => bug("Illegal FP instructions") 
++		   | I.FCOMPP => bug("Illegal FP instructions") 
++		   | I.FXCH _ => bug("Illegal FP instructions") 
++		   | I.FCOMI _ => bug("Illegal FP instructions") 
++		   | I.FCOMIP _ => bug("Illegal FP instructions") 
++		   | I.FUCOMI _ => bug("Illegal FP instructions") 
++		   | I.FUCOMIP _ => bug("Illegal FP instructions")
++		   | I.FSTPL _ => bug("Illegal FP instructions") 
++		   | I.FSTPS _ => bug("Illegal FP instructions") 
++		   | I.FSTPT _ => bug("Illegal FP instructions") 
++		   | I.FSTL _ => bug("Illegal FP instructions") 
++		   | I.FSTS _ => bug("Illegal FP instructions")
+ 
+ 		      (* Other instructions are untouched *)
+ 		   | instr => FINISH(mark(I.INSTR instr, an)::code)
+@@ -1575,8 +1658,12 @@
+                fun pop() = n := !n - 1
+                fun scan(I.INSTR(I.FBINARY{binOp, ...})) = 
+                       (case binOp of 
+-                        ( I.FADDP | I.FSUBP | I.FSUBRP | I.FMULP
+-                        | I.FDIVP | I.FDIVRP) => pop()
++                        I.FADDP => pop()
++                      | I.FSUBP => pop()
++                      | I.FSUBRP => pop()
++                      | I.FMULP => pop()
++                      | I.FDIVP => pop()
++                      | I.FDIVRP => pop()
+                       | _ => ()
+                       )
+                  | scan(I.INSTR(I.FIBINARY{binOp, ...})) = ()
+@@ -1670,5 +1757,3 @@
+        else repairCriticalEdges(Cfg)
+    end 
+ end (* functor *)
+-
+-end (* local *)
+diff -Naur MLRISC/x86/mltree/x86.sml MLRISC-mlton/x86/mltree/x86.sml
+--- MLRISC/x86/mltree/x86.sml	2004-11-20 09:01:43.000000000 -0500
++++ MLRISC-mlton/x86/mltree/x86.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -32,19 +32,77 @@
+  *
+  * -- Allen
+  *)
+-local
+-   val rewriteMemReg = true (* should we rewrite memRegs *)
+-   val enableFastFPMode = true (* set this to false to disable the mode *)
+-in
+ 
+ functor X86
+   (structure X86Instr : X86INSTR
+-   structure MLTreeUtils : MLTREE_UTILS
+-			where T = X86Instr.T
+-   structure ExtensionComp : MLTREE_EXTENSION_COMP
+-     			where I = X86Instr and T = X86Instr.T
+-   structure MLTreeStream : MLTREE_STREAM
+-			where T = ExtensionComp.T
++   structure MLTreeUtils : MLTREE_UTILS (* where T = X86Instr.T *)
++                           where type T.Basis.cond = X86Instr.T.Basis.cond
++                             and type T.Basis.div_rounding_mode = X86Instr.T.Basis.div_rounding_mode
++                             and type T.Basis.ext = X86Instr.T.Basis.ext
++                             and type T.Basis.fcond = X86Instr.T.Basis.fcond
++                             and type T.Basis.rounding_mode = X86Instr.T.Basis.rounding_mode
++                             and type T.Constant.const = X86Instr.T.Constant.const
++                             and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) X86Instr.T.Extension.ccx
++                             and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) X86Instr.T.Extension.fx
++                             and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) X86Instr.T.Extension.rx
++                             and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) X86Instr.T.Extension.sx
++                             and type T.I.div_rounding_mode = X86Instr.T.I.div_rounding_mode
++                             and type T.Region.region = X86Instr.T.Region.region
++                             and type T.ccexp = X86Instr.T.ccexp
++                             and type T.fexp = X86Instr.T.fexp
++                             (* and type T.labexp = X86Instr.T.labexp *)
++                             and type T.mlrisc = X86Instr.T.mlrisc
++                             and type T.oper = X86Instr.T.oper
++                             and type T.rep = X86Instr.T.rep
++                             and type T.rexp = X86Instr.T.rexp
++                             and type T.stm = X86Instr.T.stm
++   structure ExtensionComp : MLTREE_EXTENSION_COMP (* where I = X86Instr and T = X86Instr.T *)
++                             where type I.addressing_mode = X86Instr.addressing_mode
++                               and type I.ea = X86Instr.ea
++                               and type I.instr = X86Instr.instr
++                               and type I.instruction = X86Instr.instruction
++                               and type I.operand = X86Instr.operand
++                             where type T.Basis.cond = X86Instr.T.Basis.cond
++                               and type T.Basis.div_rounding_mode = X86Instr.T.Basis.div_rounding_mode
++                               and type T.Basis.ext = X86Instr.T.Basis.ext
++                               and type T.Basis.fcond = X86Instr.T.Basis.fcond
++                               and type T.Basis.rounding_mode = X86Instr.T.Basis.rounding_mode
++                               and type T.Constant.const = X86Instr.T.Constant.const
++                               and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) X86Instr.T.Extension.ccx
++                               and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) X86Instr.T.Extension.fx
++                               and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) X86Instr.T.Extension.rx
++                               and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) X86Instr.T.Extension.sx
++                               and type T.I.div_rounding_mode = X86Instr.T.I.div_rounding_mode
++                               and type T.Region.region = X86Instr.T.Region.region
++                               and type T.ccexp = X86Instr.T.ccexp
++                               and type T.fexp = X86Instr.T.fexp
++                               (* and type T.labexp = X86Instr.T.labexp *)
++                               and type T.mlrisc = X86Instr.T.mlrisc
++                               and type T.oper = X86Instr.T.oper
++                               and type T.rep = X86Instr.T.rep
++                               and type T.rexp = X86Instr.T.rexp
++                               and type T.stm = X86Instr.T.stm
++   structure MLTreeStream : MLTREE_STREAM (* where T = ExtensionComp.T *)
++                            where type T.Basis.cond = ExtensionComp.T.Basis.cond
++                              and type T.Basis.div_rounding_mode = ExtensionComp.T.Basis.div_rounding_mode
++                              and type T.Basis.ext = ExtensionComp.T.Basis.ext
++                              and type T.Basis.fcond = ExtensionComp.T.Basis.fcond
++                              and type T.Basis.rounding_mode = ExtensionComp.T.Basis.rounding_mode
++                              and type T.Constant.const = ExtensionComp.T.Constant.const
++                              and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) ExtensionComp.T.Extension.ccx
++                              and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) ExtensionComp.T.Extension.fx
++                              and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) ExtensionComp.T.Extension.rx
++                              and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) ExtensionComp.T.Extension.sx
++                              and type T.I.div_rounding_mode = ExtensionComp.T.I.div_rounding_mode
++                              and type T.Region.region = ExtensionComp.T.Region.region
++                              and type T.ccexp = ExtensionComp.T.ccexp
++                              and type T.fexp = ExtensionComp.T.fexp
++                              (* and type T.labexp = ExtensionComp.T.labexp *)
++                              and type T.mlrisc = ExtensionComp.T.mlrisc
++                              and type T.oper = ExtensionComp.T.oper
++                              and type T.rep = ExtensionComp.T.rep
++                              and type T.rexp = ExtensionComp.T.rexp
++                              and type T.stm = ExtensionComp.T.stm
+     datatype arch = Pentium | PentiumPro | PentiumII | PentiumIII
+     val arch : arch ref
+     val cvti2f : 
+@@ -65,6 +123,9 @@
+           val rewriteMemReg : bool
+       end = 
+ struct
++  val rewriteMemReg = true (* should we rewrite memRegs *)
++  val enableFastFPMode = true (* set this to false to disable the mode *)
++
+   structure I = X86Instr
+   structure T = I.T
+   structure TS = ExtensionComp.TS
+@@ -421,7 +482,8 @@
+ 
+           (* reduce an expression into an operand *)
+       and operand(T.LI i) = I.Immed(toInt32(i)) 
+-        | operand(x as (T.CONST _ | T.LABEL _)) = I.ImmedLabel x
++        | operand(x as T.CONST _) = I.ImmedLabel x
++        | operand(x as T.LABEL _) = I.ImmedLabel x
+         | operand(T.LABEXP le) = I.ImmedLabel le
+         | operand(T.REG(_,r)) = IntReg r
+         | operand(T.LOAD(32,ea,mem)) = address(ea, mem)
+@@ -968,8 +1030,8 @@
+ 		 else
+ 		   move'(I.Immed(n), rdOpnd, an)
+ 	       end
+-             | (T.CONST _ | T.LABEL _) => 
+-                 move'(I.ImmedLabel exp, rdOpnd, an)
++             | T.CONST _ => move'(I.ImmedLabel exp, rdOpnd, an)
++             | T.LABEL _ => move'(I.ImmedLabel exp, rdOpnd, an)
+              | T.LABEXP le => move'(I.ImmedLabel le, rdOpnd, an)
+ 
+                (* 32-bit addition *)
+@@ -1094,7 +1156,14 @@
+           * On the x86, TEST is superior to AND for doing the same thing,
+           * since it doesn't need to write out the result in a register.
+           *)
+-     and cmpWithZero(cc as (T.EQ | T.NE), e as T.ANDB(ty, a, b), an) = 
++     and cmpWithZero(cc as T.EQ, e as T.ANDB(ty, a, b), an) = 
++            (case ty of
++               8  => test(I.TESTB, a, b, an)
++             | 16 => test(I.TESTW, a, b, an)
++             | 32 => test(I.TESTL, a, b, an)
++             | _  => doExpr(e, newReg(), an); 
++             cc)  
++       | cmpWithZero(cc as T.NE, e as T.ANDB(ty, a, b), an) = 
+             (case ty of
+                8  => test(I.TESTB, a, b, an)
+              | 16 => test(I.TESTW, a, b, an)
+@@ -1408,7 +1477,8 @@
+         *)
+       and foldableFexp(T.FREG _) = true
+         | foldableFexp(T.FLOAD _) = true
+-        | foldableFexp(T.CVTI2F(_, (16 | 32), _)) = true
++        | foldableFexp(T.CVTI2F(_, 16, _)) = true
++        | foldableFexp(T.CVTI2F(_, 32, _)) = true
+         | foldableFexp(T.CVTF2F(_, _, t)) = foldableFexp t
+         | foldableFexp(T.FMARK(t, _)) = foldableFexp t
+         | foldableFexp _ = false
+@@ -1531,7 +1601,8 @@
+               (* Try to fold the the memory operand or integer conversion *) 
+               and suFold(e as T.FREG _) = (LEAF(0, e, []), false)
+                 | suFold(e as T.FLOAD _) = (LEAF(0, e, []), false)
+-                | suFold(e as T.CVTI2F(_,(16 | 32),_)) = (LEAF(0, e, []), true)
++                | suFold(e as T.CVTI2F(_,16,_)) = (LEAF(0, e, []), true)
++                | suFold(e as T.CVTI2F(_,32,_)) = (LEAF(0, e, []), true)
+                 | suFold(T.CVTF2F(_, _, t)) = suFold t
+                 | suFold(T.FMARK(t, a)) = 
+                   let val (t, integer) = suFold t 
+@@ -1725,7 +1796,8 @@
+           let 
+               fun isMemOpnd(T.FREG(_, f)) = isFMemReg f
+                 | isMemOpnd(T.FLOAD _) = true
+-                | isMemOpnd(T.CVTI2F(_, (16 | 32), _)) = true
++                | isMemOpnd(T.CVTI2F(_, 16, _)) = true
++                | isMemOpnd(T.CVTI2F(_, 32, _)) = true
+                 | isMemOpnd(T.CVTF2F(_, _, t)) = isMemOpnd t
+                 | isMemOpnd(T.FMARK(t, _)) = isMemOpnd t
+                 | isMemOpnd _ = false
+@@ -2006,5 +2078,3 @@
+   end 
+ 
+ end (* functor *)
+-
+-end (* local *)
+diff -Naur MLRISC/x86/omit-frameptr/x86omit-frameptr.sml MLRISC-mlton/x86/omit-frameptr/x86omit-frameptr.sml
+--- MLRISC/x86/omit-frameptr/x86omit-frameptr.sml	2003-05-22 18:46:24.000000000 -0400
++++ MLRISC-mlton/x86/omit-frameptr/x86omit-frameptr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -10,8 +10,50 @@
+  *)
+ functor X86OmitFramePointer (
+     structure I : X86INSTR 
+-    structure CFG : CONTROL_FLOW_GRAPH where I = I
+-    structure MemRegs : MEMORY_REGISTERS where I=I
++    structure CFG : CONTROL_FLOW_GRAPH (* where I = I *)
++                    where type I.addressing_mode = I.addressing_mode
++                      and type I.ea = I.ea
++                      and type I.instr = I.instr
++                      and type I.instruction = I.instruction
++                      and type I.operand = I.operand
++    structure MemRegs : MEMORY_REGISTERS (* where I = I *)
++                        where type I.Constant.const = I.Constant.const
++                          and type I.Region.region = I.Region.region
++                          and type I.T.Basis.cond = I.T.Basis.cond
++                          and type I.T.Basis.div_rounding_mode = I.T.Basis.div_rounding_mode
++                          and type I.T.Basis.ext = I.T.Basis.ext
++                          and type I.T.Basis.fcond = I.T.Basis.fcond
++                          and type I.T.Basis.rounding_mode = I.T.Basis.rounding_mode
++                          and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) I.T.Extension.ccx
++                          and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) I.T.Extension.fx
++                          and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) I.T.Extension.rx
++                          and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) I.T.Extension.sx
++                          and type I.T.I.div_rounding_mode = I.T.I.div_rounding_mode
++                          and type I.T.ccexp = I.T.ccexp
++                          and type I.T.fexp = I.T.fexp
++                          (* and type I.T.labexp = I.T.labexp *)
++                          and type I.T.mlrisc = I.T.mlrisc
++                          and type I.T.oper = I.T.oper
++                          and type I.T.rep = I.T.rep
++                          and type I.T.rexp = I.T.rexp
++                          and type I.T.stm = I.T.stm
++                          (* and type I.addressing_mode = I.addressing_mode *)
++                          and type I.binaryOp = I.binaryOp
++                          and type I.bitOp = I.bitOp
++                          and type I.cond = I.cond
++                          and type I.fbinOp = I.fbinOp
++                          and type I.fenvOp = I.fenvOp
++                          and type I.fibinOp = I.fibinOp
++                          and type I.fsize = I.fsize
++                          and type I.funOp = I.funOp
++                          and type I.instr = I.instr
++                          and type I.instruction = I.instruction
++                          and type I.isize = I.isize
++                          and type I.move = I.move
++                          and type I.multDivOp = I.multDivOp
++                          and type I.operand = I.operand
++                          and type I.shiftOp = I.shiftOp
++                          and type I.unaryOp = I.unaryOp
+     val memRegBase : CellsBasis.cell option): OMIT_FRAME_POINTER = 
+ struct
+   structure CFG = CFG
+diff -Naur MLRISC/x86/ra/x86RA.sml MLRISC-mlton/x86/ra/x86RA.sml
+--- MLRISC/x86/ra/x86RA.sml	2003-05-22 18:46:24.000000000 -0400
++++ MLRISC-mlton/x86/ra/x86RA.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -109,13 +109,45 @@
+ 
+ functor X86RA 
+   ( structure I          : X86INSTR
+-    structure InsnProps  : INSN_PROPERTIES 
+-			       where I = I
+-    structure CFG        : CONTROL_FLOW_GRAPH 
+-			       where I = I
+-    structure Asm        : INSTRUCTION_EMITTER 
+-			       where I = I 
+-				 and S.P = CFG.P
++    structure InsnProps  : INSN_PROPERTIES (* where I = I *)
++                           where type I.addressing_mode = I.addressing_mode
++                             and type I.ea = I.ea
++                             and type I.instr = I.instr
++                             and type I.instruction = I.instruction
++                             and type I.operand = I.operand
++    structure CFG        : CONTROL_FLOW_GRAPH (* where I = I *)
++                           where type I.addressing_mode = I.addressing_mode
++                             and type I.ea = I.ea
++                             and type I.instr = I.instr
++                             and type I.instruction = I.instruction
++                             and type I.operand = I.operand
++    structure Asm        : INSTRUCTION_EMITTER (* where I = I and S.P = CFG.P *)
++                           where type I.addressing_mode = I.addressing_mode
++                             and type I.ea = I.ea
++                             and type I.instr = I.instr
++                             and type I.instruction = I.instruction
++                             and type I.operand = I.operand
++                           where type S.P.Client.pseudo_op = CFG.P.Client.pseudo_op
++                             and type S.P.T.Basis.cond = CFG.P.T.Basis.cond
++                             and type S.P.T.Basis.div_rounding_mode = CFG.P.T.Basis.div_rounding_mode
++                             and type S.P.T.Basis.ext = CFG.P.T.Basis.ext
++                             and type S.P.T.Basis.fcond = CFG.P.T.Basis.fcond
++                             and type S.P.T.Basis.rounding_mode = CFG.P.T.Basis.rounding_mode
++                             and type S.P.T.Constant.const = CFG.P.T.Constant.const
++                             and type ('s,'r,'f,'c) S.P.T.Extension.ccx = ('s,'r,'f,'c) CFG.P.T.Extension.ccx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.fx = ('s,'r,'f,'c) CFG.P.T.Extension.fx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.rx = ('s,'r,'f,'c) CFG.P.T.Extension.rx
++                             and type ('s,'r,'f,'c) S.P.T.Extension.sx = ('s,'r,'f,'c) CFG.P.T.Extension.sx
++                             and type S.P.T.I.div_rounding_mode = CFG.P.T.I.div_rounding_mode
++                             and type S.P.T.Region.region = CFG.P.T.Region.region
++                             and type S.P.T.ccexp = CFG.P.T.ccexp
++                             and type S.P.T.fexp = CFG.P.T.fexp
++                             (* and type S.P.T.labexp = CFG.P.T.labexp *)
++                             and type S.P.T.mlrisc = CFG.P.T.mlrisc
++                             and type S.P.T.oper = CFG.P.T.oper
++                             and type S.P.T.rep = CFG.P.T.rep
++                             and type S.P.T.rexp = CFG.P.T.rexp
++                             and type S.P.T.stm = CFG.P.T.stm
+ 
+       (* Spilling heuristics determines which node should be spilled 
+        * You can use Chaitin, ChowHenessey, or one of your own.
+@@ -126,7 +158,12 @@
+        * spill code.  You can use RASpill, or RASpillWithRenaming,
+        * or write your own if you are feeling adventurous.
+        *)
+-    structure Spill : RA_SPILL where I = I 
++    structure Spill : RA_SPILL (* where I = I *)
++                      where type I.addressing_mode = I.addressing_mode
++                        and type I.ea = I.ea
++                        and type I.instr = I.instr
++                        and type I.instruction = I.instruction
++                        and type I.operand = I.operand
+ 
+ 
+     type spill_info (* user-defined abstract type *)
+@@ -304,17 +341,16 @@
+     (* This is the generic register allocator *)
+     structure Ra = 
+       RegisterAllocator
+-       (SpillHeur)
+-       (MemoryRA             (* for memory coalescing *)
++       (structure SpillHeuristics = SpillHeur
++        structure Flowgraph = MemoryRA             (* for memory coalescing *)
+          (RADeadCodeElim     (* do the funky dead code elimination stuff *)
+-            (ClusterRA
++            (structure Flowgraph = ClusterRA
+                (structure Flowgraph = CFG
+                 structure Asm = Asm
+                 structure InsnProps = InsnProps
+                 structure Spill = Spill
+                )
+-            )
+-            (fun cellkind CB.GP = true | cellkind _ = false
++             fun cellkind CB.GP = true | cellkind _ = false
+              val deadRegs = deadRegs
+              val affectedBlocks = affectedBlocks
+              val spillInit = spillInit
+diff -Naur MLRISC/x86/ra/x86Rewrite.sig MLRISC-mlton/x86/ra/x86Rewrite.sig
+--- MLRISC/x86/ra/x86Rewrite.sig	2001-07-19 16:35:19.000000000 -0400
++++ MLRISC-mlton/x86/ra/x86Rewrite.sig	2006-03-04 11:14:21.000000000 -0500
+@@ -1,6 +1,15 @@
+ signature X86REWRITE = sig
+   structure I  : X86INSTR
+-  structure CB : CELLS_BASIS = CellsBasis
++  structure CB : CELLS_BASIS (* = CellsBasis *)
++                 where type CellSet.cellset = CellsBasis.CellSet.cellset
++                   and type 'a ColorTable.hash_table = 'a CellsBasis.ColorTable.hash_table
++                   and type 'a HashTable.hash_table = 'a CellsBasis.HashTable.hash_table
++                   and type SortedCells.sorted_cells = CellsBasis.SortedCells.sorted_cells
++                   and type cell = CellsBasis.cell
++                   and type cellColor = CellsBasis.cellColor
++                   and type cellkind = CellsBasis.cellkind
++                   and type cellkindDesc = CellsBasis.cellkindDesc
++                   and type cellkindInfo = CellsBasis.cellkindInfo
+   val rewriteUse : I.instruction * CB.cell * CB.cell -> I.instruction
+   val rewriteDef : I.instruction * CB.cell * CB.cell -> I.instruction
+   val frewriteUse : I.instruction * CB.cell * CB.cell -> I.instruction
+diff -Naur MLRISC/x86/ra/x86SpillInstr.sml MLRISC-mlton/x86/ra/x86SpillInstr.sml
+--- MLRISC/x86/ra/x86SpillInstr.sml	2005-10-29 13:12:26.000000000 -0400
++++ MLRISC-mlton/x86/ra/x86SpillInstr.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,7 +8,12 @@
+  * introduced before.
+  *)
+ functor X86SpillInstr(structure Instr: X86INSTR
+-                 structure Props: INSN_PROPERTIES where I = Instr
++                      structure Props: INSN_PROPERTIES (* where I = Instr *)
++                                       where type I.addressing_mode = Instr.addressing_mode
++                                         and type I.ea = Instr.ea
++                                         and type I.instr = Instr.instr
++                                         and type I.instruction = Instr.instruction
++                                         and type I.operand = Instr.operand
+ 		) : ARCH_SPILL_INSTR = struct
+ 
+   structure I  = Instr
+@@ -56,7 +61,28 @@
+ 	  done(I.CALL{opnd=addr, defs=C.rmvReg(reg,defs), 
+ 				 return=return, uses=uses, 
+ 		      cutsTo=cutsTo, mem=mem, pops=pops}, an)
+-      | I.MOVE{mvOp as (I.MOVZBL|I.MOVSBL|I.MOVZWL|I.MOVSWL), src, dst} => 
++      | I.MOVE{mvOp as I.MOVZBL, src, dst} => 
++	  let val tmpR = newReg() val tmp = I.Direct tmpR
++	  in  {proh=[tmpR], newReg=SOME tmpR,
++	       code=[mark(I.MOVE{mvOp=mvOp, src=src, dst=tmp}, an),
++		     I.move{mvOp=I.MOVL, src=tmp, dst=spillLoc}]
++	      }
++	  end
++      | I.MOVE{mvOp as I.MOVSBL, src, dst} => 
++	  let val tmpR = newReg() val tmp = I.Direct tmpR
++	  in  {proh=[tmpR], newReg=SOME tmpR,
++	       code=[mark(I.MOVE{mvOp=mvOp, src=src, dst=tmp}, an),
++		     I.move{mvOp=I.MOVL, src=tmp, dst=spillLoc}]
++	      }
++	  end
++      | I.MOVE{mvOp as I.MOVZWL, src, dst} => 
++	  let val tmpR = newReg() val tmp = I.Direct tmpR
++	  in  {proh=[tmpR], newReg=SOME tmpR,
++	       code=[mark(I.MOVE{mvOp=mvOp, src=src, dst=tmp}, an),
++		     I.move{mvOp=I.MOVL, src=tmp, dst=spillLoc}]
++	      }
++	  end
++      | I.MOVE{mvOp as I.MOVSWL, src, dst} => 
+ 	  let val tmpR = newReg() val tmp = I.Direct tmpR
+ 	  in  {proh=[tmpR], newReg=SOME tmpR,
+ 	       code=[mark(I.MOVE{mvOp=mvOp, src=src, dst=tmp}, an),
+@@ -99,7 +125,12 @@
+ 	      newReg=NONE
+ 	     }
+       | I.BINARY{binOp, src, dst} => let (* note: dst = reg *)
+-	 fun multBinOp(I.MULL|I.MULW|I.MULB|I.IMULL|I.IMULW|I.IMULB) = true
++	 fun multBinOp(I.MULL) = true
++	   | multBinOp(I.MULW) = true
++	   | multBinOp(I.MULB) = true
++	   | multBinOp(I.IMULL) = true
++	   | multBinOp(I.IMULW) = true
++	   | multBinOp(I.IMULB) = true
+ 	   | multBinOp _ = false
+ 	in
+ 	  if multBinOp binOp then let
+diff -Naur MLRISC/x86/x86MC.sml MLRISC-mlton/x86/x86MC.sml
+--- MLRISC/x86/x86MC.sml	2003-05-22 18:46:23.000000000 -0400
++++ MLRISC-mlton/x86/x86MC.sml	2006-03-04 11:14:21.000000000 -0500
+@@ -8,11 +8,111 @@
+  *)
+ functor X86MCEmitter
+   (structure Instr : X86INSTR
+-   structure Shuffle : X86SHUFFLE where I = Instr
+-   structure MLTreeEval : MLTREE_EVAL where T = Instr.T
+-   structure MemRegs : MEMORY_REGISTERS where I = Instr
++   structure Shuffle : X86SHUFFLE (* where I = Instr *)
++                       where type I.Constant.const = Instr.Constant.const
++                         and type I.Region.region = Instr.Region.region
++                         and type I.T.Basis.cond = Instr.T.Basis.cond
++                         and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                         and type I.T.Basis.ext = Instr.T.Basis.ext
++                         and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                         and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                         and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                         and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                         and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                         and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                         and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                         and type I.T.ccexp = Instr.T.ccexp
++                         and type I.T.fexp = Instr.T.fexp
++                         (* and type I.T.labexp = Instr.T.labexp *)
++                         and type I.T.mlrisc = Instr.T.mlrisc
++                         and type I.T.oper = Instr.T.oper
++                         and type I.T.rep = Instr.T.rep
++                         and type I.T.rexp = Instr.T.rexp
++                         and type I.T.stm = Instr.T.stm
++                         (* and type I.addressing_mode = Instr.addressing_mode *)
++                         and type I.binaryOp = Instr.binaryOp
++                         and type I.bitOp = Instr.bitOp
++                         and type I.cond = Instr.cond
++                         and type I.fbinOp = Instr.fbinOp
++                         and type I.fenvOp = Instr.fenvOp
++                         and type I.fibinOp = Instr.fibinOp
++                         and type I.fsize = Instr.fsize
++                         and type I.funOp = Instr.funOp
++                         and type I.instr = Instr.instr
++                         and type I.instruction = Instr.instruction
++                         and type I.isize = Instr.isize
++                         and type I.move = Instr.move
++                         and type I.multDivOp = Instr.multDivOp
++                         and type I.operand = Instr.operand
++                         and type I.shiftOp = Instr.shiftOp
++                         and type I.unaryOp = Instr.unaryOp
++   structure MLTreeEval : MLTREE_EVAL (* where T = Instr.T *)
++                          where type T.Basis.cond = Instr.T.Basis.cond
++                            and type T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                            and type T.Basis.ext = Instr.T.Basis.ext
++                            and type T.Basis.fcond = Instr.T.Basis.fcond
++                            and type T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                            and type T.Constant.const = Instr.T.Constant.const
++                            and type ('s,'r,'f,'c) T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                            and type ('s,'r,'f,'c) T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                            and type ('s,'r,'f,'c) T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                            and type ('s,'r,'f,'c) T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                            and type T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                            and type T.Region.region = Instr.T.Region.region
++                            and type T.ccexp = Instr.T.ccexp
++                            and type T.fexp = Instr.T.fexp
++                            (* and type T.labexp = Instr.T.labexp *)
++                            and type T.mlrisc = Instr.T.mlrisc
++                            and type T.oper = Instr.T.oper
++                            and type T.rep = Instr.T.rep
++                            and type T.rexp = Instr.T.rexp
++                            and type T.stm = Instr.T.stm
++   structure MemRegs : MEMORY_REGISTERS (* where I = Instr *)
++                       where type I.Constant.const = Instr.Constant.const
++                         and type I.Region.region = Instr.Region.region
++                         and type I.T.Basis.cond = Instr.T.Basis.cond
++                         and type I.T.Basis.div_rounding_mode = Instr.T.Basis.div_rounding_mode
++                         and type I.T.Basis.ext = Instr.T.Basis.ext
++                         and type I.T.Basis.fcond = Instr.T.Basis.fcond
++                         and type I.T.Basis.rounding_mode = Instr.T.Basis.rounding_mode
++                         and type ('s,'r,'f,'c) I.T.Extension.ccx = ('s,'r,'f,'c) Instr.T.Extension.ccx
++                         and type ('s,'r,'f,'c) I.T.Extension.fx = ('s,'r,'f,'c) Instr.T.Extension.fx
++                         and type ('s,'r,'f,'c) I.T.Extension.rx = ('s,'r,'f,'c) Instr.T.Extension.rx
++                         and type ('s,'r,'f,'c) I.T.Extension.sx = ('s,'r,'f,'c) Instr.T.Extension.sx
++                         and type I.T.I.div_rounding_mode = Instr.T.I.div_rounding_mode
++                         and type I.T.ccexp = Instr.T.ccexp
++                         and type I.T.fexp = Instr.T.fexp
++                         (* and type I.T.labexp = Instr.T.labexp *)
++                         and type I.T.mlrisc = Instr.T.mlrisc
++                         and type I.T.oper = Instr.T.oper
++                         and type I.T.rep = Instr.T.rep
++                         and type I.T.rexp = Instr.T.rexp
++                         and type I.T.stm = Instr.T.stm
++                         (* and type I.addressing_mode = Instr.addressing_mode *)
++                         and type I.binaryOp = Instr.binaryOp
++                         and type I.bitOp = Instr.bitOp
++                         and type I.cond = Instr.cond
++                         and type I.fbinOp = Instr.fbinOp
++                         and type I.fenvOp = Instr.fenvOp
++                         and type I.fibinOp = Instr.fibinOp
++                         and type I.fsize = Instr.fsize
++                         and type I.funOp = Instr.funOp
++                         and type I.instr = Instr.instr
++                         and type I.instruction = Instr.instruction
++                         and type I.isize = Instr.isize
++                         and type I.move = Instr.move
++                         and type I.multDivOp = Instr.multDivOp
++                         and type I.operand = Instr.operand
++                         and type I.shiftOp = Instr.shiftOp
++                         and type I.unaryOp = Instr.unaryOp
+    val memRegBase : CellsBasis.cell option
+-   structure AsmEmitter : INSTRUCTION_EMITTER where I = Instr) : MC_EMIT = 
++   structure AsmEmitter : INSTRUCTION_EMITTER (* where I = Instr *)
++                          where type I.addressing_mode = Instr.addressing_mode
++                            and type I.ea = Instr.ea
++                            and type I.instr = Instr.instr
++                            and type I.instruction = Instr.instruction
++                            and type I.operand = Instr.operand
++  ) : MC_EMIT = 
+ struct
+   structure I = Instr
+   structure C = I.C
+@@ -312,7 +412,8 @@
+        end
+      | I.LEA{r32, addr} => encodeReg(0wx8d, r32, addr)
+      | I.CMPL{lsrc, rsrc} => arith(0wx38, 7) (rsrc, lsrc)
+-     | (I.CMPW _ | I.CMPB _) => error "CMP"
++     | I.CMPW _ => error "CMP"
++     | I.CMPB _ => error "CMP"
+      | I.TESTL{lsrc, rsrc} => test(32, rsrc, lsrc)
+      | I.TESTB{lsrc, rsrc} => test(8, rsrc, lsrc)
+      | I.TESTW _ => error "TEST"
+diff -Naur MLRISC/x86/x86.mdl MLRISC-mlton/x86/x86.mdl
+--- MLRISC/x86/x86.mdl	2004-10-24 13:56:50.000000000 -0400
++++ MLRISC-mlton/x86/x86.mdl	2006-03-04 11:14:21.000000000 -0500
+@@ -578,7 +578,8 @@
+       fun chop fbinOp =
+           let val n = size fbinOp
+           in  case Char.toLower(String.sub(fbinOp,n-1)) of
+-                (#"s" | #"l") => String.substring(fbinOp,0,n-1)
++                #"s" => String.substring(fbinOp,0,n-1)
++              | #"l" => String.substring(fbinOp,0,n-1)
+               | _ => fbinOp
+           end
+ 
+@@ -707,9 +708,23 @@
+     | BINARY of {binOp:binaryOp, src:operand, dst:operand}
+ 	asm: (case (src,binOp) of
+                (I.Direct _,  (* tricky business here for shifts *)
+-               (I.SARL | I.SHRL | I.SHLL |
+-                I.SARW | I.SHRW | I.SHLW |
+-                I.SARB | I.SHRB | I.SHLB)) => ``<binOp>\t%cl, <dst>''
++                I.SARL) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHRL) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHLL) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SARW) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHRW) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHLW) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SARB) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHRB) => ``<binOp>\t%cl, <dst>''
++             | (I.Direct _,  (* tricky business here for shifts *)
++                I.SHLB) => ``<binOp>\t%cl, <dst>''
+              | _ => ``<binOp>\t<src>, <dst>''
+              )
+ 	(*rtl: ``<binOp>''*)

Added: mlton/trunk/lib/mlrisc-lib/MLRISC.tgz
===================================================================
(Binary files differ)


Property changes on: mlton/trunk/lib/mlrisc-lib/MLRISC.tgz
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: mlton/trunk/lib/mlrisc-lib/Makefile (from rev 4361, mlton/trunk/lib/ckit-lib/Makefile)
===================================================================
--- mlton/trunk/lib/ckit-lib/Makefile	2006-02-16 19:34:54 UTC (rev 4361)
+++ mlton/trunk/lib/mlrisc-lib/Makefile	2006-03-04 17:09:22 UTC (rev 4373)
@@ -0,0 +1,19 @@
+## Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
+ #    Jagannathan, and Stephen Weeks.
+ # Copyright (C) 1997-2000 NEC Research Institute.
+ #
+ # MLton is released under a BSD-style license.
+ # See the file MLton-LICENSE for details.
+ ##
+
+all: MLRISC/README.mlton
+
+MLRISC/README.mlton: MLRISC.tgz MLRISC.patch
+	gzip -dc MLRISC.tgz | tar xf -
+	chmod -R a+r MLRISC
+	chmod -R g-s MLRISC
+	patch -p0 < MLRISC.patch
+
+.PHONY: clean
+clean:
+	../../bin/clean

Modified: mlton/trunk/util/cm2mlb/cm2mlb-map
===================================================================
--- mlton/trunk/util/cm2mlb/cm2mlb-map	2006-03-04 14:35:22 UTC (rev 4372)
+++ mlton/trunk/util/cm2mlb/cm2mlb-map	2006-03-04 17:09:22 UTC (rev 4373)
@@ -26,3 +26,5 @@
 
 $ckit-lib.cm                 $(SML_LIB)/ckit-lib
 $ckit-lib.cm/ckit-lib.cm     $(SML_LIB)/ckit-lib/ckit-lib.mlb
+
+$SMLNJ-MLRISC     $(SML_LIB)/mlrisc-lib/mlb