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/HISTORY
ViewVC logotype

Diff of /sml/trunk/HISTORY

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

revision 904, Mon Aug 20 19:50:05 2001 UTC revision 1369, Sat Sep 13 23:11:20 2003 UTC
# Line 8  Line 8 
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  Name:
11  Date:  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: Matthias Blume (blume (at) tti - c (dot) org)
17    Date: 2003/09/13 18:11:00 CDT
18    Tag: blume-20030913-libinstall
19    Description:
20    
21    Minor bugfix in config/libinstall (set anchor with path to
22    standalone tool after installing it, otherwise libraries that
23    need ml-lex or ml-yacc won't compile the first time the installer
24    runs).
25    
26    ----------------------------------------------------------------------
27    Name: Matthias Blume (blume (at) tti - c (dot) org)
28    Date: 2003/09/12 11:45:00 CDT
29    Tag: blume-20030912-various
30    Description:
31    
32     - fixed bug in Real.toLargeInt
33     - fixed bug in Posix.ProcEnv.times
34     - changed inputLine functions to return an option
35     - minor installer improvements / bugfixes
36     - changed default @SMLalloc parameter for x86/celeron to 64k
37    
38    ----------------------------------------------------------------------
39    Name: Matthias Blume (blume (at) tti - c (dot) org)
40    Date: 2003/09/09 22:00:00 CDT
41    Tag: Release_110_43
42    Description:
43    
44        New working release 110.43.  New bootfiles.
45    
46    ----------------------------------------------------------------------
47    Name: Matthias Blume (blume (at) tti - c (dot) org)
48    Date: 2003/09/09 19:20:00 CDT
49    Tag: blume-20030909-installer
50    Description:
51    
52    Rewrote large parts of config/install.sh in SML (config/libinstall.sml).
53    Modified config/install.bat to take advantage of it.  Also modified
54    config/install.sh (and called it config/new-install.sh) to take advantage
55    of it on Unix systems.  (The SML code is (supposed to be) platform-
56    independent.)
57    
58    The installer can now install everything under Win32
59    as well as under *nix as long as it compiles.
60    
61    Other changes:
62    
63      - made CML compile again under Win32
64      - made eXene compile under Win32 (by providing a fake structure UnixSock
65        and by using OS.Process.getEnv instead of Posix.ProcEnv.getenv)
66      - fixed a bug in nowhere: it assumed that type OS.Process.status is the
67        same as type int;  under Win32 it isn't
68      - fixed some slice-related problems in the win32-specific parts of CML
69      - added a functor argument "sameVol" to os-path-fn.sml in the Basis
70        (under Win32, the volume name is case-insensitive, and the
71        OS.Path code compares volume names for equality)
72    
73    ----------------------------------------------------------------------
74    Name: Matthias Blume (blume (at) tti - c (dot) org)
75    Date: 2003/09/08 11:55:00 CDT
76    Tag: blume-20030908-fullpath
77    Description:
78    
79    Made Win32 version of OS.FileSys.fullPath return current directory
80    when given an empty string.  This is what the spec says, and incidentally,
81    CM depends on it.  (CM otherwise goes into an infinite loop in certain
82    cases when presented with the name of a non-existing .cm file.)
83    
84    ----------------------------------------------------------------------
85    Name: Matthias Blume (blume (at) tti - c (dot) org)
86    Date: 2003/09/04 16:30:00 CDT
87    Tag: blume-20030905-slices-etc
88    Description:
89    
90      1. Changed interface to vectors and arrays in Basis to match
91         (draft) Basis spec.
92      2. Added signatures and implementations of slices according to
93         Basis spec.
94      3. Edited source code throughout the system to make it compile again
95         under 1. and 2.  (In some cases code had to be added to have it
96         match the new signatures.)
97      4. MLRISC should be backward-compatible: the copies of the originals
98         of files that needed to change under 3. were retained, the .cm files
99         check the compiler version number and use old versions when
100         appropriate.
101      5. Changed type of OS.FileSys.readDir and Posix.FileSys.readdir to
102         dirstream -> string option (in accordance with Basis spec).
103      6. When generating code that counts lines, ml-lex used function
104         CharVector.foldli, taking advantage of its old interface.
105         This has been replaced with the corresponding code from
106         CharVectorSlice.  (html-lex must be re-lexed!)
107      7. BitArray in smlnj-lib/Util has been extended/modified to match the
108         new MONO_ARRAY signature.  (Do we need BitArraySlice?)
109      8. Removed temporary additions (fromInternal, toInternal) from the
110         (now obsolete) IntInf in smlnj-lib/Util.
111      9. Cleaned up structure Byte.
112     10. Added localOffset, scan, and fromString to Date (according to spec).
113         Cleaned/corrected implementation of Date.
114         (Still need to check for correctness; implement better canonicalizeDate.)
115     11. Added "scan" to signature IEEE_REAL.
116     12. Some improvements to IntInf [in particular: efficiency-hack for
117         mod and rem when second operand is 2 (for parity checks).]
118     13. Changed representation of type Time.time, using a single IntInf.int
119         value counting microseconds.  This considerably simplified the
120         implementation of structure Time.  We now support negative time
121         values; scan and fromString handle signs.
122     14. Functor PrimIO now takes two additional arguments (VectorSlice and
123         ArraySlice).
124    
125    ----------------------------------------------------------------------
126    Name: Matthias Blume (blume (at) tti - c (dot) org)
127    Date: 2003/08/28 17:00:00 CDT
128    Tag: blume-20030828-intinf
129    Description:
130    
131    This is a major update which comes with a version number bump
132    (110.42.99 -- yes, we are really close to 110.43 :-), NEW BOOTFILES,
133    and an implementation of IntInf in the Basis.
134    
135    There are a fairly large number of related changes and updates throughout
136    the system:
137    
138    Basis:
139            - Implemented IntInf.
140            - Made LargeInt a projection of IntInf (by filtering through INTEGER).
141            - Added some missing Real64 operations, most notably Real.toLargeInt.
142            - Added FixedInt as a synonym for Int32.
143    
144    compiler:
145            * Added support for a built-in intinf type.
146              - literals
147              - pattern matching
148              - conversion shortcuts (Int32.fromLarge o Int.toLarge etc.)
149              - overloading on literals and operations
150    
151            This required adding a primitive type intinf, some additional
152            primops, and implementations for several non-trivial intinf
153            operations in Core.  (The intinf type is completely abstract
154            to the compiler; all operations get delegated back to the Core.)
155    
156            * Intinf equality is handled by polyequal.  However, the compiler
157            does not print its usual warning in this case (since polyequal
158            is the right thing to do there).
159    
160            * Improved the organization of structure InlineT.
161    
162            * A word about conversion primops:
163            If conversions involving intinf do not cancel out during
164            CPS contract, then the compiler must insert calls to Core functions.
165            Since all core access must be resolved already during the FLINT
166            translate phase, it would be too late a the time of CPS contract
167            to add new Core calls.  For this reason, conversion primops
168            for intinf carry two arguments:  1. the numeric argument that
169            they are supposed to convert, and 2. the Core function that
170            can help with this conversion if necessary.  If CPS contract
171            eliminates a primop, then the associated Core function becomes
172            dead and goes away.  Intinf conversion primops that do not get
173            eliminated by CPS contract get rewritten into calls of their
174            core functions by a separate, new phase.
175    
176    interactive system:
177            - Control.Print.intinfDepth controls max length of intinf constants
178            being printed. (Analogous to Control.Print.stringDepth.)
179            - Cleanup in printutil and pputil: got rid of unused stuff and
180            duplicates; replaced some of the code with code that makes better
181            use of library functionality.
182    
183    CM:
184            Bugfix: parse-errors in init group (system/smlnj/init/init.cmi)
185            are no longer silent.
186    
187    CKIT:
188            Fixed mismatched uses of Int32 and LargeInt.  I always decided
189            in favor of LargeInt -- which is now the same as IntInf.
190            CKIT-knowledgable people should check whether this is what's
191            intended and otherwise change things back to using Int32 or
192            FixedInt.
193    
194    Throughout the code:
195            Started using IntInf.int literals and built-in operations
196            (e.g., comparison with 0) where this seems appropriate.
197    
198    
199    ----------------------------------------------------------------------
200    Name: Dave MacQueen (dbm@cs.uchicago.edu)
201    Date: 2003/08/13 11:36:00 CDT
202    Tag: dbm-20030813-mcz-merge1
203    Description:
204    
205    Merging changes from the mcz-branch development branch into trunk.
206    These changes involve replacement of the emulated old prettyprinter
207    interface with direct use of the SML/NJ Lib PP library, and fixing
208    of a couple of bugs (895, 1186) relating to error messages.  A new
209    prettyprinter for ast datatypes (Elaborator/print/ppast.{sig,sml})
210    has been added.
211    
212    ----------------------------------------------------------------------
213    Name: Matthias Blume (blume (at) tti - c (dot) org)
214    Date: 2003/08/11 15:45:00 CDT
215    Tag: blume-20030811-windows
216    Description:
217    
218    Version number bumped to 110.42.9.  NEW BOOTFILES!!!
219    
220        http://smlnj.cs.uchicago.edu/dist/working/110.42.9/
221    
222    This patch restores SML/NJ's ability to run under win32.  There are a
223    number of changes, including fixes for several bugs that had gone
224    unnoticed until now:
225    
226      - uname "CYGWIN_NT*" is recognized as win32 (This is relevant only when
227        trying to run the win32 version from within cygwin.)
228    
229      - There are a number of simple .bat scripts that substitute for their
230        corresponding Unix shell-scripts.  (See below.)
231    
232      - The internals of ml-build have been modified slightly.  The main
233        difference is that instead of calling ".link-sml" (or link-sml.bat)
234        using OS.Process.system, the ML process delegates this task back
235        to the script.  Otherwise problems arise in mixed environments such
236        as Cygwin where scripts look and work like Unix scripts, but
237        where OS.Process.system cannot run them.
238    
239      - In CM, the srcpath pickler used native pathname syntax -- which
240        is incorrect in the case of cross-compilation.  The new pickle format
241        is independent of platform-specific naming conventions.
242    
243      - Path configuration files (such as lib/pathconfig) can now choose
244        between native and standard syntax.  Placing a line of the form
245    
246            standard!
247    
248        into the file causes all subsequent paths to be interpreted using
249        CM standard pathname syntax (= Unix conventions); a line
250    
251            native!
252    
253        switches back to native style.  This was needed so that
254        path config files can be written portably, see src/system/pathconfig.
255    
256      - Runtime system:
257    
258          - win32-filesys.c:  get_file_time and set_file_time now
259            access modification time, not creation time.
260    
261          - I/O code made aware of new array representation.
262    
263          - Bug fixes in X86.prim.masm.
264    
265       - src/system/makeml made aware of win32. (For use under cygwin
266            and other Unix-environments for windows.)
267    
268       - In Basis, fixed off-by-one error in win32-io.sml (function vecF)
269         which caused BinIO.inputAll to fail consistently.
270    
271    .bat scripts:
272    
273       Windows .bat scripts assume that SMLNJ_HOME is defined.
274    
275       - sml.bat, ml-yacc.bat, ml-lex.bat:  Driver scripts for standalone
276         applications (sml, ml-yacc, ml-lex).
277       - ml-build.bat: analogous to ml-build.
278       - config\install.bat:  Analogous to config/install.sh.  This requires
279         that SMLNJ_HOME is set and that Microsoft Visual C is ready to use.
280         (nmake etc. must be on the path, and vcvars32 must have been run.)
281         Moreover, sources for ml-lex and ml-yacc need to exist under src,
282         and the bootfile hierarchy must have been unpacked under
283         sml.boot.x86-win32.
284         The script is very primitive and does a poor job at error checking.
285         It only installs the base system, ml-lex, and ml-yacc.  No other
286         libraries are being installed (i.e., you get only those that
287         are part of the compiler.)
288       - link-sml.bat:  analogous to .link-sml, but not currently used
289    
290    Unrelated bug fixes:
291    
292      - ml-nlffigen now exports structures ST_* corresponding to incomplete
293        types.
294      - Added getDevice to PP/src/pp-debug-fn.sml.  (Would not compile
295        otherwise.)
296    
297    ----------------------------------------------------------------------
298    Name: Dave MacQueen (macqueen@cs.uchicago.edu)
299    Date: 2003/06/17
300    Tag: macqueen-20030617-bug895
301    Description:
302    
303    Modified compiler/Elaborator/print/pptype.sml to fix bug 895.
304    Tag will be used for new development branch (mcz-branch) for
305    use by MacQueen, (Lucasz) Zairek, and (George) Cao at uchicago.
306    
307    ----------------------------------------------------------------------
308    Name: Matthias Blume (blume (at) tti - c (dot) org)
309    Date: 2003/05/27 16:55:00 CDT
310    Tag: blume-20030527-polyeq
311    Description:
312    
313    Tried to eliminated most cases of polymorphic equality.
314    
315    ----------------------------------------------------------------------
316    Name: Matthias Blume (blume (at) tti - c (dot) org)
317    Date: 2003/05/21 17:45:00 CDT
318    Tag: blume-20030517-complete
319    Description:
320    
321    Two changes:
322    
323      1. Added a flag for controlling whether non-exhaustive bindings will
324         be treated as errors (default is false).
325      2. Cleaned up the *entire* source tree so that CMB.make goes through
326         without a single non-exhaustive match- or bind warning.
327    
328    ----------------------------------------------------------------------
329    Name: Matthias Blume (blume (at) tti - c (dot) org)
330    Date: 2003/05/17 10:20:00 CDT
331    Tag: blume-20030517-absyn
332    Description:
333    
334    1. Added cases for IF, WHILE, ANDALSO, and ORELSE to Absyn.
335    
336       This mainly affects the quality of error messages.  However, some
337       of the code is now more straightforward than before. (Treatment of
338       the above four constructs in translate.sml is much simpler than
339       the "macro-expansion" that was going on before.  Plus, the mach-
340       compiler no longer gets invoked just to be able to compile an
341       if-expression.)
342    
343    2. The ErrorMsg.Error exception is now caught and absorbed by the
344       interactive loop.
345    
346    ----------------------------------------------------------------------
347    Name: Allen Leung
348    Date: 2003/05/16 13:05:00 CDT
349    Tag: leunga-20030516-cygwin-runtime
350    Description:
351    
352        Ported the runtime system to cygwin, which uses the unix
353    x86-unix bin files.  Missing/buggy features:
354    
355       o getnetbyname, getnetbyaddr: these functions seem to be missing in
356         the Cygwin library.
357       o Ctrl-C handling may be flaky.
358       o Windows system calls and Windows I/O are not supported.
359    
360       A new set of binfiles is located at:
361    
362         http://www.dorsai.org/~leunga/boot.x86-unix.tgz
363    
364       This is only needed for bootstrapping the cygwin version of smlnj.
365       Other x86 versions can use the existing binfiles.
366    
367    ----------------------------------------------------------------------
368    Name: Matthias Blume
369    Date: 2003/04/08 15:42:00 CDT
370    Tag: blume-20030408-listpair
371    Description:
372    
373    1. Added a target 'mlrisc' to installer.
374    
375    2. Added missing elements to structure ListPair.
376    
377    ----------------------------------------------------------------------
378    Name: Allen Leung
379    Date: 2003/01/07 10:40:00 EST
380    Tag: leunga-20030107-int-rem
381    Description:
382    
383    Fixed a bug in Int.rem(x,y) where y is a power of 2 on x86.
384    The arguments to the SUBL instruction were swapped.
385    
386    ----------------------------------------------------------------------
387    Name: Matthias Blume
388    Date: 2002/12/12 16:25:00 EST
389    Tag: blume-20021212-risc-ra
390    Description:
391    
392    Fixed a serious bug in the rewrite code for FP spilling/reloading that
393    sent the RA into an infinite loop when floating point registers get
394    spilled.  (Because of this bug, e.g., nucleic stopped compiling between
395    110.37 and 110.38.)
396    There was another set of potential problems related to the handling of
397    MLRISC annotations (but those did not yet cause real problems, apparently).
398    
399    ----------------------------------------------------------------------
400    Name: Matthias Blume
401    Date: 2002/12/06 22:40:00 EST
402    Tag: blume-20021206-cm-fileid
403    Description:
404    
405    Added a call of SrcPath.sync at the beginning of Parse.parse (in CM).
406    This fixes the problem of CM getting confused by files that suddenly
407    change their identity (e.g., by getting unlinked and recreated by some
408    text editor such as vi).  There might be a better/cheaper/cleaner way
409    of doing this, but for now this will have to do.
410    
411    ----------------------------------------------------------------------
412    Name: Matthias Blume
413    Date: 2002/10/28 09:50:00 EST
414    Tag: blume-20021028-typecheck
415    Description:
416    
417    Exported structure Typecheck from $smlnj/viscomp/core.cm.
418    
419    ----------------------------------------------------------------------
420    Name: Matthias Blume
421    Date: 2002/10/17 09:10:00 EDT
422    Tag: Release_110_42
423    Description:
424    
425    In good old tradition, there has been a slight hiccup so that we have
426    to patch 110.42 after the fact.   The old release tag has been replaced
427    (see below).
428    
429    The change solves a problem with two competing approaches the
430    configuration problem regarding MacOS 10.1 vs. MacOS 10.2 which got in
431    each other's way.
432    
433    This change only affects the runtime system code and the installer script.
434    (No new bootfiles.)
435    
436    ----------------------------------------------------------------------
437    Name: Matthias Blume
438    Date: 2002/10/16 12:00:00 EDT
439    Tag: Release_110_42_removed
440    Description:
441    
442    New working release.  New bootfiles.
443    
444    ----------------------------------------------------------------------
445    Name: Matthias Blume
446    Date: 2002/10/10 13:10:00 EDT
447    Tag: blume-20021010-ppc-divs
448    Description:
449    
450    The mltree operator DIVS must be implemented with an overflow check on
451    the PPC because the hardware indicates divide-by-zero using "overflow" as
452    well.
453    
454    ----------------------------------------------------------------------
455    Name: Matthias Blume
456    Date: 2002/07/23 11:45:00
457    Tag: blume-20020723-smlnj-home
458    Description:
459    
460    Sml now senses the SMLNJ_HOME environment variable.  If this is set,
461    then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless
462    CM_PATHCONFIG is also set), the path configuration file is assumed
463    to be in $SMLNJ_HOME/lib/pathconfig.  This way one can easily move
464    the entire tree to some other place and everything will "just work".
465    
466    (Companion commands such as ml-build and ml-makedepend also sense this
467    variable.)
468    
469    ----------------------------------------------------------------------
470    Name: Matthias Blume
471    Date: 2002/07/12 21:19:00 EDT
472    Tag: blume-20020712-liveness
473    Description:
474    
475    Exported two useful "step" functions from liveness module (MLRISC).
476    
477    ----------------------------------------------------------------------
478    Name: Matthias Blume
479    Date: 2002/07/05 16:00 EDT
480    Tag: Release_110_41
481    Description:
482    
483    New working release.  New bootfiles.
484    
485    ----------------------------------------------------------------------
486    Name: Matthias Blume
487    Date: 2002/07/05 10:25:00 EDT
488    Tag: blume-20020705-btimp
489    Description:
490    
491    Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that
492    other clients can set up backtracing support.
493    
494    ----------------------------------------------------------------------
495    Name: Matthias Blume
496    Date: 2002/06/25 17:23:00 EDT
497    Tag: blume-20020625-fpmax
498    Description:
499    
500    Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point
501    case.  (The sense of the isNaN test was reversed -- which made min and
502    max always return their first argument.)
503    
504    ----------------------------------------------------------------------
505    Name: Matthias Blume
506    Date: 2002/06/11
507    Tag: blume-20020611-unixpath
508    Description:
509    
510    Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch.
511    
512    ----------------------------------------------------------------------
513    Name: Matthias Blume
514    Date: 2002/06/10 16:35:00 EDT
515    Tag: blume-20020610-ieeereal
516    Description:
517    
518    I back-ported my implementation of IEEEReal.fromString from the
519    idlbasis-devel branch so that we can test it.
520    
521    Another small change is that ppDec tries to give more information
522    than just "<sig>" in the case of functors.  However, this code is
523    broken in some mysterious way if the functor's body's signature
524    has not been declared by ascription but gets inferred from the
525    implementation.  This needs fixing...
526    
527    ----------------------------------------------------------------------
528    Name: Matthias Blume
529    Date: 2002/05/31
530    Tag: blume-20020531-btrace-mode
531    Description:
532    
533    Resurrected SMLofNJ.Internals.BTrace.mode.  (It accidentally fell by
534    the wayside when I switched over to using Controls everywhere.)
535    
536    ----------------------------------------------------------------------
537    Name: Lal George
538    Date: 2002/05/23 12:21:40 EDT
539    Tag: george-20020523-visual-labels
540    Description:
541    
542    Labels are now displayed in the graphical output to make
543    the fall-through and target blocks obvious.
544    
545    ----------------------------------------------------------------------
546    Name: Matthias Blume
547    Date: 2002/05/22 11:03:00 EDT
548    Tag: blume-20020522-shrink
549    Description:
550    
551    John tweaked yesterday's fix for 1131 to handle an out-of-memory
552    situation that comes up when allocating huge arrays.
553    
554    ----------------------------------------------------------------------
555    Name: Matthias Blume
556    Date: 2002/05/21 16:00:00 EDT
557    Tag: Release_110_40
558    Description:
559    
560    New working release (110.40).  New bootfiles.
561    
562    [Also: John Reppy fixed GC bug 1131.]
563    
564    ----------------------------------------------------------------------
565    Name: Matthias Blume
566    Date: 2002/05/21 12:35:00 EDT
567    Tag: blume-20020521-cmdoc
568    Description:
569    
570    CM documentation update.
571    
572    ----------------------------------------------------------------------
573    Name: Matthias Blume
574    Date: 2002/05/21 10:55:00 EDT
575    Tag: blume-20020521-misc
576    Description:
577    
578    - John tweaked runtime to be silent on heap export (except when
579      GC messages are on).
580    - I added a few more things (cross-compiling versions of CMB) to
581      config/preloads (as suggestions).
582    
583    ----------------------------------------------------------------------
584    Name: Matthias Blume
585    Date: 2002/05/20 22:25:00 EDT
586    Tag: blume-20020520-controls
587    Description:
588    
589    - Added ControlUtil structure to control-lib.cm.
590    - Use it throughout.
591    - Used Controls facility to define MLRISC controls (as opposed to
592      registering MLRISC control ref cells with Controls after the fact)
593    - Fixed messed-up controls priorities.
594    
595    * Removed again all the stuff from config/preloads that one wouldn't
596      be able to preload at the time the initial heap image is built.
597      (Many libraries, e.g., CML, do not exist yet at this time.  The
598       only libraries that can be preloaded via config/preloads are those
599       that come bundled with the bootfiles.)
600    
601    ----------------------------------------------------------------------
602    Name: Matthias Blume
603    Date: 2002/05/20 10:59:00 EDT
604    Tag: blume-20020520-preloads
605    Description:
606    
607    Added a lot of commented-out suggestions for things to be included
608    in config/preloads.
609    
610    ----------------------------------------------------------------------
611    Name: Allen Leung
612    Date: 2002/05/18 14:20:00 EDT
613    Tag: leunga-20020518-mdl
614    Description:
615    
616    o Made the mdl tool stuff compile and run again.
617    o I've disabled all the stuff that depends on RTL specifications; they
618      are all badly broken anyway.
619    
620    ----------------------------------------------------------------------
621    Name: Matthias Blume
622    Date: 2002/05/17 16:49:00 EDT
623    Tag: blume-20020517-controls
624    Description:
625    
626    0. John Reppy made several modifications to the SML/NJ library.
627       In particular, there is a shiny new controls-lib.cm.
628    
629    1. Pushed new controls interface through compiler so that everything
630       compiles again.
631    
632    2. Added FormatComb and FORMAT_COMB to the CML version of the
633       SML/NJ library (so that CML compiles again).
634    
635    3. Modified init scripts because XXX_DEFAULT environment variables
636       are no longer with us.  (Boot-time initialization is now done
637       using the same environment variables that are also used for
638       startup-time initialization of controls.)
639    
640    ----------------------------------------------------------------------
641    Name: Lal George
642    Date: 2002/05/15 09:20:10 EDT
643    Tag: george-20020515-pseudo-op-decls
644    Description:
645    
646            All pseudo-ops emitted before the first segment declaration
647    such as TEXT, DATA, and BSS directives are assumed to be global
648    declarations and are emitted first in the assembly file. This is
649    useful in a number of situations where one has pseudo-ops that are not
650    specific to any segment, and also works around the constraint that one
651    cannot have client pseudo-ops in the TEXT segment.
652    
653            Because no segment is associated with these declarations it is
654    an error to allocate any space or objects before the first segment
655    directive and an exception will be raised. However, we cannot make
656    this check for client pseudo-ops.
657    
658            These top level declarations are a field in the CFG graph_info.
659    In theory you can continue to add to this field after the CFG has been
660    built -- provided you know what you are doing;-)
661    
662    ----------------------------------------------------------------------
663    Name: Matthias Blume
664    Date: 2002/05/13 16:40:00 EDT
665    Tag: blume-20020513-pp-etc
666    Description:
667    
668    A few minor bugfixes:
669    
670      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
671        (Bogus printouts for redefined bindings still occur.  Compiler
672        bug should no longer occur now.  We need to redo the prettyprinter
673        from scratch.)
674    
675      - CM pathname printer now also adds escape sequences for ( and )
676    
677      - commend and docu fixes for ml-nlffi
678    
679    ----------------------------------------------------------------------
680    Name: Matthias Blume
681    Date: 2002/05/10 16:40:00 EDT
682    Tag: blume-20020510-erg-textio
683    Description:
684    
685    Applied the following bugfix provided by Emden Gansner:
686    
687        Output is corrupted when outputSubstr is used rather than output.
688    
689        The problem occurs when a substring
690    
691            ss = (s, dataStart, dataLen)
692    
693        where dataStart > 0, fills a stream buffer with avail bytes left.
694        avail bytes of s, starting at index dataStart, are copied into the
695        buffer, the buffer is flushed, and then the remaining dataLen-avail
696        bytes of ss are copied into the beginning of the buffer. Instead of
697        starting this copy at index dataStart+avail in s, the current code
698        starts the copy at index avail.
699    
700        Fix:
701        In text-io-fn.sml, change line 695 from
702             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
703        to
704             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
705    
706    ----------------------------------------------------------------------
707    Name: Matthias Blume
708    Date: 2002/04/12 13:55:00 EDT
709    Tag: blume-20020412-assyntax
710    Description:
711    
712    1. Grabbed newer assyntax.h from the XFree86 project.
713    2. Fiddled with how to compile X86.prim.asm without warnings.
714    3. (Very) Minor cleanup in CM.
715    
716    ----------------------------------------------------------------------
717    Name: Matthias Blume
718    Date: 2002/04/01 (no joke!) 17:07:00 EST
719    Tag: blume-20020401-x86div
720    Description:
721    
722    Added full support for div/mod/rem/quot on the x86, using the machine
723    instruction's two results (without clumsily recomputing the remainder)
724    directly where appropriate.
725    
726    Some more extensive power-of-two support was added to the x86 instruction
727    selector (avoiding expensive divs, mods, and muls where they can be
728    replaced with cheaper shifts and masks).  However, this sort of thing
729    ought to be done earlier, e.g., within the CPS optimizer so that
730    all architectures benefit from it.
731    
732    The compiler compiles to a fixed point, but changes might be somewhat
733    fragile nevertheless.  Please, report any strange things that you might
734    see wrt. div/mod/quot/rem...
735    
736    ----------------------------------------------------------------------
737    Name: Matthias Blume
738    Date: 2002/03/29 17:22:00
739    Tag: blume-20020329-div
740    Description:
741    
742    Fixed my broken div/mod logic.  Unfortunately, this means that the
743    inline code for div/mod now has one more comparison than before.
744    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
745    The problem was with quotient = 0, because that alone does not tell
746    us which way the rounding went.  One then has to look at whether
747    remainder and divisor have the same sign...  :(
748    
749    Anyway, I replaced the bootfiles with fresh ones...
750    
751    ----------------------------------------------------------------------
752    Name: Matthias Blume
753    Date: 2002/03/29 14:10:00 EST
754    Tag: blume-20020329-inlprims
755    Description:
756    
757    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
758    
759    Primops have changed. This means that the bin/boot-file formats have
760    changed as well.
761    
762    To make sure that there is no confusion, I made a new version.
763    
764    
765    CHANGES:
766    
767    * removed REMT from mltree (remainder should never overflow).
768    
769    * added primops to deal with divisions of all flavors to the frontend
770    
771    * handled these primops all the way through so they map to their respective
772      MLRISC support
773    
774    * used these primops in the implementation of Int, Int32, Word, Word32
775    
776    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
777    
778    * parameterized INLMIN, INLMAX, and INLABS by a numkind
779    
780    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
781      floating point
782    
783    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
784      and Real (but Real.abs maps to a separate floating-point-only primop)
785    
786    
787    TODO items:
788    
789    * Hacked Alpha32 instruction selection, disabling the selection of REMx
790      instructions because the machine instruction encoder cannot handle
791      them.  (Hppa, PPC, and Sparc instruction selection did not handle
792      REM in the first place, and REM is supported by the x86 machine coder.)
793    
794    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
795      selection phase.  (The two can be streamlined because the hardware
796      delivers both quotient and remainder at the same time anyway.)
797    
798    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
799      (Currently the behavior is inconsistent both across architectures and
800      wrt. the draft Basis spec.)
801    
802    * Word8 should eventually be handled natively, too.
803    
804    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
805      as if there currently is no execution path that could trigger it in
806      SML/NJ.  (The assumptions underlying functions arith and promotable do not
807      hold for things like multiplication and division.)
808    
809    ----------------------------------------------------------------------
810    Name: Matthias Blume
811    Date: 2002/03/27 16:27:00 EST
812    Tag: blume-20020327-mlrisc-divisions
813    Description:
814    
815    Added support for all four division operations (ML's div, mod, quot,
816    and rem) to MLRISC.  In the course of doing so, I also rationalized
817    the naming (no more annoying switch-around of DIV and QUOT), by
818    parameterizing the operation by div_rounding_mode (which can be either
819    DIV_TO_ZERO or DIV_TO_NEGINF).
820    
821    The generic MLTreeGen functor takes care of compiling all four
822    operations down to only round-to-zero div.
823    
824    Missing pieces:
825    
826      * Doing something smarter than relying on MLTreeGen on architectures
827        like, e.g., the x86 where hardware division delivers both quotient and
828        remainder at the same time.  With this, the implementation of the
829        round-to-neginf operations could be further streamlined.
830    
831      * Remove inlining support for div/mod/rem from the frontend and replace it
832        with primops that get carried through to the backend.  Do this for all
833        int and word types.
834    
835    ----------------------------------------------------------------------
836    Name: Matthias Blume
837    Date: 2002/03/25 17:25:00 EST
838    Tag: blume-20020325-divmod
839    Description:
840    
841    I improved (hopefully without breaking them) the implementation of Int.div,
842    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
843    advantage of the following observations:
844    
845      Let  q = x quot y      r = x rem y
846           d = x div  y      m = x mod y
847    
848    where "quot" is the round-to-zero version of integer division that
849    hardware usually provides.  Then we have:
850    
851         r = x - q * y        where neither the * nor the - will overflow
852         d = if q >= 0 orelse x = q * y then q else q - 1
853                              where neither the * nor the - will overflow
854         m = if q >= 0 orelse r = 0 then r else r + y
855                              where the + will not overflow
856    
857    This results in substantial simplification of the generated code.
858    The following table shows the number of CFG nodes and edges generated
859    for
860            fun f (x, y) = x OPER y
861            (* with OPER \in div, mod, quot, rem *)
862    
863    
864        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
865        --------------------------------------------------------
866         div |         24 |         39 |         12 |         16
867         mod |         41 |         71 |         12 |         16
868        quot |          8 |         10 |          8 |         10
869         rem |         10 |         14 |          8 |         10
870    
871    
872    ----------------------------------------------------------------------
873    Name: Matthias Blume
874    Date: 2002/03/25 22:06:00 EST
875    Tag: blume-20020325-cprotobug
876    Description:
877    
878    Fixed a bug in cproto (c prototype decoder).
879    
880    ----------------------------------------------------------------------
881    Name: Matthias Blume
882    Date: 2002/03/25 16:00:00 EST
883    Tag: blume-20020325-raw-primops
884    Description:
885    
886    I did some cleanup to Allen's new primop code and
887    replaced yesterday's bootfiles with new ones.
888    (But they are stored in the same place.)
889    
890    ----------------------------------------------------------------------
891    Name: Matthias Blume
892    Date: 2002/03/24 22:40:00 EST
893    Tag: blume-20020324-bootfiles
894    Description:
895    
896    Made the bootfiles that Allen asked for.
897    
898    ----------------------------------------------------------------------
899    Name: Allen Leung
900    Date: 2002/03/23 15:50:00 EST
901    Tag: leunga-20020323-flint-cps-rcc-primops
902    Description:
903    
904      1. Changes to FLINT primops:
905    
906        (* make a call to a C-function;
907         * The primop carries C function prototype information and specifies
908         * which of its (ML-) arguments are floating point. C prototype
909         * information is for use by the backend, ML information is for
910         * use by the CPS converter. *)
911      | RAW_CCALL of { c_proto: CTypes.c_proto,
912                       ml_args: ccall_type list,
913                       ml_res_opt: ccall_type option,
914                       reentrant : bool
915                     } option
916       (* Allocate uninitialized storage on the heap.
917        * The record is meant to hold short-lived C objects, i.e., they
918        * are not ML pointers.  With the tag, the representation is
919        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
920        *)
921      | RAW_RECORD of {tag:bool,sz:int}
922      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
923    
924      2.  These CPS primops are now overloaded:
925    
926           rawload of {kind:numkind}
927           rawstore of {kind:numkind}
928    
929          The one argument form is:
930    
931             rawload {kind} address
932    
933          The two argument form is:
934    
935             rawload {kind} [ml object, byte-offset]
936    
937      3. RAW_CCALL/RCC now takes two extra arguments:
938    
939         a. The first is whether the C call is reentrant, i.e., whether
940            ML state should be saved and restored.
941         b. The second argument is a string argument specifying the name of
942            library and the C function.
943    
944         These things are currently not handled in the code generator, yet.
945    
946      4. In CProto,
947    
948         An encoding type of "bool" means "ml object" and is mapped into
949         C prototype of PTR.  Note that "bool" is different than "string",
950         even though "string" is also mapped into PTR, because "bool"
951         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
952    
953      5. Pickler/unpicker
954    
955         Changed to handle RAW_RECORD and newest RAW_CCALL
956    
957      6. MLRiscGen,
958    
959         1. Changed to handle the new rawload/rawstore/rawrecord operators.
960         2. Code for handling C Calls has been moved to a new module CPSCCalls,
961            in the file CodeGen/cpscompile/cps-c-calls.sml
962    
963      7. Added the conditional move operator
964    
965             condmove of branch
966    
967         to cps.  Generation of this is still buggy so it is currently
968         disabled.
969    
970    ----------------------------------------------------------------------
971    Name: Lal George
972    Date: 2002/03/22 14:18:25 EST
973    Tag: george-20020322-cps-branch-prob
974    Description:
975    
976    Implemented the Ball-Larus branch prediction-heuristics, and
977    incorporated graphical viewers for control flow graphs.
978    
979    Ball-Larus Heuristics:
980    ---------------------
981    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
982    
983    By design it uses the Dempster-Shafer theory for combining
984    probabilities.  For example, in the function:
985    
986        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
987    
988    the ball-larus heuristics predicts that the n=0 is unlikely
989    (OH-heuristic), and the 'then' branch is unlikely because of the
990    RH-heuristic -- giving the 'then' branch an even lower combined
991    probability using the Dempster-Shafer theory.
992    
993    Finally, John Reppy's loop analysis in MLRISC, further lowers the
994    probability of the 'then' branch because of the loop in the else
995    branch.
996    
997    
998    Graphical Viewing:
999    ------------------
1000    I merely plugged in Allen's graphical viewers into the compiler. The
1001    additional code is not much. At the top level, saying:
1002    
1003            Control.MLRISC.getFlag "cfg-graphical-view" := true;
1004    
1005    will display the graphical view of the control flow graph just before
1006    back-patching.  daVinci must be in your path for this to work. If
1007    daVinci is not available, then the default viewer can be changed
1008    using:
1009    
1010            Control.MLRISC.getString "viewer"
1011    
1012    which can be set to "dot" or "vcg" for the corresponding viewers. Of
1013    course, these viewers must be in your path.
1014    
1015    The above will display the compilation unit at the level of clusters,
1016    many of which are small, boring, and un-interesting. Also setting:
1017    
1018            Control.MLRISC.getInt "cfg-graphical-view_size"
1019    
1020    will display clusters that are larger than the value set by the above.
1021    
1022    
1023    ----------------------------------------------------------------------
1024    Name: Matthias Blume
1025    Date: 2002/03/21 22:20:00 EST
1026    Tag: blume-20020321-kmp-bugfix
1027    Description:
1028    
1029    Changed the interface to the KMP routine in PreString and fixed
1030    a minor bug in one place where it was used.
1031    
1032    ----------------------------------------------------------------------
1033    Name: Allen Leung
1034    Date: 2002/03/21 20:30:00 EST
1035    Tag: leunga-20020321-cfg
1036    Description:
1037    
1038      Fixed a potential problem in cfg edge splitting.
1039    
1040    ----------------------------------------------------------------------
1041    Name: Allen Leung
1042    Date: 2002/03/21 17:15:00 EST
1043    Tag: leunga-20020321-x86-fp-cfg
1044    Description:
1045    
1046      1. Recoded the buggy parts of x86-fp.
1047    
1048         a. All the block reordering code has been removed.
1049            We now depend on the block placement phases to do this work.
1050    
1051         b. Critical edge splitting code has been simplified and moved into the
1052            CFG modules, as where they belong.
1053    
1054         Both of these were quite buggy and complex.  The code is now much, much
1055         simpler.
1056    
1057      2. X86 backend.
1058    
1059         a. Added instructions for 64-bit support.  Instruction selection for
1060            64-bit has not been committed, however, since that
1061            requires changes to MLTREE which haven't been approved by
1062            Lal and John.
1063    
1064         b. Added support for FUCOMI and FUCOMIP when generating code for
1065            PentiumPro and above.  We only generate these instructions in
1066            the fast-fp mode.
1067    
1068         c. Added cases for JP and JNP in X86FreqProps.
1069    
1070      3. CFG
1071    
1072         CFG now has a bunch of methods for edge splitting and merging.
1073    
1074      4. Machine description.
1075    
1076         John's simplification of MLTREE_BASIS.fcond broke a few machine
1077         description things:
1078    
1079         rtl-build.{sig,sml} and hppa.mdl fixed.
1080    
1081         NOTE: the machine description stuff in the repository is still broken.
1082               Again, I can't put my fixes in because that involves
1083               changes to MLTREE.
1084    
1085    ----------------------------------------------------------------------
1086    Name: Matthias Blume
1087    Date: 2002/03/20 15:55:00 EST
1088    Tag: blume-20020320-kmp
1089    Description:
1090    
1091    Implemented Knuth-Morris-Pratt string matching in PreString and used
1092    it for String.isSubstring, Substring.isSubstring, and
1093    Substring.position.
1094    
1095    (Might need some stress-testing.  Simple examples worked fine.)
1096    
1097    ----------------------------------------------------------------------
1098    Name: Matthias Blume
1099    Date: 2002/03/19 16:37:00 EST
1100    Tag: blume-20020319-witnesses
1101    Description:
1102    
1103    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
1104    
1105    This implements a generic mechanism for changing constness qualifiers
1106    anywhere within big C types without resorting to outright "casts".
1107    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
1108    modify the constness at the outermost level.)
1109    The implementation of "convert" is based on the idea of "witness"
1110    values -- values that are not used by the operation but whose types
1111    "testify" to their applicability.  On the implementation side, "convert"
1112    is simply a projection (returning its second curried argument).  With
1113    cross-module inlining, it should not result in any machine code being
1114    generated.
1115    
1116    ----------------------------------------------------------------------
1117    Name: Matthias Blume
1118    Date: 2002/03/15 16:40:00 EST
1119    Tag: blume-20020315-basis
1120    Description:
1121    
1122    Provided (preliminary?) implementations for
1123    
1124      {String,Substring}.{concatWith,isSuffix,isSubstring}
1125    
1126    and
1127    
1128      Substring.full
1129    
1130    Those are in the Basis spec but they were missing in SML/NJ.
1131    
1132    ----------------------------------------------------------------------
1133    Name: Matthias Blume
1134    Date: 2002/03/14 21:30:00 EST
1135    Tag: blume-20020314-controls
1136    Description:
1137    
1138    Controls:
1139    ---------
1140    
1141    1. Factored out the recently-added Controls : CONTROLS stuff and put
1142       it into its own library $/controls-lib.cm.  The source tree for
1143       this is under src/smlnj-lib/Controls.
1144    
1145    2. Changed the names of types and functions in this interface, so they
1146       make a bit more "sense":
1147    
1148          module -> registry
1149          'a registry -> 'a group
1150    
1151    3. The interface now deals in ref cells only.  The getter/setter interface
1152       is (mostly) gone.
1153    
1154    4. Added a function that lets one register an already-existing ref cell.
1155    
1156    5. Made the corresponding modifications to the rest of the code so that
1157       everything compiles again.
1158    
1159    6. Changed the implementation of Controls.MLRISC back to something closer
1160       to the original.  In particular, this module (and therefore MLRISC)
1161       does not depend on Controls.  There now is some link-time code in
1162       int-sys.sml that registers the MLRISC controls with the Controls
1163       module.
1164    
1165    CM:
1166    ---
1167    
1168      * One can now specify the lambda-split aggressiveness in init.cmi.
1169    
1170    ----------------------------------------------------------------------
1171    Name: Allen Leung
1172    Date: 2002/03/13 17:30:00 EST
1173    Tag: leunga-20020313-x86-fp-unary
1174    Description:
1175    
1176    Bug fix for:
1177    
1178    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
1179    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
1180    > - fun f(x,(y,z)) = Real.~ y;
1181    > [autoloading]
1182    > [autoloading done]
1183    >       fchsl   (%eax), 184(%esp)
1184    > Error: MLRisc bug: X86MCEmitter.emitInstr
1185    >
1186    > uncaught exception Error
1187    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
1188    
1189    The problem was that the code generator did not generate any fp registers
1190    in this case, and the ra didn't know that it needed to run the X86FP phase to
1191    translate the pseudo fp instruction.   This only happened with unary fp
1192    operators in certain situations.
1193    
1194    ----------------------------------------------------------------------
1195    Name: Matthias Blume
1196    Date: 2002/03/13 14:00:00 EST
1197    Tag: blume-20020313-overload-etc
1198    Description:
1199    
1200    1. Added _overload as a synonym for overload for backward compatibility.
1201       (Control.overloadKW must be true for either version to be accepted.)
1202    
1203    2. Fixed bug in install script that caused more things to be installed
1204       than what was requested in config/targets.
1205    
1206    3. Made CM aware of the (_)overload construct so that autoloading
1207       works.
1208    
1209    ----------------------------------------------------------------------
1210    Name: Matthias Blume
1211    Date: 2002/03/12 22:03:00 EST
1212    Tag: blume-20020312-url
1213    Description:
1214    
1215    Forgot to update BOOT and srcarchiveurl.
1216    
1217    ----------------------------------------------------------------------
1218    Name: Matthias Blume
1219    Date: 2002/03/12 17:30:00 EST
1220    Tag: blume-20020312-version110392
1221    Description:
1222    
1223    Yet another version number bump (because of small changes to the
1224    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
1225    
1226    Changes:
1227    
1228      The new pid generation scheme described a few weeks ago was overly
1229      complicated.  I implemented a new mechanism that is simpler and
1230      provides a bit more "stability":  Once CM has seen a compilation
1231      unit, it keeps its identity constant (as long as you do not delete
1232      those crucial CM/GUID/* files).  This means that when you change
1233      an interface, compile, then go back to the old interface, and
1234      compile again, you arrive at the original pid.
1235    
1236      There now also is a mechanism that instructs CM to use the plain
1237      environment hash as a module's pid (effectively making its GUID
1238      the empty string).  For this, "noguid" must be specified as an
1239      option to the .sml file in question within its .cm file.
1240      This is most useful for code that is being generated by tools such
1241      as ml-nlffigen (because during development programmers tend to
1242      erase the tool's entire output directory tree including CM's cached
1243      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
1244      revert to the old, broken behavior of SML/NJ, but in specific cases
1245      where there is no danger of interface confusion, its use is ok
1246      (I think).
1247    
1248      ml-nlffigen by default generates "noguid" annotations.  They can be
1249      turned off by specifying -guid in its command line.
1250    
1251    ----------------------------------------------------------------------
1252    Name: Lal George
1253    Date: 2002/03/12 12 14:42:36 EST
1254    Tag: george-20020312-frequency-computation
1255    Description:
1256    
1257    Integrated jump chaining and static block frequency into the
1258    compiler. More details and numbers later.
1259    
1260    ----------------------------------------------------------------------
1261    Name: Lal George
1262    Date: 2002/03/11 11 22:38:53 EST
1263    Tag: george-20020311-jump-chain-elim
1264    Description:
1265    
1266    Tested the jump chain elimination on all architectures (except the
1267    hppa).  This is on by default right now and is profitable for the
1268    alpha and x86, however, it may not be profitable for the sparc and ppc
1269    when compiling the compiler.
1270    
1271    The gc test will typically jump to a label at the end of the cluster,
1272    where there is another jump to an external cluster containing the actual
1273    code to invoke gc. This is to allow factoring of common gc invocation
1274    sequences. That is to say, we generate:
1275    
1276            f:
1277               testgc
1278               ja   L1      % jump if above to L1
1279    
1280            L1:
1281               jmp L2
1282    
1283    
1284    After jump chain elimination the 'ja L1' instructions is converted to
1285    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
1286    up being implemented in their long form (if L2 is far away) using:
1287    
1288            jbe     L3      % jump if below or equal to L3
1289            jmp     L2
1290         L3:
1291            ...
1292    
1293    
1294    For large compilation units L2  may be far away.
1295    
1296    
1297    ----------------------------------------------------------------------
1298    Name: Matthias Blume
1299    Date: 2002/03/11 13:30:00 EST
1300    Tag: blume-20020311-mltreeeval
1301    Description:
1302    
1303    A functor parameter was missing.
1304    
1305    ----------------------------------------------------------------------
1306    Name: Allen Leung
1307    Date: 2002/03/11 10:30:00 EST
1308    Tag: leunga-20020311-runtime-string0
1309    Description:
1310    
1311       The representation of the empty string now points to a
1312    legal null terminated C string instead of unit.  It is now possible
1313    to convert an ML string into C string with InlineT.CharVector.getData.
1314    This compiles into one single machine instruction.
1315    
1316    ----------------------------------------------------------------------
1317    Name: Allen Leung
1318    Date: 2002/03/10 23:55:00 EST
1319    Tag: leunga-20020310-x86-call
1320    Description:
1321    
1322       Added machine generation for CALL instruction (relative displacement mode)
1323    
1324    ----------------------------------------------------------------------
1325    Name: Matthias Blume
1326    Date: 2002/03/08 16:05:00
1327    Tag: blume-20020308-entrypoints
1328    Description:
1329    
1330    Version number bumped to 110.39.1.  NEW BOOTFILES!
1331    
1332    Entrypoints: non-zero offset into a code object where execution should begin.
1333    
1334    - Added the notion of an entrypoint to CodeObj.
1335    - Added reading/writing of entrypoint info to Binfile.
1336    - Made runtime system bootloader aware of entrypoints.
1337    - Use the address of the label of the first function given to mlriscGen
1338      as the entrypoint.  This address is currently always 0, but it will
1339      not be 0 once we turn on block placement.
1340    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
1341      with entry points) from mlriscGen.
1342    
1343    ----------------------------------------------------------------------
1344    Name: Allen Leung
1345    Date: 2002/03/07 20:45:00 EST
1346    Tag: leunga-20020307-x86-cmov
1347    Description:
1348    
1349       Bug fixes for CMOVcc on x86.
1350    
1351       1. Added machine code generation for CMOVcc
1352       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
1353       3. CMOVcc cannot have an immediate operand as argument.
1354    
1355    ----------------------------------------------------------------------
1356    Name: Matthias Blume
1357    Date: 2002/03/07 16:15:00 EST
1358    Tag: blume-20020307-controls
1359    Description:
1360    
1361    This is a very large but mostly boring patch which makes (almost)
1362    every tuneable compiler knob (i.e., pretty much everything under
1363    Control.* plus a few other things) configurable via both the command
1364    line and environment variables in the style CM did its configuration
1365    until now.
1366    
1367    Try starting sml with '-h' (or, if you are brave, '-H')
1368    
1369    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
1370    implements the underlying generic mechanism.
1371    
1372    The interface to some of the existing such facilities has changed somewhat.
1373    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
1374    (The getFoo interface is still there for backward-compatibility, but its
1375    use is deprecated.)
1376    
1377    The ml-build script passes -Cxxx=yyy command-line arguments through so
1378    that one can now twiddle the compiler settings when using this "batch"
1379    compiler.
1380    
1381    TODO items:
1382    
1383    We should go through and throw out all controls that are no longer
1384    connected to anything.  Moreover, we should go through and provide
1385    meaningful (and correct!) documentation strings for those controls
1386    that still are connected.
1387    
1388    Currently, multiple calls to Controls.new are accepted (only the first
1389    has any effect).  Eventually we should make sure that every control
1390    is being made (via Controls.new) exactly once.  Future access can then
1391    be done using Controls.acc.
1392    
1393    Finally, it would probably be a good idea to use the getter-setter
1394    interface to controls rather than ref cells.  For the time being, both
1395    styles are provided by the Controls module, but getter-setter pairs are
1396    better if thread-safety is of any concern because they can be wrapped.
1397    
1398    *****************************************
1399    
1400    One bug fix: The function blockPlacement in three of the MLRISC
1401    backpatch files used to be hard-wired to one of two possibilities at
1402    link time (according to the value of the placementFlag).  But (I
1403    think) it should rather sense the flag every time.
1404    
1405    *****************************************
1406    
1407    Other assorted changes (by other people who did not supply a HISTORY entry):
1408    
1409    1. the cross-module inliner now works much better (Monnier)
1410    2. representation of weights, frequencies, and probabilities in MLRISC
1411       changed in preparation of using those for weighted block placement
1412       (Reppy, George)
1413    
1414    ----------------------------------------------------------------------
1415    Name: Lal George
1416    Date: 2002/03/07 14:44:24 EST 2002
1417    Tag: george-20020307-weighted-block-placement
1418    
1419    Tested the weighted block placement optimization on all architectures
1420    (except the hppa) using AMPL to generate the block and edge frequencies.
1421    Changes were required in the machine properties to correctly
1422    categorize trap instructions. There is an MLRISC flag
1423    "weighted-block-placement" that can be used to enable weighted block
1424    placement, but this will be ineffective without block/edge
1425    frequencies (coming soon).
1426    
1427    
1428    ----------------------------------------------------------------------
1429    Name: Lal George
1430    Date: 2002/03/05 17:24:48 EST
1431    Tag: george-20020305-linkage-cluster
1432    
1433    In order to support the block placement optimization, a new cluster
1434    is generated as the very first cluster (called the linkage cluster).
1435    It contains a single jump to the 'real' entry point for the compilation
1436    unit. Block placement has no effect on the linkage cluster itself, but
1437    all the other clusters  have full freedom in the manner in which they
1438    reorder blocks or functions.
1439    
1440    On the x86 the typical linkage code that is generated is:
1441       ----------------------
1442            .align 2
1443       L0:
1444            addl    $L1-L0, 72(%esp)
1445            jmp     L1
1446    
1447    
1448            .align  2
1449       L1:
1450       ----------------------
1451    
1452    72(%esp) is the memory location for the stdlink register. This
1453    must contain the address of the CPS function being called. In the
1454    above example, it contains the address of  L0; before
1455    calling L1 (the real entry point for the compilation unit), it
1456    must contain the address for L1, and hence
1457    
1458            addl $L1-L0, 72(%esp)
1459    
1460    I have tested this on all architectures except the hppa.The increase
1461    in code size is of course negligible
1462    
1463    ----------------------------------------------------------------------
1464    Name: Allen Leung
1465    Date: 2002/03/03 13:20:00 EST
1466    Tag: leunga-20020303-mlrisc-tools
1467    
1468      Added #[ ... ] expressions to mlrisc tools
1469    
1470    ----------------------------------------------------------------------
1471    Name: Matthias Blume
1472    Date: 2002/02/27 12:29:00 EST
1473    Tag: blume-20020227-cdebug
1474    Description:
1475    
1476    - made types in structure C and C_Debug to be equal
1477    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
1478    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
1479    
1480    ----------------------------------------------------------------------
1481    Name: Matthias Blume
1482    Date: 2002/02/26 12:00:00 EST
1483    Tag: blume-20020226-ffi
1484    Description:
1485    
1486    1. Fixed a minor bug in CM's "noweb" tool:
1487       If numbering is turned off, then truly don't number (i.e., do not
1488       supply the -L option to noweb).  The previous behavior was to supply
1489       -L'' -- which caused noweb to use the "default" line numbering scheme.
1490       Thanks to Chris Richards for pointing this out (and supplying the fix).
1491    
1492    2. Once again, I reworked some aspects of the FFI:
1493    
1494       A. The incomplete/complete type business:
1495    
1496       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
1497         gone!
1498       - ML types representing an incomplete type are now *equal* to
1499         ML types representing their corresponding complete types (just like
1500         in C).  This is still safe because ml-nlffigen will not generate
1501         RTTI for incomplete types, nor will it generate functions that
1502         require access to such RTTI.   But when ML code generated from both
1503         incomplete and complete versions of the C type meet, the ML types
1504         are trivially interoperable.
1505    
1506         NOTE:  These changes restore the full generality of the translation
1507         (which was previously lost when I eliminated functorization)!
1508    
1509       B. Enum types:
1510    
1511       - Structure C now has a type constructor "enum" that is similar to
1512         how the "su" constructor works.  However, "enum" is not a phantom
1513         type because each "T enum" has values (and is isomorphic to
1514         MLRep.Signed.int).
1515       - There are generic access operations for enum objects (using
1516         MLRep.Signed.int).
1517       - ml-nlffigen will generate a structure E_foo for each "enum foo".
1518         * The structure contains the definition of type "mlrep" (the ML-side
1519         representation type of the enum).  Normally, mlrep is the same
1520         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
1521         then mlrep will be defined as a datatype -- thus facilitating
1522         pattern matching on mlrep values.
1523         ("-ec" will be suppressed if there are duplicate values in an
1524          enumeration.)
1525         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
1526         will be generated for each C enum constant xxx.
1527         * Conversion functions m2i and i2m convert between mlrep and
1528         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
1529         * Coversion functions c and ml convert between mlrep and "tag enum".
1530         * Access functions (get/set) fetch and store mlrep values.
1531       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
1532         enumerations are merged into one single enumeration represented by
1533         structure E_'.
1534    
1535    ----------------------------------------------------------------------
1536    Name: Allen Leung
1537    Date: 2002/02/25 04:45:00 EST
1538    Tag: leunga-20020225-cps-spill
1539    
1540    This is a new implementation of the CPS spill phase.
1541    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
1542    In case of problems, replace it with the old file spill.sml
1543    
1544    The current compiler runs into some serious performance problems when
1545    constructing a large record.  This can happen when we try to compile a
1546    structure with many items.  Even a very simple structure like the following
1547    makes the compiler slow down.
1548    
1549        structure Foo = struct
1550           val x_1 = 0w1 : Word32.int
1551           val x_2 = 0w2 : Word32.int
1552           val x_3 = 0w3 : Word32.int
1553           ...
1554           val x_N = 0wN : Word32.int
1555        end
1556    
1557    The following table shows the compile time, from N=1000 to N=4000,
1558    with the old compiler:
1559    
1560    N
1561    1000   CPS 100 spill                           0.04u  0.00s  0.00g
1562           MLRISC ra                               0.06u  0.00s  0.05g
1563              (spills = 0 reloads = 0)
1564           TOTAL                                   0.63u  0.07s  0.21g
1565    
1566    1100   CPS 100 spill                           8.25u  0.32s  0.64g
1567           MLRISC ra                               5.68u  0.59s  3.93g
1568              (spills = 0 reloads = 0)
1569           TOTAL                                   14.71u  0.99s  4.81g
1570    
1571    1500   CPS 100 spill                           58.55u  2.34s  1.74g
1572           MLRISC ra                               5.54u  0.65s  3.91g
1573              (spills = 543 reloads = 1082)
1574           TOTAL                                   65.40u  3.13s  6.00g
1575    
1576    2000   CPS 100 spill                           126.69u  4.84s  3.08g
1577           MLRISC ra                               0.80u  0.10s  0.55g
1578              (spills = 42 reloads = 84)
1579           TOTAL                                   129.42u  5.10s  4.13g
1580    
1581    3000   CPS 100 spill                           675.59u  19.03s  11.64g
1582           MLRISC ra                               2.69u  0.27s  1.38g
1583              (spills = 62 reloads = 124)
1584           TOTAL                                   682.48u  19.61s  13.99g
1585    
1586    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
1587           MLRISC ra                               4.96u  0.27s  2.72g
1588              (spills = 85 reloads = 170)
1589           TOTAL                                   2375.26u  57.21s  48.00g
1590    
1591    As you can see the old cps spill module suffers from some serious
1592    performance problem.  But since I cannot decipher the old code fully,
1593    instead of patching the problems up, I'm reimplementing it
1594    with a different algorithm.  The new code is more modular,
1595    smaller when compiled, and substantially faster
1596    (O(n log n) time and O(n) space).  Timing of the new spill module:
1597    
1598    4000  CPS 100 spill                           0.02u  0.00s  0.00g
1599          MLRISC ra                               0.25u  0.02s  0.15g
1600             (spills=1 reloads=3)
1601          TOTAL                                   7.74u  0.34s  1.62g
1602    
1603    Implementation details:
1604    
1605    As far as I can tell, the purpose of the CPS spill module is to make sure the
1606    number of live variables at any program point (the bandwidth)
1607    does not exceed a certain limit, which is determined by the
1608    size of the spill area.
1609    
1610    When the bandwidth is too large, we decrease the register pressure by
1611    packing live variables into spill records.  How we achieve this is
1612    completely different than what we did in the old code.
1613    
1614    First, there is something about the MLRiscGen code generator
1615    that we should be aware of:
1616    
1617    o MLRiscGen performs code motion!
1618    
1619       In particular, it will move floating point computations and
1620       address computations involving only the heap pointer to
1621       their use sites (if there is only a single use).
1622       What this means is that if we have a CPS record construction
1623       statement
1624    
1625           RECORD(k,vl,w,e)
1626    
1627       we should never count the new record address w as live if w
1628       has only one use (which is often the case).
1629    
1630       We should do something similar to floating point, but the transformation
1631       there is much more complex, so I won't deal with that.
1632    
1633    Secondly, there are now two new cps primops at our disposal:
1634    
1635     1. rawrecord of record_kind option
1636        This pure operator allocates some uninitialized storage from the heap.
1637        There are two forms:
1638    
1639         rawrecord NONE [INT n]  allocates a tagless record of length n
1640         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
1641                                     and initializes the tag.
1642    
1643     2. rawupdate of cty
1644          rawupdate cty (v,i,x)
1645          Assigns to x to the ith component of record v.
1646          The storelist is not updated.
1647    
1648    We use these new primops for both spilling and increment record construction.
1649    
1650     1. Spilling.
1651    
1652        This is implemented with a linear scan algorithm (but generalized
1653        to trees).  The algorithm will create a single spill record at the
1654        beginning of the cps function and use rawupdate to spill to it,
1655        and SELECT or SELp to reload from it.  So both spills and reloads
1656        are fine-grain operations.  In contrast, in the old algorithm
1657        "spills" have to be bundled together in records.
1658    
1659        Ideally, we should sink the spill record construction to where
1660        it is needed.  We can even split the spill record into multiple ones
1661        at the places where they are needed.  But CPS is not a good
1662        representation for global code motion, so I'll keep it simple and
1663        am not attempting this.
1664    
1665     2. Incremental record construction (aka record splitting).
1666    
1667        Long records with many component values which are simulatenously live
1668        (recall that single use record addresses are not considered to
1669         be live) are constructed with rawrecord and rawupdate.
1670        We allocate space on the heap with rawrecord first, then gradually
1671        fill it in with rawupdate.  This is the technique suggested to me
1672        by Matthias.
1673    
1674        Some restrictions on when this is applicable:
1675        1. It is not a VECTOR record.  The code generator currently does not handle
1676           this case. VECTOR record uses double indirection like arrays.
1677        2. All the record component values are defined in the same "basic block"
1678           as the record constructor.  This is to prevent speculative
1679           record construction.
1680    
1681    ----------------------------------------------------------------------
1682    Name: Allen Leung
1683    Date: 2002/02/22 01:02:00 EST
1684    Tag: leunga-20020222-mlrisc-tools
1685    
1686    Minor bug fixes in the parser and rewriter
1687    
1688    ----------------------------------------------------------------------
1689    Name: Allen Leung
1690    Date: 2002/02/21 20:20:00 EST
1691    Tag: leunga-20020221-peephole
1692    
1693    Regenerated the peephole files.  Some contained typos in the specification
1694    and some didn't compile because of pretty printing bugs in the old version
1695    of 'nowhere'.
1696    
1697    ----------------------------------------------------------------------
1698    Name: Allen Leung
1699    Date: 2002/02/19 20:20:00 EST
1700    Tag: leunga-20020219-mlrisc-tools
1701    Description:
1702    
1703       Minor bug fixes to the mlrisc-tools library:
1704    
1705       1.  Fixed up parsing colon suffixed keywords
1706       2.  Added the ability to shut the error messages up
1707       3.  Reimplemented the pretty printer and fixed up/improved
1708           the pretty printing of handle and -> types.
1709       4.  Fixed up generation of literal symbols in the nowhere tool.
1710       5.  Added some SML keywords to to sml.sty
1711    
1712    ----------------------------------------------------------------------
1713    Name: Matthias Blume
1714    Date: 2002/02/19 16:20:00 EST
1715    Tag: blume-20020219-cmffi
1716    Description:
1717    
1718    A wild mix of changes, some minor, some major:
1719    
1720    * All C FFI-related libraries are now anchored under $c:
1721        $/c.cm      --> $c/c.cm
1722        $/c-int.cm  --> $c/internals/c-int.cm
1723        $/memory.cm --> $c/memory/memory.cm
1724    
1725    * "make" tool (in CM) now treats its argument pathname slightly
1726      differently:
1727        1. If the native expansion is an absolute name, then before invoking
1728           the "make" command on it, CM will apply OS.Path.mkRelative
1729           (with relativeTo = OS.FileSys.getDir()) to it.
1730        2. The argument will be passed through to subsequent phases of CM
1731           processing without "going native".  In particular, if the argument
1732           was an anchored path, then "make" will not lose track of that anchor.
1733    
1734    * Compiler backends now "know" their respective C calling conventions
1735      instead of having to be told about it by ml-nlffigen.  This relieves
1736      ml-nlffigen from one of its burdens.
1737    
1738    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
1739    
1740    * Export C_DEBUG and C_Debug from $c/c.cm.
1741    
1742    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
1743      subtyping relationship between incomplete pointers and their complete
1744      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
1745      with the convention of instantiating 'o with ('t, 'c) obj whenever
1746      the pointer target type is complete.  In the incomplete case, 'o
1747      will be instantiated with some "'c iobj" -- a type obtained by
1748      using one of the functors PointerToIncompleteType or PointerToCompleteType.
1749    
1750      Operations that work on both incomplete and complete pointer types are
1751      typed as taking an 'o ptr while operations that require the target to
1752      be known are typed as taking some ('t, 'c) obj ptr.
1753    
1754      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
1755      where void is an eqtype without any values.  This makes it possible
1756      to work on voidptr values using functions meant to operate on light
1757      incomplete pointers.
1758    
1759    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
1760      been vastly simplified.
1761    
1762    ----------------------------------------------------------------------
1763    Name: Matthias Blume
1764    Date: 2002/02/19 10:48:00 EST
1765    Tag: blume-20020219-pqfix
1766    Description:
1767    
1768    Applied Chris Okasaki's bug fix for priority queues.
1769    
1770    ----------------------------------------------------------------------
1771    Name: Matthias Blume
1772    Date: 2002/02/15 17:05:00
1773    Tag: Release_110_39
1774    Description:
1775    
1776    Last-minute retagging is becoming a tradition... :-(
1777    
1778    This is the working release 110.39.
1779    
1780    ----------------------------------------------------------------------
1781    Name: Matthias Blume
1782    Date: 2002/02/15 16:00:00 EST
1783    Tag: Release_110_39-orig
1784    Description:
1785    
1786    Working release 110.39.  New bootfiles.
1787    
1788    (Update: There was a small bug in the installer so it wouldn't work
1789    with all shells.  So I retagged. -Matthias)
1790    
1791    ----------------------------------------------------------------------
1792    Name: Matthias Blume
1793    Date: 2002/02/15 14:17:00 EST
1794    Tag: blume-20020215-showbindings
1795    Description:
1796    
1797    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
1798    the latter can be useful for exploring what bindings are available at
1799    the interactive prompt.  (The first function returns only the list
1800    of symbols that are really bound, the second prints those but also the
1801    ones that CM's autoloading mechanism knows about.)
1802    
1803    ----------------------------------------------------------------------
1804    Name: Matthias Blume
1805    Date: 2002/02/15 12:08:00 EST
1806    Tag: blume-20020215-iptrs
1807    Description:
1808    
1809    Two improvements to ml-nlffigen:
1810    
1811      1. Write files only if they do not exist or if their current contents
1812         do not coincide with what's being written.  (That is, avoid messing
1813         with the time stamps unless absolutely necessary.)
1814    
1815      2. Implement a "repository" mechanism for generated files related
1816         to "incomplete pointer types".   See the README file for details.
1817    
1818    ----------------------------------------------------------------------
1819    Name: Matthias Blume
1820    Date: 2002/02/14 11:50:00 EST
1821    Tag: blume-20020214-quote
1822    Description:
1823    
1824    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
1825    because of the new and improved tag generation scheme.  (Thanks to Allen
1826    Leung for pointing it out.)
1827    
1828    ----------------------------------------------------------------------
1829    Name: Lal George
1830    Date: 2002/02/14 09:55:27 EST 2002
1831    Tag: george-20020214-isabelle-bug
1832    Description:
1833    
1834    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
1835    of Isabelle on the x86.
1836    
1837    From Allen:
1838    -----------
1839     I've found the problem:
1840    
1841         in ra-core.sml, I use the counter "blocked" to keep track of the
1842         true number of elements in the freeze queue.  When the counter goes
1843         to zero, I skip examining the queue.  But I've messed up the
1844         bookkeeping in combine():
1845    
1846             else ();
1847             case !ucol of
1848               PSEUDO => (if !cntv > 0 then
1849                     (if !cntu > 0 then blocked := !blocked - 1 else ();
1850                                        ^^^^^^^^^^^^^^^^^^^^^^^
1851                      moveu := mergeMoveList(!movev, !moveu)
1852                     )
1853                  else ();
1854    
1855         combine() is called to coalesce two nodes u and v.
1856         I think I was thinking that if the move counts of u and v are both
1857         greater than zero then after they are coalesced then one node is
1858         removed from the freeze queue.  Apparently I was thinking that
1859         both u and v are of low degree, but that's clearly not necessarily true.
1860    
1861    
1862    02/12/2002:
1863        Here's the patch.  HOL now compiles.
1864    
1865        I don't know how this impact on performance (compile
1866        time or runtime).  This bug caused the RA (especially on the x86)
1867        to go thru the potential spill phase when there are still nodes on the
1868        freeze queue.
1869    
1870    
1871    
1872    
1873    ----------------------------------------------------------------------
1874    Name: Matthias Blume
1875    Date: 2002/02/13 22:40:00 EST
1876    Tag: blume-20020213-fptr-rtti
1877    Description:
1878    
1879    Fixed a bug in ml-nlffigen that was introduced with one of the previous
1880    updates.
1881    
1882    ----------------------------------------------------------------------
1883    Name: Matthias Blume
1884    Date: 2002/02/13 16:41:00 EST
1885    Tag: blume-20020213-cmlpq
1886    Description:
1887    
1888    Added new priority queue export symbols (which have just been added to
1889    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
1890    not compile and the installer would choke.)
1891    
1892    ----------------------------------------------------------------------
1893    Name: Matthias Blume
1894    Date: 2002/02/13 16:15:00 EST
1895    Tag: blume-20020213-various
1896    Description:
1897    
1898    1. More tweaks to ml-nlffigen:
1899    
1900       - better internal datastructures (resulting in slight speedup)
1901       - "-match" option requires exact match
1902       - "localized" gensym counters (untagged structs/unions nested within
1903         other structs/unions or within typedefs get a fresh counter; their
1904         tag will be prefixed by a concatenation of their parents' tags)
1905       - bug fixes (related to calculation of transitive closure of types
1906         to be included in the output)
1907    
1908    2. Minor Basis updates:
1909    
1910       - added implementations for List.collate and Option.app
1911    
1912    ----------------------------------------------------------------------
1913    Name: Matthias Blume
1914    Date: 2002/02/11 15:55:00 EST
1915    Tag: blume-20020211-gensym
1916    Description:
1917    
1918    Added a "-gensym" option to command line of ml-nlffigen.  This can be
1919    used to specify a "stem" -- a string that is inserted in all "gensym'd"
1920    names (ML structure names that correspond to unnamed C structs, unions,
1921    and enums), so that separate runs of ml-nlffigen do not clash.
1922    
1923    ----------------------------------------------------------------------
1924    Name: Matthias Blume
1925    Date: 2002/02/11 12:05:00 EST
1926    Tag: blume-20020211-gensml
1927    Description:
1928    
1929    A quick fix for a problem with GenSML (in the pgraph-util library):
1930    Make generation of toplevel "local" optional.  (Strictly speaking,
1931    signature definitions within "local" are not legal SML.)
1932    
1933    Other than that: updates to INSTALL and cm/TODO.
1934    
1935    ----------------------------------------------------------------------
1936    Name: Matthias Blume
1937    Date: 2002/02/08 15:00:00 EST
1938    Tag: blume-20020208-uniquepid
1939    Description:
1940    
1941    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
1942    
1943    1. The installer (config/install.sh) has gotten smarter:
1944    
1945         - Configuration options are a bit easier to specify now
1946           (in config/targets).
1947         - Bug in recognizing .tar.bz2 files fixed.
1948         - Installer automatically resolves dependencies between
1949           configuration options (e.g., if you ask for eXene, you will
1950           also get cml -- regardless whether you asked for it or not).
1951         - Installer can run in "quieter mode" by setting the environment
1952           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
1953           "completely silent", though.
1954         - Build HashCons library as part of smlnj-lib.
1955    
1956    2. A new scheme for assigning persistent identifiers to compilation
1957       units (and, by extension, to types etc.) has been put into place.
1958       This fixes a long-standing bug where types and even dynamic values
1959       can get internally confused, thereby compromising type safety
1960       (abstraction) and dynamic correctness.  See
1961    
1962         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
1963    
1964       for an example of how things could go wrong until now.
1965    
1966       The downside of the new scheme is that pids are not quite as
1967       persistent as they used to be: CM will generate a fresh pid
1968       for every compilation unit that it thinks it sees for the first
1969       time.  That means that if you compile starting from a clean, fresh
1970       source tree at two different times, you end up with different
1971       binaries.
1972    
1973       Cutoff recompilation, however, has not been compromised because
1974       CM keeps pid information in special caches between runs.
1975    
1976    ----------------------------------------------------------------------
1977    Name: Lal George
1978    Date: 2002/02/07 15:34:13 EST 2002
1979    Tag: <none>
1980    Description:
1981    
1982    Compilers that generate assembly code may produce  global labels
1983    whose value is resolved at link time. The various peephole optimization
1984    modules did not take this in account.
1985    
1986    TODO. The Labels.addrOf function should really return an option
1987    type so that clients are forced to deal with this issue, rather
1988    than an exception being raised.
1989    
1990    ----------------------------------------------------------------------
1991    Name: Lal George
1992    Date: 2002/02/06 13:55:02 EST
1993    Tag: george-20020206-ra-breakup
1994    Description:
1995    
1996    1. A bug fix from Allen.
1997    
1998        A typo causes extra fstp %st(0)'s to be generated at compensation
1999        edges, which might cause stack underflow traps at runtime.  This
2000        occurs in fft where there are extraneous fstps right before the 'into'
2001        trap instruction (in this case they are harmless since none of the
2002        integers overflow.)
2003    
2004    2. Pulled out various utility modules that were embedded in the modules
2005       of the register allocator. I need these modules for other purposes, but
2006       they are not complete enough to put into a library (just yet).
2007    ----------------------------------------------------------------------
2008    Name: Matthias Blume
2009    Date: 2002/01/31 16:05:00 EST
2010    Tag: blume-20020131-sparc-ccalls
2011    Description:
2012    
2013    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
2014       of extra stack space by mistake.  Fixed.
2015    
2016    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
2017    
2018    ----------------------------------------------------------------------
2019    Name: Allen Leung
2020    Date: 2002/01/30
2021    Tag: leunga-20020130-nowhere-bug-fix
2022    Description:
2023    
2024       MLRISC bug fixes:
2025       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
2026       2. MachineInt.fromString was negating its value.
2027    
2028    ----------------------------------------------------------------------
2029    Name: Matthias Blume
2030    Date: 2002/01/29
2031    Tag: blume-20020129-INSTALL
2032    Description:
2033    
2034    - Added somewhat detailed installation instructions (file INSTALL).
2035    - Fixed curl-detection bug in config/install.sh.
2036    - It is now possible to select the URL getter using the URLGETTER
2037      environment variable:
2038    
2039          not set / "unknown"      --> automatic detection (script tries wget,
2040                                       curl, and lynx)
2041          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
2042                                       how to properly invoke them)
2043          other                    --> use $URLGETTER directly, it must take
2044                                       precisely two command-line arguments
2045                                       (source URL and destination file name)
2046    
2047    ----------------------------------------------------------------------
2048    Name: Matthias Blume
2049    Date: 2002/01/28
2050    Tag: blume-20020128-sparc-ccalls
2051    Description:
2052    
2053    - Fixed problem with calculation of "used" registers in sparc-c-calls.
2054    - Make use of the allocParam argument in sparc-c-calls.
2055    
2056    ----------------------------------------------------------------------
2057    Name: Matthias Blume
2058    Date: 2002/01/28
2059    Tag: blume-20020128-allocParam
2060    Description:
2061    
2062    John Reppy:  Changes c-calls API to accept client-callback for
2063    allocating extra stack space.
2064    me: Corresponding changes to mlriscGen (using a dummy argument that
2065        does not change the current behavior).
2066    
2067    ----------------------------------------------------------------------
2068    Name: Matthias Blume
2069    Date: 2002/01/28 12:00:00
2070    Tag: Release_110_38
2071    Description:
2072    
2073    This time for real!!!
2074    
2075    ----------------------------------------------------------------------
2076    Name: Matthias Blume
2077    Date: 2002/01/28 10:56:00 EST
2078    Tag: blume-20020128-retraction
2079    Description:
2080    
2081    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
2082       with blume-Release_110_38-retracted.)
2083    
2084    1. Fixed a problem with incorrect rounding modes in real64.sml.
2085       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
2086    
2087    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
2088       and enums fixed.  The naming of corresponding ML identifiers should
2089       now be consistent again.
2090    
2091    ----------------------------------------------------------------------
2092    Name: Allen Leung
2093    Date: 2002/01/27
2094    Tag: leunga-20020127-nowhere
2095    Description:
2096    
2097       Added a target called nowhere in the configuration scripts.
2098       Enabling this will build the MLRISC 'nowhere' tool (for translating
2099       programs with where-clauses into legal SML code) during installation.
2100    
2101    ----------------------------------------------------------------------
2102    Name: Matthias Blume
2103    Date: 2002/01/25 21:27:00 EST
2104    Tag: blume-Release_110_38-retracted
2105    Description:
2106    
2107    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
2108    
2109    README will be added later.
2110    
2111    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
2112    (Release_110_38) removed.  Reason: Last-minute bug fixes.
2113    
2114    ----------------------------------------------------------------------
2115    Name: Matthias Blume
2116    Date: 2002/01/25
2117    Tag: blume-20020125-ffi
2118    Description:
2119    
2120    A large number of tweaks and improvements to ml-nlffi-lib and
2121    ml-nlffigen:
2122    
2123       - ML represenation types have been streamlined
2124       - getter and setter functions work with concrete values, not abstract
2125         ones where possible
2126       - ml-nlffigen command line more flexible (see README file there)
2127       - some bugs have been fixed (hopefully)
2128    
2129    ----------------------------------------------------------------------
2130    Name: Lal George
2131    Date: 2002/01/24
2132    Tag: george-20020124-risc-ra-interface
2133    Description:
2134    
2135       There is a dramatic simplification in the interface to the
2136       register allocator for RISC architectures as a result of making
2137       parallel copy instructions explicit.
2138    
2139    ----------------------------------------------------------------------
2140    Name: Matthias Blume
2141    Date: 2002/01/22
2142    Tag: blume-20020122-x86-ccalls
2143    Description:
2144    
2145    Bug fix for c-calls on x86 (having to do with how char- and
2146    short-arguments are being handled).
2147    
2148    ----------------------------------------------------------------------
2149    Name: Matthias Blume
2150    Date: 2002/01/21
2151    Tag: blume-20020121-ff
2152    Description:
2153    
2154    Another day of fiddling with the FFI...
2155    
2156    1. Bug fix/workaround:  CKIT does not complain about negative array
2157       dimensions, so ml-nlffigen has to guard itself against this possibility.
2158       (Otherwise a negative dimension would send it into an infinite loop.)
2159    
2160    2. Some of the abstract types (light objects, light pointers, most "base"
2161       types) in structure C are now eqtypes.
2162    
2163    3. Added constructors and test functions for NULL function pointers.
2164    
2165    ----------------------------------------------------------------------
2166    Name: Matthias Blume
2167    Date: 2002/01/18
2168    Tag: blume-20020118-ready-for-new-release
2169    Description:
2170    
2171    Made config/srcarchiveurl point to a new place.  (Will provide boot
2172    files shortly.)
2173    
2174    Maybe we christen this to be 110.38?
2175    
2176    ----------------------------------------------------------------------
2177    Name: Matthias Blume
2178    Date: 2002/01/18
2179    Tag: blume-20020118-more-ffifiddle
2180    Description:
2181    
2182    Today's FFI fiddling:
2183    
2184      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
2185        C.Set.* that use concrete (MLRep.*) arguments and results instead
2186        of abstract ones.
2187    
2188      - Provided word-style bit operations etc. for "int" representation
2189        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
2190        and Long.
2191    
2192    ----------------------------------------------------------------------
2193    Name: Matthias Blume
2194    Date: 2002/01/18
2195    Tag: blume-20020118-use-x86-fp
2196    Description:
2197    
2198    Now that x86-fast-fp seems to be working, I turned it back on again
2199    by default.  (Seems to work fine now, even with the FFI.)
2200    
2201    Other than that, I added some documentation about the FFI to
2202    src/ml-nlffigen/README and updated the FFI test examples in
2203    src/ml-nlffi-lib/Tests/*.
2204    
2205    ----------------------------------------------------------------------
2206    Name: Allen Leung
2207    Date: 2002/01/17
2208    Tag: leunga-20020117-x86-fast-fp-call
2209    Description:
2210    
2211       1. Fixed a problem with handling return fp values when x86's fast fp
2212          mode is turned on.
2213    
2214       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
2215          of %f32.
2216    
2217       3. Added a constructor INT32lit to the ast of MLRISC tools.
2218    
2219    ----------------------------------------------------------------------
2220    Name: Matthias Blume
2221    Date: 2002/01/16
2222    Tag: blume-20020116-ffifiddle
2223    Description:
2224    
2225    More fiddling with the FFI interface:
2226    
2227     - Make constness 'c instead of rw wherever possible.  This eliminates
2228       the need for certain explicit coercions.  (However, due to ML's
2229       value polymorphism, there will still be many cases where explicit
2230       coercions are necessary.  Phantom types are not the whole answer
2231       to modeling a subtyping relationship in ML.)
2232    
2233     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
2234    
2235     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
2236       clumsy workaround for varargs problem.)
2237    
2238    ----------------------------------------------------------------------
2239    Name: Lal George
2240    Date: 2002/01/15
2241    Tag: <none>
2242    Description:
2243    
2244    1. Since COPY instructions are no longer native to the architecture,
2245       a generic functor can be used to implement the expandCopies function.
2246    
2247    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
2248       TEXT segment.
2249    
2250    ----------------------------------------------------------------------
2251    Name: Matthias Blume
2252    Date: 2002/01/15
2253    Tag: blume-20020115-ffiupdates
2254    Description:
2255    
2256    1. Fix for bug resulting in single-precision float values being returned
2257       incorrectly from FFI calls.
2258    
2259    2. Small modifications to C FFI API:
2260    
2261        - memory-allocation routines return straight objects (no options)
2262          and raise an exception in out-of-memory situations
2263        - unsafe extensions to cast between function pointers and pointers
2264          from/to ints
2265        - added structure C_Debug as an alternative to structure C where
2266          pointer-dereferencing (|*| and |*!) always check for null-pointers
2267        - added open_lib' to DynLinkage;  open_lib' works like open_lib
2268          but also takes a (possibly empty) list of existing library handles
2269          that the current library depends on
2270    
2271    ----------------------------------------------------------------------
2272    Name: Matthias Blume
2273    Date: 2002/01/10
2274    Tag: blume-20020110-newffigen
2275    Description:
2276    
2277    1. Updates to portable graph code.
2278    
2279    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
2280       more scalable now so that even huge interfaces such as the one
2281       for GTK compile in finite time and space. :-)
2282       See src/ml-nlffigen/README for details on what's new.
2283    
2284    ----------------------------------------------------------------------
2285    Name: Lal George
2286    Date: 2001/01/09 14:31:35 EST 2002
2287    Tag: george-20011206-rm-native-copy
2288    Description:
2289    
2290            Removed the native COPY and FCOPY instructions
2291            from all the architectures and replaced it with the
2292            explicit COPY instruction from the previous commit.
2293    
2294            It is now possible to simplify many of the optimizations
2295            modules that manipulate copies. This has not been
2296            done in this change.
2297    
2298    ----------------------------------------------------------------------
2299    Name: Lal George
2300    Date: 2001/12/06 16:50:13 EST 2001
2301    Tag: george-20011206-mlrisc-instruction
2302    Description:
2303    
2304    Changed the representation of instructions from being fully abstract
2305    to being partially concrete. That is to say:
2306    
2307      from
2308            type instruction
2309    
2310      to
2311            type instr                              (* machine instruction *)
2312    
2313            datatype instruction =
2314                LIVE of {regs: C.cellset, spilled: C.cellset}
2315              | KILL of {regs: C.cellset, spilled: C.cellset}
2316              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
2317              | ANNOTATION of {i: instruction, a: Annotations.annotation}
2318              | INSTR of instr
2319    
2320    This makes the handling of certain special instructions that appear on
2321    all architectures easier and uniform.
2322    
2323    LIVE and KILL say that a list of registers are live or killed at the
2324    program point where they appear. No spill code is generated when an
2325    element of the 'regs' field is spilled, but the register is moved to
2326    the 'spilled' (which is present, more for debugging than anything else).
2327    
2328    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
2329    We used to generate:
2330    
2331            DEFFREG f1
2332            f1 := f2 + f3
2333            trapb
2334    
2335    but now generate:
2336    
2337            f1 := f2 + f3
2338            trapb
2339            LIVE {regs=[f1,f2,f3], spilled=[]}
2340    
2341    Furthermore, the DEFFREG (hack) required that all floating point instruction
2342    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
2343    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
2344    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
2345    this architecture).
2346    
2347    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
2348    all the architectures. This will result in further simplification of the
2349    register allocator that must be aware of them for coalescing purposes, and
2350    will also simplify certain aspects of the machine description that provides
2351    callbacks related to parallel copies.
2352    
2353    ANNOTATION should be obvious, and now INSTR represents the honest to God
2354    machine instruction set!
2355    
2356    The <arch>/instructions/<arch>Instr.sml files define certain utility
2357    functions for making porting easier -- essentially converting upper case
2358    to lower case. All machine instructions (of type instr) are in upper case,
2359    and the lower case form generates an MLRISC instruction. For example on
2360    the alpha we have:
2361    
2362      datatype instr =
2363         LDA of {r:cell, b:cell, d:operand}
2364       | ...
2365    
2366      val lda : {r:cell, b:cell, d:operand} -> instruction
2367        ...
2368    
2369    where lda is just (INSTR o LDA), etc.
2370    
2371    ----------------------------------------------------------------------
2372    Name: Matthias Blume
2373    Date: 2001/11/22 21:40:00 EST
2374    Tag: Release_110_37
2375    Description:
2376    
2377    Release 110.37.  This time for real.
2378    
2379    ----------------------------------------------------------------------
2380    Name: Matthias Blume
2381    Date: 2001/11/21 16:35:00 EST
2382    Tag: blume-20011121-foot-in-mouth
2383    Description:
2384    
2385    Removed the "Release_110_37" tag because of a serious bug.
2386    This will be re-tagged once the bug is fixed.
2387    
2388    ----------------------------------------------------------------------
2389    Name: Matthias Blume
2390    Date: 2001/11/21 16:14:00 EST
2391    Tag: blume-20011121-forgottenfile
2392    Description:
2393    
2394    Forgot to add a file.  (Just a .tex-file -- part of
2395    the CM manual source.)
2396    
2397    ----------------------------------------------------------------------
2398    Name: Matthias Blume
2399    Date: 2001/11/21 16:10:00 EST
2400    Tag: blume-20011121-invalid_110_37
2401    Description:
2402    
2403    Note: I removed the original tag "Release_110_37" from this commit
2404          because we found a serious bug in all non-x86 backends.
2405          - Matthias
2406    
2407    1. Modifications to the SML/NJ code generator and to the runtime system
2408       so that code object name strings are directly inserted into code
2409       objects at code generation time.  The only business the runtime system
2410       has with this is now to read the name strings on occasions.
2411       (The encoding of the name string has also changed somewhat.)
2412    
2413    2. CM now implements a simple "set calculus" for specifying export lists.
2414       In particular, it is now possible to refer to the export lists of
2415       other libraries/groups/sources and form unions as well as differences.
2416       See the latest CM manual for details.
2417    
2418    3. An separate notion of "proxy" libraries has again be eliminated from
2419       CM's model.  (Proxy libraries are now simply a special case of using
2420       the export list calculus.)
2421    
2422    4. Some of the existing libraries now take advantage of the new set
2423       calculus.
2424       (Notice that not all libraries have been converted because some
2425       of the existing .cm-files are supposed to be backward compatible
2426       with 110.0.x.)
2427    
2428    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
2429       "General.exnMessage"!  The former relies on a certain hook to be
2430       initialized, and that often does not happen in the stand-alone case.)
2431    
2432    ----------------------------------------------------------------------
2433    Name: Lal George
2434    Date: 2001/11/21  13:56:18 EST
2435    Tag: george-2001121-pseudo-ops
2436    Description:
2437    
2438      Implemented a complete redesign of MLRISC pseudo-ops. Now there
2439      ought to never be any question of incompatabilities with
2440      pseudo-op syntax expected by host assemblers.
2441    
2442      For now, only modules supporting GAS syntax are implemented
2443      but more should follow, such as MASM, and vendor assembler
2444      syntax, e.g. IBM as, Sun as, etc.
2445    
2446    ----------------------------------------------------------------------
2447    Name: Matthias Blume
2448    Date: 2001/11/14 11:52:00 EST
2449    Tag: blume-20011114-srcname
2450    Description:
2451    
2452    1. Routed the name of the current source file to mlriscgen where it
2453       should be directly emitted into the code object.  (This last part
2454       is yet to be done.)
2455    
2456    2. Some cleanup of the pgraph code to make it match the proposal that
2457       I put out the other day.  (The proposal notwithstanding, things are
2458       still in flux here.)
2459    
2460    ----------------------------------------------------------------------
2461    Name: Lal George
2462    Date: 2001/11/14 09:44:04 EST
2463    Tag:
2464    Description:
2465    
2466      Fix for a backpatching bug reported by Allen.
2467    
2468      Because the boundary between short and long span-dependent
2469      instructions is +/- 128, there are an astounding number of
2470      span-dependent instructions whose size is over estimated.
2471    
2472      Allen came up with the idea of letting the size of span
2473      dependent instructions be non-monotonic, for a maxIter
2474      number of times, after which the size must be monotonically
2475      increasing.
2476    
2477      This table shows the number of span-dependent instructions
2478      whose size was over-estimated as a function of maxIter, for the
2479      file Parse/parse/ml.grm.sml:
2480    
2481         maxIter            # of instructions:
2482            10                      687
2483            20                      438
2484            30                      198
2485            40                        0
2486    
2487      In compiling the compiler, there is no significant difference in
2488      compilation speed between maxIter=10 and maxIter=40. Actually,
2489      my measurements showed that maxIter=40 was a tad faster than
2490      maxIter=10! Also 96% of the  files in the compiler reach a fix
2491      point within 13 iterations, so fixing maxIter at 40, while high,
2492      is okay.
2493    
2494    ----------------------------------------------------------------------
2495    Name: Matthias Blume
2496    Date: 2001/10/31 15:25:00 EST
2497    Tag: blume-20011031-pgraph
2498    Description:
2499    
2500    CKIT:
2501    * Changed the "Function" constructor of type Ast.ctype to carry optional
2502      argument identifiers.
2503    * Changed the return type of TypeUtil.getFunction accordingly.
2504    * Type equality ignores the argument names.
2505    * TypeUtil.composite tries to preserve argument names but gives up quickly
2506      if there is a mismatch.
2507    
2508    installation script:
2509    * attempts to use "curl" if available (unless "wget" is available as well)
2510    
2511    CM:
2512    * has an experimental implementation of "portable graphs" which I will
2513      soon propose as an implementation-independent library format
2514    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
2515    
2516    NLFFI-LIB:
2517    * some cleanup (all cosmetic)
2518    
2519    NLFFIGEN:
2520    * temporarily disabled the mechanism that suppresses ML output for
2521      C definitions whose identifiers start with an underscore character
2522    * generate val bindings for enum constants
2523    * user can request that only one style (light or heavy) is being used;
2524      default is to use both (command-line arguments: -heavy and -light)
2525    * fixed bug in handling of function types involving incomplete pointers
2526    * generate ML entry points that take record arguments (i.e., using
2527      named arguments) for C functions that have a prototype with named
2528      arguments
2529      (see changes to CKIT)
2530    
2531    ----------------------------------------------------------------------
2532    Name: Allen Leung
2533    Date: 2001/10/27 20:34:00 EDT
2534    Tag: leunga-20011027-x86-fast-fp-call
2535    Description:
2536    
2537       Fixed the bug described in blume-20010920-slowfp.
2538    
2539       The fix involves
2540          1. generating FCOPYs in FSTP in ia32-svid
2541          2. marking a CALL with the appropriate annotation
2542    
2543    ----------------------------------------------------------------------
2544    Name: Matthias Blume
2545    Date: 2001/10/16 11:32:00 EDT
2546    Tag: blume-20011016-netbsd
2547    Description:
2548    
2549    Underscore patch from Chris Richards (fixing problem with compiling
2550    runtime system under recent NetBSD).
2551    
2552    ----------------------------------------------------------------------
2553    Name: Allen Leung
2554    Date: 2001/10/12 17:18:32 EDT 2001
2555    Tag: leung-20011012-x86-printflowgraph
2556    Description:
2557    
2558    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
2559    
2560    ----------------------------------------------------------------------
2561    Name: Lal George
2562    Date: 2001/10/11 23:51:34 EDT
2563    Tag: george-20011011-too-many-instrs
2564    Description:
2565    
2566    The representation of a program point never expected to see more
2567    than 65536 instructions in a basic block!
2568    
2569    ----------------------------------------------------------------------
2570    Name: Lal George
2571    Date: 2001/10/09 09:41:37 EDT
2572    Tag: george-20011008-mlrisc-labels
2573    Description:
2574    
2575    Changed the machine description files to support printing of
2576    local and global labels in assembly code, based on host assembler
2577    conventions.
2578    
2579    ----------------------------------------------------------------------
2580    Name: Matthias Blume
2581    Date: 2001/09/25 15:25:00 EDT
2582    Tag: blume-20010925-exninfo
2583    Description:
2584    
2585    I provided a non-hook implementation of exnName (at the toplevel) and
2586    made the "dummy" implementation of exnMessage (at the toplevel) more
2587    useful: if nothing gets "hooked in", then at least you are going to
2588    see the exception name and a message indicating why you don't see more.
2589    
2590    [For the time being, programs that need exnMessage and want to use
2591    ml-build should either use General.exnMessage (strongly recommended) or
2592    refer to structure General at some other point so that CM sees a
2593    static dependency.]
2594    
2595    [Similar remarks go for "print" and "use":  If you want to use their
2596    functionality in stand-alone programs generated by ml-build, then use
2597    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
2598    
2599    ----------------------------------------------------------------------
2600    Name: Matthias Blume
2601    Date: 2001/09/20 17:28:00 EDT
2602    Tag: blume-20010920-slowfp
2603    Description:
2604    
2605    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
2606    
2607    ----------------------------------------------------------------------
2608    Name: Matthias Blume
2609    Date: 2001/09/20 17:20:00 EDT
2610    Tag: blume-20010920-canonicalpaths
2611    Description:
2612    
2613    0. Updated the BOOT file (something that I forgot to do earlier).
2614    
2615    1. Small internal change to CM so that it avoids "/../" in filenames
2616       as much as possible (but only where it is safe).
2617    
2618    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
2619       that arguments that contain delimiters are passed through correctly.
2620       This change also means that all "special" arguments of the form
2621       @SMLxxx... must come first.
2622    
2623    3. Changed install script to put relative anchor names for tool commands
2624       into pathconfig.
2625    
2626    ----------------------------------------------------------------------
2627    Name: Matthias Blume
2628    Date: 2001/09/18 15:35:00 EDT
2629    Tag: blume-20010918-readme11036
2630    Description:
2631    
2632    Added README files.
2633    
2634    ----------------------------------------------------------------------
2635    Name: Matthias Blume
2636    Date: 2001/09/18 11:45:00 EDT
2637    Tag: Release_110_36 (retag)
2638    Description:
2639    
2640    Fixed mistake in config/preloads. Retagged as 110.36.
2641    
2642    ----------------------------------------------------------------------
2643    Name: Matthias Blume
2644    Date: 2001/09/18 09:40:00 EDT
2645    Tag: Release_110_36_orig (tag changed)
2646    Description:
2647    
2648    New version (110.36).  New bootfiles.
2649    
2650    ----------------------------------------------------------------------
2651    Name: Matthias Blume
2652    Date: 2001/09/14 16:15:00 EDT
2653    Tag: blume-20010914-x86fastfp
2654    Description:
2655    
2656    John committed some changes that Allen made, in particular a (hopefully)
2657    correctly working version of the x86-fp module.
2658    
2659    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
2660    flag to "true".  Everything seems to compile to a fixpoint ok, and
2661    "mandelbrot" speeds up by about 15%.
2662    
2663    ----------------------------------------------------------------------
2664    Name: Matthias Blume
2665    Date: 2001/09/13 11:20:00 EDT
2666    Tag: blume-20010913-minimal
2667    Description:
2668    
2669    1. Stefan Monnier's patch to fix a miscompilation problem that
2670       was brought to light by John Reppy's work on Moby.
2671    
2672    2. Implemented a minimal "structure Compiler" that contains just
2673       "version" and "architecture".  The minimal version will be
2674       available when the full version is not.  This is for backward-
2675       compatibility with code that wants to test Compiler.version.
2676    
2677    ----------------------------------------------------------------------
2678    Name: Matthias Blume
2679    Date: 2001/08/28 14:03:00 EDT
2680    Tag: blume-20010828-ml-lex
2681    Description:
2682    
2683    Fix for bug 1581, received from Neophytos Michael.
2684    
2685    ----------------------------------------------------------------------
2686    Name: Matthias Blume
2687    Date: 2001/08/27 11:20:00 EDT
2688    Tag: blume-20010827-readme11035
2689    Description:
2690    
2691    Fleshed out the README file for 110.35.
2692    
2693    ----------------------------------------------------------------------
2694    Name: Matthias Blume
2695    Date: 2001/08/24 17:10:00 EDT
2696    Tag: Release_110_35
2697    Description:
2698    
2699    New version number (110.35).  New bootfiles.
2700    
2701    ----------------------------------------------------------------------
2702    Name: Lal George
2703    Date: 2001/08/24 13:47:18 EDT 2001
2704    Tag: george-20010824-MLRISC-graphs
2705    Description:
2706    
2707     removed clusters from MLRISC completely and replaced with graphs.
2708    
2709    ----------------------------------------------------------------------
2710    Name: Matthias Blume
2711    Date: 2001/08/23 17:50:00 EDT
2712    Tag: blume-20010823-toplevel
2713    Description:
2714    
2715    - some reorganization of the code that implements various kinds of
2716      environments in the compiler (static, dynamic, symbolic, combined)
2717    - re-implemented the EnvRef module so that evalStream works properly
2718      (if the stream contains references to "use", "CM.make", etc.)
2719    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
2720    
2721    ----------------------------------------------------------------------
2722  Name: Matthias Blume  Name: Matthias Blume
2723  Date: 2001/08/20 15:50 EDT  Date: 2001/08/20 15:50 EDT
2724  Tag: blume20010820-slipup  Tag: blume20010820-slipup
# Line 2895  Line 5601 
5601       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
5602       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
5603       Please, don't be too harsh on me for messing with this code a bit more       Please, don't be too harsh on me for messing with this code a bit more
5604       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
5605       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
5606       Dave's hands. :)       Dave's hands. :)
5607    

Legend:
Removed from v.904  
changed lines
  Added in v.1369

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