Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/HISTORY
ViewVC logotype

Diff of /sml/trunk/HISTORY

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

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