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

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

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