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

Diff of /sml/trunk/NOTES/HISTORY

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

revision 594, Tue Apr 4 23:41:47 2000 UTC revision 1896, Fri Feb 24 22:25:49 2006 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 (http://www.tti-c.org/blume/)
17    Date: 2006/02/24 16:30:00 CST
18    Tag: blume-20060224-ml-flex
19    Description:
20    
21    Added ml-flex sources.  Partially integrated, but should not be
22    turned on yet!  (Read: leave it commented-out in config/targets!)
23    
24    ----------------------------------------------------------------------
25    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
26    Date: 2006/02/23
27    Tag: jhr-20060223-x86-64
28    Description:
29    Changes to support building on x86-64 systems (using the 32-bit mode).
30    Also cleaned up signal handling on Linux.  Support for pre-2.2 Linux
31    kernels dropped.
32    
33    ----------------------------------------------------------------------
34    Name: Allen Leung (leunga (at) reservoir (dot) com)
35    Date: 2006/02/22 15:07:00 EST
36    Tag: leunga-20060222-mdl-gen
37    Description:
38    
39      CM has changed.  Updated the script for rebuilding the MLRISC generated
40    files.
41    
42    ----------------------------------------------------------------------
43    Name: Matthias Blume (http://www.tti-c.org/blume/)
44    Date: 2006/02/14 17:30:00 CST
45    Tag: blume-20060214-intel-mac
46    Description:
47    
48    Hooked code for Darwin-specific Intel ABI into main compiler.
49    (This is a temporary solution which relies on the fact that the
50    compiler itself does not use NLFFI.  Eventually we need to divorce
51    intel mac from generic x86 unix code and make separate sets of binaries.)
52    
53    ----------------------------------------------------------------------
54    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
55    Date: 2006/02/13
56    Tag: jhr-20060213-intel-mac
57    Description:
58    Changed MLRISC x86 CCalls for partial support of MacOS X ABI.
59    
60    ----------------------------------------------------------------------
61    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
62    Date: 2006/02/06
63    Tag: jhr-20060206-intel-mac
64    Description:
65    Changes to support MacOS X on Intel hardware.  The C-calls support in
66    MLRISC must also be updated to support the MacOS X ABI.
67    
68    ----------------------------------------------------------------------
69    Name: Matthias Blume (http://www.tti-c.org/blume/)
70    Date: 2005/12/16 00:15:00 CST
71    Tag: blume-20051216-cm
72    Description:
73    
74    Improved error reporting and handling in CM.
75    
76    ----------------------------------------------------------------------
77    Name: Matthias Blume (http://www.tti-c.org/blume/)
78    Date: 2005/11/21 14:00:00 CST
79    Tag: blume-20051121-html-lib
80    Description:
81    
82    Enabling $/html-lib.cm in config/preloads did not work.  This is fixed
83    now.  (Since the anchor mapping for html-lib.cm is not yet in effect
84    at the time when config/preloads is processed, the library has to
85    be referred to by another name.  In 110.57 this would be
86    $SMLNJ-LIB/HTML/html-lib.cm.  I arranged for $smlnj/smlnj-lib/html-lib.cm
87    to be valid as well.)
88    
89    Thanks to Todd Wilson (Fresno) for alerting me to this issue.
90    
91    ----------------------------------------------------------------------
92    Name: Matthias Blume (http://www.tti-c.org/blume/)
93    Date: 2005/11/19 13:45:00 CST
94    Tag: Release_110_57
95    Description:
96    
97    Moved release tag for 110.57.
98    
99    ----------------------------------------------------------------------
100    Name: Matthias Blume (http://www.tti-c.org/blume/)
101    Date: 2005/11/19 23:35:00 CST
102    Tag: blume-20051119-fish
103    Description:
104    
105    Fixed a problem in config/install.sh where it tries to "fish" the
106    name of the CM metadata directory from the wrong place (because
107    the physical location of basis.cm has changed).  Also, corrected the
108    path anchor for $/html-lib.cm.  (Thanks to M. Fluet for pointing out
109    these problems.)
110    
111    ----------------------------------------------------------------------
112    Name: Matthias Blume (http://www.tti-c.org/blume/)
113    Date: 2005/11/16 14:30:00 CST
114    Tag: blume-orig-110_57
115    Description:
116    
117    New working version (110.57).  NEW BOOTFILES!
118    
119    UPDATE: The release tag has been moved to include a fix for a brown-paper-
120            bag glitch (see above).
121    
122    ----------------------------------------------------------------------
123    Name: Matthias Blume (http://www.tti-c.org/blume/)
124    Date: 2005/11/16 10:25:00 CST
125    Tag: blume-22051116-btrace
126    Description:
127    
128    Fixed problem with bogus exception message when using back-trace
129    facility.
130    
131    ----------------------------------------------------------------------
132    Name: Matthias Blume (http://www.tti-c.org/blume/)
133    Date: 2005/11/15 22:35:00 CST
134    Tag: blume-22051115-array2copy
135    Description:
136    
137    Added simple implementation of Array2.copy.  (Warning: mostly untested.)
138    
139    ----------------------------------------------------------------------
140    Name: Matthias Blume (http://www.tti-c.org/blume/)
141    Date: 2005/11/15 21:35:00 CST
142    Tag: blume-22051115-versiontool
143    Description:
144    
145    Reversed change to src/system/smlnj/internals/versiontool.cm.  This
146    file gets loaded as a tool -- by the equivalent of CM.make during the
147    run of CMB.make.  Thus, CMB's path configuration is meaningless for
148    it.  Instead, it has the status of "user code", so it should use
149    $/basis.cm to refer to the Basis library.  (At least that's true for
150    the purpose of bootstrapping the previous change.  In the future it
151    might make sense to have versiontool.cm refer to
152    $smlnj/basis/basis.cm, i.e., the version of the Basis that the
153    compiler itself uses.)
154    
155    Also patched src/system/testml to have it activate those extra anchor
156    bindings in config/extrapathconfig.
157    
158    ----------------------------------------------------------------------
159    Name: Matthias Blume (http://www.tti-c.org/blume/)
160    Date: 2005/11/15 16:35:00 CST
161    Tag: blume-22051115-libraries
162    Description:
163    
164    This change affects the way the following libraries are tied into
165    the system:
166    
167       $/basis.cm
168       $/smlnj-lib.cm
169       $/pp-lib.cm
170       $/controls-lib.cm
171       $/html-lib.cm
172       $/ml-yacc-lib.cm
173    
174    These libraries are now internally (as seen from the source code
175    of the implementation itself) known by the following names:
176    
177       $smlnj/basis/basis.cm
178       $smlnj/smlnj-lib/smlnj-lib.cm
179       $smlnj/smlnj-lib/pp-lib.cm
180       $smlnj/smlnj-lib/controls-lib.cm
181       $smlnj/smlnj-lib/html-lib.cm
182       $smlnj/ml-yacc/ml-yacc-lib.cm
183    
184    This makes it possible to work with code that requires different
185    versions of these libraries, and which refers to these libraries using
186    their "default" names (i.e., the first set of names above).  In other
187    words, one can un-define or re-define those default names without
188    compromising the proper functioning of the compiler itself.
189    
190    A similar procedure had already been performed for several of the
191    MLRISC libraries that are linked into the compiler.  I did some
192    cleanup on this code.
193    
194    A new file in the config directory (named extrapathconfig) is
195    responsible for setting up path anchors that the compiler itself does
196    not need, but that are typically required by user code.
197    
198    ----------------------------------------------------------------------
199    Name: Matthias Blume
200    Date: 2005/11/07 17:05:00 CST
201    Tag: blume-20051107-slice
202    Description:
203    
204    Fixed erroneous out-of-bounds test in the "update" function of
205    various *ArraySlice modules.  (Thanks to Vesa A. Norrman for pointing
206    out the problem.)
207    
208    Pushed some Basis changes through ML-Lex, CML, and eXene.
209    
210    ----------------------------------------------------------------------
211    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
212    Date: 2005/11/07
213    Description:
214    Fixed a Basis incompatibility: The depreciated function Substring.all
215    was removed (use Substring.full instead).
216    
217    ----------------------------------------------------------------------
218    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
219    Date: 2005/11/05
220    Description:
221    Tweaked interval set API in SML/NJ library; see the CHANGES file for details.
222    
223    ----------------------------------------------------------------------
224    Name: Matthias Blume (http://www.tti-c.org/blume/)
225    Date: 2005/11/02 16:25:00 CST
226    Tag: blume-20051102-hex
227    Description:
228    
229    * Runtime system bootstrap code now accepts hex digits in BOOTLIST
230      in either upper case or lower case format.
231    * Pushed changes to names of Pack<N>{Big,Little} structures through
232      CML and eXene.
233    
234    ----------------------------------------------------------------------
235    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
236    Date: 2005/11/02
237    Description:
238    Fixed a Basis incompatibility: Pack<N>{Big,Little} structures should
239    be called PackWord<N>{Big,Little}.
240    
241    ----------------------------------------------------------------------
242    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
243    Date: 2005/10/28
244    Description:
245    Fixed a minor Basis incompatibility: hex digits should be upper case.
246    
247    ----------------------------------------------------------------------
248    Name: Matthias Blume (blume (at) tti - c (dot) org)
249    Date: 2005/10/25 16:00:00 CDT
250    Tag: Release_110_56
251    Description:
252    
253    New working version (110.56).  NEW BOOTFILES!
254    
255    ----------------------------------------------------------------------
256    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
257    Date: 2005/10/25
258    Description:
259    Added interval sets to utility library (signatures INTERVAL_DOMAIN
260    and INTERVAL_SET, and functor IntervalSetFn).
261    
262    ----------------------------------------------------------------------
263    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
264    Date: 2005/10/14
265    Description:
266    Add Zhong Shao's fix for datatype equality functions.
267    
268    ----------------------------------------------------------------------
269    Name: Allen Leung (leunga (at) reservoir (dot) com)
270    Date: 2005/10/14 12:30:00 EST
271    Tag: leunga-20051014-x86-spill
272    Description:
273    
274    Bug fix a bug found by Carl Hauser.
275    There was a typo in the reload code for FCMP in x86SpillInstr.sml.
276    
277    ----------------------------------------------------------------------
278    Name: Allen Leung (leunga (at) reservoir (dot) com)
279    Date: 2005/10/14 11:15:00 EST
280    Tag: leunga-20051014-x86-asm
281    Description:
282    
283    Removed some debugging code in file x86Asm.sml.
284    The function emit_operand was printing out debugging output.
285    
286    ----------------------------------------------------------------------
287    Name: John Reppy
288    Date: 2005/07/27
289    Tag:
290    Description:
291    
292    Fixed ml-lex to recognize "\r" as representing carriage return.
293    
294    ----------------------------------------------------------------------
295    Name: John Reppy
296    Date: 2005/07/27
297    Tag:
298    Description:
299    
300    Fixed ml-yacc to work on files with non-native end-of-line
301    encodings (e.g., Windows text file on a Unix system).
302    
303    ----------------------------------------------------------------------
304    Name: John Reppy
305    Date: 2005/07/20
306    Tag:
307    Description:
308    
309    Added changes from Dominic Evans (oldmanuk (at) gmail (dot) com)
310    to support HPUX 11.
311    
312    ----------------------------------------------------------------------
313    Name: John Reppy
314    Date: 2005/07/06
315    Tag:
316    Description:
317    
318    Changes to the SML/NJ library.  See smlnj-lib/CHANGES for details.
319    
320    ----------------------------------------------------------------------
321    Name: Matthias Blume (blume (at) tti - c (dot) org)
322    Date: 2005/07/06 00:45:00 CDT
323    Tag: blume-20050706-slice-copy
324    Description:
325    
326    Fixed reversed logic for deciding whether to "copy up" or "copy down"
327    in *-array-slice.sml.
328    
329    ----------------------------------------------------------------------
330    Name: Allen Leung (leunga (at) reservoir (dot) com)
331    Date: 2005/05/31 17:00:00 EST
332    Tag: leunga-20050531-cygwin-fault-2
333    Description:
334    
335    A typo in the cygwin code fixed.
336    
337    ----------------------------------------------------------------------
338    Name: Allen Leung (leunga (at) reservoir (dot) com)
339    Date: 2005/05/31 16:47:00 EST
340    Tag: leunga-20050531-cygwin-fault
341    Description:
342    
343    Updated Cygwin's fault/signal handling to match the Windows version.
344    Updated the export list.
345    
346    ----------------------------------------------------------------------
347    Name: Matthias Blume (blume (at) tti - c (dot) org)
348    Date: 2005/05/18 13:35:00 CDT
349    Tag: Release_110_54
350    Description:
351    
352    New working version (110.54).  NEW BOOTFILES!
353    
354    ----------------------------------------------------------------------
355    Name: Matthias Blume (blume (at) tti - c (dot) org)
356    Date: 2005/05/18 11:58:00 CDT
357    Tag: blume-20050518-installer
358    Description:
359    
360    Added support scripts for Mac OS X PackageMaker and modified
361    config/install.sh so that it supports re-dumping a heap image
362    after customization.
363    
364    ----------------------------------------------------------------------
365    Name: Matthias Blume (blume (at) tti - c (dot) org)
366    Date: 2005/05/18 10:55:00 CDT
367    Tag: blume-20050518-realdiv-noovld
368    Description:
369    
370    Un-overloaded / to work around bug in overloading resolution code.
371    
372    ----------------------------------------------------------------------
373    Name: Matthias Blume (blume (at) tti - c (dot) org)
374    Date: 2005/05/16 23:50:00 CDT
375    Tag: blume-20050516-redump-heap
376    Description:
377    
378    Added mechanism for re-creating a heap file for the interactive system
379    after configuration variables have been changed.
380    
381       CM.redump_heap : string -> unit
382    
383    This is much like SMLofNJ.exportML, but starting from the resulting
384    heap does not return to the caller of CM.redump_heap but
385    restarts the interactive system from scratch.  The original call of
386    CM.redump_heap does not return but ends the interactive session.
387    Thus, CM.redump_heap is a lot like SMLofNJ.exportFn.
388    
389    Internally, redump_heap winds the dynamic execution context back to
390    the point where the original heap image was created and re-executes
391    the heap image generation code in the boot code.
392    
393    ----------------------------------------------------------------------
394    Name: Matthias Blume (blume (at) tti - c (dot) org)
395    Date: 2005/05/09 21:55:00 CDT
396    Tag: blume-20050509-word64
397    Description:
398    
399    Added a hack to the existing hack known as Word64 to make fromString
400    behave correctly.  I am still not sure whether Word64.scan will work
401    as specified with respect to the interaction of radix and prefix.
402    
403    ----------------------------------------------------------------------
404    Name: Allen Leung (leunga (at) reservoir (dot) com)
405    Date: 2005/05/04 11:50:00 EST
406    Tag: leunga-20050504-checkgc
407    Description:
408    
409    Added a gc protocol checking phase.  This phase is enabled with
410    the flag "check-gc".  "debug-check-gc" turns on the verbose mode.
411    
412    ----------------------------------------------------------------------
413    Name: Matthias Blume (blume (at) tti - c (dot) org)
414    Date: 2005/05/04 10:45:00 CDT
415    Tag: blume-20050504-intinf
416    Description:
417    
418    Fixed a bug in the implementation of div and mod for IntInf.
419    Thanks to Neophytos Michael for reporting the problem.
420    
421    ----------------------------------------------------------------------
422    Name: Matthias Blume (blume (at) tti - c (dot) org)
423    Date: 2005/05/04 10:35:00 CDT
424    Tag: blume-20050504-join
425    Description:
426    
427    Added a "join" combinator to the ParserComb module in smlnj-lib.cm.
428    
429    ----------------------------------------------------------------------
430    Name: Matthias Blume (blume (at) tti - c (dot) org)
431    Date: 2005/02/28 23:40:00 CST
432    Tag: blume-20050228-mVar
433    Description:
434    
435    Fixed serious bug (brown paper bag variety) in new implementation of
436    structure Atom in CML.  (I had accidentally used a mailbox instead of
437    an mvar, leaving the door open for races.)
438    
439    ----------------------------------------------------------------------
440    Name: Matthias Blume (blume (at) tti - c (dot) org)
441    Date: 2005/02/25 15:00:00 CST
442    Tag: Release_110_53
443    Description:
444    
445    New working version (110.53).  NEW BOOTFILES!
446    
447    ----------------------------------------------------------------------
448    Name: Matthias Blume (blume (at) tti - c (dot) org)
449    Date: 2005/02/25 14:50:00 CST
450    Tag: blume-20050225-susp
451    Description:
452    
453    Brought back SMLofNJ.Susp.  The underlying suspension type is the one
454    implemented in Core -- which means that it is the same as the one used
455    by the lazy extension.
456    
457    ----------------------------------------------------------------------
458    Name: Matthias Blume (blume (at) tti - c (dot) org)
459    Date: 2005/02/24 16:50:00 CST
460    Tag: blume-20050224-cml-atom
461    Description:
462    
463    Simpler and at the same time more general implementation of structure
464    Atom in CML.
465    
466    ----------------------------------------------------------------------
467    Name: Matthias Blume (blume (at) tti - c (dot) org)
468    Date: 2005/02/15 17:35:00 CST
469    Tag: blume-20050215-tools
470    Description:
471    
472    Created new "tools" directory under "src" and moved "TraceDebugProf"
473    there.
474    
475    ----------------------------------------------------------------------
476    Name: Matthias Blume (blume (at) tti - c (dot) org)
477    Date: 2005/02/10 17:55:00 CST
478    Tag: blume-20050210-longlong
479    Description:
480    
481    Implemented "long long" arguments and results for NLFFI.  (Only the
482    PPC/MacOS implementation is complete, the other backends still need to
483    be updated.)
484    
485    ----------------------------------------------------------------------
486    Name: Matthias Blume (blume (at) tti - c (dot) org)
487    Date: 2005/01/24 17:40:00 CST
488    Tag: blume-20050124-mlyacc
489    Description:
490    
491    Minor cleanup in ML-Yacc rule printing mechanism.  This should fix a
492    problem with certain "as" patterns which previously got rendered
493    using incorrect syntax.
494    
495    ----------------------------------------------------------------------
496    Name: Matthias Blume (blume (at) tti - c (dot) org)
497    Date: 2005/01/18 12:00:00 CST
498    Tag: blume-20050118-profile
499    Description:
500    
501    Made time profiling code (interrupt handler) in runtime system aware
502    of new array representation.
503    
504    ----------------------------------------------------------------------
505    Name: Matthias Blume (blume (at) tti - c (dot) org)
506    Date: 2005/01/14 18:00:00 CST
507    Tag: blume-20050114-heap2exec
508    Description:
509    
510    Implemented new (but still experimental) heap2exec facility.  This is
511    tested under Mac OS X and should work under Linux (will test shortly).
512    It will probably also work on the Sparc (will test some time later).
513    
514      - removed old "HACKED_STANDALONE" hack from runtime
515    
516    To be able to test this, uncomment the request for "heap2asm" in
517    config/targets prior to installation.  (Notice that this is different
518    from "heap2exec" mentioned below.  Not a typo.)
519    
520    To perform an actual test, run the command
521    
522       $ bin/heap2exec heapfile execfile
523    
524    (You can put heap2exec on your shell's path.)
525    
526    For example, run
527    
528      $ bin/heap2exec bin/.heap/ml-yacc.ppc-darwin mly
529    
530    This will create a standalone executable called "mly" which you can
531    then invoke directly as a command.
532    
533    ----------------------------------------------------------------------
534    Name: Matthias Blume (blume (at) tti - c (dot) org)
535    Date: 2005/01/07 11:44:00 CST
536    Tag: blume-20050107-mlstring
537    Description:
538    
539    fixed off-by-one error in ML_STRING macro (globals.c)
540    
541    ----------------------------------------------------------------------
542    Name: Matthias Blume (blume (at) tti - c (dot) org)
543    Date: 2004/12/23 18:00:00 CST
544    Tag: blume-20041223-santa
545    Description:
546    
547    Made ml-build script "smarter" (but only very little).
548    
549    ----------------------------------------------------------------------
550    Name: Matthias Blume (blume (at) tti - c (dot) org)
551    Date: 2004/12/21 15:05:00 CST
552    Tag: blume-20041221-longlong
553    Description:
554    
555    * Implemented access to signed and unsigned long long data in NLFFI.
556    (The parameter-passing part of the picture has not complete. But
557    data structure access seems to work.)
558    
559    * Fixed CM's incorrect assumption that the PPC is little-endian.
560      (On the Mac, it is big-endian.  And that's currently our only
561      PPC platform.)
562    
563    ----------------------------------------------------------------------
564    Name: Matthias Blume (blume (at) tti - c (dot) org)
565    Date: 2004/12/21 12:50:00 CST
566    Tag: blume-20041221-memory
567    Description:
568    
569    Some cleanup in the $c/memory.cm library: separated some concerns by
570    moving allocation code and memory access code each into their own
571    files.
572    
573    ----------------------------------------------------------------------
574    Name: Allen Leung (leunga (at) reservoir (dot) com)
575    Date: 2004/12/17 16:12:00 EST
576    Tag: leunga-20041217-cygwin-smlnj-home
577    Description:
578    
579        The Unix I/O library of SML/NJ on cygwin does not understand
580    Windows style pathname, so problems arise when SMLNJ_HOME is set
581    to a Windows style pathname.  _run-sml now converts SMLNJ_HOME
582    to a POSIX pathname on cygwin.
583    
584    ----------------------------------------------------------------------
585    Name: Matthias Blume (blume (at) tti - c (dot) org)
586    Date: 2004/12/16 13:35:00 CST
587    Tag: Release_110_52
588    Description:
589    
590    Last-minute changes incorporated into 110.52.  Release tag moved.
591    
592    The changes:
593       - HashString.hashString' -> HashString.hashSubstring
594       - bug fix in UnivariateStats
595    
596    ----------------------------------------------------------------------
597    Name: Matthias Blume (blume (at) tti - c (dot) org)
598    Date: 2004/12/15 23:40:00 CST
599    Tag: blume-20041215-hashSubstring
600    Description:
601    
602    - HashString.hashString' -> HashString.hashSubstring
603    - corresponding changes in atom.sml
604    - "de-compressed" (aka. un-obfuscated) code for UnivariateStats and
605      added some comments
606    
607    ----------------------------------------------------------------------
608    Name: Matthias Blume (blume (at) tti - c (dot) org)
609    Date: 2004/12/15 15:30:00 CST
610    Tag: (Release_110_52)
611    Description:
612    
613    New working version (110.52).  NEW BOOTFILES!
614    
615    ----------------------------------------------------------------------
616    Name: Matthias Blume (blume (at) tti - c (dot) org)
617    Date: 2004/12/15 12:45:00 CST
618    Tag: blume-20041215-spaces
619    Description:
620    
621    More on the space problem (this time for Win32).
622    
623    ----------------------------------------------------------------------
624    Name: Matthias Blume (blume (at) tti - c (dot) org)
625    Date: 2004/12/14 17:30:00 CST
626    Tag: blume-20041214-spaces
627    Description:
628    
629    Hacked some of the scripts (in particular: the installer) to cope with
630    spaces in filenames a bit better.  But beware: the current "solution"
631    is likely still full of bugs and inherently incomplete.  (We need to
632    do away with those shell scripts for a comprehensive solution.)
633    
634    ----------------------------------------------------------------------
635    Name: Matthias Blume (blume (at) tti - c (dot) org)
636    Date: 2004/12/13 14:45:00 CST
637    Tag: blume-20041213-ml-makedepend
638    Description:
639    
640    Fixed bug in code for ml-makedepend.
641    
642    ----------------------------------------------------------------------
643    Name: Matthias Blume (blume (at) tti - c (dot) org)
644    Date: 2004/12/09 16:30:00 CST
645    Tag: blume-20041209-statistics
646    Description:
647    
648    Added two simple but potentially useful statistics modules to SML/NJ Library.
649    (See CHANGES file there.)
650    
651    ----------------------------------------------------------------------
652    Name: Matthias Blume (blume (at) tti - c (dot) org)
653    Date: 2004/12/01 16:50:00 CST
654    Tag: blume-20041201-atom
655    Description:
656    
657    smlnj-lib:
658    
659      Added function HashString.hashString' for substrings.
660      Hand-inlined CharVector.foldl into HashString (for speed).
661      Modified implementation of structure Atom to avoid extracting
662      strings from substrings unless necessary.
663      (Also see CHANGES file for smlnj-lib.)
664    
665    ----------------------------------------------------------------------
666    Name: Matthias Blume (blume (at) tti - c (dot) org)
667    Date: 2004/11/24 22:15:00 CST
668    Tag: blume-20041124-cml
669    Description:
670    
671    Made sure CML compiles when Position = Int64.
672    
673    ----------------------------------------------------------------------
674    Name: Matthias Blume (blume (at) tti - c (dot) org)
675    Date: 2004/11/24 14:30:00 CST
676    Tag: blume-20041124-position
677    Description:
678    
679    The compiler can now be compiled in a mode that makes structure Position
680    equal to Int64.  The default, however, is unchanged (Position = Int31)
681    for the time being.
682    
683    To enable 64-bit positions, use the following procedure:
684    
685    1. Start sml
686    2. Autoload $smlnj/cmb.cm (if not already autoloaded)
687    3. Type
688          #set (CMB.symval "USE_64_BIT_POSITIONS") (SOME 1);
689    4. Run CMB.make() as usual.
690    
691    This is barely tested.  The only test so far was a little SML program
692    counting the number of characters in an 8-gigabyte file by
693    reading it character-by-character.  That test was successful.
694    
695    In support of 64-bit positions, a number of new functions have been
696    added to the runtime system.
697    
698    ----------------------------------------------------------------------
699    Name: Matthias Blume (blume (at) tti - c (dot) org)
700    Date: 2004/11/23 14:45:00 CST
701    Tag: blume-20041123-useFile
702    Description:
703    
704    Fixed a problem with unhelpful error messages related to problems with
705    .cm- or .sml files that appear as part of the sml command line.
706    
707    ----------------------------------------------------------------------
708    Name: Matthias Blume (blume (at) tti - c (dot) org)
709    Date: 2004/11/18 15:40:00 CST
710    Tag: Release_110_51
711    Description:
712    
713    New working version (110.51).  NEW BOOTFILES!
714    
715    ----------------------------------------------------------------------
716    Name: Matthias Blume (blume (at) tti - c (dot) org)
717    Date: 2004/11/18 15:35:00 CST
718    Tag: <none>
719    Description:
720    
721    Enabled dlopen and friends for FreeBSD (as recommended by Johannes 5
722    Joemann).
723    
724    ----------------------------------------------------------------------
725    Name: Allen Leung (leunga (at) reservoir (dot) com)
726    Date: 2004/11/17 16:05:21 EST 2004
727    Tag: leunga-20041117-mlrisc-live-kill
728    Description:
729    
730       Added support for MLTree constructs LIVE and KILL
731    to all the architectures.
732    
733    ----------------------------------------------------------------------
734    Name: Matthias Blume (blume (at) tti - c (dot) org)
735    Date: 2004/11/13 00:20:00 CST
736    Tag: blume-20041113-versiontool
737    Description:
738    
739    - Stripped down the versiontool: It now only handles the version number.
740      The date string is generated at bootstrap time (during makeml).
741    
742    - In a previous commit, fixed a minor issue with how polyequal is being
743      translated.  In particular, the code now "looks through" abstractions.
744      This results in slightly fewer polyEqual warnings and hopefully slightly
745      more efficient code.  Important examples for where this matters are
746      the new int64 and word64 types.
747    
748    ----------------------------------------------------------------------
749    Name: Matthias Blume (blume (at) tti - c (dot) org)
750    Date: 2004/11/12 00:30:00 CST
751    Tag: blume-20041112-int64
752    Description:
753    
754    Structure Int64 fully hooked in.  (The implementation is not very
755    efficient, though.)
756    
757    ----------------------------------------------------------------------
758    Name: Matthias Blume (blume (at) tti - c (dot) org)
759    Date: 2004/11/11 17:30:00 CST
760    Tag: blume-20041111-more64
761    Description:
762    
763    All the pieces of Word64 are now there, with the exception of the
764    conversions from and to LargeWord. (Eventually these need to be identities,
765    but for the time being they don't even make sense because LargeWord is
766    32-bit wide.)
767    
768    Also started to add similar support for Int64, but major pieces of that
769    are still missing.
770    
771    ----------------------------------------------------------------------
772    Name: Matthias Blume (blume (at) tti - c (dot) org)
773    Date: 2004/11/11 00:15:00 CST
774    Tag: blume-20041111-word64
775    Description:
776    
777    Structure Word64 is now (almost) complete, word literals and patterns
778    seem to work.  There are a few odd pieces missing.  In particular,
779    I didn't do the {from,to}LargeWord parts because LargeWord is still Word32
780    at the moment.
781    
782    Making Word64 official would mean that LargeWord becomes Word64.  But
783    this requires extreme care because most word-word conversions have to
784    go through LargeWord, so making a mistake means loss of efficiency or
785    worse.  Eventually there will be a solution similar to (but actually
786    simpler than) what I did with IntInf.
787    
788    ----------------------------------------------------------------------
789    Name: Matthias Blume (blume (at) tti - c (dot) org)
790    Date: 2004/11/10 18:12:00 CST
791    Tag: blume-20041110-64bit
792    Description:
793    
794    More 64-bit hacking (but still not even half-way there yet).
795    Also, some assorted improvements to the handling of 8-bit words.
796    
797    ----------------------------------------------------------------------
798    Name: Matthias Blume (blume (at) tti - c (dot) org)
799    Date: 2004/11/09 17:50:00 CST
800    Tag: <none>
801    Description:
802    
803    Started adding some infrastructure for supporting 64-bit int- and
804    word-types.  (Still in its very early stages.)
805    
806    ----------------------------------------------------------------------
807    Name: Matthias Blume (blume (at) tti - c (dot) org)
808    Date: 2004/10/28 10:45:00 CDT
809    Tag: Release_110_50
810    Description:
811    
812    New working version (110.50).  NEW BOOTFILES!
813    
814                 =====================
815    
816    Also:
817    
818      - Changend config/srcarchiveurl from a file just
819        containing the URL string into a file containing
820        shell script code.  The code has access to the $VERSION variable.
821      - Made corresponding changes to config/install.sh and config/unpack.
822      - Default contents of config/srcarchiveurl uses $VERSION and
823        normally does not have to be edited to reflect a version change.
824    
825      (As a result, a version change can be done by just editing
826       config/version, the rest is now automatic.)
827    
828    ----------------------------------------------------------------------
829    Name: Matthias Blume (blume (at) tti - c (dot) org)
830    Date: 2004/10/27 17:50:00 CDT
831    Tag: blume-20041027-btrace-msg
832    Description:
833    
834    BackTrace.monitor now also reports the source of the exception that
835    triggered the trace.
836    
837    ----------------------------------------------------------------------
838    Name: Matthias Blume (blume (at) tti - c (dot) org)
839    Date: 2004/10/27 17:20:00 CDT
840    Tag: blume-20041027-x86-c-calls
841    Description:
842    
843    This is the HISTORY entry for two earlier commits, both concerning
844    the x86 c-calls code in MLRISC:
845    
846      - added a missing LOAD in the code that deals with struct arguments
847      - made sure the caller does not add the wrong number of bytes to the
848        stack pointer after a call of a function returning a struct
849        (the callee already pops the implicit argument which points to
850         the space reserved for the result)
851    
852    ----------------------------------------------------------------------
853    Name: Allen Leung (leunga (at) reservoir (dot) com)
854    Date: 2004/10/24 14:00:00 EST
855    Tag: leunga-20041024-x86-gas-fucomip
856    Description:
857    
858       John discovered a bug in the syntax of fucomip.
859       The opcodes FU?COMIP? have been changed to
860    
861           fu?comip? %st(i), %st
862    
863    ----------------------------------------------------------------------
864    Name: Matthias Blume (blume (at) tti - c (dot) org)
865    Date: 2004/10/20 15:06:00 CDT
866    Tag: blume-20041020-standalone-backtrace
867    Description:
868    
869    Added a mechanism for getting back-trace information from standalone
870    programs.  Here is how it works:
871    
872       1. The part of the program from which you want to get backtrace
873          information (usually the whole program) should be wrapped with
874          BackTrace.monitor.  This is a (unit->'a)->'a function, and your
875          main program could be modified from something like
876    
877             fun main (pgm, args) = ...
878    
879         to
880    
881            fun main (pgm, args) = BackTrace.monitor (fn () => ...)
882    
883       2. To be able to access BackTrace.monitor, you have to add
884          library $smlnj-tdp/plugins.cm to the .cm file that contains your
885          main function.
886    
887       3. Remove all compiled code (i.e., all the .cm/ subdirectories that
888          CM might have created in the past for your project).
889    
890       4. Build the system using this command line:
891    
892             ml-build -Ctdp.instrument=true \$smlnj-tdp/back-trace.cm \
893                      myprog.cm MyProg.main myprog
894    
895          instead of the usual
896    
897             ml-build myprog.cm MyProg.main myprog
898    
899    I changed a library name:
900    
901       $/trace-debug-profile.cm --> $smlnj-tdp/plugins.cm
902    
903    New libraries:
904    
905       $smlnj-tdp/back-trace.cm
906          -- when loaded causes the back-trace plugin to be installed
907       $smlnj-tdp/coverage.cm
908          -- when loaded causes the coverage plugin to be installed
909    
910    ----------------------------------------------------------------------
911    Name: Matthias Blume (blume (at) tti - c (dot) org)
912    Date: 2004/10/18 16:45:00 CDT
913    Tag: blume-20041018-groupowner
914    Description:
915    
916    Added an "obsolete" warning for the "group owner" syntax to CM's parser.
917    
918    Eliminated group owner specs from .cm files throughout the source tree.
919    
920    ----------------------------------------------------------------------
921    Name: Matthias Blume (blume (at) tti - c (dot) org)
922    Date: 2004/10/15 15:45:00 CDT
923    Tag: blume-20041015-coverage
924    Description:
925    
926    * Test coverage tool added!
927    * Further reorganization of tracing-, debugging-, and profiling support:
928    
929        - moved original BTImp -- now called BackTrace -- into a separate
930          library called $/trace-debug-profile.cm
931        - eliminated all mentions of BTrace from SMLofNJ.Internals
932        - only the instrumentation mechanism is now left in the compiler proper
933        - BackTrace module is a plugin which is NOT plugged in by default
934        - Coverage module is another such plugin
935    
936    To get the benefits of any of these plugin modules, the code in
937    question must be compiled with tdp instrumentation turned on.  This
938    can be done by setting SMLofNJ.Internals.TDP.mode to true.
939    (The ref cell is also controlled via the -Ctdp.instrument=... switch.)
940    
941    Plugins are selected at link time.  (Pre-compiled instrumented code
942    can be re-loaded with different plugins in effect.)  When an
943    instrumented module is linked, whatever plugins are at that time
944    enabled will come into effect for that module.
945    
946    To enable the back-trace plugin, load library $/trace-debug-profile.cm
947    and invoke BackTrace.install() (e.g., from the interactive prompt).
948    To enable the coverage plugin, load the same library and invoke
949    Coverage.install().
950    
951    Back-traces are generated automatically on uncaught exceptions and
952    when the code in question explicitly invokes BackTrace.trigger().
953    
954    Coverage (and execution frequency-) information must be queried
955    explicitly by calling Coverage.not_covered and Coverage.hot_spots.
956    
957    ----------------------------------------------------------------------
958    Name: Matthias Blume (blume (at) tti - c (dot) org)
959    Date: 2004/10/14 17:40:00 CDT
960    Tag: blume-20041014-tdp-core
961    Description:
962    
963    Snapshot of a significant overhaul of how the trace/debug/profile support
964    is hooked into the system (specifically: Core and SMLofNJ.Internals).
965    
966    ----------------------------------------------------------------------
967    Name: Matthias Blume (blume (at) tti - c (dot) org)
968    Date: 2004/10/13 16:34:00 CDT
969    Tag: blume-20041013-tdp
970    Description:
971    
972    Some rationalization of names:
973    
974       structure BTrace -> structure TDPInstrument
975       etc.
976    
977    This is is preparation of using the original back-trace
978    instrumentation for other purposes.  "TDP" stands for
979    Trace/Debug/Profile.
980    
981    The control flag controlling whether instrumentation is on or off is now
982    registered under a different name, so instead of running sml as
983    
984     sml -Cinstrument.btrace-mode=true
985    
986    one has to say
987    
988     sml -Ctdp.instrument=true
989    
990    ----------------------------------------------------------------------
991    Name: Matthias Blume (blume (at) tti - c (dot) org)
992    Date: 2004/10/11 16:37:00 CDT
993    Tag: blume-20041011-regions
994    Description:
995    
996    Made some minor modifications to elabcore.sml to have source regions
997    be propagated more tightly -- resulting in better (i.e., smaller)
998    regions being reported in error- and debug messages.
999    
1000    ----------------------------------------------------------------------
1001    Name: Matthias Blume (blume (at) tti - c (dot) org)
1002    Date: 2004/10/08 22:50:00 CDT
1003    Tag: blume-20041008-cmkw
1004    Description:
1005    
1006    Fixed handling of keywords in .cm files: After seeing "is" the lexer
1007    treats subsequent occurrences of "group", "library", "source", "is",
1008    "*", and "-" as ordinary identifiers rather than keywords.
1009    
1010    Most seriously, this fixes a problem with CM's "shell" tool.  The tool
1011    is supposed to accept a tool argument called "source", but this did
1012    not work because of the clash with the keyword.
1013    
1014    ----------------------------------------------------------------------
1015    Name: Matthias Blume (blume (at) tti - c (dot) org)
1016    Date: 2004/10/07 16:00:00 CDT
1017    Tag: blume-20041007-cleanup
1018    Description:
1019    
1020    Assorted cleanup work:
1021    
1022      - got rid of intstrmap in favor of using the library's
1023        hash table implementation
1024      - threw out most of the pathnames stuff, as it was not used anyway
1025      - simplified tokentable implementation
1026      - fixed some minor spelling errors
1027    
1028    ----------------------------------------------------------------------
1029    Name: Matthias Blume (blume (at) tti - c (dot) org)
1030    Date: 2004/10/06 15:15:15 CDT
1031    Tag: blume-20041006-handler
1032    Description:
1033    
1034    Cleaned up the absyn to reflect the invariant that HANDLE always
1035    carries a FNexp as part of the type definition.  This eliminates some
1036    superfluous sanity checks at runtime down the road.
1037    
1038    Some minor cleanup of the btrace code.
1039    
1040    ----------------------------------------------------------------------
1041    Name: Matthias Blume (blume (at) tti - c (dot) org)
1042    Date: 2004/10/01 10:20:30 CDT
1043    Tag: blume-20041001-slave
1044    Description:
1045    
1046    Added hack to make slave mode work in the presence of the version
1047    tool.  (Still, since the master does two passes over the code for
1048    CMB.make, the release number gets bumped twice when slaves are
1049    attached.  I don't know if this is worth fixing...)
1050    
1051    ----------------------------------------------------------------------
1052    Name: Matthias Blume (blume (at) tti - c (dot) org)
1053    Date: 2004/09/30 10:55:00 CDT
1054    Tag: blume-20040930-version
1055    Description:
1056    
1057    * Moved the "version" magic into its own little library under
1058      src/system/smlnj/internal.  This avoids expensive reconstruction of
1059      a stable src/compiler/core.cm.
1060    
1061    * At the same time, structure CompilerVersion is now known as
1062      structure SMLNJVersion.
1063    
1064    * Arranged for the version tool to NOT kick in when rebuilding the system
1065      (makeml -rebuild, fixpt).  Otherwise one would never reach a fixpoint.
1066      Also, loading the versiontool does not work when rebuilding the system
1067      because CM is not properly initialized at that time.
1068    
1069    ----------------------------------------------------------------------
1070    Name: Matthias Blume (blume (at) tti - c (dot) org)
1071    Date: 2004/09/29 14:00:00 CDT
1072    Tag: blume-20040929-autoversion
1073    Description:
1074    
1075    Implemented some CM magic to have
1076        file src/compiler/TopLevel/main/version.sml
1077    generated automagically.
1078    The version is taken from two files: config/version and config/release.
1079    The first is expected to contain a two-part version number such as 110.49.
1080    The second should contain a single number, but it may be missing.
1081    
1082    If the environment variable VERSIONTOOL_BUMP_RELEASE is defined at the
1083    time the version tool is loaded (which is the first time you say CMB.make),
1084    then the tool will increment the value stored in config/release every
1085    time CMB.make is invoked.
1086    
1087    The binfile format is now insensitive to anything beyond the first
1088    two components of a version number, so bumping the release does not render
1089    binfiles incompatible.  Auto-bumping can be used to keep track of versions
1090    during development without invalidating existing binfiles.
1091    
1092    In any case, every CMB.make updates the date information in version.sml.
1093    (This is the date that is printed in the banner.)
1094    
1095    ----------------------------------------------------------------------
1096    Name: Matthias Blume (blume (at) tti - c (dot) org)
1097    Date: 2004/09/28 10:53:00 CDT
1098    Tag: blume-20040928-controls
1099    Description:
1100    
1101    Some cleanup of the controls code.
1102    
1103    ----------------------------------------------------------------------
1104    Name: Matthias Blume (blume (at) tti - c (dot) org)
1105    Date: 2004/09/27 22:08:00 CDT
1106    Tag: blume-20040927-controls
1107    Description:
1108    
1109    Added two pieces of functionality to the Controls interface:
1110    
1111    1.   val save'restore: 'a control -> unit -> unit
1112    
1113       grabs the current value of the control in stage 1 and restores it
1114       in stage 2.
1115    
1116    2.   val set' : 'a control * 'a -> unit -> unit
1117    
1118       stores the given value into the control in stage 2 (i.e., delayed)
1119       but does all error checking in stage 1.
1120       (This is for string controls that need to do parse their argument --
1121        something that might fail.  In some cases, notably in CM, one
1122        already knows the intended argument but wants to delay the actual
1123        assignment until a time when error recovery would be more difficult.)
1124    
1125    Changed the handling of controls in tool arguments to classes "sml" and
1126    "lazysml":
1127       - use Controls.save'restore as a more robust way of restoring the
1128         old value (in particular: without having to re-parse the string)
1129       - use controls to handle the "overload" keyword in the init group
1130         (I believe this change actually fixes a long-standing obscure bug.)
1131    
1132    ----------------------------------------------------------------------
1133    Name: Matthias Blume (blume (at) tti - c (dot) org)
1134    Date: 2004/09/27 17:00:00 CDT
1135    Tag: blume-20040927-lazysml
1136    Description:
1137    
1138    Added a new tool class called "lazysml" to CM's tool chest.  The only
1139    difference to "sml" is that compilation is done with Control.lazysml
1140    set to true.  A source of class "lazysml" is automatically recognized
1141    by a file name suffix of ".lml".
1142    
1143    In addition to the above feature, the original class "sml" now also
1144    supports a tool argument "lazy" which has the same effect.  As a
1145    result, the following three lines are equivalent:
1146    
1147        foo.sml : lazysml
1148        foo.sml : sml (lazy)
1149        foo.sml (lazy)
1150    
1151    The setting goes into effect both during parsing and during
1152    compilation.  The original setting is restored right after parsing and
1153    after compilation, respectively.
1154    
1155    In addition to all the above, there is also a general mechanism to set
1156    ANY of the "controls" that are available at the command line via
1157    "-C..." on a per-sml-file basis.  The same rules that apply for "lazy"
1158    apply as well. (In fact, "lazy" is implemented as a special case of
1159    the general mechanism.)
1160    
1161    The .cm file syntax uses a new keyword tool argument called "with".
1162    There are several ways of indicating the desired settings:
1163    
1164        foo.sml (with:parser.quotations=true)
1165        foo.sml (with:(name:parser.quotations value:true))
1166        foo.sml (with:(name:name1 value:value1 name:name2 value:value2 ...))
1167        foo.sml (with:(name1=value1 name2=value2 ...))
1168        foo.sml (with:(name1=value1 name:name2 value:value2 name3=value3 ...))
1169    
1170        etc.
1171    
1172    Another possible abbreviation is to leave out the =v or value:v part
1173    if the name refers to a boolean control (in which case the value is
1174    taken to be true).  Thus, one could get lazy sml also by saying:
1175    
1176        foo.sml (with:parser.lazy-keyword=true)
1177        foo.sml (with:parser.lazy-keyword)
1178        foo.sml (with:(name:parser.lazy-keyword value:true))
1179        foo.sml (with:(name:parser.lazy-keyword))
1180    
1181    ----------------------------------------------------------------------
1182    Name: Matthias Blume (blume (at) tti - c (dot) org)
1183    Date: 2004/09/24 16:22:00 CDT
1184    Tag: blume-20040924-ppc-long-branch
1185    Description:
1186    
1187    Turned message about "emiting long form of branch" off by default.
1188    Added a control flag to turn it back on when desired.
1189    
1190    ----------------------------------------------------------------------
1191    Name: Matthias Blume (blume (at) tti - c (dot) org)
1192    Date: 2004/09/24 16:05:00 CDT
1193    Tag: blume-20040924-rounding
1194    Description:
1195    
1196    Applied patch for setting rounding modes under Mac OS X.  Thanks to
1197    Melissa O'Neill for providing the code!
1198    
1199    ----------------------------------------------------------------------
1200    Name: Matthias Blume (blume (at) tti - c (dot) org)
1201    Date: 2004/09/23 17:30:00 CDT
1202    Tag: blume-20040923-envvars
1203    Description:
1204    
1205    1. Changed definition of type ControlRegistry.registry_tree to
1206       include control_info (i.e., the name of the controlling environment
1207       variable).
1208    
1209    2. Added command-line flags -e and -E to print the names of environment
1210       variables that can be used to control internal settings.
1211       (This uses the new API mentioned in 1.)
1212    
1213    ----------------------------------------------------------------------
1214    Name: Matthias Blume (blume (at) tti - c (dot) org)
1215    Date: 2004/09/13 16:50:00 CDT
1216    Tag: Release_110_49
1217    Description:
1218    
1219    New working version (110.49).  NEW BOOTFILES!
1220    
1221    ----------------------------------------------------------------------
1222    Name: Matthias Blume
1223    Date: 2004/09/13 16:20:00 CDT
1224    Tag: blume-20040913-config-mlrisc
1225    Description:
1226    
1227    Put target "mlrisc" back into the default list.
1228    (There is no harm in having it, and some users have expressed their
1229    wish to have "mlrisc" included by default.)
1230    
1231    ----------------------------------------------------------------------
1232    Name: John Reppy
1233    Date: 2004/09/13
1234    Tag: jhr-20040913-signals
1235    Description:
1236    
1237    Fixed the signal masking code to properly nest mask/unmask operations
1238    on a per-signal basis.
1239    
1240    ----------------------------------------------------------------------
1241    Name: Matthias Blume (blume (at) tti - c (dot) org)
1242    Date: 2004/09/08 13:20:00 CDT
1243    Tag: blume-20040908-heap-magic
1244    Description:
1245    
1246    Bumped the heap macig number to 0x09082004 to account for the changed
1247    layout of the ML frame under MacOS X.
1248    
1249    ----------------------------------------------------------------------
1250    Name: Allen Leung (leunga (at) reservoir (dot) com)
1251    Date: 2004/09/03 11:26:00 EST
1252    Tag: leunga-20040903-cygwin-install
1253    Description:
1254    
1255       Added a patch to _arch-n-opsys to enable the Cygwin runtime.
1256    The Cygwin runtime is turned on by setting the environment
1257    variable SMLNJ_CYGWIN_RUNTIME to 1.
1258    
1259    ----------------------------------------------------------------------
1260    Name: Matthias Blume (blume (at) tti - c (dot) org)
1261    Date: 2004/08/31 17:15:00 CDT
1262    Tag: blume-20040831-core
1263    Description:
1264    
1265    Added some exports to src/compiler/core.cm upon request by J. Joemann.
1266    
1267    ----------------------------------------------------------------------
1268    Name: Matthias Blume (blume (at) tti - c (dot) org)
1269    Date: 2004/08/30 17:55:00 CDT
1270    Tag: blume-20040830-installer
1271    Description:
1272    
1273    Upon request by Johannes Joemann:
1274    
1275    - improved ML code of installer to fall back to coping when renaming
1276      fails (i.e., when source and target are on different file systems);
1277      the code compiles but has yet to be tested in anger
1278    - removed mlrisc from list of default targets (config/targets)
1279    
1280    ----------------------------------------------------------------------
1281    Name: Matthias Blume (blume (at) tti - c (dot) org)
1282    Date: 2004/08/27 17:20:00 CDT
1283    Tag: blume-20040827-ptreql
1284    Description:
1285    
1286    Added ptreql primop to structure InlineT (upon request from Larry
1287    Paulson).
1288    
1289    ----------------------------------------------------------------------
1290    Name: Allen Leung (leunga (at) reservoir (dot) com)
1291    Date: 2004/08/15 21:21:00 EST
1292    Tag: leunga-110_48-udgraph
1293    Description:
1294    
1295    Another bug fix from Carl Hauser:
1296    
1297    diff /net/niflab/smlnj48/src/MLRISC/graphs/udgraph.sml udgraph.sml
1298    > 48c48
1299    > <              | rmv((e as (k,_))::es,L) = rmv(es,if k = i then es else
1300    > e::L)
1301    > ---
1302    > >              | rmv((e as (k,_))::es,L) = rmv(es,if k = i then L else e::L)
1303    > Without this, any deletion of an edge in an undirected graph does severe
1304    > violence to the graph.
1305    
1306    ----------------------------------------------------------------------
1307    Name: Allen Leung (leunga (at) reservoir (dot) com)
1308    Date: 2004/08/10 23:35:00 EST
1309    Tag: leunga-110_48-ppc
1310    Description:
1311    
1312       The IBM/MacOS syntax switch on PPC was incorrectly swapped.
1313    
1314    ----------------------------------------------------------------------
1315    Name: Matthias Blume (blume (at) tti - c (dot) org)
1316    Date: 2004/08/10 12:00:00 CDT
1317    Tag: Release_110_48
1318    Description:
1319    
1320    New working version (110.48).  NEW BOOTFILES!
1321    
1322    ----------------------------------------------------------------------
1323    Name: Allen Leung (leunga (at) reservoir (dot) com)
1324    Date: 2004/08/09 12:21:00 EST
1325    Tag: leunga-110_47-dijsktra
1326    Description:
1327    
1328    Bug fix from Carl Hauser:
1329    
1330    single_source_shortest_paths in dijkstra.sml was observed to get wrong
1331    answers (by comparing to single_source_shortest_paths in bellman-ford.sml).
1332    
1333    The problem is that following the expression A.update(dist,s,Num.zero)
1334    it is necessary to update the priority queue using Q.decreaseWeight(Q,s).
1335    
1336    ----------------------------------------------------------------------
1337    Name: Matthias Blume (blume (at) tti - c (dot) org)
1338    Date: 2004/08/06 18:10:00 CDT
1339    Tag: blume-20040806-cmdline
1340    Description:
1341    
1342    Fiddled with handling of command-line options:
1343    
1344      * sml now quits after processing the command line
1345        if -H, -S, -h<n>, or -s<n> appears as the last
1346        command-line argument
1347      * a new option -q terminates the session when encountered on
1348        the command line; subsequent arguments will be ignored
1349      * bug fixes: short (erroneous) arguments are no longer ignored
1350        completely
1351    
1352    ----------------------------------------------------------------------
1353    Name: Allen Leung (leunga (at) reservoir (dot) com)
1354    Date: 2004/08/04 18:17:00 EST
1355    Tag: leunga-110_47-ppc-ibm-asm
1356    Description:
1357    
1358      - Added minimal IBM assembly syntax support for PowerPC.
1359    
1360      - Cygwin: manually changed the file cygwin.def.  Some exported symbols have
1361        been altered in the runtime.  We need an automatic way to keep the file
1362        in sync.
1363    
1364    ----------------------------------------------------------------------
1365    Name: Matthias Blume (blume (at) tti - c (dot) org)
1366    Date: 2004/08/04 14:00:00 CDT
1367    Tag: Release_110_47
1368    Description:
1369    
1370    New working version (110.47).  NEW BOOTFILES!
1371    
1372    ----------------------------------------------------------------------
1373    Name: Matthias Blume (blume (at) tti - c (dot) org)
1374    Date: 2004/08/03 14:25:00 CDT
1375    Tag: blume-20040803-callingconv
1376    Description:
1377    
1378    Added low-level support for choosing C calling conventions by
1379    twiddling the type of rawccall.  (See
1380    src/compiler/Semant/types/cproto.sml for details.)
1381    
1382    ----------------------------------------------------------------------
1383    Name: Matthias Blume (blume (at) tti - c (dot) org)
1384    Date: 2004/08/02 15:55:00 CDT
1385    Tag: blume-20040802-backout
1386    Description:
1387    
1388    Backed out of change to win32-filesys.c.  The earlier patch to
1389    get_file_time caused CM to produce files with the wrong time stamp.
1390    
1391    ----------------------------------------------------------------------
1392    Name: Matthias Blume (blume (at) tti - c (dot) org)
1393    Date: 2004/08/02 14:45:00 CDT
1394    Tag: blume-20040802-nlffi-win32
1395    Description:
1396    
1397    Added NLFFI support for Win32, adapted from a patch provided by David
1398    Hansel.  This is currently completely untested.  Also, the issue
1399    concerning stdcall vs. ccall is still unresolved.
1400    
1401    ----------------------------------------------------------------------
1402    Name: Matthias Blume (blume (at) tti - c (dot) org)
1403    Date: 2004/07/30 17:55:00 CDT
1404    Tag: blume-20040730-various
1405    Description:
1406    
1407    Gearing up towards 110.47...
1408    
1409    - various minor bugfixes to ml-nlffigen
1410    - a beginning of a manual for nlffi
1411    
1412    - eliminated 'export name=value' in config/install.sh as this does
1413      not work with certain versions of /bin/sh
1414      (Thanks to David King at Motorola for catching this.)
1415    
1416    - several bugfixes provided or suggested by David Hansel at Reactive Systems:
1417      - added a test for tm==NULL to gmtime.c and localtime.c
1418      - applied patch for incorrect GetFileTime under win32
1419      - toSeconds -> toMilliseconds in Win32/win32-process.sml
1420    
1421    ----------------------------------------------------------------------
1422    Name: Matthias Blume (blume (at) tti - c (dot) org)
1423    Date: 2004/07/21 18:20:00 CDT
1424    Tag: blume-20040721-nlffigen
1425    Description:
1426    
1427    - Fixed minor issue in ml-nlffigen: Now generate structure T_foo
1428      for a typedef to an incomplete type, but leave out the "typ" member.
1429      (This is just for consistency.)
1430    - Started to produce what is supposed to become better (i.e., comprehensive)
1431      documentation of what ml-nlffigen does and produces.
1432    
1433    ----------------------------------------------------------------------
1434    Name: Matthias Blume (blume (at) tti - c (dot) org)
1435    Date: 2004/07/14 16:25:00 CDT
1436    Tag: blume-20040714-union
1437    Description:
1438    
1439    Added C_UNION to c-calls/c-types.sml and updated the machinery
1440    (ml-nlffigen, cproto.sml) that conveys C function interface
1441    information to the code generator.
1442    
1443    However, the actual architecture-specific implementation of function
1444    arguments and results that are C unions is still not implemented.
1445    
1446    ----------------------------------------------------------------------
1447    Name: Allen Leung (leunga (at) reservoir (dot) com)
1448    Date: 2004/07/14 14:38:00 EST
1449    Tag: leunga-110_46_1-ppc-lwzu
1450    Description:
1451    
1452        Added these instructions to the PowerPC architecture:
1453        LBZU(X), LHZU(X), LWZU(X),
1454        STWU(X), STFDU, STFSU
1455    
1456        etc...
1457    
1458        Note: I haven't added their instruction encoding into the description.
1459    
1460    ----------------------------------------------------------------------
1461    Name: Allen Leung (leunga (at) reservoir (dot) com)
1462    Date: 2004/07/13 15:04:00 EST
1463    Tag: leunga-110_46_1-ppc-lwarx
1464    Description:
1465    
1466       Added the two instructions LWARX and STWCX to the PowerPC
1467    instruction set.
1468    
1469       A (untested) rewrite of loop-structure.sml.  The old version
1470    is completely broken.
1471    
1472    ----------------------------------------------------------------------
1473    Name: Matthias Blume (blume (at) tti - c (dot) org)
1474    Date: 2004/07/13 13:50:00 CDT
1475    Tag: blume-20040713-nlffi
1476    Description:
1477    
1478    - use paramAlloc to report c-calls with too many arguments
1479      (for PPC version where parameter area is pre-allocated)
1480    - added ccall_maxargspace to machspec (to implement the above)
1481    - made "make" commend in CM's "make" tool configurable
1482    - added option (default: on) for passing the name of the SML/NJ's "bin"
1483      directory to "make"; the call looks like this:
1484    
1485         make <options> SMLNJ_BINDIR=<dir> <target>
1486    
1487      This can be used by the Makefile to, e.g., pick the "right" version
1488      of ml-nlffigen.
1489    - minor code tweaks
1490    
1491    ----------------------------------------------------------------------
1492    Name: Matthias Blume (blume (at) tti - c (dot) org)
1493    Date: 2004/07/12 22:50:00 CDT
1494    Tag: blume-110_46_1-macosx-nlffi
1495    Description:
1496    
1497    NLFFI under Mac OS X now working (sort of).  This is largely untested,
1498    though.
1499    
1500    Note:  1. You have to make a new, clean build of the runtime system.
1501           2. There are new BOOTFILES, you have to use them!
1502              (Doing the bootstrap process yourself would be *very* painful!
1503               If you absolutely have to do it, build the system under
1504               a different architecture and then cross-compile.)
1505    
1506    Version bumped to 110.46.1 to account for runtime data format changes.
1507    
1508    ----------------------------------------------------------------------
1509    Name: Matthias Blume (blume (at) tti - c (dot) org)
1510    Date: 2004/06/18 14:30:00 CDT
1511    Tag: blume-20040618-unix
1512    Description:
1513    
1514    Changed the implementation of structure Unix so that the same stream
1515    is returned every time one of the {text,bin}{In,Out}streamOf functions
1516    is invoked on the same proc.  This is not what the spec currently
1517    says -- although IMO it arguably should.  (See discussion below.)
1518    
1519    ----------------------------------------------------------------------
1520    Name: Matthias Blume (blume (at) tti - c (dot) org)
1521    Date: 2004/06/17 18:15:00 CDT
1522    Tag: Release_110_46
1523    Description:
1524    
1525    New working version (110.46).  NEW BOOTFILES!
1526    
1527    ----------------------------------------------------------------------
1528    Name: Matthias Blume (blume (at) tti - c (dot) org)
1529    Date: 2004/06/17 17:20:00 CDT
1530    Tag: blume-20040617-timer-unix
1531    Description:
1532    
1533    Changed the interface of structures Timer and Unix to match the most
1534    recent Basis spec.
1535    
1536    In the case of Unix there still seems to be an open/weird issue:
1537    
1538       The {text,bin}{In,Out}streamOf functions are supposed to create
1539       fresh streams whenever they are called -- as opposed to have them
1540       return the same stream every time.  This design is supposed to
1541       prevent space leaks caused by proc values hanging on to streams.
1542    
1543       The reap function, on the other hand, is supposed to close the
1544       streams.  This cannot be done without having a handle on the
1545       stream in proc after all...
1546    
1547    I took the liberty to implement the following stopgap solution:
1548    
1549      The proc value hangs on to the most recently created stream(s).
1550      Reap closes those.  If either or both of the two streams hadn't
1551      been created at all yet, then reap will close the corresponding
1552      file descriptors directly.
1553    
1554    PS: I don't understand the original space leak argument anymore.  If
1555    a proc hangs on to the imperative stream, then I/O operations on those
1556    will advance the state of the cached stream and avoid the space leak.
1557    
1558    ----------------------------------------------------------------------
1559    Name: Matthias Blume (blume (at) tti - c (dot) org)
1560    Date: 2004/05/28 16:45:00 CDT
1561    Tag: blume-20040528-basis
1562    Description:
1563    
1564    Added signature PACK_REAL and exported functor PrimIO.
1565    
1566    ----------------------------------------------------------------------
1567    Name: Matthias Blume (blume (at) tti - c (dot) org)
1568    Date: 2004/05/25 16:00:00 CDT
1569    Tag: blume-20040525-group-owner
1570    Description:
1571    
1572    CM now ignores (but still accepts) the "owner" information in group
1573    descriptions.  The owner of a group is its next enclosing
1574    library. Each group must have a unique owner.  (There is a virtual
1575    "toplevel" library that owns groups which are not nested within a real
1576    library.)  Previously, each group had to explicitly declare its owner,
1577    and CM would check that such a declaration is correct.  The new scheme
1578    is to have CM check that for each group there is precisely one owning
1579    library.
1580    
1581    The advantage of the new scheme is that the programmer no longer needs
1582    to maintain the somewhat annoying owner information.  The downside is
1583    that CM cannot enforce the ownership rule across multiple runs of
1584    CM.make.  Fortunately, enclosing the same group in two different
1585    libraries A and B which are not part of the same program does not
1586    cause real problems.
1587    
1588    ----------------------------------------------------------------------
1589    Name: Matthias Blume (blume (at) tti - c (dot) org)
1590    Date: 2004/05/20 16:00:00 CDT
1591    Tag: blume-20040520-win32
1592    Description:
1593    
1594    Made the win32 version work again.  (Strangely, a misplaced comma had
1595    slipped into win32-process.c which prevented the runtime from being
1596    compiled correctly.)
1597    
1598    Also, included a minor addition to ml-build.bat analogous to what was
1599    done in blume-20040519-ml-build.
1600    
1601    ----------------------------------------------------------------------
1602    Name: Matthias Blume (blume (at) tti - c (dot) org)
1603    Date: 2004/05/19 22:10:00 CDT
1604    Tag: blume-20040519-ml-build
1605    Description:
1606    
1607    Arranged for ml-build to clean up after itself a little bit better.
1608    The script generates a temporary SML source file and compiles it using
1609    CM, so CM generates metadata (GUID, SKEL, objectfile) for it.  It now
1610    gets rid of those at the end, so they don't accumulate under .cm.
1611    
1612    This required a minor change to install.sh because the name of the
1613    metadata directory (default: .cm) is actually configurable at
1614    installation time.
1615    
1616    ----------------------------------------------------------------------
1617    Name: Matthias Blume (blume (at) tti - c (dot) org)
1618    Date: 2004/05/18 15:50:00 CDT
1619    Tag: blume-20040518-mkreader
1620    Description:
1621    
1622    Added Posix.IO.mk{Bin,Text}{Reader,Writer} by lifting their respective
1623    implementations from internal modules PosixBinPrimIO and PosixTextPrimIO.
1624    
1625    ----------------------------------------------------------------------
1626    Name: Matthias Blume (blume (at) tti - c (dot) org)
1627    Date: 2004/05/11 14:35:00 CDT
1628    Tag: blume-20040511-win32sock
1629    Description:
1630    
1631    Added previously missing support for many socket-related functions
1632    under win32.  Thanks to David Hansel <hansel@reactive-systems.com>
1633    for the voluminous patch!
1634    
1635    (I have not tested this patch under win32 yet.)
1636    
1637    Here is David's e-mail:
1638    
1639    Hi,
1640    
1641    Attached to this email you find a diff against sml/nj 110.45
1642    that will enable socket support under Windows.
1643    
1644    To apply the patch (using unix or cygwin)
1645    1) gunzip runtime.diff.gz
1646    2) "cd" into "src/runtime" in the source tree of a fresh
1647       110.45 installation.
1648    3) patch -p 1 < [your/path/to]runtime.diff
1649    
1650    The code compiles fine but has NOT yet been extensively tested.
1651    I only ran a few tests for basic socket client functionality
1652    (which worked fine).  Especially the functions that use ioctl
1653    are not tested at all and might not work (see below).
1654    
1655    I implemented this since we want to move to a newer version of sml/nj
1656    but need socket support in order to use it.  This is the first time I
1657    even had a look at the sml/nj source,  so please review my changes
1658    before making this part of the distribution!  Here are a few issues
1659    that I think might be better for someone to solve who is more
1660    familiar with the sml/nj source (and socket programming):
1661    
1662    - getnetbyaddr.c and getnetbyname.c will raise a "not implemented"
1663      exception since I could not figure out what the windows equivalent
1664      of these functions is
1665    
1666    - In sockets-osdep.h there are a some #include statements that are
1667      only used in a few files that include sockets-osdep.h
1668    
1669    - In smlnj-sock-lib.c, function init_fn() calls WSAStartup() but
1670      does not process its return value since I don't know how to
1671      report an error upwards.
1672    
1673    - It would probably be good to have a call to WSACleanup() when
1674      the library is unloaded (if there is such a possibility).
1675      Otherwise I think Windows will take care of this automatically
1676      when the process finishes.
1677    
1678    - I used ioctlsocket() as a replacement for ioctl() but I have
1679      no idea if that is actually the proper replacement on Windows.
1680    
1681    - All these issues are marked in the code by "FIXME" comments.
1682    
1683    We use sml/nj extensively in our products and are quite happy
1684    with it.  I hope this contribution will help you.
1685    
1686    Keep up the good work!
1687    
1688    David
1689    
1690    ----------------------------------------------------------------------
1691    Name: Matthias Blume (blume (at) tti - c (dot) org)
1692    Date: 2004/05/11 14:20:00 CDT
1693    Tag: blume-20040511-installml
1694    Description:
1695    
1696    Fixed two bugs in installml script.  (Thanks to Vesa A. Norrman for
1697    the patch.)
1698    
1699    ----------------------------------------------------------------------
1700    Name: Matthias Blume (blume (at) tti - c (dot) org)
1701    Date: 2004/05/11 14:05:00 CDT
1702    Tag: blume-20040511-nlffi-netbsd
1703    Description:
1704    
1705    Added support for nlffi under netbsd.  (Thanks to Vesa A. Norrman for
1706    the patch.)
1707    
1708    ----------------------------------------------------------------------
1709    Name: Matthias Blume (blume (at) tti - c (dot) org)
1710    Date: 2004/05/11 12:05:00 CDT
1711    Tag: blume-20040511-exports
1712    Description:
1713    
1714    As per request by Adam Chlipala <adam@hcoop.net>, extended various
1715    export lists in compiler-related .cm-files.
1716    
1717    ----------------------------------------------------------------------
1718    Name: Matthias Blume (blume (at) tti - c (dot) org)
1719    Date: 2004/05/11 11:35:00 CDT
1720    Tag: blume-20040511-allsource
1721    Description:
1722    
1723    The installer now honors the "src-smlnj" target again, although its meaning
1724    has changed from "all sources required for the compiler" to "all sources
1725    the installer knows about".  In other words, if you enable "src-smlnj"
1726    in the "targets" file, then the installer will pull in sources for
1727    everything.  (Notice that this refers to source code only.  Compiled
1728    code is still only installed for modules that were requested explicitly
1729    or which are required for other modules that were requested explicitly.)
1730    
1731    ----------------------------------------------------------------------
1732    Name: Matthias Blume (blume (at) tti - c (dot) org)
1733    Date: 2004/04/23 17:40:00 CDT
1734    Tag: blume-20040423-ieee-scan
1735    Description:
1736    
1737    Fixed IEEEReal.scan (and .fromString) so that if there is an overflow
1738    in the exponent calculation we get INF or ZERO (depending on the mantissa
1739    and the sign of the exponent).
1740    
1741    ----------------------------------------------------------------------
1742    Name: Matthias Blume (blume (at) tti - c (dot) org)
1743    Date: 2004/04/23 10:40:00 CDT
1744    Tag: blume-20040423-ml-build
1745    Description:
1746    
1747    The ml-build script now terminates with a non-0 status when something
1748    goes wrong.
1749    
1750    ----------------------------------------------------------------------
1751    Name: Matthias Blume (blume (at) tti - c (dot) org)
1752    Date: 2004/04/22 16:35:00 CDT
1753    Tag: blume-20040422-Option
1754    Description:
1755    
1756    Made exception Option to be the same as exception Option.Option
1757    (as it should be).
1758    
1759    ----------------------------------------------------------------------
1760    Name: Allen Leung (leunga (at) reservoir (dot) com)
1761    Date: 2004/03/19 14:40:00 EST
1762    Tag: leunga-20040319-cygwin-nlffi
1763    Description:
1764    
1765    Fixed the runtime so that ml-nlffi-lib runs on the cygwin version
1766    of SML/NJ.  The problem is that
1767    
1768       lib = dlopen(NULL, ...)
1769       f   = dlsym(lib, "malloc");
1770    
1771    does not work on Windows unless we explicitly export symbols
1772    such as 'malloc' during linking.  We fixed this by explicitly
1773    exporting the required symbols with the magic gcc incantation:
1774    
1775        -Wl,--export-all cygwin.def
1776    
1777    where cygwin.def is a file containing all the symbols that
1778    we wish to export.
1779    
1780    I suspect this is a Windows problem and we'll have to
1781    do the same (somehow with windows compilers) when
1782    we build the native win32 version with the system
1783    calls LoadLibrary/GetProcAddress.
1784    
1785    ----------------------------------------------------------------------
1786    Name: Matthias Blume (blume (at) tti - c (dot) org)
1787    Date: 2004/03/04 16:35:00 CST
1788    Tag: blume-20040304-intinf-fmt
1789    Description:
1790    
1791    Fixed problem with IntInf.fmt (sign would show up on the right instead
1792    of on the left for BIN, OCT, and HEX).
1793    
1794    ----------------------------------------------------------------------
1795    Name: Matthias Blume (blume (at) tti - c (dot) org)
1796    Date: 2004/03/04 11:25:00 CST
1797    Tag: blume-20040304-symlinks
1798    Description:
1799    
1800    Fixed problem with installer script (unix only) where bin/ml-yacc and
1801    friends pointed (via symlinks) to absolute locations instead of just
1802    .run-sml.  This was reported by Vesa A Norrman.
1803    
1804    ----------------------------------------------------------------------
1805    Name: Matthias Blume (blume (at) tti - c (dot) org)
1806    Date: 2004/02/13 14:50:00 CST
1807    Tag: Release_110_45
1808    Description:
1809    
1810    New working version (110.45). New bootfiles.
1811    
1812    ----------------------------------------------------------------------
1813    Name: Matthias Blume (blume (at) tti - c (dot) org)
1814    Date: 2004/01/26 15:15:15 CST
1815    Tag: blume-20040126-toplevel
1816    Description:
1817    
1818    Improved handling of exceptions at the interactive toplevel.
1819    
1820    ----------------------------------------------------------------------
1821    Name: Matthias Blume (blume (at) tti - c (dot) org)
1822    Date: 2004/01/26 11:25:00
1823    Tag: blume-20040126-app
1824    Description:
1825    
1826    Type of top-level "app" corrected.
1827    Added code for setting vp_limitPtrMask to Win32-specific runtime.
1828    
1829    ----------------------------------------------------------------------
1830    Name: Matthias Blume (blume (at) tti - c (dot) org)
1831    Date: 2003/11/18 17:10 CST
1832    Tag: blume-20031118-basis-fiddle
1833    Description:
1834    
1835    - changed Timer interface to what might become the spec
1836    - POSIX_FLAGS -> BIT_FLAGS according to spec
1837    - some other minor discrepancies wrt. spec eliminated
1838    
1839    ----------------------------------------------------------------------
1840    Name: Matthias Blume (blume (at) tti - c (dot) org)
1841    Date: 2003/11/06 12:00:00 CST
1842    Tag: Release_110_44
1843    Description:
1844    
1845    New working version (110.44). New bootfiles.
1846    
1847    ----------------------------------------------------------------------
1848    Name: Matthias Blume (blume (at) tti - c (dot) org)
1849    Date: 2003/11/04 11:50:00 CST
1850    Tag: blume-20031104-move-libraries
1851    Description:
1852    
1853    Eliminated the "dont_move_libraries" directive in config/targets.
1854    (The mechanism was broken and could not be fixed easily.  Moreover,
1855    there does not seem to be any reason not to move all libraries into
1856    lib during installation.  I originally implemented this directive as a
1857    backward-compatibility feature when I first introduced the new CM.
1858    Now that things have been stable for a long time and going back to the
1859    old CM is not an option, there is no reason to keep it around.)
1860    
1861    ----------------------------------------------------------------------
1862    Name: Matthias Blume (blume (at) tti - c (dot) org)
1863    Date: 2003/11/03 16:00:00 CST
1864    Tag: blume-20031103-installdir
1865    Description:
1866    
1867    Made installer honor INSTALLDIR variable again.  (Thanks to Chris
1868    Richards for pointing out the problem and providing the solution.)
1869    
1870    ----------------------------------------------------------------------
1871    Name: Matthias Blume (blume (at) tti - c (dot) org)
1872    Date: 2003/10/01 17:05:00 CDT
1873    Tag: blume-20031001-lal-mlrisc
1874    Description:
1875    
1876    MLRISC bug fix from Lal.
1877    
1878    ----------------------------------------------------------------------
1879    Name: Matthias Blume (blume (at) tti - c (dot) org)
1880    Date: 2003/09/30 16:10:00 CDT
1881    Tag: blume-20030930-primio-bat
1882    Description:
1883    
1884    1. Added openVector, nullRd, and nullWr to PRIM_IO.
1885    2. Improved .bat files (for Win32 port) to make things work under Win95.
1886       (thanks to Aaron S. Hawley for this one)
1887    
1888    ----------------------------------------------------------------------
1889    Name: Matthias Blume (blume (at) tti - c (dot) org)
1890    Date: 2003/09/26 16:05:00 CDT
1891    Tag: blume-20030926-wrappriv
1892    Description:
1893    
1894    Added missing wrapper for privilege "primitive" in $smlnj/viscomp/core.cm.
1895    
1896    ----------------------------------------------------------------------
1897    Name: Matthias Blume (blume (at) tti - c (dot) org)
1898    Date: 2003/09/26 15:00:00 CDT
1899    Tag: blume-20030926-110_43_3
1900    Description:
1901    
1902    - additional cleanup
1903    - version number bump, NEW BOOTFILES
1904    
1905    ----------------------------------------------------------------------
1906    Name: Matthias Blume (blume (at) tti - c (dot) org)
1907    Date: 2003/09/26 12:00:00 CDT
1908    Tag: blume-20030926-ppautoload
1909    Description:
1910    
1911    I modified the read-eval-print loop so that the autoloader gets
1912    invoked whenever the prettyprinter tries to look up a symbol that
1913    is not currently defined in the toplevel environment but which
1914    appears in CM's autoload registry.  As a result, we see far fewer of
1915    those ?.Foo.Bar.xxx names in the prettyprinter's output.
1916    
1917    In addition to this I tried to clean up some pieces of the Basis
1918    implementation (e.g., Socket, Word8Array) in order to prevent other
1919    instances of these ?.Foo.Bar.xxx names from being printed.
1920    
1921    The mechanism that picks names for types still needs some work, though.
1922    (Right now it seems that if there is a type A.t which is defined to
1923    be B.u, but B is unavailable at toplevel, then A.t gets printed as
1924    "?.B.u" although the perhaps more sensible solution would be to use
1925    "A.t" in this case.  In other words, the prettyprinter should follow
1926    a chain of DEFtycs not farther than there are corresponding toplevel
1927    names in the current environment.)
1928    
1929    ----------------------------------------------------------------------
1930    Name: Matthias Blume (blume (at) tti - c (dot) org)
1931    Date: 2003/09/24 16:31:00 CDT
1932    Tag: blume-20030924-installer
1933    Description:
1934    
1935    Another installer tweak:  All the ML code for the installer is now
1936    compiled during CMB.make and put into a little library called
1937    $smlnj/installer.cm.  The installation then simply invokes
1938    
1939       sml -m $smlnj/installer.cm
1940    
1941    and everything happens automagically.
1942    
1943    Win32:  ML code senses value of environment variable SMLNJ_HOME.
1944    Unix:   ML code senses values of environment variables ROOT, CONFIGDIR,
1945            and BINDIR.
1946    
1947    The new scheme guarantees that the ML code responsible for the installation
1948    is in sync with the APIs of the main system.  Also, the installer is
1949    somewhat faster because the installer script is precompiled.
1950    
1951    ----------------------------------------------------------------------
1952    Name: Matthias Blume (blume (at) tti - c (dot) org)
1953    Date: 2003/09/24 15:35:00 CDT
1954    Tag: blume-20030924-synsock
1955    Description:
1956    
1957    Added a signature SYNCHRONOUS_SOCKET to basis.cm.  This is like SOCKET
1958    but excludes all non-blocking operations.  Defined SOCKET (in Basis)
1959    and CML_SOCKET in terms of SYNCHRONOUS_SOCKET.  Removed superfluous
1960    implementations of non-blocking operations from CML's Socket
1961    structure.
1962    
1963    ----------------------------------------------------------------------
1964    Name: Matthias Blume (blume (at) tti - c (dot) org)
1965    Date: 2003/09/24 15:10:05 CDT
1966    Tag: blume-20030924-sockets
1967    Description:
1968    
1969    1. Fixed SOCKET API and implementation to match Basis spec.
1970       This required changing the internal representation of sockets to one
1971       that remembers (for each socket file descriptor) whether it is currently
1972       blocking or non-blocking.  This state is maintained lazily (i.e., a system
1973       call is made only if the state actually needs to change).
1974    
1975    2. OS-specific details of sockets were moved into separate files, thus
1976       making it possible to unify the bulk of the socket implementations
1977       between Unix and Win32.
1978    
1979    3. CML's socket API changed accordingly.
1980       (Note that we need to remove non-blocking functions from this API
1981       since they are redundant in the case of CML!)
1982    
1983    4. CML's socket implementation now makes use of non-blocking functions
1984       provided by Basis, thus removing all OS-dependent code from this part
1985       of CML.
1986    
1987    5. Changed Real64.precision from 52 to 53.  Minor cleanup in Real64 code.
1988    
1989    ----------------------------------------------------------------------
1990    Name: Matthias Blume (blume (at) tti - c (dot) org)
1991    Date: 2003/09/22 12:10:00 CDT
1992    Tag: blume-20030922-110_43_2
1993    Description:
1994    
1995    Made a new interim version and bootfiles for developer's bootstrapping
1996    convenience.
1997    
1998       110.43.2 -- NEW BOOTFILES
1999    
2000    ----------------------------------------------------------------------
2001    Name: Matthias Blume (blume (at) tti - c (dot) org)
2002    Date: 2003/09/19 15:55:00 CDT
2003    Tag: blume-20030919-cmdir
2004    Description:
2005    
2006    1. new-install.sh -> install.sh
2007    2. changed default CM "metadata" directory name to ".cm" (instead of "CM")
2008    3. tweaked installer so that another name instead of .cm can be chosen
2009       at install time (by setting the CM_DIR_ARC environment variable
2010       during installation); once installation is complete, the name is
2011       fixed
2012    
2013    ----------------------------------------------------------------------
2014    Name: Matthias Blume (blume (at) tti - c (dot) org)
2015    Date: 2003/09/18 16:00:00 CDT
2016    Tag: blume-20030918-110_43_1
2017    Description:
2018    
2019    Made a new interim version and bootfiles for developer's bootstrapping
2020    convenience.
2021    
2022       110.43.1 -- NEW BOOTFILES
2023    
2024    ----------------------------------------------------------------------
2025    Name: Matthias Blume (blume (at) tti - c (dot) org)
2026    Date: 2003/09/18 15:20:00 CDT
2027    Tag: blume-20030918-misc
2028    Description:
2029    
2030    1. Exported fractionsPerSecond etc. from TimeImp (but not from Time as
2031       this seems to be controversial at the moment) and used those in
2032       Posix.ProcEnv.times.
2033    
2034    2. Added Time.{from,to}Nanoseconds to Time.
2035    
2036    3. Improved Real.{from,to}LargeInt by avoiding needless calculations.
2037       For example, fromLargeInt never needs to look at more than 3 "big
2038       digits" to get its 53 bits of precision.
2039    
2040    ----------------------------------------------------------------------
2041    Name: Matthias Blume (blume (at) tti - c (dot) org)
2042    Date: 2003/09/17 16:30:00 CDT
2043    Tag: blume-20030917-real32-slices
2044    Description:
2045    
2046    Added an entry to the primitive environment
2047    (compiler/Semant/statenv/prim.sml) for int32->real64 conversion and
2048    added code to compiler/CodeGen/main/mlriscGen.sml to implement it.
2049    
2050    Removed some of the "magic" constants in real64.sml and replaced them
2051    with code that generates these values from their corresponding
2052    integer counterparts.
2053    
2054    Made all(?) the slice-related changes to the Basis and made everything
2055    compile again...
2056    
2057    ----------------------------------------------------------------------
2058    Name: Matthias Blume (blume (at) tti - c (dot) org)
2059    Date: 2003/09/15 17:45:00 CDT
2060    Tag: blume-20030915-rbase
2061    Description:
2062    
2063    Fixed bug in Real.fromLargeInt.
2064    
2065    ----------------------------------------------------------------------
2066    Name: Matthias Blume (blume (at) tti - c (dot) org)
2067    Date: 2003/09/13 18:11:00 CDT
2068    Tag: blume-20030913-libinstall
2069    Description:
2070    
2071    Minor bugfix in config/libinstall (set anchor with path to
2072    standalone tool after installing it, otherwise libraries that
2073    need ml-lex or ml-yacc won't compile the first time the installer
2074    runs).
2075    
2076    ----------------------------------------------------------------------
2077    Name: Matthias Blume (blume (at) tti - c (dot) org)
2078    Date: 2003/09/12 11:45:00 CDT
2079    Tag: blume-20030912-various
2080    Description:
2081    
2082     - fixed bug in Real.toLargeInt
2083     - fixed bug in Posix.ProcEnv.times
2084     - changed inputLine functions to return an option
2085     - minor installer improvements / bugfixes
2086     - changed default @SMLalloc parameter for x86/celeron to 64k
2087    
2088    ----------------------------------------------------------------------
2089    Name: Matthias Blume (blume (at) tti - c (dot) org)
2090    Date: 2003/09/09 22:00:00 CDT
2091    Tag: Release_110_43
2092    Description:
2093    
2094        New working release 110.43.  New bootfiles.
2095    
2096    ----------------------------------------------------------------------
2097    Name: Matthias Blume (blume (at) tti - c (dot) org)
2098    Date: 2003/09/09 19:20:00 CDT
2099    Tag: blume-20030909-installer
2100    Description:
2101    
2102    Rewrote large parts of config/install.sh in SML (config/libinstall.sml).
2103    Modified config/install.bat to take advantage of it.  Also modified
2104    config/install.sh (and called it config/new-install.sh) to take advantage
2105    of it on Unix systems.  (The SML code is (supposed to be) platform-
2106    independent.)
2107    
2108    The installer can now install everything under Win32
2109    as well as under *nix as long as it compiles.
2110    
2111    Other changes:
2112    
2113      - made CML compile again under Win32
2114      - made eXene compile under Win32 (by providing a fake structure UnixSock
2115        and by using OS.Process.getEnv instead of Posix.ProcEnv.getenv)
2116      - fixed a bug in nowhere: it assumed that type OS.Process.status is the
2117        same as type int;  under Win32 it isn't
2118      - fixed some slice-related problems in the win32-specific parts of CML
2119      - added a functor argument "sameVol" to os-path-fn.sml in the Basis
2120        (under Win32, the volume name is case-insensitive, and the
2121        OS.Path code compares volume names for equality)
2122    
2123    ----------------------------------------------------------------------
2124    Name: Matthias Blume (blume (at) tti - c (dot) org)
2125    Date: 2003/09/08 11:55:00 CDT
2126    Tag: blume-20030908-fullpath
2127    Description:
2128    
2129    Made Win32 version of OS.FileSys.fullPath return current directory
2130    when given an empty string.  This is what the spec says, and incidentally,
2131    CM depends on it.  (CM otherwise goes into an infinite loop in certain
2132    cases when presented with the name of a non-existing .cm file.)
2133    
2134    ----------------------------------------------------------------------
2135    Name: Matthias Blume (blume (at) tti - c (dot) org)
2136    Date: 2003/09/04 16:30:00 CDT
2137    Tag: blume-20030905-slices-etc
2138    Description:
2139    
2140      1. Changed interface to vectors and arrays in Basis to match
2141         (draft) Basis spec.
2142      2. Added signatures and implementations of slices according to
2143         Basis spec.
2144      3. Edited source code throughout the system to make it compile again
2145         under 1. and 2.  (In some cases code had to be added to have it
2146         match the new signatures.)
2147      4. MLRISC should be backward-compatible: the copies of the originals
2148         of files that needed to change under 3. were retained, the .cm files
2149         check the compiler version number and use old versions when
2150         appropriate.
2151      5. Changed type of OS.FileSys.readDir and Posix.FileSys.readdir to
2152         dirstream -> string option (in accordance with Basis spec).
2153      6. When generating code that counts lines, ml-lex used function
2154         CharVector.foldli, taking advantage of its old interface.
2155         This has been replaced with the corresponding code from
2156         CharVectorSlice.  (html-lex must be re-lexed!)
2157      7. BitArray in smlnj-lib/Util has been extended/modified to match the
2158         new MONO_ARRAY signature.  (Do we need BitArraySlice?)
2159      8. Removed temporary additions (fromInternal, toInternal) from the
2160         (now obsolete) IntInf in smlnj-lib/Util.
2161      9. Cleaned up structure Byte.
2162     10. Added localOffset, scan, and fromString to Date (according to spec).
2163         Cleaned/corrected implementation of Date.
2164         (Still need to check for correctness; implement better canonicalizeDate.)
2165     11. Added "scan" to signature IEEE_REAL.
2166     12. Some improvements to IntInf [in particular: efficiency-hack for
2167         mod and rem when second operand is 2 (for parity checks).]
2168     13. Changed representation of type Time.time, using a single IntInf.int
2169         value counting microseconds.  This considerably simplified the
2170         implementation of structure Time.  We now support negative time
2171         values; scan and fromString handle signs.
2172     14. Functor PrimIO now takes two additional arguments (VectorSlice and
2173         ArraySlice).
2174    
2175    ----------------------------------------------------------------------
2176    Name: Matthias Blume (blume (at) tti - c (dot) org)
2177    Date: 2003/08/28 17:00:00 CDT
2178    Tag: blume-20030828-intinf
2179    Description:
2180    
2181    This is a major update which comes with a version number bump
2182    (110.42.99 -- yes, we are really close to 110.43 :-), NEW BOOTFILES,
2183    and an implementation of IntInf in the Basis.
2184    
2185    There are a fairly large number of related changes and updates throughout
2186    the system:
2187    
2188    Basis:
2189            - Implemented IntInf.
2190            - Made LargeInt a projection of IntInf (by filtering through INTEGER).
2191            - Added some missing Real64 operations, most notably Real.toLargeInt.
2192            - Added FixedInt as a synonym for Int32.
2193    
2194    compiler:
2195            * Added support for a built-in intinf type.
2196              - literals
2197              - pattern matching
2198              - conversion shortcuts (Int32.fromLarge o Int.toLarge etc.)
2199              - overloading on literals and operations
2200    
2201            This required adding a primitive type intinf, some additional
2202            primops, and implementations for several non-trivial intinf
2203            operations in Core.  (The intinf type is completely abstract
2204            to the compiler; all operations get delegated back to the Core.)
2205    
2206            * Intinf equality is handled by polyequal.  However, the compiler
2207            does not print its usual warning in this case (since polyequal
2208            is the right thing to do there).
2209    
2210            * Improved the organization of structure InlineT.
2211    
2212            * A word about conversion primops:
2213            If conversions involving intinf do not cancel out during
2214            CPS contract, then the compiler must insert calls to Core functions.
2215            Since all core access must be resolved already during the FLINT
2216            translate phase, it would be too late a the time of CPS contract
2217            to add new Core calls.  For this reason, conversion primops
2218            for intinf carry two arguments:  1. the numeric argument that
2219            they are supposed to convert, and 2. the Core function that
2220            can help with this conversion if necessary.  If CPS contract
2221            eliminates a primop, then the associated Core function becomes
2222            dead and goes away.  Intinf conversion primops that do not get
2223            eliminated by CPS contract get rewritten into calls of their
2224            core functions by a separate, new phase.
2225    
2226    interactive system:
2227            - Control.Print.intinfDepth controls max length of intinf constants
2228            being printed. (Analogous to Control.Print.stringDepth.)
2229            - Cleanup in printutil and pputil: got rid of unused stuff and
2230            duplicates; replaced some of the code with code that makes better
2231            use of library functionality.
2232    
2233    CM:
2234            Bugfix: parse-errors in init group (system/smlnj/init/init.cmi)
2235            are no longer silent.
2236    
2237    CKIT:
2238            Fixed mismatched uses of Int32 and LargeInt.  I always decided
2239            in favor of LargeInt -- which is now the same as IntInf.
2240            CKIT-knowledgable people should check whether this is what's
2241            intended and otherwise change things back to using Int32 or
2242            FixedInt.
2243    
2244    Throughout the code:
2245            Started using IntInf.int literals and built-in operations
2246            (e.g., comparison with 0) where this seems appropriate.
2247    
2248    
2249    ----------------------------------------------------------------------
2250    Name: Dave MacQueen (dbm@cs.uchicago.edu)
2251    Date: 2003/08/13 11:36:00 CDT
2252    Tag: dbm-20030813-mcz-merge1
2253    Description:
2254    
2255    Merging changes from the mcz-branch development branch into trunk.
2256    These changes involve replacement of the emulated old prettyprinter
2257    interface with direct use of the SML/NJ Lib PP library, and fixing
2258    of a couple of bugs (895, 1186) relating to error messages.  A new
2259    prettyprinter for ast datatypes (Elaborator/print/ppast.{sig,sml})
2260    has been added.
2261    
2262    ----------------------------------------------------------------------
2263    Name: Matthias Blume (blume (at) tti - c (dot) org)
2264    Date: 2003/08/11 15:45:00 CDT
2265    Tag: blume-20030811-windows
2266    Description:
2267    
2268    Version number bumped to 110.42.9.  NEW BOOTFILES!!!
2269    
2270        http://smlnj.cs.uchicago.edu/dist/working/110.42.9/
2271    
2272    This patch restores SML/NJ's ability to run under win32.  There are a
2273    number of changes, including fixes for several bugs that had gone
2274    unnoticed until now:
2275    
2276      - uname "CYGWIN_NT*" is recognized as win32 (This is relevant only when
2277        trying to run the win32 version from within cygwin.)
2278    
2279      - There are a number of simple .bat scripts that substitute for their
2280        corresponding Unix shell-scripts.  (See below.)
2281    
2282      - The internals of ml-build have been modified slightly.  The main
2283        difference is that instead of calling ".link-sml" (or link-sml.bat)
2284        using OS.Process.system, the ML process delegates this task back
2285        to the script.  Otherwise problems arise in mixed environments such
2286        as Cygwin where scripts look and work like Unix scripts, but
2287        where OS.Process.system cannot run them.
2288    
2289      - In CM, the srcpath pickler used native pathname syntax -- which
2290        is incorrect in the case of cross-compilation.  The new pickle format
2291        is independent of platform-specific naming conventions.
2292    
2293      - Path configuration files (such as lib/pathconfig) can now choose
2294        between native and standard syntax.  Placing a line of the form
2295    
2296            standard!
2297    
2298        into the file causes all subsequent paths to be interpreted using
2299        CM standard pathname syntax (= Unix conventions); a line
2300    
2301            native!
2302    
2303        switches back to native style.  This was needed so that
2304        path config files can be written portably, see src/system/pathconfig.
2305    
2306      - Runtime system:
2307    
2308          - win32-filesys.c:  get_file_time and set_file_time now
2309            access modification time, not creation time.
2310    
2311          - I/O code made aware of new array representation.
2312    
2313          - Bug fixes in X86.prim.masm.
2314    
2315       - src/system/makeml made aware of win32. (For use under cygwin
2316            and other Unix-environments for windows.)
2317    
2318       - In Basis, fixed off-by-one error in win32-io.sml (function vecF)
2319         which caused BinIO.inputAll to fail consistently.
2320    
2321    .bat scripts:
2322    
2323       Windows .bat scripts assume that SMLNJ_HOME is defined.
2324    
2325       - sml.bat, ml-yacc.bat, ml-lex.bat:  Driver scripts for standalone
2326         applications (sml, ml-yacc, ml-lex).
2327       - ml-build.bat: analogous to ml-build.
2328       - config\install.bat:  Analogous to config/install.sh.  This requires
2329         that SMLNJ_HOME is set and that Microsoft Visual C is ready to use.
2330         (nmake etc. must be on the path, and vcvars32 must have been run.)
2331         Moreover, sources for ml-lex and ml-yacc need to exist under src,
2332         and the bootfile hierarchy must have been unpacked under
2333         sml.boot.x86-win32.
2334         The script is very primitive and does a poor job at error checking.
2335         It only installs the base system, ml-lex, and ml-yacc.  No other
2336         libraries are being installed (i.e., you get only those that
2337         are part of the compiler.)
2338       - link-sml.bat:  analogous to .link-sml, but not currently used
2339    
2340    Unrelated bug fixes:
2341    
2342      - ml-nlffigen now exports structures ST_* corresponding to incomplete
2343        types.
2344      - Added getDevice to PP/src/pp-debug-fn.sml.  (Would not compile
2345        otherwise.)
2346    
2347    ----------------------------------------------------------------------
2348    Name: Dave MacQueen (macqueen@cs.uchicago.edu)
2349    Date: 2003/06/17
2350    Tag: macqueen-20030617-bug895
2351    Description:
2352    
2353    Modified compiler/Elaborator/print/pptype.sml to fix bug 895.
2354    Tag will be used for new development branch (mcz-branch) for
2355    use by MacQueen, (Lucasz) Zairek, and (George) Cao at uchicago.
2356    
2357    ----------------------------------------------------------------------
2358    Name: Matthias Blume (blume (at) tti - c (dot) org)
2359    Date: 2003/05/27 16:55:00 CDT
2360    Tag: blume-20030527-polyeq
2361    Description:
2362    
2363    Tried to eliminated most cases of polymorphic equality.
2364    
2365    ----------------------------------------------------------------------
2366    Name: Matthias Blume (blume (at) tti - c (dot) org)
2367    Date: 2003/05/21 17:45:00 CDT
2368    Tag: blume-20030517-complete
2369    Description:
2370    
2371    Two changes:
2372    
2373      1. Added a flag for controlling whether non-exhaustive bindings will
2374         be treated as errors (default is false).
2375      2. Cleaned up the *entire* source tree so that CMB.make goes through
2376         without a single non-exhaustive match- or bind warning.
2377    
2378    ----------------------------------------------------------------------
2379    Name: Matthias Blume (blume (at) tti - c (dot) org)
2380    Date: 2003/05/17 10:20:00 CDT
2381    Tag: blume-20030517-absyn
2382    Description:
2383    
2384    1. Added cases for IF, WHILE, ANDALSO, and ORELSE to Absyn.
2385    
2386       This mainly affects the quality of error messages.  However, some
2387       of the code is now more straightforward than before. (Treatment of
2388       the above four constructs in translate.sml is much simpler than
2389       the "macro-expansion" that was going on before.  Plus, the mach-
2390       compiler no longer gets invoked just to be able to compile an
2391       if-expression.)
2392    
2393    2. The ErrorMsg.Error exception is now caught and absorbed by the
2394       interactive loop.
2395    
2396    ----------------------------------------------------------------------
2397    Name: Allen Leung
2398    Date: 2003/05/16 13:05:00 CDT
2399    Tag: leunga-20030516-cygwin-runtime
2400    Description:
2401    
2402        Ported the runtime system to cygwin, which uses the unix
2403    x86-unix bin files.  Missing/buggy features:
2404    
2405       o getnetbyname, getnetbyaddr: these functions seem to be missing in
2406         the Cygwin library.
2407       o Ctrl-C handling may be flaky.
2408       o Windows system calls and Windows I/O are not supported.
2409    
2410       A new set of binfiles is located at:
2411    
2412         http://www.dorsai.org/~leunga/boot.x86-unix.tgz
2413    
2414       This is only needed for bootstrapping the cygwin version of smlnj.
2415       Other x86 versions can use the existing binfiles.
2416    
2417    ----------------------------------------------------------------------
2418    Name: Matthias Blume
2419    Date: 2003/04/08 15:42:00 CDT
2420    Tag: blume-20030408-listpair
2421    Description:
2422    
2423    1. Added a target 'mlrisc' to installer.
2424    
2425    2. Added missing elements to structure ListPair.
2426    
2427    ----------------------------------------------------------------------
2428    Name: Allen Leung
2429    Date: 2003/01/07 10:40:00 EST
2430    Tag: leunga-20030107-int-rem
2431    Description:
2432    
2433    Fixed a bug in Int.rem(x,y) where y is a power of 2 on x86.
2434    The arguments to the SUBL instruction were swapped.
2435    
2436    ----------------------------------------------------------------------
2437    Name: Matthias Blume
2438    Date: 2002/12/12 16:25:00 EST
2439    Tag: blume-20021212-risc-ra
2440    Description:
2441    
2442    Fixed a serious bug in the rewrite code for FP spilling/reloading that
2443    sent the RA into an infinite loop when floating point registers get
2444    spilled.  (Because of this bug, e.g., nucleic stopped compiling between
2445    110.37 and 110.38.)
2446    There was another set of potential problems related to the handling of
2447    MLRISC annotations (but those did not yet cause real problems, apparently).
2448    
2449    ----------------------------------------------------------------------
2450    Name: Matthias Blume
2451    Date: 2002/12/06 22:40:00 EST
2452    Tag: blume-20021206-cm-fileid
2453    Description:
2454    
2455    Added a call of SrcPath.sync at the beginning of Parse.parse (in CM).
2456    This fixes the problem of CM getting confused by files that suddenly
2457    change their identity (e.g., by getting unlinked and recreated by some
2458    text editor such as vi).  There might be a better/cheaper/cleaner way
2459    of doing this, but for now this will have to do.
2460    
2461    ----------------------------------------------------------------------
2462    Name: Matthias Blume
2463    Date: 2002/10/28 09:50:00 EST
2464    Tag: blume-20021028-typecheck
2465    Description:
2466    
2467    Exported structure Typecheck from $smlnj/viscomp/core.cm.
2468    
2469    ----------------------------------------------------------------------
2470    Name: Matthias Blume
2471    Date: 2002/10/17 09:10:00 EDT
2472    Tag: Release_110_42
2473    Description:
2474    
2475    In good old tradition, there has been a slight hiccup so that we have
2476    to patch 110.42 after the fact.   The old release tag has been replaced
2477    (see below).
2478    
2479    The change solves a problem with two competing approaches the
2480    configuration problem regarding MacOS 10.1 vs. MacOS 10.2 which got in
2481    each other's way.
2482    
2483    This change only affects the runtime system code and the installer script.
2484    (No new bootfiles.)
2485    
2486    ----------------------------------------------------------------------
2487    Name: Matthias Blume
2488    Date: 2002/10/16 12:00:00 EDT
2489    Tag: Release_110_42_removed
2490    Description:
2491    
2492    New working release.  New bootfiles.
2493    
2494    ----------------------------------------------------------------------
2495    Name: Matthias Blume
2496    Date: 2002/10/10 13:10:00 EDT
2497    Tag: blume-20021010-ppc-divs
2498    Description:
2499    
2500    The mltree operator DIVS must be implemented with an overflow check on
2501    the PPC because the hardware indicates divide-by-zero using "overflow" as
2502    well.
2503    
2504    ----------------------------------------------------------------------
2505    Name: Matthias Blume
2506    Date: 2002/07/23 11:45:00
2507    Tag: blume-20020723-smlnj-home
2508    Description:
2509    
2510    Sml now senses the SMLNJ_HOME environment variable.  If this is set,
2511    then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless
2512    CM_PATHCONFIG is also set), the path configuration file is assumed
2513    to be in $SMLNJ_HOME/lib/pathconfig.  This way one can easily move
2514    the entire tree to some other place and everything will "just work".
2515    
2516    (Companion commands such as ml-build and ml-makedepend also sense this
2517    variable.)
2518    
2519    ----------------------------------------------------------------------
2520    Name: Matthias Blume
2521    Date: 2002/07/12 21:19:00 EDT
2522    Tag: blume-20020712-liveness
2523    Description:
2524    
2525    Exported two useful "step" functions from liveness module (MLRISC).
2526    
2527    ----------------------------------------------------------------------
2528    Name: Matthias Blume
2529    Date: 2002/07/05 16:00 EDT
2530    Tag: Release_110_41
2531    Description:
2532    
2533    New working release.  New bootfiles.
2534    
2535    ----------------------------------------------------------------------
2536    Name: Matthias Blume
2537    Date: 2002/07/05 10:25:00 EDT
2538    Tag: blume-20020705-btimp
2539    Description:
2540    
2541    Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that
2542    other clients can set up backtracing support.
2543    
2544    ----------------------------------------------------------------------
2545    Name: Matthias Blume
2546    Date: 2002/06/25 17:23:00 EDT
2547    Tag: blume-20020625-fpmax
2548    Description:
2549    
2550    Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point
2551    case.  (The sense of the isNaN test was reversed -- which made min and
2552    max always return their first argument.)
2553    
2554    ----------------------------------------------------------------------
2555    Name: Matthias Blume
2556    Date: 2002/06/11
2557    Tag: blume-20020611-unixpath
2558    Description:
2559    
2560    Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch.
2561    
2562    ----------------------------------------------------------------------
2563    Name: Matthias Blume
2564    Date: 2002/06/10 16:35:00 EDT
2565    Tag: blume-20020610-ieeereal
2566    Description:
2567    
2568    I back-ported my implementation of IEEEReal.fromString from the
2569    idlbasis-devel branch so that we can test it.
2570    
2571    Another small change is that ppDec tries to give more information
2572    than just "<sig>" in the case of functors.  However, this code is
2573    broken in some mysterious way if the functor's body's signature
2574    has not been declared by ascription but gets inferred from the
2575    implementation.  This needs fixing...
2576    
2577    ----------------------------------------------------------------------
2578    Name: Matthias Blume
2579    Date: 2002/05/31
2580    Tag: blume-20020531-btrace-mode
2581    Description:
2582    
2583    Resurrected SMLofNJ.Internals.BTrace.mode.  (It accidentally fell by
2584    the wayside when I switched over to using Controls everywhere.)
2585    
2586    ----------------------------------------------------------------------
2587    Name: Lal George
2588    Date: 2002/05/23 12:21:40 EDT
2589    Tag: george-20020523-visual-labels
2590    Description:
2591    
2592    Labels are now displayed in the graphical output to make
2593    the fall-through and target blocks obvious.
2594    
2595    ----------------------------------------------------------------------
2596    Name: Matthias Blume
2597    Date: 2002/05/22 11:03:00 EDT
2598    Tag: blume-20020522-shrink
2599    Description:
2600    
2601    John tweaked yesterday's fix for 1131 to handle an out-of-memory
2602    situation that comes up when allocating huge arrays.
2603    
2604    ----------------------------------------------------------------------
2605    Name: Matthias Blume
2606    Date: 2002/05/21 16:00:00 EDT
2607    Tag: Release_110_40
2608    Description:
2609    
2610    New working release (110.40).  New bootfiles.
2611    
2612    [Also: John Reppy fixed GC bug 1131.]
2613    
2614    ----------------------------------------------------------------------
2615    Name: Matthias Blume
2616    Date: 2002/05/21 12:35:00 EDT
2617    Tag: blume-20020521-cmdoc
2618    Description:
2619    
2620    CM documentation update.
2621    
2622    ----------------------------------------------------------------------
2623    Name: Matthias Blume
2624    Date: 2002/05/21 10:55:00 EDT
2625    Tag: blume-20020521-misc
2626    Description:
2627    
2628    - John tweaked runtime to be silent on heap export (except when
2629      GC messages are on).
2630    - I added a few more things (cross-compiling versions of CMB) to
2631      config/preloads (as suggestions).
2632    
2633    ----------------------------------------------------------------------
2634    Name: Matthias Blume
2635    Date: 2002/05/20 22:25:00 EDT
2636    Tag: blume-20020520-controls
2637    Description:
2638    
2639    - Added ControlUtil structure to control-lib.cm.
2640    - Use it throughout.
2641    - Used Controls facility to define MLRISC controls (as opposed to
2642      registering MLRISC control ref cells with Controls after the fact)
2643    - Fixed messed-up controls priorities.
2644    
2645    * Removed again all the stuff from config/preloads that one wouldn't
2646      be able to preload at the time the initial heap image is built.
2647      (Many libraries, e.g., CML, do not exist yet at this time.  The
2648       only libraries that can be preloaded via config/preloads are those
2649       that come bundled with the bootfiles.)
2650    
2651    ----------------------------------------------------------------------
2652    Name: Matthias Blume
2653    Date: 2002/05/20 10:59:00 EDT
2654    Tag: blume-20020520-preloads
2655    Description:
2656    
2657    Added a lot of commented-out suggestions for things to be included
2658    in config/preloads.
2659    
2660    ----------------------------------------------------------------------
2661    Name: Allen Leung
2662    Date: 2002/05/18 14:20:00 EDT
2663    Tag: leunga-20020518-mdl
2664    Description:
2665    
2666    o Made the mdl tool stuff compile and run again.
2667    o I've disabled all the stuff that depends on RTL specifications; they
2668      are all badly broken anyway.
2669    
2670    ----------------------------------------------------------------------
2671    Name: Matthias Blume
2672    Date: 2002/05/17 16:49:00 EDT
2673    Tag: blume-20020517-controls
2674    Description:
2675    
2676    0. John Reppy made several modifications to the SML/NJ library.
2677       In particular, there is a shiny new controls-lib.cm.
2678    
2679    1. Pushed new controls interface through compiler so that everything
2680       compiles again.
2681    
2682    2. Added FormatComb and FORMAT_COMB to the CML version of the
2683       SML/NJ library (so that CML compiles again).
2684    
2685    3. Modified init scripts because XXX_DEFAULT environment variables
2686       are no longer with us.  (Boot-time initialization is now done
2687       using the same environment variables that are also used for
2688       startup-time initialization of controls.)
2689    
2690    ----------------------------------------------------------------------
2691    Name: Lal George
2692    Date: 2002/05/15 09:20:10 EDT
2693    Tag: george-20020515-pseudo-op-decls
2694    Description:
2695    
2696            All pseudo-ops emitted before the first segment declaration
2697    such as TEXT, DATA, and BSS directives are assumed to be global
2698    declarations and are emitted first in the assembly file. This is
2699    useful in a number of situations where one has pseudo-ops that are not
2700    specific to any segment, and also works around the constraint that one
2701    cannot have client pseudo-ops in the TEXT segment.
2702    
2703            Because no segment is associated with these declarations it is
2704    an error to allocate any space or objects before the first segment
2705    directive and an exception will be raised. However, we cannot make
2706    this check for client pseudo-ops.
2707    
2708            These top level declarations are a field in the CFG graph_info.
2709    In theory you can continue to add to this field after the CFG has been
2710    built -- provided you know what you are doing;-)
2711    
2712    ----------------------------------------------------------------------
2713    Name: Matthias Blume
2714    Date: 2002/05/13 16:40:00 EDT
2715    Tag: blume-20020513-pp-etc
2716    Description:
2717    
2718    A few minor bugfixes:
2719    
2720      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
2721        (Bogus printouts for redefined bindings still occur.  Compiler
2722        bug should no longer occur now.  We need to redo the prettyprinter
2723        from scratch.)
2724    
2725      - CM pathname printer now also adds escape sequences for ( and )
2726    
2727      - commend and docu fixes for ml-nlffi
2728    
2729    ----------------------------------------------------------------------
2730    Name: Matthias Blume
2731    Date: 2002/05/10 16:40:00 EDT
2732    Tag: blume-20020510-erg-textio
2733    Description:
2734    
2735    Applied the following bugfix provided by Emden Gansner:
2736    
2737        Output is corrupted when outputSubstr is used rather than output.
2738    
2739        The problem occurs when a substring
2740    
2741            ss = (s, dataStart, dataLen)
2742    
2743        where dataStart > 0, fills a stream buffer with avail bytes left.
2744        avail bytes of s, starting at index dataStart, are copied into the
2745        buffer, the buffer is flushed, and then the remaining dataLen-avail
2746        bytes of ss are copied into the beginning of the buffer. Instead of
2747        starting this copy at index dataStart+avail in s, the current code
2748        starts the copy at index avail.
2749    
2750        Fix:
2751        In text-io-fn.sml, change line 695 from
2752             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
2753        to
2754             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
2755    
2756    ----------------------------------------------------------------------
2757    Name: Matthias Blume
2758    Date: 2002/04/12 13:55:00 EDT
2759    Tag: blume-20020412-assyntax
2760    Description:
2761    
2762    1. Grabbed newer assyntax.h from the XFree86 project.
2763    2. Fiddled with how to compile X86.prim.asm without warnings.
2764    3. (Very) Minor cleanup in CM.
2765    
2766    ----------------------------------------------------------------------
2767    Name: Matthias Blume
2768    Date: 2002/04/01 (no joke!) 17:07:00 EST
2769    Tag: blume-20020401-x86div
2770    Description:
2771    
2772    Added full support for div/mod/rem/quot on the x86, using the machine
2773    instruction's two results (without clumsily recomputing the remainder)
2774    directly where appropriate.
2775    
2776    Some more extensive power-of-two support was added to the x86 instruction
2777    selector (avoiding expensive divs, mods, and muls where they can be
2778    replaced with cheaper shifts and masks).  However, this sort of thing
2779    ought to be done earlier, e.g., within the CPS optimizer so that
2780    all architectures benefit from it.
2781    
2782    The compiler compiles to a fixed point, but changes might be somewhat
2783    fragile nevertheless.  Please, report any strange things that you might
2784    see wrt. div/mod/quot/rem...
2785    
2786    ----------------------------------------------------------------------
2787    Name: Matthias Blume
2788    Date: 2002/03/29 17:22:00
2789    Tag: blume-20020329-div
2790    Description:
2791    
2792    Fixed my broken div/mod logic.  Unfortunately, this means that the
2793    inline code for div/mod now has one more comparison than before.
2794    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
2795    The problem was with quotient = 0, because that alone does not tell
2796    us which way the rounding went.  One then has to look at whether
2797    remainder and divisor have the same sign...  :(
2798    
2799    Anyway, I replaced the bootfiles with fresh ones...
2800    
2801    ----------------------------------------------------------------------
2802    Name: Matthias Blume
2803    Date: 2002/03/29 14:10:00 EST
2804    Tag: blume-20020329-inlprims
2805    Description:
2806    
2807    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
2808    
2809    Primops have changed. This means that the bin/boot-file formats have
2810    changed as well.
2811    
2812    To make sure that there is no confusion, I made a new version.
2813    
2814    
2815    CHANGES:
2816    
2817    * removed REMT from mltree (remainder should never overflow).
2818    
2819    * added primops to deal with divisions of all flavors to the frontend
2820    
2821    * handled these primops all the way through so they map to their respective
2822      MLRISC support
2823    
2824    * used these primops in the implementation of Int, Int32, Word, Word32
2825    
2826    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
2827    
2828    * parameterized INLMIN, INLMAX, and INLABS by a numkind
2829    
2830    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
2831      floating point
2832    
2833    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
2834      and Real (but Real.abs maps to a separate floating-point-only primop)
2835    
2836    
2837    TODO items:
2838    
2839    * Hacked Alpha32 instruction selection, disabling the selection of REMx
2840      instructions because the machine instruction encoder cannot handle
2841      them.  (Hppa, PPC, and Sparc instruction selection did not handle
2842      REM in the first place, and REM is supported by the x86 machine coder.)
2843    
2844    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
2845      selection phase.  (The two can be streamlined because the hardware
2846      delivers both quotient and remainder at the same time anyway.)
2847    
2848    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
2849      (Currently the behavior is inconsistent both across architectures and
2850      wrt. the draft Basis spec.)
2851    
2852    * Word8 should eventually be handled natively, too.
2853    
2854    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
2855      as if there currently is no execution path that could trigger it in
2856      SML/NJ.  (The assumptions underlying functions arith and promotable do not
2857      hold for things like multiplication and division.)
2858    
2859    ----------------------------------------------------------------------
2860    Name: Matthias Blume
2861    Date: 2002/03/27 16:27:00 EST
2862    Tag: blume-20020327-mlrisc-divisions
2863    Description:
2864    
2865    Added support for all four division operations (ML's div, mod, quot,
2866    and rem) to MLRISC.  In the course of doing so, I also rationalized
2867    the naming (no more annoying switch-around of DIV and QUOT), by
2868    parameterizing the operation by div_rounding_mode (which can be either
2869    DIV_TO_ZERO or DIV_TO_NEGINF).
2870    
2871    The generic MLTreeGen functor takes care of compiling all four
2872    operations down to only round-to-zero div.
2873    
2874    Missing pieces:
2875    
2876      * Doing something smarter than relying on MLTreeGen on architectures
2877        like, e.g., the x86 where hardware division delivers both quotient and
2878        remainder at the same time.  With this, the implementation of the
2879        round-to-neginf operations could be further streamlined.
2880    
2881      * Remove inlining support for div/mod/rem from the frontend and replace it
2882        with primops that get carried through to the backend.  Do this for all
2883        int and word types.
2884    
2885    ----------------------------------------------------------------------
2886    Name: Matthias Blume
2887    Date: 2002/03/25 17:25:00 EST
2888    Tag: blume-20020325-divmod
2889    Description:
2890    
2891    I improved (hopefully without breaking them) the implementation of Int.div,
2892    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
2893    advantage of the following observations:
2894    
2895      Let  q = x quot y      r = x rem y
2896           d = x div  y      m = x mod y
2897    
2898    where "quot" is the round-to-zero version of integer division that
2899    hardware usually provides.  Then we have:
2900    
2901         r = x - q * y        where neither the * nor the - will overflow
2902         d = if q >= 0 orelse x = q * y then q else q - 1
2903                              where neither the * nor the - will overflow
2904         m = if q >= 0 orelse r = 0 then r else r + y
2905                              where the + will not overflow
2906    
2907    This results in substantial simplification of the generated code.
2908    The following table shows the number of CFG nodes and edges generated
2909    for
2910            fun f (x, y) = x OPER y
2911            (* with OPER \in div, mod, quot, rem *)
2912    
2913    
2914        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
2915        --------------------------------------------------------
2916         div |         24 |         39 |         12 |         16
2917         mod |         41 |         71 |         12 |         16
2918        quot |          8 |         10 |          8 |         10
2919         rem |         10 |         14 |          8 |         10
2920    
2921    
2922    ----------------------------------------------------------------------
2923    Name: Matthias Blume
2924    Date: 2002/03/25 22:06:00 EST
2925    Tag: blume-20020325-cprotobug
2926    Description:
2927    
2928    Fixed a bug in cproto (c prototype decoder).
2929    
2930    ----------------------------------------------------------------------
2931    Name: Matthias Blume
2932    Date: 2002/03/25 16:00:00 EST
2933    Tag: blume-20020325-raw-primops
2934    Description:
2935    
2936    I did some cleanup to Allen's new primop code and
2937    replaced yesterday's bootfiles with new ones.
2938    (But they are stored in the same place.)
2939    
2940    ----------------------------------------------------------------------
2941    Name: Matthias Blume
2942    Date: 2002/03/24 22:40:00 EST
2943    Tag: blume-20020324-bootfiles
2944    Description:
2945    
2946    Made the bootfiles that Allen asked for.
2947    
2948    ----------------------------------------------------------------------
2949    Name: Allen Leung
2950    Date: 2002/03/23 15:50:00 EST
2951    Tag: leunga-20020323-flint-cps-rcc-primops
2952    Description:
2953    
2954      1. Changes to FLINT primops:
2955    
2956        (* make a call to a C-function;
2957         * The primop carries C function prototype information and specifies
2958         * which of its (ML-) arguments are floating point. C prototype
2959         * information is for use by the backend, ML information is for
2960         * use by the CPS converter. *)
2961      | RAW_CCALL of { c_proto: CTypes.c_proto,
2962                       ml_args: ccall_type list,
2963                       ml_res_opt: ccall_type option,
2964                       reentrant : bool
2965                     } option
2966       (* Allocate uninitialized storage on the heap.
2967        * The record is meant to hold short-lived C objects, i.e., they
2968        * are not ML pointers.  With the tag, the representation is
2969        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
2970        *)
2971      | RAW_RECORD of {tag:bool,sz:int}
2972      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
2973    
2974      2.  These CPS primops are now overloaded:
2975    
2976           rawload of {kind:numkind}
2977           rawstore of {kind:numkind}
2978    
2979          The one argument form is:
2980    
2981             rawload {kind} address
2982    
2983          The two argument form is:
2984    
2985             rawload {kind} [ml object, byte-offset]
2986    
2987      3. RAW_CCALL/RCC now takes two extra arguments:
2988    
2989         a. The first is whether the C call is reentrant, i.e., whether
2990            ML state should be saved and restored.
2991         b. The second argument is a string argument specifying the name of
2992            library and the C function.
2993    
2994         These things are currently not handled in the code generator, yet.
2995    
2996      4. In CProto,
2997    
2998         An encoding type of "bool" means "ml object" and is mapped into
2999         C prototype of PTR.  Note that "bool" is different than "string",
3000         even though "string" is also mapped into PTR, because "bool"
3001         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
3002    
3003      5. Pickler/unpicker
3004    
3005         Changed to handle RAW_RECORD and newest RAW_CCALL
3006    
3007      6. MLRiscGen,
3008    
3009         1. Changed to handle the new rawload/rawstore/rawrecord operators.
3010         2. Code for handling C Calls has been moved to a new module CPSCCalls,
3011            in the file CodeGen/cpscompile/cps-c-calls.sml
3012    
3013      7. Added the conditional move operator
3014    
3015             condmove of branch
3016    
3017         to cps.  Generation of this is still buggy so it is currently
3018         disabled.
3019    
3020    ----------------------------------------------------------------------
3021    Name: Lal George
3022    Date: 2002/03/22 14:18:25 EST
3023    Tag: george-20020322-cps-branch-prob
3024    Description:
3025    
3026    Implemented the Ball-Larus branch prediction-heuristics, and
3027    incorporated graphical viewers for control flow graphs.
3028    
3029    Ball-Larus Heuristics:
3030    ---------------------
3031    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
3032    
3033    By design it uses the Dempster-Shafer theory for combining
3034    probabilities.  For example, in the function:
3035    
3036        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
3037    
3038    the ball-larus heuristics predicts that the n=0 is unlikely
3039    (OH-heuristic), and the 'then' branch is unlikely because of the
3040    RH-heuristic -- giving the 'then' branch an even lower combined
3041    probability using the Dempster-Shafer theory.
3042    
3043    Finally, John Reppy's loop analysis in MLRISC, further lowers the
3044    probability of the 'then' branch because of the loop in the else
3045    branch.
3046    
3047    
3048    Graphical Viewing:
3049    ------------------
3050    I merely plugged in Allen's graphical viewers into the compiler. The
3051    additional code is not much. At the top level, saying:
3052    
3053            Control.MLRISC.getFlag "cfg-graphical-view" := true;
3054    
3055    will display the graphical view of the control flow graph just before
3056    back-patching.  daVinci must be in your path for this to work. If
3057    daVinci is not available, then the default viewer can be changed
3058    using:
3059    
3060            Control.MLRISC.getString "viewer"
3061    
3062    which can be set to "dot" or "vcg" for the corresponding viewers. Of
3063    course, these viewers must be in your path.
3064    
3065    The above will display the compilation unit at the level of clusters,
3066    many of which are small, boring, and un-interesting. Also setting:
3067    
3068            Control.MLRISC.getInt "cfg-graphical-view_size"
3069    
3070    will display clusters that are larger than the value set by the above.
3071    
3072    
3073    ----------------------------------------------------------------------
3074    Name: Matthias Blume
3075    Date: 2002/03/21 22:20:00 EST
3076    Tag: blume-20020321-kmp-bugfix
3077    Description:
3078    
3079    Changed the interface to the KMP routine in PreString and fixed
3080    a minor bug in one place where it was used.
3081    
3082    ----------------------------------------------------------------------
3083    Name: Allen Leung
3084    Date: 2002/03/21 20:30:00 EST
3085    Tag: leunga-20020321-cfg
3086    Description:
3087    
3088      Fixed a potential problem in cfg edge splitting.
3089    
3090    ----------------------------------------------------------------------
3091    Name: Allen Leung
3092    Date: 2002/03/21 17:15:00 EST
3093    Tag: leunga-20020321-x86-fp-cfg
3094    Description:
3095    
3096      1. Recoded the buggy parts of x86-fp.
3097    
3098         a. All the block reordering code has been removed.
3099            We now depend on the block placement phases to do this work.
3100    
3101         b. Critical edge splitting code has been simplified and moved into the
3102            CFG modules, as where they belong.
3103    
3104         Both of these were quite buggy and complex.  The code is now much, much
3105         simpler.
3106    
3107      2. X86 backend.
3108    
3109         a. Added instructions for 64-bit support.  Instruction selection for
3110            64-bit has not been committed, however, since that
3111            requires changes to MLTREE which haven't been approved by
3112            Lal and John.
3113    
3114         b. Added support for FUCOMI and FUCOMIP when generating code for
3115            PentiumPro and above.  We only generate these instructions in
3116            the fast-fp mode.
3117    
3118         c. Added cases for JP and JNP in X86FreqProps.
3119    
3120      3. CFG
3121    
3122         CFG now has a bunch of methods for edge splitting and merging.
3123    
3124      4. Machine description.
3125    
3126         John's simplification of MLTREE_BASIS.fcond broke a few machine
3127         description things:
3128    
3129         rtl-build.{sig,sml} and hppa.mdl fixed.
3130    
3131         NOTE: the machine description stuff in the repository is still broken.
3132               Again, I can't put my fixes in because that involves
3133               changes to MLTREE.
3134    
3135    ----------------------------------------------------------------------
3136    Name: Matthias Blume
3137    Date: 2002/03/20 15:55:00 EST
3138    Tag: blume-20020320-kmp
3139    Description:
3140    
3141    Implemented Knuth-Morris-Pratt string matching in PreString and used
3142    it for String.isSubstring, Substring.isSubstring, and
3143    Substring.position.
3144    
3145    (Might need some stress-testing.  Simple examples worked fine.)
3146    
3147    ----------------------------------------------------------------------
3148    Name: Matthias Blume
3149    Date: 2002/03/19 16:37:00 EST
3150    Tag: blume-20020319-witnesses
3151    Description:
3152    
3153    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
3154    
3155    This implements a generic mechanism for changing constness qualifiers
3156    anywhere within big C types without resorting to outright "casts".
3157    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
3158    modify the constness at the outermost level.)
3159    The implementation of "convert" is based on the idea of "witness"
3160    values -- values that are not used by the operation but whose types
3161    "testify" to their applicability.  On the implementation side, "convert"
3162    is simply a projection (returning its second curried argument).  With
3163    cross-module inlining, it should not result in any machine code being
3164    generated.
3165    
3166    ----------------------------------------------------------------------
3167    Name: Matthias Blume
3168    Date: 2002/03/15 16:40:00 EST
3169    Tag: blume-20020315-basis
3170    Description:
3171    
3172    Provided (preliminary?) implementations for
3173    
3174      {String,Substring}.{concatWith,isSuffix,isSubstring}
3175    
3176    and
3177    
3178      Substring.full
3179    
3180    Those are in the Basis spec but they were missing in SML/NJ.
3181    
3182    ----------------------------------------------------------------------
3183    Name: Matthias Blume
3184    Date: 2002/03/14 21:30:00 EST
3185    Tag: blume-20020314-controls
3186    Description:
3187    
3188    Controls:
3189    ---------
3190    
3191    1. Factored out the recently-added Controls : CONTROLS stuff and put
3192       it into its own library $/controls-lib.cm.  The source tree for
3193       this is under src/smlnj-lib/Controls.
3194    
3195    2. Changed the names of types and functions in this interface, so they
3196       make a bit more "sense":
3197    
3198          module -> registry
3199          'a registry -> 'a group
3200    
3201    3. The interface now deals in ref cells only.  The getter/setter interface
3202       is (mostly) gone.
3203    
3204    4. Added a function that lets one register an already-existing ref cell.
3205    
3206    5. Made the corresponding modifications to the rest of the code so that
3207       everything compiles again.
3208    
3209    6. Changed the implementation of Controls.MLRISC back to something closer
3210       to the original.  In particular, this module (and therefore MLRISC)
3211       does not depend on Controls.  There now is some link-time code in
3212       int-sys.sml that registers the MLRISC controls with the Controls
3213       module.
3214    
3215    CM:
3216    ---
3217    
3218      * One can now specify the lambda-split aggressiveness in init.cmi.
3219    
3220    ----------------------------------------------------------------------
3221    Name: Allen Leung
3222    Date: 2002/03/13 17:30:00 EST
3223    Tag: leunga-20020313-x86-fp-unary
3224    Description:
3225    
3226    Bug fix for:
3227    
3228    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
3229    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
3230    > - fun f(x,(y,z)) = Real.~ y;
3231    > [autoloading]
3232    > [autoloading done]
3233    >       fchsl   (%eax), 184(%esp)
3234    > Error: MLRisc bug: X86MCEmitter.emitInstr
3235    >
3236    > uncaught exception Error
3237    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
3238    
3239    The problem was that the code generator did not generate any fp registers
3240    in this case, and the ra didn't know that it needed to run the X86FP phase to
3241    translate the pseudo fp instruction.   This only happened with unary fp
3242    operators in certain situations.
3243    
3244    ----------------------------------------------------------------------
3245    Name: Matthias Blume
3246    Date: 2002/03/13 14:00:00 EST
3247    Tag: blume-20020313-overload-etc
3248    Description:
3249    
3250    1. Added _overload as a synonym for overload for backward compatibility.
3251       (Control.overloadKW must be true for either version to be accepted.)
3252    
3253    2. Fixed bug in install script that caused more things to be installed
3254       than what was requested in config/targets.
3255    
3256    3. Made CM aware of the (_)overload construct so that autoloading
3257       works.
3258    
3259    ----------------------------------------------------------------------
3260    Name: Matthias Blume
3261    Date: 2002/03/12 22:03:00 EST
3262    Tag: blume-20020312-url
3263    Description:
3264    
3265    Forgot to update BOOT and srcarchiveurl.
3266    
3267    ----------------------------------------------------------------------
3268    Name: Matthias Blume
3269    Date: 2002/03/12 17:30:00 EST
3270    Tag: blume-20020312-version110392
3271    Description:
3272    
3273    Yet another version number bump (because of small changes to the
3274    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
3275    
3276    Changes:
3277    
3278      The new pid generation scheme described a few weeks ago was overly
3279      complicated.  I implemented a new mechanism that is simpler and
3280      provides a bit more "stability":  Once CM has seen a compilation
3281      unit, it keeps its identity constant (as long as you do not delete
3282      those crucial CM/GUID/* files).  This means that when you change
3283      an interface, compile, then go back to the old interface, and
3284      compile again, you arrive at the original pid.
3285    
3286      There now also is a mechanism that instructs CM to use the plain
3287      environment hash as a module's pid (effectively making its GUID
3288      the empty string).  For this, "noguid" must be specified as an
3289      option to the .sml file in question within its .cm file.
3290      This is most useful for code that is being generated by tools such
3291      as ml-nlffigen (because during development programmers tend to
3292      erase the tool's entire output directory tree including CM's cached
3293      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
3294      revert to the old, broken behavior of SML/NJ, but in specific cases
3295      where there is no danger of interface confusion, its use is ok
3296      (I think).
3297    
3298      ml-nlffigen by default generates "noguid" annotations.  They can be
3299      turned off by specifying -guid in its command line.
3300    
3301    ----------------------------------------------------------------------
3302    Name: Lal George
3303    Date: 2002/03/12 12 14:42:36 EST
3304    Tag: george-20020312-frequency-computation
3305    Description:
3306    
3307    Integrated jump chaining and static block frequency into the
3308    compiler. More details and numbers later.
3309    
3310    ----------------------------------------------------------------------
3311    Name: Lal George
3312    Date: 2002/03/11 11 22:38:53 EST
3313    Tag: george-20020311-jump-chain-elim
3314    Description:
3315    
3316    Tested the jump chain elimination on all architectures (except the
3317    hppa).  This is on by default right now and is profitable for the
3318    alpha and x86, however, it may not be profitable for the sparc and ppc
3319    when compiling the compiler.
3320    
3321    The gc test will typically jump to a label at the end of the cluster,
3322    where there is another jump to an external cluster containing the actual
3323    code to invoke gc. This is to allow factoring of common gc invocation
3324    sequences. That is to say, we generate:
3325    
3326            f:
3327               testgc
3328               ja   L1      % jump if above to L1
3329    
3330            L1:
3331               jmp L2
3332    
3333    
3334    After jump chain elimination the 'ja L1' instructions is converted to
3335    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
3336    up being implemented in their long form (if L2 is far away) using:
3337    
3338            jbe     L3      % jump if below or equal to L3
3339            jmp     L2
3340         L3:
3341            ...
3342    
3343    
3344    For large compilation units L2  may be far away.
3345    
3346    
3347    ----------------------------------------------------------------------
3348    Name: Matthias Blume
3349    Date: 2002/03/11 13:30:00 EST
3350    Tag: blume-20020311-mltreeeval
3351    Description:
3352    
3353    A functor parameter was missing.
3354    
3355    ----------------------------------------------------------------------
3356    Name: Allen Leung
3357    Date: 2002/03/11 10:30:00 EST
3358    Tag: leunga-20020311-runtime-string0
3359    Description:
3360    
3361       The representation of the empty string now points to a
3362    legal null terminated C string instead of unit.  It is now possible
3363    to convert an ML string into C string with InlineT.CharVector.getData.
3364    This compiles into one single machine instruction.
3365    
3366    ----------------------------------------------------------------------
3367    Name: Allen Leung
3368    Date: 2002/03/10 23:55:00 EST
3369    Tag: leunga-20020310-x86-call
3370    Description:
3371    
3372       Added machine generation for CALL instruction (relative displacement mode)
3373    
3374    ----------------------------------------------------------------------
3375    Name: Matthias Blume
3376    Date: 2002/03/08 16:05:00
3377    Tag: blume-20020308-entrypoints
3378    Description:
3379    
3380    Version number bumped to 110.39.1.  NEW BOOTFILES!
3381    
3382    Entrypoints: non-zero offset into a code object where execution should begin.
3383    
3384    - Added the notion of an entrypoint to CodeObj.
3385    - Added reading/writing of entrypoint info to Binfile.
3386    - Made runtime system bootloader aware of entrypoints.
3387    - Use the address of the label of the first function given to mlriscGen
3388      as the entrypoint.  This address is currently always 0, but it will
3389      not be 0 once we turn on block placement.
3390    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
3391      with entry points) from mlriscGen.
3392    
3393    ----------------------------------------------------------------------
3394    Name: Allen Leung
3395    Date: 2002/03/07 20:45:00 EST
3396    Tag: leunga-20020307-x86-cmov
3397    Description:
3398    
3399       Bug fixes for CMOVcc on x86.
3400    
3401       1. Added machine code generation for CMOVcc
3402       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
3403       3. CMOVcc cannot have an immediate operand as argument.
3404    
3405    ----------------------------------------------------------------------
3406    Name: Matthias Blume
3407    Date: 2002/03/07 16:15:00 EST
3408    Tag: blume-20020307-controls
3409    Description:
3410    
3411    This is a very large but mostly boring patch which makes (almost)
3412    every tuneable compiler knob (i.e., pretty much everything under
3413    Control.* plus a few other things) configurable via both the command
3414    line and environment variables in the style CM did its configuration
3415    until now.
3416    
3417    Try starting sml with '-h' (or, if you are brave, '-H')
3418    
3419    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
3420    implements the underlying generic mechanism.
3421    
3422    The interface to some of the existing such facilities has changed somewhat.
3423    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
3424    (The getFoo interface is still there for backward-compatibility, but its
3425    use is deprecated.)
3426    
3427    The ml-build script passes -Cxxx=yyy command-line arguments through so
3428    that one can now twiddle the compiler settings when using this "batch"
3429    compiler.
3430    
3431    TODO items:
3432    
3433    We should go through and throw out all controls that are no longer
3434    connected to anything.  Moreover, we should go through and provide
3435    meaningful (and correct!) documentation strings for those controls
3436    that still are connected.
3437    
3438    Currently, multiple calls to Controls.new are accepted (only the first
3439    has any effect).  Eventually we should make sure that every control
3440    is being made (via Controls.new) exactly once.  Future access can then
3441    be done using Controls.acc.
3442    
3443    Finally, it would probably be a good idea to use the getter-setter
3444    interface to controls rather than ref cells.  For the time being, both
3445    styles are provided by the Controls module, but getter-setter pairs are
3446    better if thread-safety is of any concern because they can be wrapped.
3447    
3448    *****************************************
3449    
3450    One bug fix: The function blockPlacement in three of the MLRISC
3451    backpatch files used to be hard-wired to one of two possibilities at
3452    link time (according to the value of the placementFlag).  But (I
3453    think) it should rather sense the flag every time.
3454    
3455    *****************************************
3456    
3457    Other assorted changes (by other people who did not supply a HISTORY entry):
3458    
3459    1. the cross-module inliner now works much better (Monnier)
3460    2. representation of weights, frequencies, and probabilities in MLRISC
3461       changed in preparation of using those for weighted block placement
3462       (Reppy, George)
3463    
3464    ----------------------------------------------------------------------
3465    Name: Lal George
3466    Date: 2002/03/07 14:44:24 EST 2002
3467    Tag: george-20020307-weighted-block-placement
3468    
3469    Tested the weighted block placement optimization on all architectures
3470    (except the hppa) using AMPL to generate the block and edge frequencies.
3471    Changes were required in the machine properties to correctly
3472    categorize trap instructions. There is an MLRISC flag
3473    "weighted-block-placement" that can be used to enable weighted block
3474    placement, but this will be ineffective without block/edge
3475    frequencies (coming soon).
3476    
3477    
3478    ----------------------------------------------------------------------
3479    Name: Lal George
3480    Date: 2002/03/05 17:24:48 EST
3481    Tag: george-20020305-linkage-cluster
3482    
3483    In order to support the block placement optimization, a new cluster
3484    is generated as the very first cluster (called the linkage cluster).
3485    It contains a single jump to the 'real' entry point for the compilation
3486    unit. Block placement has no effect on the linkage cluster itself, but
3487    all the other clusters  have full freedom in the manner in which they
3488    reorder blocks or functions.
3489    
3490    On the x86 the typical linkage code that is generated is:
3491       ----------------------
3492            .align 2
3493       L0:
3494            addl    $L1-L0, 72(%esp)
3495            jmp     L1
3496    
3497    
3498            .align  2
3499       L1:
3500       ----------------------
3501    
3502    72(%esp) is the memory location for the stdlink register. This
3503    must contain the address of the CPS function being called. In the
3504    above example, it contains the address of  L0; before
3505    calling L1 (the real entry point for the compilation unit), it
3506    must contain the address for L1, and hence
3507    
3508            addl $L1-L0, 72(%esp)
3509    
3510    I have tested this on all architectures except the hppa.The increase
3511    in code size is of course negligible
3512    
3513    ----------------------------------------------------------------------
3514    Name: Allen Leung
3515    Date: 2002/03/03 13:20:00 EST
3516    Tag: leunga-20020303-mlrisc-tools
3517    
3518      Added #[ ... ] expressions to mlrisc tools
3519    
3520    ----------------------------------------------------------------------
3521    Name: Matthias Blume
3522    Date: 2002/02/27 12:29:00 EST
3523    Tag: blume-20020227-cdebug
3524    Description:
3525    
3526    - made types in structure C and C_Debug to be equal
3527    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
3528    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
3529    
3530    ----------------------------------------------------------------------
3531    Name: Matthias Blume
3532    Date: 2002/02/26 12:00:00 EST
3533    Tag: blume-20020226-ffi
3534    Description:
3535    
3536    1. Fixed a minor bug in CM's "noweb" tool:
3537       If numbering is turned off, then truly don't number (i.e., do not
3538       supply the -L option to noweb).  The previous behavior was to supply
3539       -L'' -- which caused noweb to use the "default" line numbering scheme.
3540       Thanks to Chris Richards for pointing this out (and supplying the fix).
3541    
3542    2. Once again, I reworked some aspects of the FFI:
3543    
3544       A. The incomplete/complete type business:
3545    
3546       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
3547         gone!
3548       - ML types representing an incomplete type are now *equal* to
3549         ML types representing their corresponding complete types (just like
3550         in C).  This is still safe because ml-nlffigen will not generate
3551         RTTI for incomplete types, nor will it generate functions that
3552         require access to such RTTI.   But when ML code generated from both
3553         incomplete and complete versions of the C type meet, the ML types
3554         are trivially interoperable.
3555    
3556         NOTE:  These changes restore the full generality of the translation
3557         (which was previously lost when I eliminated functorization)!
3558    
3559       B. Enum types:
3560    
3561       - Structure C now has a type constructor "enum" that is similar to
3562         how the "su" constructor works.  However, "enum" is not a phantom
3563         type because each "T enum" has values (and is isomorphic to
3564         MLRep.Signed.int).
3565       - There are generic access operations for enum objects (using
3566         MLRep.Signed.int).
3567       - ml-nlffigen will generate a structure E_foo for each "enum foo".
3568         * The structure contains the definition of type "mlrep" (the ML-side
3569         representation type of the enum).  Normally, mlrep is the same
3570         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
3571         then mlrep will be defined as a datatype -- thus facilitating
3572         pattern matching on mlrep values.
3573         ("-ec" will be suppressed if there are duplicate values in an
3574          enumeration.)
3575         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
3576         will be generated for each C enum constant xxx.
3577         * Conversion functions m2i and i2m convert between mlrep and
3578         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
3579         * Coversion functions c and ml convert between mlrep and "tag enum".
3580         * Access functions (get/set) fetch and store mlrep values.
3581       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
3582         enumerations are merged into one single enumeration represented by
3583         structure E_'.
3584    
3585    ----------------------------------------------------------------------
3586    Name: Allen Leung
3587    Date: 2002/02/25 04:45:00 EST
3588    Tag: leunga-20020225-cps-spill
3589    
3590    This is a new implementation of the CPS spill phase.
3591    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
3592    In case of problems, replace it with the old file spill.sml
3593    
3594    The current compiler runs into some serious performance problems when
3595    constructing a large record.  This can happen when we try to compile a
3596    structure with many items.  Even a very simple structure like the following
3597    makes the compiler slow down.
3598    
3599        structure Foo = struct
3600           val x_1 = 0w1 : Word32.int
3601           val x_2 = 0w2 : Word32.int
3602           val x_3 = 0w3 : Word32.int
3603           ...
3604           val x_N = 0wN : Word32.int
3605        end
3606    
3607    The following table shows the compile time, from N=1000 to N=4000,
3608    with the old compiler:
3609    
3610    N
3611    1000   CPS 100 spill                           0.04u  0.00s  0.00g
3612           MLRISC ra                               0.06u  0.00s  0.05g
3613              (spills = 0 reloads = 0)
3614           TOTAL                                   0.63u  0.07s  0.21g
3615    
3616    1100   CPS 100 spill                           8.25u  0.32s  0.64g
3617           MLRISC ra                               5.68u  0.59s  3.93g
3618              (spills = 0 reloads = 0)
3619           TOTAL                                   14.71u  0.99s  4.81g
3620    
3621    1500   CPS 100 spill                           58.55u  2.34s  1.74g
3622           MLRISC ra                               5.54u  0.65s  3.91g
3623              (spills = 543 reloads = 1082)
3624           TOTAL                                   65.40u  3.13s  6.00g
3625    
3626    2000   CPS 100 spill                           126.69u  4.84s  3.08g
3627           MLRISC ra                               0.80u  0.10s  0.55g
3628              (spills = 42 reloads = 84)
3629           TOTAL                                   129.42u  5.10s  4.13g
3630    
3631    3000   CPS 100 spill                           675.59u  19.03s  11.64g
3632           MLRISC ra                               2.69u  0.27s  1.38g
3633              (spills = 62 reloads = 124)
3634           TOTAL