Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/instructions/insnProps.sig
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/instructions/insnProps.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 796 - (view) (download) (as text)

1 : monnier 411 (*
2 :     * Basic Instruction properties that must be supported on all architectures.
3 : monnier 245 *
4 : monnier 411 * -- Allen
5 : monnier 245 *)
6 : monnier 411 signature INSN_PROPERTIES =
7 :     sig
8 : monnier 245 structure C : CELLS
9 :     structure I : INSTRUCTIONS
10 :    
11 :     sharing I.C = C
12 :    
13 : monnier 411 (* classify instructions *)
14 :     datatype kind = IK_JUMP (* branches, including returns *)
15 :     | IK_NOP (* no ops *)
16 :     | IK_INSTR (* normal instructions *)
17 :     | IK_COPY (* parallel copy *)
18 :     | IK_CALL (* call instructions *)
19 : leunga 796 | IK_CALL_WITH_CUTS (* call with cut edges *)
20 : monnier 411 | IK_PHI (* A phi node (SSA) *)
21 : leunga 641 | IK_SINK (* A sink node (SSA) *)
22 :     | IK_SOURCE (* A source node (SSA) *)
23 : monnier 245
24 : monnier 411 val instrKind : I.instruction -> kind
25 : monnier 245
26 : monnier 411 (* parallel moves *)
27 :     val moveInstr : I.instruction -> bool
28 : monnier 429 val moveTmpR : I.instruction -> C.cell option
29 :     val moveDstSrc : I.instruction -> C.cell list * C.cell list
30 : monnier 245
31 : monnier 411 (* no op *)
32 :     val nop : unit -> I.instruction
33 : monnier 245
34 : monnier 411 (* jump instruction *)
35 :     val jump : Label.label -> I.instruction
36 : monnier 245
37 : monnier 411 (* load immediate; must be within immedRange *)
38 : leunga 657 val immedRange : {lo:int, hi:int}
39 :     val loadImmed : {immed:int, t:C.cell} -> I.instruction
40 :     val loadOperand : {opn:I.operand, t:C.cell} -> I.instruction
41 : monnier 245
42 : monnier 411 (*
43 :     * Targets of a branch instruction
44 :     * precondition: instruction must be of type IK_JUMP.
45 :     *)
46 :     datatype target = LABELLED of Label.label | FALLTHROUGH | ESCAPES
47 : monnier 245 val branchTargets : I.instruction -> target list
48 :    
49 : monnier 411 (* Set the branch target; no effect if not a branch instruction *)
50 : monnier 245 val setTargets : I.instruction * Label.label list -> I.instruction
51 : monnier 411
52 :     (* equality and hashing on operands *)
53 :     val eqOpn : I.operand * I.operand -> bool
54 :     val hashOpn : I.operand -> word
55 : monnier 245
56 : monnier 411 (* Negate the branching condition; raises NegateConditional
57 :     * if it is impossible to negate
58 :     *)
59 :     exception NegateConditional
60 : monnier 245 val negateConditional : I.instruction -> I.instruction
61 :    
62 : monnier 411 (* definition/use for the RA *)
63 :     val defUse : C.cellkind ->
64 : monnier 429 I.instruction -> (C.cell list * C.cell list)
65 : monnier 245
66 : monnier 411 (* annotations *)
67 : monnier 469 val getAnnotations : I.instruction ->
68 :     I.instruction * Annotations.annotation list
69 : monnier 411 val annotate : I.instruction * Annotations.annotation -> I.instruction
70 : leunga 657
71 :     val replicate : I.instruction -> I.instruction
72 : monnier 411 end
73 : monnier 245

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