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