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

SCM Repository

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

Diff of /sml/trunk/HISTORY

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

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