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/ppc/ppcCG.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/CodeGen/ppc/ppcCG.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1003 - (view) (download)

1 : monnier 429 (*
2 :     * PPC specific backend
3 :     *)
4 :     structure PPCCG =
5 :     MachineGen
6 :     ( structure MachSpec = PPCSpec
7 : george 984 structure ClientPseudoOps = PPCClientPseudoOps
8 : monnier 429 structure PseudoOps = PPCPseudoOps
9 : blume 773 structure Ext = SMLNJMLTreeExt(* generic extension *)
10 : monnier 429 structure CpsRegs = PPCCpsRegs
11 : monnier 475 structure InsnProps = PPCProps
12 : monnier 429 structure Asm = PPCAsmEmitter
13 : george 555 structure Shuffle = PPCShuffle
14 : monnier 247
15 : blume 773 structure CCalls = DummyCCallsFn (PPCMLTree)
16 :    
17 : george 823 structure OmitFramePtr = struct
18 :     exception NotImplemented
19 : george 909 structure CFG=PPCCFG
20 : george 823 structure I=PPCInstr
21 :     val vfp = PPCCpsRegs.vfp
22 :     fun omitframeptr _ = raise NotImplemented
23 :     end
24 :    
25 : monnier 429 structure MLTreeComp=
26 :     PPC(structure PPCInstr = PPCInstr
27 :     structure PPCMLTree = PPCMLTree
28 :     structure PseudoInstrs=
29 :     PPCPseudoInstr(structure Instr=PPCInstr)
30 : george 555 structure ExtensionComp = SMLNJMLTreeExtComp
31 :     (structure I = PPCInstr
32 :     structure T = PPCMLTree
33 : george 909 structure CFG = PPCCFG
34 : george 984 structure TS = PPCMLTreeStream
35 : george 555 )
36 : monnier 429 val bit64mode=false
37 :     val multCost=ref 6 (* an estimate *)
38 :     )
39 : monnier 247
40 : leunga 657 structure Jumps =
41 : monnier 429 PPCJumps(structure Instr=PPCInstr
42 : george 984 structure MLTreeEval=PPCMLTreeEval
43 : monnier 429 structure Shuffle=PPCShuffle)
44 : monnier 247
45 : monnier 429 structure BackPatch =
46 : george 909 BBSched2(structure CFG = PPCCFG
47 :     structure Placement = DefaultBlockPlacement(PPCCFG)
48 : leunga 657 structure Jumps = Jumps
49 : monnier 429 structure Emitter = PPCMCEmitter)
50 : monnier 411
51 : monnier 429 structure RA =
52 : leunga 744 RISC_RA
53 : monnier 429 (structure I = PPCInstr
54 : george 909 structure Flowgraph = PPCCFG
55 : monnier 429 structure CpsRegs = PPCCpsRegs
56 :     structure InsnProps = InsnProps
57 :     structure Rewrite = PPCRewrite(PPCInstr)
58 :     structure Asm = PPCAsmEmitter
59 : leunga 744 structure SpillHeur = ChaitinSpillHeur
60 :     structure Spill = RASpill(structure InsnProps = InsnProps
61 :     structure Asm = PPCAsmEmitter)
62 : monnier 247
63 : leunga 744 structure SpillTable = SpillTable(PPCSpec)
64 :    
65 :     val architecture = PPCSpec.architecture
66 :    
67 :     val beginRA = SpillTable.spillInit
68 :    
69 : monnier 429 val sp = I.C.stackptrR
70 : monnier 498 val spill = CPSRegions.spill
71 : monnier 247
72 : monnier 469 fun pure _ = false
73 :    
74 : leunga 744 structure Int =
75 :     struct
76 :     val avail = PPCCpsRegs.availR
77 :     val dedicated = PPCCpsRegs.dedicatedR
78 : monnier 247
79 : leunga 744 (* make copy *)
80 :     fun copy((rds as [_], rss as [_]), _) =
81 : george 1003 I.copy{dst=rds, src=rss, impl=ref NONE, tmp=NONE}
82 :     | copy((rds, rss), I.INSTR(I.COPY{tmp, ...})) =
83 :     I.copy{dst=rds, src=rss, impl=ref NONE, tmp=tmp}
84 : monnier 247
85 : leunga 744 (* spill copy temp *)
86 : george 1003 fun spillCopyTmp(_, I.INSTR(I.COPY{dst,src,tmp,impl}),loc) =
87 :     I.copy{dst=dst, src=src, impl=impl,
88 : leunga 744 tmp=SOME(I.Displace
89 :     {base=sp,
90 :     disp=I.ImmedOp(SpillTable.getRegLoc loc)})}
91 : monnier 247
92 : leunga 744 (* spill register *)
93 : leunga 796 fun spillInstr{src,spilledCell,spillLoc,an} =
94 : george 1003 [I.st{st=I.STW, ra=sp,
95 : leunga 796 d=I.ImmedOp(SpillTable.getRegLoc spillLoc),
96 :     rs=src, mem=spill}]
97 : leunga 744 (* reload register *)
98 : leunga 796 fun reloadInstr{dst,spilledCell,spillLoc,an} =
99 : george 1003 [I.l{ld=I.LWZ, ra=sp,
100 : leunga 796 d=I.ImmedOp(SpillTable.getRegLoc spillLoc),
101 :     rt=dst, mem=spill}]
102 : leunga 744
103 : leunga 796 val mode = RACore.NO_OPTIMIZATION
104 : leunga 744 end
105 :     structure Float =
106 :     struct
107 :     val avail = PPCCpsRegs.availF
108 :     val dedicated = PPCCpsRegs.dedicatedF
109 :    
110 :     fun copy((fds as [_], fss as [_]), _) =
111 : george 1003 I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=NONE}
112 :     | copy((fds, fss), I.INSTR(I.FCOPY{tmp, ...})) =
113 :     I.fcopy{dst=fds, src=fss, impl=ref NONE, tmp=tmp}
114 : leunga 744
115 : george 1003 fun spillCopyTmp(_, I.INSTR(I.FCOPY{dst,src,tmp,impl}),loc) =
116 :     I.fcopy{dst=dst, src=src, impl=impl,
117 : leunga 744 tmp=SOME(I.Displace
118 :     {base=sp,
119 :     disp=I.ImmedOp(SpillTable.getFregLoc loc)
120 :     })}
121 :    
122 :     fun spillInstr(_, fs,loc) =
123 : george 1003 [I.stf{st=I.STFD, ra=sp,
124 : leunga 744 d=I.ImmedOp(SpillTable.getFregLoc loc),
125 :     fs=fs, mem=spill}]
126 :    
127 :     fun reloadInstr(_, ft,loc) =
128 : george 1003 [I.lf{ld=I.LFD, ra=sp, d=I.ImmedOp(SpillTable.getFregLoc loc),
129 : leunga 744 ft=ft, mem=spill}]
130 : leunga 796
131 :     val mode = RACore.NO_OPTIMIZATION
132 : leunga 744 end
133 :     )
134 : monnier 429 )

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