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