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