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 909 - (view) (download)

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

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