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