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 /sml/trunk/src/MLRISC/ppc/c-calls/ppc-macosx.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/ppc/c-calls/ppc-macosx.sml

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

revision 1533, Tue Jul 13 04:19:14 2004 UTC revision 1536, Tue Jul 13 18:30:33 2004 UTC
# Line 226  Line 226 
226                            else (SOME resRegLoc, argGPRs, NONE)                            else (SOME resRegLoc, argGPRs, NONE)
227                        end                        end
228                  (* end case *))                  (* end case *))
229            fun assign ([], offset, _, _, layout) = List.rev layout            fun assign ([], offset, _, _, layout) = (offset, List.rev layout)
230              | assign (ty::tys, offset, availGPRs, availFPRs, layout) = (              | assign (ty::tys, offset, availGPRs, availFPRs, layout) = (
231                  case ty                  case ty
232                   of CTy.C_void => error "unexpected void argument type"                   of CTy.C_void => error "unexpected void argument type"
# Line 237  Line 237 
237                              assign (tys, offset+4, [], fprs, FReg(fltTy, fpr, SOME offset)::layout)                              assign (tys, offset+4, [], fprs, FReg(fltTy, fpr, SOME offset)::layout)
238                          | ([], []) =>                          | ([], []) =>
239                              assign (tys, offset+4, [], [], FStk(fltTy, offset)::layout)                              assign (tys, offset+4, [], [], FStk(fltTy, offset)::layout)
240                            | _ => error "FPRs exhausted before GPRs"
241                        (* end case *))                        (* end case *))
242                    | CTy.C_double =>                    | CTy.C_double =>
243                        assignFPR (tys, offset, availGPRs, availFPRs, layout)                        assignFPR (tys, offset, availGPRs, availFPRs, layout)
# Line 273  Line 274 
274                     of (_::_::gprs, fpr::fprs) => continue (gprs, fprs, freg fpr)                     of (_::_::gprs, fpr::fprs) => continue (gprs, fprs, freg fpr)
275                      | (_, fpr::fprs) => continue ([], fprs, freg fpr)                      | (_, fpr::fprs) => continue ([], fprs, freg fpr)
276                      | ([], []) => continue ([], [], FStk(dblTy, offset))                      | ([], []) => continue ([], [], FStk(dblTy, offset))
277                        | _ => error "FPRs exhausted before GPRs"
278                    (* end case *)                    (* end case *)
279                  end                  end
280              val (sz, argLocs) = assign (paramTys, 0, argGPRs, argFPRs, [])
281            in {            in {
282              argLocs = assign (paramTys, 0, argGPRs, argFPRs, []),              argLocs = argLocs,
283                argMem = {szb = IntInf.toInt sz, align = 4},
284              resLoc = resLoc,              resLoc = resLoc,
285              structRetLoc = structRet              structRetLoc = structRet
286            } end            } end
# Line 298  Line 302 
302            callComment, args            callComment, args
303          } = let          } = let
304            val {conv, retTy, paramTys} = proto            val {conv, retTy, paramTys} = proto
305            val {argLocs, resLoc, structRetLoc} = layout proto            val {argLocs, argMem, resLoc, structRetLoc} = layout proto
306            (* inform the client of the size of the parameter area *)
307              val _ = if not(paramAlloc argMem)
308                    then raise Fail "parameter memory allocation not implemented yet"
309                    else ()
310          (* generate code to assign the arguments to their locations *)          (* generate code to assign the arguments to their locations *)
311            fun assignArgs ([], [], stms) = stms            fun assignArgs ([], [], stms) = stms
312              | assignArgs (Reg(ty, r, _) :: locs, ARG exp :: args, stms) =              | assignArgs (Reg(ty, r, _) :: locs, ARG exp :: args, stms) =

Legend:
Removed from v.1533  
changed lines
  Added in v.1536

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