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

SCM Repository

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

Diff of /sml/trunk/NOTES/HISTORY

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

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