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

SCM Repository

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

Diff of /sml/trunk/NOTES/HISTORY

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

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