Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /MLRISC/trunk/c-call/varargs/call/vararg-call.sml
ViewVC logotype

Diff of /MLRISC/trunk/c-call/varargs/call/vararg-call.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3216, Mon Aug 18 20:20:52 2008 UTC revision 3217, Mon Aug 18 21:17:43 2008 UTC
# Line 1  Line 1 
1    (* vararg-call.sml
2     *
3     * Infrastructure for calling varargs functions for each supported architecture.
4     *)
5    
6  structure VarargCall =  structure VarargCall =
7    struct    struct
8    
9      val regNum = CellsBasis.physicalRegisterNum      val regNum = CellsBasis.physicalRegisterNum
10    
11      (* x86 *)
12        local
13      structure X86SA = StagedAllocationFn (      structure X86SA = StagedAllocationFn (
14                           type reg_id = int                           type reg_id = int
15                           datatype loc_kind = datatype CLocKind.loc_kind                           datatype loc_kind = datatype CLocKind.loc_kind
# Line 13  Line 20 
20                                  val edx = regNum X86Cells.edx                                  val edx = regNum X86Cells.edx
21                                  val st0 = regNum X86Cells.ST0                                  val st0 = regNum X86Cells.ST0
22                                  structure SA = X86SA)                                  structure SA = X86SA)
23        in
24      structure X86VarargCall = VarargCallFn (      structure X86VarargCall = VarargCallFn (
25                                    val params = X86Convention.params                                    val params = X86Convention.params
26                                    val returns = X86Convention.returns                                    val returns = X86Convention.returns
# Line 26  Line 34 
34                                    val kindOfDouble = CLocKind.FPR                                    val kindOfDouble = CLocKind.FPR
35                                    structure SA = X86SA                                    structure SA = X86SA
36                                )                                )
37        end (* x86 *)
38    
39      (* x86 64 *)
40        local
41      structure X86_64SA = StagedAllocationFn (      structure X86_64SA = StagedAllocationFn (
42                           type reg_id = int                           type reg_id = int
43                           datatype loc_kind = datatype CLocKind.loc_kind                           datatype loc_kind = datatype CLocKind.loc_kind
# Line 49  Line 60 
60                                  val xmm6 = regNum AMD64Cells.xmm6                                  val xmm6 = regNum AMD64Cells.xmm6
61                                  val xmm7 = regNum AMD64Cells.xmm7                                  val xmm7 = regNum AMD64Cells.xmm7
62                                  structure SA = X86_64SA)                                  structure SA = X86_64SA)
63        in
64      structure X86_64VarargCall = VarargCallFn (      structure X86_64VarargCall = VarargCallFn (
65                                    val params = X86_64Convention.params                                    val params = X86_64Convention.params
66                                    val returns = X86_64Convention.returns                                    val returns = X86_64Convention.returns
# Line 62  Line 74 
74                                    val kindOfDouble = CLocKind.FPR                                    val kindOfDouble = CLocKind.FPR
75                                    structure SA = X86_64SA                                    structure SA = X86_64SA
76                                )                                )
77        end (* x86 64 *)
78    
79      (* sparc *)
80        local
81        structure SparcSA = StagedAllocationFn (
82                             type reg_id = int
83                             datatype loc_kind = datatype CLocKind.loc_kind
84                             val memSize = 4)
85        val GP = regNum o C.GPReg
86        val FP = regNum o C.FPReg
87        fun freg r = FP r
88        fun oreg r = GP (r + 8)
89        structure SparcConvention = SparcCConventionFn(
90                                    type reg_id = int
91                                    val r8 = oreg 0
92                                    val r9 = oreg 1
93                                    val r10 = oreg 2
94                                    val r11 = oreg 3
95                                    val r12 = oreg 4
96                                    val r13 = oreg 5
97                                    val f0 = freg 0
98                                    val f1 = freg 1
99                                    structure SA = SparcSA)
100        in
101        structure SparcVarargCall = VarargCallFn (
102                                      val params = SparcConvention.params
103                                      val returns = SparcConvention.return
104                                      val store0 = SparcConvention.store0
105                                      val bitWidthOfPointer = 32
106                                      val alignBOfPointer = 4
107                                      val alignBOfInt = 4
108                                      val alignBOfDouble = 4
109                                      val kindOfInt = CLocKind.GPR
110                                      val kindOfPointer = CLocKind.GPR
111                                      val kindOfDouble = CLocKind.FPR
112                                      structure SA = SparcSA
113                                  )
114        end (* sparc *)
115    
116      (* simple examples *)
117      local      local
118          structure V = Vararg          structure V = Vararg
119          structure DL = DynLinkage          structure DL = DynLinkage

Legend:
Removed from v.3216  
changed lines
  Added in v.3217

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