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