summaryrefslogtreecommitdiff
path: root/il.sig
diff options
context:
space:
mode:
Diffstat (limited to 'il.sig')
-rw-r--r--il.sig83
1 files changed, 82 insertions, 1 deletions
diff --git a/il.sig b/il.sig
index 767c9b5..745f72f 100644
--- a/il.sig
+++ b/il.sig
@@ -1,13 +1,94 @@
signature IL = sig
structure P: PARSER
+ structure PP: PPC
+ structure D: DYNARRAY
+
+ datatype vregClass = VR4 | VR8
+
+ type vreg = int
+ type label = int
+
+ datatype setArg = SaVReg of vreg | SaConst of word |
+ SaAddr of P.nid * word
+
+ datatype accessClass = AC1 | AC2 | AC4 | AC8
+
+ datatype irIns =
+ IrSet of vreg * setArg
+ | IrAdd of vreg * vreg * vreg
+ | IrSub of vreg * vreg * vreg
+ | IrMul of vreg * vreg * vreg
+ | IrIMul of vreg * vreg * vreg
+ | IrDiv of vreg * vreg * vreg
+ | IrIDiv of vreg * vreg * vreg
+ | IrMod of vreg * vreg * vreg
+ | IrIMod of vreg * vreg * vreg
+ | IrShr of vreg * vreg * vreg
+ | IrShl of vreg * vreg * vreg
+ | IrSar of vreg * vreg * vreg
+ | IrAnd of vreg * vreg * vreg
+ | IrOr of vreg * vreg * vreg
+ | IrXor of vreg * vreg * vreg
+ | IrEq of vreg * vreg * vreg
+ | IrNeq of vreg * vreg * vreg
+
+ | IrCmpul of vreg * vreg * vreg
+ | IrCmpug of vreg * vreg * vreg
+ | IrCmpule of vreg * vreg * vreg
+ | IrCmpuge of vreg * vreg * vreg
+
+ | IrCmpsl of vreg * vreg * vreg
+ | IrCmpsg of vreg * vreg * vreg
+ | IrCmpsle of vreg * vreg * vreg
+ | IrCmpsge of vreg * vreg * vreg
+
+ | IrExtZero of vreg * vreg * accessClass
+ | IrExtSign of vreg * vreg * accessClass
+ | IrLoad of vreg * vreg * accessClass (* %1 <- [%2] *)
+ | IrStore of vreg * vreg * accessClass (* [%1] <- %2 *)
+
+ | IrJz of vreg * label
+ | IrJnz of vreg * label
+ | IrJmp of label
+
+ | IrRet of vreg option
+ | IrAlloc of vreg * word
+ | IrCopy of vreg * label * word
+ | IrFcall of vreg * vreg * vreg list
+
+ | IrNopLabel of label
+ | IrNop of string
+
+ datatype ev = Reg of vreg | Addr of vreg
+
+ datatype regType =
+ RtReg |
+ RtRem |
+ RtConst of word |
+ RtAddrConst of int * word
+
+ type regInfo = {
+ class: vregClass,
+ use: int list,
+ defs: int list,
+ t: regType
+ }
+
+ datatype funcInfo = Fi of {
+ name: int,
+ localBound: int,
+ vregs: regInfo D.t,
+ ops: (irIns option) D.t,
+ labels: int option D.t
+ }
datatype ctx = Ctx of {
objs: P.objDef list,
objsZI: P.objDef list,
extSyms: P.nid list,
globSyms: P.nid list,
- funcs: P.funcInfo list,
+ funcInfos: funcInfo list,
strlits: int list
}