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/MLRISC/sparc/sparcCells.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/sparc/sparcCells.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 129 - (view) (download)

1 : monnier 129 (* sparcCells.sml
2 :     *
3 :     * COPYRIGHT (c) 1996 Bell Laboratories.
4 :     *
5 :     *)
6 :     structure SparcCells : SPARCCELLS = struct
7 :     structure SL = SortedList
8 :    
9 :     type regmap = int Intmap.intmap
10 :     datatype cellclass = GP | FP | CC | Y | PSR | FSR | MEM | CTRL
11 :    
12 :     exception Cells
13 :    
14 :     val stackptrR = 14
15 :     val asmTmpR = 10 (* %o2 *)
16 :     val fasmTmp = 30
17 :     val y = 64
18 :     val psr = 65
19 :     val fsr = 66
20 :     val linkReg = 15
21 :    
22 :     val firstPseudo = 256
23 :    
24 :     val counter = ref firstPseudo
25 :     val regCnt = ref 0
26 :     val fregCnt = ref 0
27 :     fun bump (r as ref c) = (r := c+1; c)
28 :     fun downto0 0 = [0]
29 :     | downto0 n = n::downto0(n-1)
30 :     val physicalRegs = downto0 31
31 :    
32 :     fun newReg () = (bump regCnt; bump counter)
33 :     fun newFreg() = (bump fregCnt; bump counter)
34 :     fun newCCreg () = (bump regCnt; bump counter)
35 :    
36 :     fun resetRegs() = let
37 :     val regmap = Intmap.new(64, Cells)
38 :     val enter = Intmap.add regmap
39 :     in
40 :     counter:=firstPseudo;
41 :     regCnt :=0;
42 :     fregCnt:=0;
43 :     app (fn r => enter(r,r)) physicalRegs;
44 :     regmap
45 :     end
46 :    
47 :     fun newCell GP = newReg
48 :     | newCell FP = newFreg
49 :     | newCell CC = newReg
50 :     | newCell _ = (fn () => bump counter)
51 :    
52 :     fun maxCell () = !counter
53 :    
54 :     fun numCell GP = (fn () => !regCnt)
55 :     | numCell FP = (fn () => !fregCnt)
56 :     | numCell _ = raise Cells
57 :    
58 :     fun cellToString(r,GP) =
59 :     if r < 8 then "%g"^Int.toString r
60 :     else if r = 14 then "%sp"
61 :     else if r < 16 then "%o"^Int.toString(r-8)
62 :     else if r < 24 then "%l"^Int.toString(r-16)
63 :     else if r = 30 then "%fp"
64 :     else if r < 32 then "%i"^Int.toString(r-24)
65 :     else "%r"^Int.toString r
66 :     | cellToString(r,class) = prefix class^Int.toString r
67 :     and prefix GP = "r"
68 :     | prefix FP = "f"
69 :     | prefix CC = "cc"
70 :     | prefix Y = "%y"
71 :     | prefix PSR = "%psr"
72 :     | prefix FSR = "%fsr"
73 :     | prefix MEM = "m"
74 :     | prefix CTRL = "ctrl"
75 :    
76 :     fun zero GP = SOME 0
77 :     | zero _ = NONE
78 :    
79 :     type cellset = (int list * int list)
80 :    
81 :     val empty = ([], [])
82 :     fun cellset2string(regs, fregs) = let
83 :     val gp = "gp=" :: map (fn r => (" %r" ^ Int.toString r)) regs
84 :     val fp = " fp=" :: map (fn f => (" %f" ^ Int.toString f)) fregs
85 :     in String.concat(gp @ fp)
86 :     end
87 :     fun addReg(r, (rc,fc)) = (SL.enter(r,rc), fc)
88 :     fun addFreg(f, (rc,fc)) = (rc, SL.enter(f, fc))
89 :     fun addCell GP = addReg
90 :     | addCell FP = addFreg
91 :     | addCell CC = addReg
92 :     | addCell _ = raise Cells
93 :    
94 :     fun cellsetToRegs(regmap, (regs,fregs)) = let
95 :     val lookup = Intmap.map regmap
96 :     fun trans [] = []
97 :     | trans(r::rs) = let
98 :     val r = lookup r handle _ => r
99 :     in if r = 0 then trans rs else r::trans rs
100 :     end
101 :     fun ftrans r = let
102 :     val r = lookup r handle _ => r
103 :     in if r < 32 then r + 32 else r
104 :     end
105 :     in (map ftrans fregs @ trans regs)
106 :     end
107 :     end
108 :    
109 :    
110 :     (*
111 :     * $Log$
112 :     *)

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