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