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/branches/primop-branch-3/NOTES/HISTORY
ViewVC logotype

Diff of /sml/branches/primop-branch-3/NOTES/HISTORY

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

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