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