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

SCM Repository

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

Diff of /sml/trunk/HISTORY

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

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