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/compiler/CodeGen/sparc/sparcCG.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/CodeGen/sparc/sparcCG.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1124 - (view) (download)

1 : monnier 429 (*
2 :     * Sparc specific backend
3 :     *)
4 :     structure SparcCG =
5 :     MachineGen
6 :     ( structure MachSpec = SparcSpec
7 : george 1033 structure T = SparcMLTree
8 : george 1009 structure CB = CellsBasis
9 : george 984 structure ClientPseudoOps = SparcClientPseudoOps
10 : monnier 429 structure PseudoOps = SparcPseudoOps
11 : blume 840 structure Ext = Sparc_SMLNJMLTreeExt(* sparc specific *)
12 : monnier 429 structure CpsRegs = SparcCpsRegs
13 : monnier 475 structure InsnProps = SparcProps
14 : monnier 429 structure Asm = SparcAsmEmitter
15 : george 555 structure Shuffle = SparcShuffle
16 : monnier 247
17 : blume 840 structure CCalls =
18 :     Sparc_CCalls (structure T = SparcMLTree fun ix x = x)
19 : blume 773
20 : george 823 structure OmitFramePtr = struct
21 : george 909 structure CFG=SparcCFG
22 : george 823 structure I=SparcInstr
23 :     val vfp = CpsRegs.vfp
24 : blume 840 (* no rewriting necessary, backend uses %fp instead of %sp *)
25 :     fun omitframeptr _ = ()
26 : george 823 end
27 :    
28 : monnier 429 structure MLTreeComp=
29 :     Sparc(structure SparcInstr = SparcInstr
30 :     structure SparcMLTree = SparcMLTree
31 :     structure PseudoInstrs = SparcPseudoInstrs
32 : blume 840 structure ExtensionComp = SparcMLTreeExtComp
33 : george 555 (structure I = SparcInstr
34 :     structure T = SparcMLTree
35 : george 984 structure Stream = SparcMLTreeStream
36 : george 909 structure CFG = SparcCFG
37 : george 555 )
38 : monnier 429 val V9 = false
39 :     val muluCost = ref 5
40 :     val multCost = ref 3
41 :     val divuCost = ref 5
42 :     val divtCost = ref 5
43 :     val registerwindow = ref false
44 :     val useBR = ref false
45 :     )
46 : monnier 247
47 : leunga 657 structure Jumps =
48 : monnier 429 SparcJumps(structure Instr=SparcInstr
49 : george 984 structure MLTreeEval=SparcMLTreeEval
50 : monnier 429 structure Shuffle=SparcShuffle)
51 : monnier 247
52 : monnier 429 structure BackPatch =
53 :     SpanDependencyResolution
54 : george 909 (structure CFG = SparcCFG
55 : leunga 657 structure Jumps = Jumps
56 : monnier 429 structure Emitter = SparcMCEmitter
57 :     structure DelaySlot = SparcDelaySlots
58 :     (structure I=SparcInstr
59 :     structure P=InsnProps)
60 :     structure Props = InsnProps
61 :     )
62 : monnier 411
63 : monnier 429 structure RA =
64 : leunga 744 RISC_RA
65 : monnier 429 (structure I = SparcInstr
66 : george 1033 structure CFG = SparcCFG
67 : monnier 429 structure InsnProps = InsnProps
68 :     structure Rewrite = SparcRewrite(SparcInstr)
69 : george 1033 structure SpillInstr= SparcSpillInstr(SparcInstr)
70 : monnier 429 structure Asm = SparcAsmEmitter
71 : leunga 744 structure SpillHeur = ChaitinSpillHeur
72 :     structure Spill = RASpill(structure InsnProps = InsnProps
73 :     structure Asm = SparcAsmEmitter)
74 : monnier 247
75 : leunga 744 structure SpillTable = SpillTable(SparcSpec)
76 : blume 840 val fp = I.C.frameptrR
77 : monnier 498 val spill = CPSRegions.spill
78 : george 1033 datatype spillOperandKind = SPILL_LOC | CONST_VAL
79 :     type spill_info = unit
80 :     fun beforeRA _ = SpillTable.spillInit()
81 :    
82 : leunga 744 val architecture = SparcSpec.architecture
83 : monnier 469
84 :     fun pure(I.ANNOTATION{i,...}) = pure i
85 : george 1003 | pure(I.INSTR(I.LOAD _)) = true
86 :     | pure(I.INSTR(I.FLOAD _)) = true
87 :     | pure(I.INSTR(I.SETHI _)) = true
88 :     | pure(I.INSTR(I.SHIFT _)) = true
89 :     | pure(I.INSTR(I.FPop1 _)) = true
90 :     | pure(I.INSTR(I.FPop2 _)) = true
91 : monnier 469 | pure _ = false
92 : monnier 247
93 : george 1003 (* make copy *)
94 : leunga 744 structure Int =
95 :     struct
96 :     val avail = SparcCpsRegs.availR
97 :     val dedicated = SparcCpsRegs.dedicatedR
98 : monnier 247
99 : george 1033 fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getRegLoc loc))
100 :     fun spillLoc{info, an, cell, id} =
101 :     {opnd=I.Displace{base=fp, disp=mkDisp(RAGraph.FRAME id), mem=spill},
102 :     kind=SPILL_LOC}
103 : monnier 247
104 : leunga 796 val mode = RACore.NO_OPTIMIZATION
105 : leunga 744 end
106 :    
107 :     structure Float =
108 :     struct
109 :     val avail = SparcCpsRegs.availF
110 :     val dedicated = SparcCpsRegs.dedicatedF
111 :    
112 : george 1033 fun mkDisp loc = T.LI(T.I.fromInt(32, SpillTable.getFregLoc loc))
113 : leunga 744
114 : george 1033 fun spillLoc(S, an, loc) =
115 :     I.Displace{base=fp, disp=mkDisp(RAGraph.FRAME loc), mem=spill}
116 : george 1009
117 : leunga 796 val mode = RACore.NO_OPTIMIZATION
118 : leunga 744 end
119 : monnier 429 )
120 :     )

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