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