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

Legend:
Removed from v.1021  
changed lines
  Added in v.1632

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