x86 backend design

Stephen Weeks sweeks@intertrust.com
Mon, 26 Jun 2000 10:12:32 -0700 (PDT)

> difficulty with arrayOffsets, contents, etc. is that there aren't
> "pointer" specific variants.  arrayOffsets and Contents both expect some
> pointer type (either register, global, stack offset), but with the current
> types, that's hidden away in the ty: field.

What I am proposing is something like the following in machine.sig

      structure ArrayOffsetBase:
	    datatype t =
	       Global of Global.t
	     | Register of Register.t 
	     | StackOffset of int

Then, you would change structure Operand so that instead of

	val arrayOffset: {base: t, offset: t, ty: Type.t} -> t

you would have

	val arrayOffset: {base: ArrayOffsetBase.t, offset: t, ty: Type.t} -> t

You would of course create a new sum type for every place Operand.t
occurs on as a constructor argument in the Operand.t datatype (I count 
six such occurrences).

Does this seem reasonable?