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