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

Legend:
Removed from v.1066  
changed lines
  Added in v.1630

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