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

SCM Repository

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

Diff of /sml/trunk/HISTORY

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

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