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

Legend:
Removed from v.837  
changed lines
  Added in v.1411

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0