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

Legend:
Removed from v.1009  
changed lines
  Added in v.1639

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