| |
| | mkRecord.sml |
 | | fstoreFields ((v, p)::rest, n, (def, root, _)::regions) = (emit(T.STORED(T.ADD(C.allocptr, T.LI n), fgetfield(v,p,root), def)); fstoreFields(rest, n + 8, regions)) in emit(T.STORE32(ea(C.allocptr, hp), desc, #1 descRegion)); fstoreFields(fields, hp+4, regions); emit(T.MV(ans, T.ADD(C.allocptr, T.LI(hp+4)))) end end (* * $Log: mkRecord.sml,v $ * Revision 1.7 1997/08/27 17:53:49 george * More accurate memory disambiguation maintenance. |
 | | * * Revision 1.5 1997/08/07 21:04:34 george * fixed bugs in memory disambiguation * * Revision 1.4 1997/08/07 02:10:51 george * Refined region information to the granularity of words in the allocation space * * Revision 1.3 1997/08/03 14:16:00 george * Allocation pointer increments are performed at function exit * if possible. |
 | | chase(r, CPS.SELp(j,p), R.OFFSET(i, vl)) = let val (def, root, ap) = List.nth(vl, i+j+1) in chase(T.LOAD32(indexEA(r,j), def), p, R.trace(root, ap)) end in chase(r, path, mem) end fun fstoreFields ([], _, []) = () |
| www.ifi.uio.no /~prover/sml/smlnj/src/sml-nj/cpscompile/mkRecord.sml (443 words) |
|