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

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

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