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/branches/SMLNJ/src/compiler/CodeGen/x86/x86CpsRegs.sml
ViewVC logotype

Annotation of /sml/branches/SMLNJ/src/compiler/CodeGen/x86/x86CpsRegs.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 247 - (view) (download)

1 : monnier 247 (* X86CpsRegs.sml --- CPS registers used on the Intel X86
2 :     *
3 :     * COPYRIGHT (c) 1997 Bell Laboratories.
4 :     *
5 :     *)
6 :     signature X86CPSREGS = sig
7 :     include CPSREGS
8 :     end
9 :    
10 :     structure X86CpsRegs : CPSREGS = struct
11 :     structure T = X86MLTree
12 :    
13 :     fun upto(from, to) = if from>to then [] else from::(upto (from+1,to))
14 :     infix upto
15 :    
16 :     val eax = T.REG 0 val esp = T.REG 4
17 :     val ecx = T.REG 1 val ebp = T.REG 5
18 :     val edx = T.REG 2 val esi = T.REG 6
19 :     val ebx = T.REG 3 val edi = T.REG 7
20 :    
21 :     fun regInMem i = T.LOAD32(T.ADD(esp, T.LI i), CPSRegions.memory)
22 :    
23 :     val allocptr = edi
24 :     val stdarg = ebp
25 :     val stdcont = esi
26 :     val stackptr = esp
27 :    
28 :     val baseptr = regInMem 4
29 :     val exnptr = regInMem 8
30 :     val limitptr = regInMem 12
31 :     val gcLink = regInMem 16
32 :     val storeptr = regInMem 24
33 :     val varptr = regInMem 28
34 :    
35 :     val stdlink = T.REG 8 (* vreg 0 *)
36 :     val stdclos = T.REG 9 (* vreg 1 *)
37 :    
38 :     fun mkVregList(n, 0) = []
39 :     | mkVregList(n, cnt) = T.REG n::mkVregList(n+1, cnt-1)
40 :    
41 :     (* miscregs = {ebx,ecx,edx,r10,r11,...r31} *)
42 :     val miscregs = ebx::ecx::edx::mkVregList(10, X86Runtime.numVregs - 2)
43 :    
44 :     val calleesave = Array.fromList miscregs
45 :     val exhausted = NONE
46 :    
47 :     val floatregs = map T.FREG (8 upto 31)
48 :     val savedfpregs = []
49 :    
50 :     val availR = map (fn T.REG r => r) [ebp, esi, ebx, ecx, edx, eax]
51 :     val dedicatedR = map (fn T.REG r => r) [edi, esp]
52 :     val availF = 8 upto 31
53 :     val dedicatedF = [0,1,2,3,4,5,6,7]
54 :     end
55 :    
56 :    

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