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/hppa/hppaCpsRegs.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/CodeGen/hppa/hppaCpsRegs.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (view) (download)

1 : monnier 16 (* hppaCpsRegs.sml --- CPS registers used on the HPPA
2 :     *
3 :     * COPYRIGHT (c) 1996 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :    
7 :     structure HppaCpsRegs : CPSREGS =
8 :     struct
9 :     structure T = HppaMLTree
10 :     structure SL = SortedList
11 :    
12 :     (* HPPA register conventions
13 :     0 zero
14 :     1 caller-saves
15 :     2 return-pointer and scratch
16 :     3-18 callee-saves
17 :     19-22 caller-saves
18 :     23 arg3
19 :     24 arg2
20 :     25 arg1
21 :     26 arg0
22 :     27 reserved
23 :     28 ret0
24 :     29 ret1
25 :     30 stack pointer
26 :     31 millicode return and scratch.
27 :     *)
28 :    
29 :     val stdarg = T.REG 11
30 :     val stdcont = T.REG 12
31 :     val stdclos = T.REG 10
32 :     val stdlink = T.REG 9
33 :     val baseptr = T.REG 8
34 :     val maskreg = T.REG 20
35 :    
36 :     val limitptr = T.REG 4
37 :     val varptr = T.REG 7
38 :     val exhaustedR = 21
39 :     val exhausted = T.CC exhaustedR
40 :     val storeptr = T.REG 5
41 :     val allocptr = T.REG 3
42 :     val exnptr = T.REG 6
43 :    
44 :     val returnPtr = 31
45 :     val gclinkreg = T.REG returnPtr
46 :     val stackptr = T.REG 30
47 :    
48 :     val miscregs =
49 :     map T.REG [1, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 28, 2]
50 :     val calleesave = Array.fromList miscregs
51 :    
52 :     (* Note: We need at least one register for shuffling purposes. *)
53 :     fun fromto(n, m) = if n>m then [] else n :: fromto(n+1, m)
54 :     val floatregs = map T.FREG (fromto(6, 30))
55 :     val savedfpregs = []
56 :    
57 :     val allRegs = SL.uniq(fromto(0,31))
58 :    
59 :     val availR =
60 :     map (fn T.REG r => r)
61 :     ([stdlink, stdclos, stdarg, stdcont,
62 :     gclinkreg, maskreg, T.REG exhaustedR] @ miscregs)
63 :     val dedicatedR = SL.remove(SL.uniq availR, allRegs)
64 :    
65 :     val availF = SL.uniq(fromto(6, 30))
66 :     val dedicatedF = SL.remove(availF, allRegs)
67 :     end
68 :    
69 :     (*
70 :     * $Log: hppaCpsRegs.sml,v $
71 :     * Revision 1.3 1997/09/17 17:15:39 george
72 :     * dedicated registers are now part of the CPSREGS interface
73 :     *
74 :     # Revision 1.2 1997/07/03 13:56:58 george
75 :     # Added support for FCOPY.
76 :     #
77 :     # Revision 1.1 1997/04/19 18:17:47 george
78 :     # Version 109.27
79 :     #
80 :     * Revision 1.1.1.1 1997/01/14 01:38:34 george
81 :     * Version 109.24
82 :     *
83 :     *)

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