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

SCM Repository

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

Diff of /sml/trunk/NOTES/HISTORY

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

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