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