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

Legend:
Removed from v.993  
changed lines
  Added in v.1532

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