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 628, Tue Apr 25 21:03:34 2000 UTC revision 1085, Fri Feb 22 00:15:55 2002 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
17    Date: 2002/02/21 20:20:00 EST
18    Tag: leunga-20020221-peephole
19    
20    Regenerated the peephole files.  Some contained typos in the specification
21    and some didn't compile because of pretty printing bugs in the old version
22    of 'nowhere'.
23    
24    ----------------------------------------------------------------------
25    Name: Allen Leung
26    Date: 2002/02/19 20:20:00 EST
27    Tag: leunga-20020219-mlrisc-tools
28    Description:
29    
30       Minor bug fixes to the mlrisc-tools library:
31    
32       1.  Fixed up parsing colon suffixed keywords
33       2.  Added the ability to shut the error messages up
34       3.  Reimplemented the pretty printer and fixed up/improved
35           the pretty printing of handle and -> types.
36       4.  Fixed up generation of literal symbols in the nowhere tool.
37       5.  Added some SML keywords to to sml.sty
38    
39    ----------------------------------------------------------------------
40    Name: Matthias Blume
41    Date: 2002/02/19 16:20:00 EST
42    Tag: blume-20020219-cmffi
43    Description:
44    
45    A wild mix of changes, some minor, some major:
46    
47    * All C FFI-related libraries are now anchored under $c:
48        $/c.cm      --> $c/c.cm
49        $/c-int.cm  --> $c/internals/c-int.cm
50        $/memory.cm --> $c/memory/memory.cm
51    
52    * "make" tool (in CM) now treats its argument pathname slightly
53      differently:
54        1. If the native expansion is an absolute name, then before invoking
55           the "make" command on it, CM will apply OS.Path.mkRelative
56           (with relativeTo = OS.FileSys.getDir()) to it.
57        2. The argument will be passed through to subsequent phases of CM
58           processing without "going native".  In particular, if the argument
59           was an anchored path, then "make" will not lose track of that anchor.
60    
61    * Compiler backends now "know" their respective C calling conventions
62      instead of having to be told about it by ml-nlffigen.  This relieves
63      ml-nlffigen from one of its burdens.
64    
65    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
66    
67    * Export C_DEBUG and C_Debug from $c/c.cm.
68    
69    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
70      subtyping relationship between incomplete pointers and their complete
71      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
72      with the convention of instantiating 'o with ('t, 'c) obj whenever
73      the pointer target type is complete.  In the incomplete case, 'o
74      will be instantiated with some "'c iobj" -- a type obtained by
75      using one of the functors PointerToIncompleteType or PointerToCompleteType.
76    
77      Operations that work on both incomplete and complete pointer types are
78      typed as taking an 'o ptr while operations that require the target to
79      be known are typed as taking some ('t, 'c) obj ptr.
80    
81      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
82      where void is an eqtype without any values.  This makes it possible
83      to work on voidptr values using functions meant to operate on light
84      incomplete pointers.
85    
86    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
87      been vastly simplified.
88    
89    ----------------------------------------------------------------------
90    Name: Matthias Blume
91    Date: 2002/02/19 10:48:00 EST
92    Tag: blume-20020219-pqfix
93    Description:
94    
95    Applied Chris Okasaki's bug fix for priority queues.
96    
97    ----------------------------------------------------------------------
98    Name: Matthias Blume
99    Date: 2002/02/15 17:05:00
100    Tag: Release_110_39
101    Description:
102    
103    Last-minute retagging is becoming a tradition... :-(
104    
105    This is the working release 110.39.
106    
107    ----------------------------------------------------------------------
108    Name: Matthias Blume
109    Date: 2002/02/15 16:00:00 EST
110    Tag: Release_110_39-orig
111    Description:
112    
113    Working release 110.39.  New bootfiles.
114    
115    (Update: There was a small bug in the installer so it wouldn't work
116    with all shells.  So I retagged. -Matthias)
117    
118    ----------------------------------------------------------------------
119    Name: Matthias Blume
120    Date: 2002/02/15 14:17:00 EST
121    Tag: blume-20020215-showbindings
122    Description:
123    
124    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
125    the latter can be useful for exploring what bindings are available at
126    the interactive prompt.  (The first function returns only the list
127    of symbols that are really bound, the second prints those but also the
128    ones that CM's autoloading mechanism knows about.)
129    
130    ----------------------------------------------------------------------
131    Name: Matthias Blume
132    Date: 2002/02/15 12:08:00 EST
133    Tag: blume-20020215-iptrs
134    Description:
135    
136    Two improvements to ml-nlffigen:
137    
138      1. Write files only if they do not exist or if their current contents
139         do not coincide with what's being written.  (That is, avoid messing
140         with the time stamps unless absolutely necessary.)
141    
142      2. Implement a "repository" mechanism for generated files related
143         to "incomplete pointer types".   See the README file for details.
144    
145    ----------------------------------------------------------------------
146    Name: Matthias Blume
147    Date: 2002/02/14 11:50:00 EST
148    Tag: blume-20020214-quote
149    Description:
150    
151    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
152    because of the new and improved tag generation scheme.  (Thanks to Allen
153    Leung for pointing it out.)
154    
155    ----------------------------------------------------------------------
156    Name: Lal George
157    Date: 2002/02/14 09:55:27 EST 2002
158    Tag: george-20020214-isabelle-bug
159    Description:
160    
161    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
162    of Isabelle on the x86.
163    
164    From Allen:
165    -----------
166     I've found the problem:
167    
168         in ra-core.sml, I use the counter "blocked" to keep track of the
169         true number of elements in the freeze queue.  When the counter goes
170         to zero, I skip examining the queue.  But I've messed up the
171         bookkeeping in combine():
172    
173             else ();
174             case !ucol of
175               PSEUDO => (if !cntv > 0 then
176                     (if !cntu > 0 then blocked := !blocked - 1 else ();
177                                        ^^^^^^^^^^^^^^^^^^^^^^^
178                      moveu := mergeMoveList(!movev, !moveu)
179                     )
180                  else ();
181    
182         combine() is called to coalesce two nodes u and v.
183         I think I was thinking that if the move counts of u and v are both
184         greater than zero then after they are coalesced then one node is
185         removed from the freeze queue.  Apparently I was thinking that
186         both u and v are of low degree, but that's clearly not necessarily true.
187    
188    
189    02/12/2002:
190        Here's the patch.  HOL now compiles.
191    
192        I don't know how this impact on performance (compile
193        time or runtime).  This bug caused the RA (especially on the x86)
194        to go thru the potential spill phase when there are still nodes on the
195        freeze queue.
196    
197    
198    
199    
200    ----------------------------------------------------------------------
201    Name: Matthias Blume
202    Date: 2002/02/13 22:40:00 EST
203    Tag: blume-20020213-fptr-rtti
204    Description:
205    
206    Fixed a bug in ml-nlffigen that was introduced with one of the previous
207    updates.
208    
209    ----------------------------------------------------------------------
210    Name: Matthias Blume
211    Date: 2002/02/13 16:41:00 EST
212    Tag: blume-20020213-cmlpq
213    Description:
214    
215    Added new priority queue export symbols (which have just been added to
216    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
217    not compile and the installer would choke.)
218    
219    ----------------------------------------------------------------------
220    Name: Matthias Blume
221    Date: 2002/02/13 16:15:00 EST
222    Tag: blume-20020213-various
223    Description:
224    
225    1. More tweaks to ml-nlffigen:
226    
227       - better internal datastructures (resulting in slight speedup)
228       - "-match" option requires exact match
229       - "localized" gensym counters (untagged structs/unions nested within
230         other structs/unions or within typedefs get a fresh counter; their
231         tag will be prefixed by a concatenation of their parents' tags)
232       - bug fixes (related to calculation of transitive closure of types
233         to be included in the output)
234    
235    2. Minor Basis updates:
236    
237       - added implementations for List.collate and Option.app
238    
239    ----------------------------------------------------------------------
240    Name: Matthias Blume
241    Date: 2002/02/11 15:55:00 EST
242    Tag: blume-20020211-gensym
243    Description:
244    
245    Added a "-gensym" option to command line of ml-nlffigen.  This can be
246    used to specify a "stem" -- a string that is inserted in all "gensym'd"
247    names (ML structure names that correspond to unnamed C structs, unions,
248    and enums), so that separate runs of ml-nlffigen do not clash.
249    
250    ----------------------------------------------------------------------
251    Name: Matthias Blume
252    Date: 2002/02/11 12:05:00 EST
253    Tag: blume-20020211-gensml
254    Description:
255    
256    A quick fix for a problem with GenSML (in the pgraph-util library):
257    Make generation of toplevel "local" optional.  (Strictly speaking,
258    signature definitions within "local" are not legal SML.)
259    
260    Other than that: updates to INSTALL and cm/TODO.
261    
262    ----------------------------------------------------------------------
263    Name: Matthias Blume
264    Date: 2002/02/08 15:00:00 EST
265    Tag: blume-20020208-uniquepid
266    Description:
267    
268    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
269    
270    1. The installer (config/install.sh) has gotten smarter:
271    
272         - Configuration options are a bit easier to specify now
273           (in config/targets).
274         - Bug in recognizing .tar.bz2 files fixed.
275         - Installer automatically resolves dependencies between
276           configuration options (e.g., if you ask for eXene, you will
277           also get cml -- regardless whether you asked for it or not).
278         - Installer can run in "quieter mode" by setting the environment
279           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
280           "completely silent", though.
281         - Build HashCons library as part of smlnj-lib.
282    
283    2. A new scheme for assigning persistent identifiers to compilation
284       units (and, by extension, to types etc.) has been put into place.
285       This fixes a long-standing bug where types and even dynamic values
286       can get internally confused, thereby compromising type safety
287       (abstraction) and dynamic correctness.  See
288    
289         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
290    
291       for an example of how things could go wrong until now.
292    
293       The downside of the new scheme is that pids are not quite as
294       persistent as they used to be: CM will generate a fresh pid
295       for every compilation unit that it thinks it sees for the first
296       time.  That means that if you compile starting from a clean, fresh
297       source tree at two different times, you end up with different
298       binaries.
299    
300       Cutoff recompilation, however, has not been compromised because
301       CM keeps pid information in special caches between runs.
302    
303    ----------------------------------------------------------------------
304    Name: Lal George
305    Date: 2002/02/07 15:34:13 EST 2002
306    Tag: <none>
307    Description:
308    
309    Compilers that generate assembly code may produce  global labels
310    whose value is resolved at link time. The various peephole optimization
311    modules did not take this in account.
312    
313    TODO. The Labels.addrOf function should really return an option
314    type so that clients are forced to deal with this issue, rather
315    than an exception being raised.
316    
317    ----------------------------------------------------------------------
318    Name: Lal George
319    Date: 2002/02/06 13:55:02 EST
320    Tag: george-20020206-ra-breakup
321    Description:
322    
323    1. A bug fix from Allen.
324    
325        A typo causes extra fstp %st(0)'s to be generated at compensation
326        edges, which might cause stack underflow traps at runtime.  This
327        occurs in fft where there are extraneous fstps right before the 'into'
328        trap instruction (in this case they are harmless since none of the
329        integers overflow.)
330    
331    2. Pulled out various utility modules that were embedded in the modules
332       of the register allocator. I need these modules for other purposes, but
333       they are not complete enough to put into a library (just yet).
334    ----------------------------------------------------------------------
335    Name: Matthias Blume
336    Date: 2002/01/31 16:05:00 EST
337    Tag: blume-20020131-sparc-ccalls
338    Description:
339    
340    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
341       of extra stack space by mistake.  Fixed.
342    
343    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
344    
345    ----------------------------------------------------------------------
346    Name: Allen Leung
347    Date: 2002/01/30
348    Tag: leunga-20020130-nowhere-bug-fix
349    Description:
350    
351       MLRISC bug fixes:
352       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
353       2. MachineInt.fromString was negating its value.
354    
355    ----------------------------------------------------------------------
356    Name: Matthias Blume
357    Date: 2002/01/29
358    Tag: blume-20020129-INSTALL
359    Description:
360    
361    - Added somewhat detailed installation instructions (file INSTALL).
362    - Fixed curl-detection bug in config/install.sh.
363    - It is now possible to select the URL getter using the URLGETTER
364      environment variable:
365    
366          not set / "unknown"      --> automatic detection (script tries wget,
367                                       curl, and lynx)
368          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
369                                       how to properly invoke them)
370          other                    --> use $URLGETTER directly, it must take
371                                       precisely two command-line arguments
372                                       (source URL and destination file name)
373    
374    ----------------------------------------------------------------------
375    Name: Matthias Blume
376    Date: 2002/01/28
377    Tag: blume-20020128-sparc-ccalls
378    Description:
379    
380    - Fixed problem with calculation of "used" registers in sparc-c-calls.
381    - Make use of the allocParam argument in sparc-c-calls.
382    
383    ----------------------------------------------------------------------
384    Name: Matthias Blume
385    Date: 2002/01/28
386    Tag: blume-20020128-allocParam
387    Description:
388    
389    John Reppy:  Changes c-calls API to accept client-callback for
390    allocating extra stack space.
391    me: Corresponding changes to mlriscGen (using a dummy argument that
392        does not change the current behavior).
393    
394    ----------------------------------------------------------------------
395    Name: Matthias Blume
396    Date: 2002/01/28 12:00:00
397    Tag: Release_110_38
398    Description:
399    
400    This time for real!!!
401    
402    ----------------------------------------------------------------------
403    Name: Matthias Blume
404    Date: 2002/01/28 10:56:00 EST
405    Tag: blume-20020128-retraction
406    Description:
407    
408    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
409       with blume-Release_110_38-retracted.)
410    
411    1. Fixed a problem with incorrect rounding modes in real64.sml.
412       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
413    
414    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
415       and enums fixed.  The naming of corresponding ML identifiers should
416       now be consistent again.
417    
418    ----------------------------------------------------------------------
419    Name: Allen Leung
420    Date: 2002/01/27
421    Tag: leunga-20020127-nowhere
422    Description:
423    
424       Added a target called nowhere in the configuration scripts.
425       Enabling this will build the MLRISC 'nowhere' tool (for translating
426       programs with where-clauses into legal SML code) during installation.
427    
428    ----------------------------------------------------------------------
429    Name: Matthias Blume
430    Date: 2002/01/25 21:27:00 EST
431    Tag: blume-Release_110_38-retracted
432    Description:
433    
434    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
435    
436    README will be added later.
437    
438    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
439    (Release_110_38) removed.  Reason: Last-minute bug fixes.
440    
441    ----------------------------------------------------------------------
442    Name: Matthias Blume
443    Date: 2002/01/25
444    Tag: blume-20020125-ffi
445    Description:
446    
447    A large number of tweaks and improvements to ml-nlffi-lib and
448    ml-nlffigen:
449    
450       - ML represenation types have been streamlined
451       - getter and setter functions work with concrete values, not abstract
452         ones where possible
453       - ml-nlffigen command line more flexible (see README file there)
454       - some bugs have been fixed (hopefully)
455    
456    ----------------------------------------------------------------------
457    Name: Lal George
458    Date: 2002/01/24
459    Tag: george-20020124-risc-ra-interface
460    Description:
461    
462       There is a dramatic simplification in the interface to the
463       register allocator for RISC architectures as a result of making
464       parallel copy instructions explicit.
465    
466    ----------------------------------------------------------------------
467    Name: Matthias Blume
468    Date: 2002/01/22
469    Tag: blume-20020122-x86-ccalls
470    Description:
471    
472    Bug fix for c-calls on x86 (having to do with how char- and
473    short-arguments are being handled).
474    
475    ----------------------------------------------------------------------
476    Name: Matthias Blume
477    Date: 2002/01/21
478    Tag: blume-20020121-ff
479    Description:
480    
481    Another day of fiddling with the FFI...
482    
483    1. Bug fix/workaround:  CKIT does not complain about negative array
484       dimensions, so ml-nlffigen has to guard itself against this possibility.
485       (Otherwise a negative dimension would send it into an infinite loop.)
486    
487    2. Some of the abstract types (light objects, light pointers, most "base"
488       types) in structure C are now eqtypes.
489    
490    3. Added constructors and test functions for NULL function pointers.
491    
492    ----------------------------------------------------------------------
493    Name: Matthias Blume
494    Date: 2002/01/18
495    Tag: blume-20020118-ready-for-new-release
496    Description:
497    
498    Made config/srcarchiveurl point to a new place.  (Will provide boot
499    files shortly.)
500    
501    Maybe we christen this to be 110.38?
502    
503    ----------------------------------------------------------------------
504    Name: Matthias Blume
505    Date: 2002/01/18
506    Tag: blume-20020118-more-ffifiddle
507    Description:
508    
509    Today's FFI fiddling:
510    
511      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
512        C.Set.* that use concrete (MLRep.*) arguments and results instead
513        of abstract ones.
514    
515      - Provided word-style bit operations etc. for "int" representation
516        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
517        and Long.
518    
519    ----------------------------------------------------------------------
520    Name: Matthias Blume
521    Date: 2002/01/18
522    Tag: blume-20020118-use-x86-fp
523    Description:
524    
525    Now that x86-fast-fp seems to be working, I turned it back on again
526    by default.  (Seems to work fine now, even with the FFI.)
527    
528    Other than that, I added some documentation about the FFI to
529    src/ml-nlffigen/README and updated the FFI test examples in
530    src/ml-nlffi-lib/Tests/*.
531    
532    ----------------------------------------------------------------------
533    Name: Allen Leung
534    Date: 2002/01/17
535    Tag: leunga-20020117-x86-fast-fp-call
536    Description:
537    
538       1. Fixed a problem with handling return fp values when x86's fast fp
539          mode is turned on.
540    
541       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
542          of %f32.
543    
544       3. Added a constructor INT32lit to the ast of MLRISC tools.
545    
546    ----------------------------------------------------------------------
547    Name: Matthias Blume
548    Date: 2002/01/16
549    Tag: blume-20020116-ffifiddle
550    Description:
551    
552    More fiddling with the FFI interface:
553    
554     - Make constness 'c instead of rw wherever possible.  This eliminates
555       the need for certain explicit coercions.  (However, due to ML's
556       value polymorphism, there will still be many cases where explicit
557       coercions are necessary.  Phantom types are not the whole answer
558       to modeling a subtyping relationship in ML.)
559    
560     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
561    
562     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
563       clumsy workaround for varargs problem.)
564    
565    ----------------------------------------------------------------------
566    Name: Lal George
567    Date: 2002/01/15
568    Tag: <none>
569    Description:
570    
571    1. Since COPY instructions are no longer native to the architecture,
572       a generic functor can be used to implement the expandCopies function.
573    
574    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
575       TEXT segment.
576    
577    ----------------------------------------------------------------------
578    Name: Matthias Blume
579    Date: 2002/01/15
580    Tag: blume-20020115-ffiupdates
581    Description:
582    
583    1. Fix for bug resulting in single-precision float values being returned
584       incorrectly from FFI calls.
585    
586    2. Small modifications to C FFI API:
587    
588        - memory-allocation routines return straight objects (no options)
589          and raise an exception in out-of-memory situations
590        - unsafe extensions to cast between function pointers and pointers
591          from/to ints
592        - added structure C_Debug as an alternative to structure C where
593          pointer-dereferencing (|*| and |*!) always check for null-pointers
594        - added open_lib' to DynLinkage;  open_lib' works like open_lib
595          but also takes a (possibly empty) list of existing library handles
596          that the current library depends on
597    
598    ----------------------------------------------------------------------
599    Name: Matthias Blume
600    Date: 2002/01/10
601    Tag: blume-20020110-newffigen
602    Description:
603    
604    1. Updates to portable graph code.
605    
606    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
607       more scalable now so that even huge interfaces such as the one
608       for GTK compile in finite time and space. :-)
609       See src/ml-nlffigen/README for details on what's new.
610    
611    ----------------------------------------------------------------------
612    Name: Lal George
613    Date: 2001/01/09 14:31:35 EST 2002
614    Tag: george-20011206-rm-native-copy
615    Description:
616    
617            Removed the native COPY and FCOPY instructions
618            from all the architectures and replaced it with the
619            explicit COPY instruction from the previous commit.
620    
621            It is now possible to simplify many of the optimizations
622            modules that manipulate copies. This has not been
623            done in this change.
624    
625    ----------------------------------------------------------------------
626    Name: Lal George
627    Date: 2001/12/06 16:50:13 EST 2001
628    Tag: george-20011206-mlrisc-instruction
629    Description:
630    
631    Changed the representation of instructions from being fully abstract
632    to being partially concrete. That is to say:
633    
634      from
635            type instruction
636    
637      to
638            type instr                              (* machine instruction *)
639    
640            datatype instruction =
641                LIVE of {regs: C.cellset, spilled: C.cellset}
642              | KILL of {regs: C.cellset, spilled: C.cellset}
643              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
644              | ANNOTATION of {i: instruction, a: Annotations.annotation}
645              | INSTR of instr
646    
647    This makes the handling of certain special instructions that appear on
648    all architectures easier and uniform.
649    
650    LIVE and KILL say that a list of registers are live or killed at the
651    program point where they appear. No spill code is generated when an
652    element of the 'regs' field is spilled, but the register is moved to
653    the 'spilled' (which is present, more for debugging than anything else).
654    
655    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
656    We used to generate:
657    
658            DEFFREG f1
659            f1 := f2 + f3
660            trapb
661    
662    but now generate:
663    
664            f1 := f2 + f3
665            trapb
666            LIVE {regs=[f1,f2,f3], spilled=[]}
667    
668    Furthermore, the DEFFREG (hack) required that all floating point instruction
669    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
670    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
671    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
672    this architecture).
673    
674    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
675    all the architectures. This will result in further simplification of the
676    register allocator that must be aware of them for coalescing purposes, and
677    will also simplify certain aspects of the machine description that provides
678    callbacks related to parallel copies.
679    
680    ANNOTATION should be obvious, and now INSTR represents the honest to God
681    machine instruction set!
682    
683    The <arch>/instructions/<arch>Instr.sml files define certain utility
684    functions for making porting easier -- essentially converting upper case
685    to lower case. All machine instructions (of type instr) are in upper case,
686    and the lower case form generates an MLRISC instruction. For example on
687    the alpha we have:
688    
689      datatype instr =
690         LDA of {r:cell, b:cell, d:operand}
691       | ...
692    
693      val lda : {r:cell, b:cell, d:operand} -> instruction
694        ...
695    
696    where lda is just (INSTR o LDA), etc.
697    
698    ----------------------------------------------------------------------
699    Name: Matthias Blume
700    Date: 2001/11/22 21:40:00 EST
701    Tag: Release_110_37
702    Description:
703    
704    Release 110.37.  This time for real.
705    
706    ----------------------------------------------------------------------
707    Name: Matthias Blume
708    Date: 2001/11/21 16:35:00 EST
709    Tag: blume-20011121-foot-in-mouth
710    Description:
711    
712    Removed the "Release_110_37" tag because of a serious bug.
713    This will be re-tagged once the bug is fixed.
714    
715    ----------------------------------------------------------------------
716    Name: Matthias Blume
717    Date: 2001/11/21 16:14:00 EST
718    Tag: blume-20011121-forgottenfile
719    Description:
720    
721    Forgot to add a file.  (Just a .tex-file -- part of
722    the CM manual source.)
723    
724    ----------------------------------------------------------------------
725    Name: Matthias Blume
726    Date: 2001/11/21 16:10:00 EST
727    Tag: blume-20011121-invalid_110_37
728    Description:
729    
730    Note: I removed the original tag "Release_110_37" from this commit
731          because we found a serious bug in all non-x86 backends.
732          - Matthias
733    
734    1. Modifications to the SML/NJ code generator and to the runtime system
735       so that code object name strings are directly inserted into code
736       objects at code generation time.  The only business the runtime system
737       has with this is now to read the name strings on occasions.
738       (The encoding of the name string has also changed somewhat.)
739    
740    2. CM now implements a simple "set calculus" for specifying export lists.
741       In particular, it is now possible to refer to the export lists of
742       other libraries/groups/sources and form unions as well as differences.
743       See the latest CM manual for details.
744    
745    3. An separate notion of "proxy" libraries has again be eliminated from
746       CM's model.  (Proxy libraries are now simply a special case of using
747       the export list calculus.)
748    
749    4. Some of the existing libraries now take advantage of the new set
750       calculus.
751       (Notice that not all libraries have been converted because some
752       of the existing .cm-files are supposed to be backward compatible
753       with 110.0.x.)
754    
755    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
756       "General.exnMessage"!  The former relies on a certain hook to be
757       initialized, and that often does not happen in the stand-alone case.)
758    
759    ----------------------------------------------------------------------
760    Name: Lal George
761    Date: 2001/11/21  13:56:18 EST
762    Tag: george-2001121-pseudo-ops
763    Description:
764    
765      Implemented a complete redesign of MLRISC pseudo-ops. Now there
766      ought to never be any question of incompatabilities with
767      pseudo-op syntax expected by host assemblers.
768    
769      For now, only modules supporting GAS syntax are implemented
770      but more should follow, such as MASM, and vendor assembler
771      syntax, e.g. IBM as, Sun as, etc.
772    
773    ----------------------------------------------------------------------
774    Name: Matthias Blume
775    Date: 2001/11/14 11:52:00 EST
776    Tag: blume-20011114-srcname
777    Description:
778    
779    1. Routed the name of the current source file to mlriscgen where it
780       should be directly emitted into the code object.  (This last part
781       is yet to be done.)
782    
783    2. Some cleanup of the pgraph code to make it match the proposal that
784       I put out the other day.  (The proposal notwithstanding, things are
785       still in flux here.)
786    
787    ----------------------------------------------------------------------
788    Name: Lal George
789    Date: 2001/11/14 09:44:04 EST
790    Tag:
791    Description:
792    
793      Fix for a backpatching bug reported by Allen.
794    
795      Because the boundary between short and long span-dependent
796      instructions is +/- 128, there are an astounding number of
797      span-dependent instructions whose size is over estimated.
798    
799      Allen came up with the idea of letting the size of span
800      dependent instructions be non-monotonic, for a maxIter
801      number of times, after which the size must be monotonically
802      increasing.
803    
804      This table shows the number of span-dependent instructions
805      whose size was over-estimated as a function of maxIter, for the
806      file Parse/parse/ml.grm.sml:
807    
808         maxIter            # of instructions:
809            10                      687
810            20                      438
811            30                      198
812            40                        0
813    
814      In compiling the compiler, there is no significant difference in
815      compilation speed between maxIter=10 and maxIter=40. Actually,
816      my measurements showed that maxIter=40 was a tad faster than
817      maxIter=10! Also 96% of the  files in the compiler reach a fix
818      point within 13 iterations, so fixing maxIter at 40, while high,
819      is okay.
820    
821    ----------------------------------------------------------------------
822    Name: Matthias Blume
823    Date: 2001/10/31 15:25:00 EST
824    Tag: blume-20011031-pgraph
825    Description:
826    
827    CKIT:
828    * Changed the "Function" constructor of type Ast.ctype to carry optional
829      argument identifiers.
830    * Changed the return type of TypeUtil.getFunction accordingly.
831    * Type equality ignores the argument names.
832    * TypeUtil.composite tries to preserve argument names but gives up quickly
833      if there is a mismatch.
834    
835    installation script:
836    * attempts to use "curl" if available (unless "wget" is available as well)
837    
838    CM:
839    * has an experimental implementation of "portable graphs" which I will
840      soon propose as an implementation-independent library format
841    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
842    
843    NLFFI-LIB:
844    * some cleanup (all cosmetic)
845    
846    NLFFIGEN:
847    * temporarily disabled the mechanism that suppresses ML output for
848      C definitions whose identifiers start with an underscore character
849    * generate val bindings for enum constants
850    * user can request that only one style (light or heavy) is being used;
851      default is to use both (command-line arguments: -heavy and -light)
852    * fixed bug in handling of function types involving incomplete pointers
853    * generate ML entry points that take record arguments (i.e., using
854      named arguments) for C functions that have a prototype with named
855      arguments
856      (see changes to CKIT)
857    
858    ----------------------------------------------------------------------
859    Name: Allen Leung
860    Date: 2001/10/27 20:34:00 EDT
861    Tag: leunga-20011027-x86-fast-fp-call
862    Description:
863    
864       Fixed the bug described in blume-20010920-slowfp.
865    
866       The fix involves
867          1. generating FCOPYs in FSTP in ia32-svid
868          2. marking a CALL with the appropriate annotation
869    
870    ----------------------------------------------------------------------
871    Name: Matthias Blume
872    Date: 2001/10/16 11:32:00 EDT
873    Tag: blume-20011016-netbsd
874    Description:
875    
876    Underscore patch from Chris Richards (fixing problem with compiling
877    runtime system under recent NetBSD).
878    
879    ----------------------------------------------------------------------
880    Name: Allen Leung
881    Date: 2001/10/12 17:18:32 EDT 2001
882    Tag: leung-20011012-x86-printflowgraph
883    Description:
884    
885    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
886    
887    ----------------------------------------------------------------------
888    Name: Lal George
889    Date: 2001/10/11 23:51:34 EDT
890    Tag: george-20011011-too-many-instrs
891    Description:
892    
893    The representation of a program point never expected to see more
894    than 65536 instructions in a basic block!
895    
896    ----------------------------------------------------------------------
897    Name: Lal George
898    Date: 2001/10/09 09:41:37 EDT
899    Tag: george-20011008-mlrisc-labels
900    Description:
901    
902    Changed the machine description files to support printing of
903    local and global labels in assembly code, based on host assembler
904    conventions.
905    
906    ----------------------------------------------------------------------
907    Name: Matthias Blume
908    Date: 2001/09/25 15:25:00 EDT
909    Tag: blume-20010925-exninfo
910    Description:
911    
912    I provided a non-hook implementation of exnName (at the toplevel) and
913    made the "dummy" implementation of exnMessage (at the toplevel) more
914    useful: if nothing gets "hooked in", then at least you are going to
915    see the exception name and a message indicating why you don't see more.
916    
917    [For the time being, programs that need exnMessage and want to use
918    ml-build should either use General.exnMessage (strongly recommended) or
919    refer to structure General at some other point so that CM sees a
920    static dependency.]
921    
922    [Similar remarks go for "print" and "use":  If you want to use their
923    functionality in stand-alone programs generated by ml-build, then use
924    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
925    
926    ----------------------------------------------------------------------
927    Name: Matthias Blume
928    Date: 2001/09/20 17:28:00 EDT
929    Tag: blume-20010920-slowfp
930    Description:
931    
932    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
933    
934    ----------------------------------------------------------------------
935    Name: Matthias Blume
936    Date: 2001/09/20 17:20:00 EDT
937    Tag: blume-20010920-canonicalpaths
938    Description:
939    
940    0. Updated the BOOT file (something that I forgot to do earlier).
941    
942    1. Small internal change to CM so that it avoids "/../" in filenames
943       as much as possible (but only where it is safe).
944    
945    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
946       that arguments that contain delimiters are passed through correctly.
947       This change also means that all "special" arguments of the form
948       @SMLxxx... must come first.
949    
950    3. Changed install script to put relative anchor names for tool commands
951       into pathconfig.
952    
953    ----------------------------------------------------------------------
954    Name: Matthias Blume
955    Date: 2001/09/18 15:35:00 EDT
956    Tag: blume-20010918-readme11036
957    Description:
958    
959    Added README files.
960    
961    ----------------------------------------------------------------------
962    Name: Matthias Blume
963    Date: 2001/09/18 11:45:00 EDT
964    Tag: Release_110_36 (retag)
965    Description:
966    
967    Fixed mistake in config/preloads. Retagged as 110.36.
968    
969    ----------------------------------------------------------------------
970    Name: Matthias Blume
971    Date: 2001/09/18 09:40:00 EDT
972    Tag: Release_110_36_orig (tag changed)
973    Description:
974    
975    New version (110.36).  New bootfiles.
976    
977    ----------------------------------------------------------------------
978    Name: Matthias Blume
979    Date: 2001/09/14 16:15:00 EDT
980    Tag: blume-20010914-x86fastfp
981    Description:
982    
983    John committed some changes that Allen made, in particular a (hopefully)
984    correctly working version of the x86-fp module.
985    
986    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
987    flag to "true".  Everything seems to compile to a fixpoint ok, and
988    "mandelbrot" speeds up by about 15%.
989    
990    ----------------------------------------------------------------------
991    Name: Matthias Blume
992    Date: 2001/09/13 11:20:00 EDT
993    Tag: blume-20010913-minimal
994    Description:
995    
996    1. Stefan Monnier's patch to fix a miscompilation problem that
997       was brought to light by John Reppy's work on Moby.
998    
999    2. Implemented a minimal "structure Compiler" that contains just
1000       "version" and "architecture".  The minimal version will be
1001       available when the full version is not.  This is for backward-
1002       compatibility with code that wants to test Compiler.version.
1003    
1004    ----------------------------------------------------------------------
1005    Name: Matthias Blume
1006    Date: 2001/08/28 14:03:00 EDT
1007    Tag: blume-20010828-ml-lex
1008    Description:
1009    
1010    Fix for bug 1581, received from Neophytos Michael.
1011    
1012    ----------------------------------------------------------------------
1013    Name: Matthias Blume
1014    Date: 2001/08/27 11:20:00 EDT
1015    Tag: blume-20010827-readme11035
1016    Description:
1017    
1018    Fleshed out the README file for 110.35.
1019    
1020    ----------------------------------------------------------------------
1021    Name: Matthias Blume
1022    Date: 2001/08/24 17:10:00 EDT
1023    Tag: Release_110_35
1024    Description:
1025    
1026    New version number (110.35).  New bootfiles.
1027    
1028    ----------------------------------------------------------------------
1029    Name: Lal George
1030    Date: 2001/08/24 13:47:18 EDT 2001
1031    Tag: george-20010824-MLRISC-graphs
1032    Description:
1033    
1034     removed clusters from MLRISC completely and replaced with graphs.
1035    
1036    ----------------------------------------------------------------------
1037    Name: Matthias Blume
1038    Date: 2001/08/23 17:50:00 EDT
1039    Tag: blume-20010823-toplevel
1040    Description:
1041    
1042    - some reorganization of the code that implements various kinds of
1043      environments in the compiler (static, dynamic, symbolic, combined)
1044    - re-implemented the EnvRef module so that evalStream works properly
1045      (if the stream contains references to "use", "CM.make", etc.)
1046    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1047    
1048    ----------------------------------------------------------------------
1049    Name: Matthias Blume
1050    Date: 2001/08/20 15:50 EDT
1051    Tag: blume20010820-slipup
1052    Description:
1053    
1054    I forgot to commit a few files.  Here they are...
1055    
1056    ----------------------------------------------------------------------
1057    Name: Matthias Blume
1058    Date: 2001/08/20 15:35:00 EDT
1059    Tag: blume-20010820-debugprof
1060    Description:
1061    
1062    !!!! NEW BOOTFILES !!!!
1063    
1064    This is another round of reorganizing the compiler sources.  This
1065    time the main goal was to factor out all the "instrumentation"
1066    passes (for profiling and backtracing) into their own library.
1067    The difficulty was to do it in such a way that it does not depend
1068    on elaborate.cm but only on elabdata.cm.
1069    
1070    Therefore there have been further changes to both elaborate.cm and
1071    elabdata.cm -- more "generic" things have been moved from the former
1072    to the latter.  As a result, I was forced to split the assignment
1073    of numbers indicating "primtyc"s into two portions: SML-generic and
1074    SML/NJ-specific.  Since it would have been awkward to maintain,
1075    I bit the bullet and actually _changed_ the mapping between these
1076    numbers and primtycs.  The bottom line of this is that you need
1077    a new set of bin- and bootfiles.
1078    
1079    I have built new bootfiles for all architectures, so doing a fresh
1080    checkout and config/install.sh should be all you need.
1081    
1082    The newly created library's name is
1083    
1084        $smlnj/viscomp/debugprof.cm
1085    
1086    and its sources live under
1087    
1088        src/compiler/DebugProf
1089    
1090    ----------------------------------------------------------------------
1091    Name: Matthias Blume
1092    Date: 2001/08/15 17:15:00 EDT
1093    Tag: blume-20010815-compreorg
1094    Description:
1095    
1096    This is a first cut at reorganizing the CM libraries that make up the
1097    core of the compiler.  The idea is to separate out pieces that could
1098    be used independently by tools, e.g., the parser, the typechecker, etc.
1099    
1100    The current status is a step in this direction, but it is not quite
1101    satisfactory yet.  Expect more changes in the future.
1102    
1103    Here is the current (new) organization...
1104    
1105        What used to be $smlnj/viscomp/core.cm is now divided into
1106        six CM libraries:
1107    
1108             $smlnj/viscomp/basics.cm
1109                           /parser.cm
1110                           /elabdata.cm
1111                           /elaborate.cm
1112                           /execute.cm
1113                           /core.cm
1114    
1115        The CM files for these libraries live under src/system/smlnj/viscomp.
1116        All these libraries are proxy libraries that contain precisely
1117        one CM library component.  Here are the locations of the components
1118        (all within the src/compiler tree):
1119    
1120             Basics/basics.cm
1121             Parse/parser.cm
1122             ElabData/elabdata.cm
1123             Elaborator/elaborate.cm
1124             Execution/execute.cm
1125             core.cm
1126    
1127         [This organization is the same that has been used already
1128         for a while for the architecture-specific parts of the visible
1129         compiler and for the old version of core.cm.]
1130    
1131         As you will notice, many source files have been moved from their
1132         respective original locations to a new home in one of the above
1133         subtrees.
1134    
1135         The division of labor between the new libraries is the following:
1136    
1137             basics.cm:
1138                - Simple, basic definitions that pertain to many (or all) of
1139                  the other libraries.
1140             parser.cm:
1141                - The SML parser, producing output of type Ast.dec.
1142                - The type family for Ast is also defined and exported here.
1143             elabdata.cm:
1144                - The datatypes that describe input and output of the elaborator.
1145                  This includes types, absyn, and static environments.
1146             elaborator.cm:
1147                - The SML/NJ type checker and elaborator.
1148                  This maps an Ast.dec (with a given static environment) to
1149                  an Absyn.dec (with a new static environment).
1150                - This libraries implements certain modules that used to be
1151                  structures as functors (to remove dependencies on FLINT).
1152             execute.cm:
1153                - Everything having to do with executing binary code objects.
1154                - Dynamic environments.
1155             core.cm:
1156                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1157                - Top-level modules.
1158                - FLINT (this should eventually become its own library)
1159    
1160    Notes:
1161    
1162    I am not 100% happy with the way I separated the elaborator (and its
1163    data structures) from FLINT.  Two instances of the same problem:
1164    
1165        1. Data structures contain certain fields that carry FLINT-specific
1166           information.  I hacked around this using exn and the property list
1167           module from smlnj-lib.  But the fact that there are middle-end
1168           specific fields around at all is a bit annoying.
1169    
1170        2. The elaborator calculates certain FLINT-related information.  I tried
1171           to make this as abstract as I could using functorization, but, again,
1172           the fact that the elaborator has to perform calculations on behalf
1173           of the middle-end at all is not nice.
1174    
1175        3. Having to used exn and property lists is unfortunate because it
1176           weakens type checking.  The other alternative (parameterizing
1177           nearly *everything*) is not appealing, though.
1178    
1179    I removed the "rebinding =" warning hack because due to the new organization
1180    it was awkward to maintain it.  As a result, the compiler now issues some of
1181    these warnings when compiling init.cmi during bootstrap compilation. On
1182    the plus side, you also get a warning when you do, for example:
1183       val op = = Int32.+
1184    which was not the case up to now.
1185    
1186    I placed "assign" and "deref" into the _Core structure so that the
1187    code that deals with the "lazy" keyword can find them there.  This
1188    removes the need for having access to the primitive environment
1189    during elaboration.
1190    
1191    ----------------------------------------------------------------------
1192    Name: Matthias Blume
1193    Date: 2001/08/13
1194    Tag: blume-20010813-closures
1195    Description:
1196    
1197    This fix was sent to us by Zhong Shao.  It is supposed to improve the
1198    performance of certain loops by avoiding needless closure allocation.
1199    
1200    ----------------------------------------------------------------------
1201    Name: Lal George
1202    Date: 2001/07/31 10:03:23 EDT 2001
1203    Tag: george-20010731-x86-fmalloc
1204    Description: Fixed bug in x86 calls
1205    
1206        There was a bug where call instructions would mysteriously
1207        vanish. The call instruction had to be one that returned
1208        a floating point value.
1209    
1210    ----------------------------------------------------------------------
1211    Name: Lal George
1212    Date: 2001/07/19 16:36:29 EDT 2001
1213    Tag: george-20010719-simple-cells
1214    Description:
1215    
1216    I have dramatically simplified the interface for CELLS in MLRISC.
1217    
1218    In summary, the cells interface is broken up into three parts:
1219    
1220      1. CellsBasis : CELLS_BASIS
1221    
1222            CellsBasis is a top level structure and common for all
1223            architectures.  it contains the definitions of basic datatypes
1224            and utility  functions over these types.
1225    
1226      2. functor Cells() : CELLS
1227    
1228            Cells generates an interface for CELLS that incorporates the
1229            specific resources on the target architecture, such as the
1230            presence of special register classes, their number and size,
1231            and various useful substructures.
1232    
1233      3. <ARCH>CELLS
1234    
1235            e.g. SparcCells: SPARCCELLS
1236    
1237            <ARCH>CELLS usually contains additional bindings for special
1238            registers  on the architecture, such as:
1239    
1240                    val r0 : cell           (* register zero *)
1241                    val y : cell            (* Y register *)
1242                    val psr : cell          (* processor status register *)
1243                    ...
1244    
1245            The structure returned by applying the Cells functor is opened
1246            in this interface.
1247    
1248    The main implication of all this is that the datatypes for cells is
1249    split between CellsBasis and CELLS -- a fairly simple change for user
1250    code.
1251    
1252    In the old scheme the CELLS interface had a definitional binding of
1253    the form:
1254    
1255            signature CELLS = sig
1256    
1257               structure CellsBasis = CellsBasis
1258    
1259               ...
1260    
1261            end
1262    
1263    With all the sharing constraints that goes on in MLRISC, this old
1264    design  quickly leads to errors such as:
1265    
1266            "structure definition spec inside of sharing ... "
1267    
1268    
1269    and appears to require an unacceptable amount of sharing and where
1270    constraint hackery.
1271    
1272    I think this error message (the interaction of definitional specs and
1273    sharing) requires more explanation on our web page.
1274    
1275    ----------------------------------------------------------------------
1276    Name: Matthias Blume
1277    Date: 2001/07/19 15:00:00 EDT
1278    Tag: blume-20010719-libreorg
1279    Description:
1280    
1281    This update puts together a fairly extensive but straightforward change
1282    to the way the libraries that implement the interactive system are
1283    organized:
1284    
1285       The biggest change is the elimination of structure Compiler.  As a
1286       replacement for this structure, there is now a CM library
1287       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
1288       that exports all the substructures of the original structure Compiler
1289       directly.  So instead of saying Compiler.Foo.bar one now simply
1290       says Foo.bar.  (The CM libraries actually export a collection of
1291       structures that is richer than the collection of substructures of
1292       structure Compiler.)
1293    
1294       To make the transition smooth, there is a separate library called
1295       $smlnj/compiler/compiler.cm which puts together and exports the
1296       original structure Compiler (or at least something very close to it).
1297    
1298       There are five members of the original structure Compiler
1299       that are not exported directly but which instead became members
1300       of a new structure Backend (described by signature BACKEND).  These are:
1301       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
1302       Interact (: INTERACT), structure Machine (: MACHINE), and val
1303       architecture (: string).
1304    
1305       Structure Compiler.Version has become structure CompilerVersion.
1306    
1307       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
1308       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
1309       or x86, respectively.
1310       Each of these exports the same frontend structures that
1311       $smlnj/compiler.cm exports.  But they do not have a structure Backend
1312       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
1313       Hppa, PPC, Sparc, or X86, respectively.
1314    
1315       Library $smlnj/compiler/all.cm exports the union of the exports of
1316       $smlnj/compiler/<arch>.cm
1317    
1318       There are no structures <Arch>Compiler anymore, use
1319       $smlnj/compiler/<arch>.cm instead.
1320    
1321       Library host-compiler-0.cm is gone.  Instead, the internal library
1322       that instantiates CM is now called cm0.cm.  Selection of the host
1323       compiler (backend) is no longer done here but. (Responsibility for it
1324       now lies with $smlnj/compiler/current.cm.  This seems to be more
1325       logical.)
1326    
1327       Many individual files have been moved or renamed.  Some files have
1328       been split into multiple files, and some "dead" files have been deleted.
1329    
1330    Aside from these changes to library organization, there are also changes
1331    to the way the code itself is organized:
1332    
1333       Structure Binfile has been re-implemented in such a way that it no
1334       longer needs any knowledge of the compiler.  It exclusively deals
1335       with the details of binfile layout.  It no longer invokes the
1336       compiler (for the purpose of creating new prospective binfile
1337       content), and it no longer has any knowledge of how to interpret
1338       pickles.
1339    
1340       Structure Compile (: COMPILE) has been stripped down to the bare
1341       essentials of compilation.  It no longer deals with linking/execution.
1342       The interface has been cleaned up considerably.
1343    
1344       Utility routines for dealing with linking and execution have been
1345       moved into their own substructures.
1346    
1347       (The ultimate goal of these changes is to provide a light-weight
1348       binfile loader/linker (at least for, e.g., stable libraries) that
1349       does not require CM or the compiler to be present.)
1350    
1351    CM documentation has been updated to reflect the changes to library
1352    organization.
1353    
1354    ----------------------------------------------------------------------
1355    Name: Matthias Blume
1356    Date: 2001/07/10 17:30:00 EDT
1357    Tag: Release_110_34
1358    Description:
1359    
1360    Minor tweak to 110.34 (re-tagged):
1361    
1362      - README.html file added to CVS repository
1363      - runtime compiles properly under FreeBSD 3.X and 4.X
1364    
1365    ----------------------------------------------------------------------
1366    Name: Matthias Blume
1367    Date: 2001/07/10 17:30:00 EDT
1368    Tag: Release_110_34
1369    Description:
1370    
1371    New version number (110.34). New bootfiles.
1372    
1373    ----------------------------------------------------------------------
1374    Name: Matthias Blume
1375    Date: 2001/07/09 16:00:00 EDT
1376    Tag: blume-20010709-more-varargs
1377    Description:
1378    
1379    I changed the handling of varargs in ml-nlffigen again:
1380    The ellipsis ... will now simply be ignored (with an accompanying warning).
1381    
1382    The immediate effect is that you can actually call a varargs function
1383    from ML -- but you can't actually supply any arguments beyond the ones
1384    specified explicitly.  (For example, you can call printf with its format
1385    string, but you cannot pass additional arguments.)
1386    
1387    This behavior is only marginally more useful than the one before, but
1388    it has the advantage that a function or, more importantly, a function
1389    type never gets dropped on the floor, thus avoiding follow-up problems with
1390    other types that refer to the offending one.
1391    
1392    ----------------------------------------------------------------------
1393    Name: Matthias Blume
1394    Date: 2001/07/09 11:25:00 EDT
1395    Tag: blume-20010709-varargs
1396    Description:
1397    
1398    1. ckit-lib.cm now exports structure Error
1399    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
1400       with a warning accompanied by a source location.  Moreover, it
1401       merely skips the offending function or type and proceeds with the
1402       rest of its work.u  As a result, one can safely feed C code containing
1403       "..." to ml-nlffigen.
1404    3. There are some internal improvements to CM, providing slightly
1405       more general string substitutions in the tools subsystem.
1406    
1407    ----------------------------------------------------------------------
1408    Name: Matthias Blume
1409    Date: 2001/06/27 15:10:00 EDT
1410    Tag: blume-20010627-concur
1411    Description:
1412    
1413    Fixed a small bug in CM's handling of parallel compilation.
1414    (You could observe the bug by Control-C-interrupting an ordinary
1415    CMB.make or CM.stabilize and then attaching some compile servers.
1416    The result was that all of a sudden the previously interrupted
1417    compilation would continue on its own.  This was because of
1418    an over-optimization: CM did not bother to clean out certain queues
1419    when no servers were attached "anyway", resulting in the contents
1420    of these queues to grab control when new servers did get attached.)
1421    
1422    There is also another minor update to the CM manual.
1423    
1424    ----------------------------------------------------------------------
1425    Name: Matthias Blume
1426    Date: 2001/06/26 16:15:00 EDT
1427    Tag: blume-20010626-cmdoc
1428    Description:
1429    
1430    Minor typo fixed in CM manual (syntax diagram for libraries).
1431    
1432    ----------------------------------------------------------------------
1433    Name: Matthias Blume
1434    Date: 2001/06/25 22:55:00 EDT
1435    Tag: blume-20010625-x86pc
1436    Description:
1437    
1438    Fixed a nasty bug in the X86 assembly code that caused signal
1439    handlers to fail (crash) randomly.
1440    
1441    ----------------------------------------------------------------------
1442    Name: Matthias Blume
1443    Date: 2001/06/25 12:05:00 EDT
1444    Tag: blume-20010625-nlffigen
1445    Description:
1446    
1447    This update fixes a number of minor bugs in ml-nlffigen as reported by
1448    Nick Carter <nbc@andrew.cmu.edu>.
1449    
1450      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
1451      2. Default names for generated files are now derived from the name of
1452         the C file *without its directory*.  In particular, this causes generated
1453         files to be placed locally even if the C file is in some system directory.
1454      3. Default names for generated signatures and structures are also derived
1455         from the C file name without its directory.  This avoids silly things
1456         like "structure GL/GL".
1457         (Other silly names are still possible because ml-nlffigen does not do
1458          a thorough check of whether generated names are legal ML identifiers.
1459          When in doubt, use command line arguments to force particular names.)
1460    
1461    ----------------------------------------------------------------------
1462    Name: Matthias Blume
1463    Date: 2001/06/21 12:25:00 EDT
1464    Tag: blume-20010621-eXene
1465    Description:
1466    
1467    eXene now compiles and (sort of) works again.
1468    
1469    The library name (for version > 110.33) is $/eXene.cm.
1470    
1471    I also added an new example in src/eXene/examples/nbody.  See the
1472    README file there for details.
1473    
1474    ----------------------------------------------------------------------
1475    Name: Matthias Blume
1476    Date: 2001/06/20 16:40:00 EDT
1477    Tag: blume-20010620-cml
1478    Description:
1479    
1480    CML now compiles and works again.
1481    
1482    Libraries (for version > 110.33):
1483    
1484      $cml/cml.cm            Main CML library.
1485      $cml/basis.cm          CML's version of $/basis.cm.
1486      $cml/cml-internal.cm   Internal helper library.
1487      $cml/core-cml.cm       Internal helper library.
1488      $cml-lib/trace-cml.cm  Tracing facility.
1489      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
1490    
1491    The installer (config/install.sh) has been taught how to properly
1492    install this stuff.
1493    
1494    ----------------------------------------------------------------------
1495    Name: Matthias Blume
1496    Date: 2001/06/19 17:55:00 EDT
1497    Tag: blume-20010619-instantiate
1498    Description:
1499    
1500    This un-breaks the fix for bug 1432.
1501    (The bug was originally fixed in 110.9 but I broke it again some
1502    time after that.)
1503    
1504    ----------------------------------------------------------------------
1505    Name: Matthias Blume
1506    Date: 2001/06/19 17:25:00 EDT
1507    Tag: blume-20010619-signals
1508    Description:
1509    
1510    This should (hopefully) fix the long-standing signal handling bug.
1511    (The runtime system was constructing a continuation record with an
1512    incorrect descriptor which would cause the GC to drop data on the floor...)
1513    
1514    ----------------------------------------------------------------------
1515    Name: Matthias Blume
1516    Date: 2001/06/15 15:05:00 EDT
1517    Tag: blume-20010615-moresparc
1518    Description:
1519    
1520    Here is a short late-hour update related to Sparc c-calls:
1521    
1522     -- made handling of double-word arguments a bit smarter
1523    
1524     -- instruction selection phase tries to collapse certain clumsily
1525        constructed ML-Trees; typical example:
1526    
1527            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
1528    
1529        This currently has no further impact on SML/NJ since mlriscGen does
1530        not seem to generate such patterns in the first place, and c-calls
1531        (which did generate them in the beginning) has meanwhile been fixed
1532        so as to avoid them as well.
1533    
1534    ----------------------------------------------------------------------
1535    Name: Matthias Blume
1536    Date: 2001/06/15 15:05:00 EDT
1537    Tag: blume-20010615-sparc
1538    Description:
1539    
1540    The purpose of this update is to provide an implementation of NLFFI
1541    on Sparc machines.
1542    
1543    Here are the changes in detail:
1544    
1545       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
1546       the Sparc implementation of the c-calls API.
1547       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
1548       for accessing the ML frame.  Thus, we have a real frame pointer and
1549       can freely modify %sp without need for an omit-frame-ptr phase.
1550       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
1551       this case.
1552       * ml-nlffigen has been taught to produce code for different architectures
1553       and calling conventions.
1554       * In a way similar to what was done in the x86 case, the Sparc
1555       backend uses its own specific extension to mltree.  (For example,
1556       it needs to be able to generate UNIMP instructions which are part
1557       of the calling convention.)
1558       * ml-nlffi-lib was reorganized to make it more modular (in particular,
1559       to make it easier to plug in new machine- and os-dependent parts).
1560    
1561    There are some other fairly unrelated bug fixes and cleanups as well:
1562    
1563       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
1564       that they properly share their libraries with existing SML/NJ libraries.
1565       * I fixed a minor cosmetic bug in CM, supressing certain spurious
1566       follow-up error messages.
1567       * Updates to CM/CMB documentation.
1568    
1569    TODO items:
1570    
1571       * MLRISC should use a different register as its asmTemp on the Sparc.
1572         (The current %o2 is a really bad choice because it is part of the
1573         calling conventions, so things might interfere in unexpected ways.)
1574    
1575    ----------------------------------------------------------------------
1576    Name: Matthias Blume
1577    Date: 2001/06/07
1578    Tag: blume-20010607-calls
1579    Description:
1580    
1581    A number of internal changes related to C calls and calling conventions:
1582    
1583    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
1584       number of bytes popped implicitly (by the callee).  In most cases
1585       this field is 0 but on x86/win32 it is some non-zero value.  This
1586       is information provided for the benefit of the "omit-frameptr" pass.
1587    2. The CALL instruction on the x86 carries a similar "pops" field.
1588       The instruction selection phase copies its value from the ML-Tree
1589       CALL statement.
1590    3. On all other architectures, the instruction selection phase checks
1591       whether "pops=0" and complains if not.
1592    4. The c-calls implementation for x86 now accepts two calling conventions:
1593       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
1594       up after the call and pops is set to 0.  For "stdcall", the caller
1595       does nothing, leaving the cleanup to the callee; pops is set to
1596       the number of bytes that were pushed onto the stack.
1597    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
1598       distinguish between "ccall" and "stdcall".
1599    6. The UNIMP instruction has been added to the supported Sparc instruction
1600       set. (This is needed for implementing the official C calling convention
1601       on this architecture.)
1602    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
1603       work with the latest CM.
1604    
1605    ----------------------------------------------------------------------
1606    Name: Matthias Blume
1607    Date: 2001/06/05 15:10:00 EDT
1608    Tag: blume-20010605-cm-index
1609    Description:
1610    
1611    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
1612    
1613    1. CM can now generate "index files".  These are human-readable files
1614       that list on a per-.cm-file basis each toplevel symbol defined or
1615       imported.  The location of the index file for
1616       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
1617       To enable index-file generation, set CM.Control.generate_index to true
1618       or export an environment-symbol: export CM_GENERATE_INDEX=true.
1619    
1620       The CM manual has been updated accordingly.
1621    
1622    2. I made some slight modifications to the c-calls API in MLRISC.
1623    
1624         a) There is now a callback to support saving/restoring of
1625            dedicated but caller-save registers around the actual call
1626            instruction.
1627         b) One can optionally specify a comment-annotation for the
1628            call instruction.
1629    
1630    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
1631       (For example, the comment annotation shows the C prototype of
1632        the function being called.)
1633    
1634    ----------------------------------------------------------------------
1635    Name: Matthias Blume
1636    Date: 2001/06/01 13:30:00 EDT
1637    Tag: blume-20010601-nlffi-cleanup
1638    Description:
1639    
1640    This is mostly a cleanup of MLFFI stuff:
1641    
1642       - some signature files have been put into a more exposed place
1643       - the ugly 'f type parameter is gone (simplifies types tremendously!)
1644       - ml-nlffigen changed accordingly
1645       - tutorial updated
1646    
1647    Other changes:
1648    
1649       - author's affiliation in CM manual(s) updated
1650       - some more recognized keywords added to Allen's sml.sty
1651    
1652    ----------------------------------------------------------------------
1653    Name: Matthias Blume
1654    Date: 2001/05/25 15:30:00 EDT
1655    Tag: blume-20010525-iptr
1656    Description:
1657    
1658      - put the official 110.33-README (as it appears on the ftp server) under
1659        CVS
1660      - fixed a small bug related to incomplete pointer types in
1661        ml-nlffigen
1662      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
1663        (it does not need the 'f type parameter)
1664    
1665    ----------------------------------------------------------------------
1666    Name: Matthias Blume
1667    Date: 2001/05/23 14:30:00 EDT
1668    Tag: Release_110_33
1669    Description:
1670    
1671    New version number (110.33).  New bootfiles.
1672    
1673    ----------------------------------------------------------------------
1674    Name: Matthias Blume
1675    Date: 2001/05/22 18:06:00 EDT
1676    Tag: blume-20010522-targets
1677    Description:
1678    
1679    Made install.sh use file config/targets.customized if it exists, falling
1680    back to config/targets if it doesn't.  This way one can have a customized
1681    version of the targets file without touching the "real thing", thus
1682    eliminating the constant fear of accidentally checking something bogus
1683    back into the CVS repository...  (File config/targets.customized must
1684    not be added to the repository!)
1685    
1686    ----------------------------------------------------------------------
1687    Name: Matthias Blume
1688    Date: 2001/05/22 16:30:00 EDT
1689    Tag: blume-20010522-minitut
1690    Description:
1691    
1692    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
1693       struct returns.
1694    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
1695       incomplete, preliminary documentation for NLFFI.
1696    
1697    ----------------------------------------------------------------------
1698    Name: Matthias Blume
1699    Date: 2001/05/14 11:30:00 EDT
1700    Tag: blume-20010514-script
1701    Description:
1702    
1703    Some bugs in install script fixed.
1704    
1705    In addition to that I also made a slight change to the NLFFI API:
1706    Functors generated by ml-nlffigen now take the dynamic library as a
1707    straight functor argument, not as a suspended one.  (The original
1708    functor code used to force the suspension right away anyway, so there
1709    was nothing gained by this complication of the interface.)
1710    
1711    ----------------------------------------------------------------------
1712    Name: Matthias Blume
1713    Date: 2001/05/11 14:35:00 EDT
1714    Tag: blume-20010511-ml-nlffi
1715    Description:
1716    
1717    I finally took the plunge and added my new FFI code to the main
1718    repository.  For x86-linux it is now ready for prime-time.
1719    
1720    There are two new subdirectories of "src":
1721    
1722      - ml-nlffi-lib:
1723           The utility library for programs using the FFI interface.
1724           Here is the implementation of $/c.cm and its associated low-level
1725           partners $/c-int.cm and $/memory.cm.
1726      - ml-nlffigen:
1727           A stand-alone program for generating ML glue code from C source
1728           code.
1729    
1730    Building ml-nlffigen requires $/ckit-lib.cm.
1731    
1732    The config/install.sh script has been updates to do the Right Thing
1733    (hopefully).
1734    
1735    Notice that the source tree for the C-Kit will not be put under "src"
1736    but directly under the installation root directory.  (This is the
1737    structure that currently exists on the CVS server when you check out
1738    module "sml".)  Fortunately, config/install.sh knows about this oddity.
1739    
1740    Bugs: No documentation yet.
1741    
1742    ----------------------------------------------------------------------
1743    Name: Matthias Blume
1744    Date: 2001/05/09 16:35:00 EDT
1745    Tag: blume-20010509-cpscontract
1746    Description:
1747    
1748    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
1749    wrapper/unwrapper elimination did not decrement usage counts and some
1750    dead variables got overlooked by the dead-up logic.)
1751    
1752    ----------------------------------------------------------------------
1753    Name: Lal George
1754    Date: 2001/05/08  17:26:09 EDT
1755    Tag: george-20010508-omit-frameptr
1756    Description:
1757    
1758    Changes to implement the omit-frame-pointer optimization to support
1759    raw C calls. For now, there is only support on the Intel x86, but
1760    other architectures will follow as more experience is gained with this.
1761    
1762    
1763    ----------------------------------------------------------------------
1764    Name: Matthias Blume
1765    Date: 2001/05/07 14:40:00 EDT
1766    Tag: blume-20010507-proxies
1767    Description:
1768    
1769    I made into "proxy libraries" all libraries that qualify for such a
1770    change.  (A qualifying library is a library that has another library or
1771    groups as its sole member and repeats that member's export list
1772    verbatim.  A proxy library avoids this repetition by omitting its export
1773    list, effectively inheriting the list that its (only) member exports.
1774    See the CM manual for more explanation.)
1775    The main effect is that explicit export lists for these libraries
1776    do not have to be kepts in sync, making maintenance a bit easier.
1777    
1778    I also added copyright notices to many .cm-files.
1779    
1780    Last but not least, I made a new set of bootfiles.
1781    
1782    ----------------------------------------------------------------------
1783    Name: Matthias Blume
1784    Date: 2001/05/04 17:00:00 EDT
1785    Tag: blume-20010504-cm-lsplit
1786    Description:
1787    
1788    0. John merged pending changes to $/smlnj-lib.cm
1789    
1790    1. Allen's previous change accidentally backed out of one of Lal's
1791       earlier changes.  I undid this mistake (re-introducing Lal's change).
1792    
1793    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
1794       within the compiler where applicable.  There is some code simplification
1795       because of that.
1796    
1797    3. The "split" phase (in FLINT) is now part of the default list of phases.
1798       Compiler.Control.LambdaSplitting.* can be used to globally control the
1799       lambda-splitting (cross-module-inlining) engine.  In addition to that,
1800       it can now also be controlled on a per-source basis: CM has been taught
1801       a new tool parameter applicable to ML source files.
1802    
1803       - To turn lambda-splitting off completely:
1804            local open Compiler.Control.LambdaSplitting in
1805                val _ = set Off
1806            end
1807       - To make "no lambda-splitting" the global default (but allow per-source
1808         overriding); this is the initial setting:
1809            local open Compiler.Control.LambdaSplitting in
1810                val _ = set (Default NONE)
1811            end
1812       - To make "lambda-splitting with aggressiveness a" the global default
1813         (and allow per-source overriding):
1814            local open Compiler.Control.LambdaSplitting in
1815                val _ = set (Default (SOME a))
1816            end
1817    
1818       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
1819         write (in the respective .cm-file):
1820            a.sml (lambdasplitting:off)
1821       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
1822            a.sml (lambdasplitting:on)
1823       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
1824         <a> is a decimal non-negative integer):
1825            a.sml (lambdasplitting:<a>)
1826       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
1827            a.sml (lambdasplitting:infinity)
1828       - To use the global default for a.sml:
1829            a.sml (lambdasplitting:default)
1830         or simply
1831            a.sml
1832    
1833    ----------------------------------------------------------------------
1834    Name: Allen Leung
1835    Date: 2001/05/04 01:57:00 EDT
1836    Tag: leunga-20010504-sync
1837    Description:
1838    
1839      MLRISC features.
1840    
1841      1. Fix to CMPXCHG instructions.
1842      2. Changed RA interface to allow annotations in callbacks.
1843      3. Added a new method to the stream interface to allow annotations updates.
1844    
1845    ----------------------------------------------------------------------
1846    Name: Matthias Blume
1847    Date: 2001/05/01 11:45:00 EDT
1848    Tag: blume-20010501-pcedittmp
1849    Description:
1850    
1851    Changed install.sh to use the current working directory instead of
1852    /usr/tmp for a temporary file (pcedittmp).  The previous choice
1853    of /usr/tmp caused trouble with MacOS X because of file premission
1854    problems.
1855    
1856    ----------------------------------------------------------------------
1857    Name: Matthias Blume
1858    Date: 2001/04/20 11:10:00 EDT
1859    Tag: blume-20010420-inMLflag
1860    Description:
1861    
1862     - added vp_limitPtrMask to vproc-state.h
1863       (for use by the raw-C-calls mechanism to implement proper interrupt
1864        handling)
1865     - made the ML compiler aware of various data-structure offsets so it
1866       can generate code for accessing the vp_inML flag and vp_limitPtrMask
1867     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
1868       raw C-calls
1869    
1870    ----------------------------------------------------------------------
1871    Name: Lal George
1872    Date: 2001/04/20 09:15:28 EDT
1873    Tag: george-20010420-macosX
1874    Description:
1875    
1876     - Changes to port to Mac OS X; Darwin.
1877    
1878     - In the process I found that sqrt was broken on the PPC, because the
1879       fsqrt instruction is not implemented.
1880    
1881    ----------------------------------------------------------------------
1882    Name: Matthias Blume
1883    Date: 2001/04/18 12:45:00 EDT
1884    Tag: blume-20010418-ccalls
1885    Description:
1886    
1887     - fixed two off-by-4 errors in the x86-specific c-calls implementation
1888       (this bug prevented structure arguments containing pointers from being
1889        passed correctly)
1890     - changed the raw-C-call code in mlriscGen.sml in such a way that
1891       structure arguments are represented as a pointer to the beginning
1892       of the structure (instead of having a series of synthesized arguments,
1893       one for each structure member)
1894    
1895     - made makeml script's verbosity level configurable via environment
1896       variable (MAKEML_VERBOSITY)
1897    
1898     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
1899       in rawmem-x86.sml; we are now using the real thing
1900    
1901    ----------------------------------------------------------------------
1902    Name: Matthias Blume
1903    Date: 2001/03/22 16:25:00 EST
1904    Tag: blume-20010322-bootfiles
1905    Description:
1906    
1907    Created a new set of bootfiles (for your automatic installation convenience).
1908    
1909    ----------------------------------------------------------------------
1910    Name: Matthias Blume
1911    Date: 2001/03/22 15:10:00 EST
1912    Tag: blume-20010322-rawmem-parcm
1913    Description:
1914    
1915    1. All "raw memory access" primitives for the new FFI are implemented now
1916       (at least on the x86).
1917    2. Some further cleanup of CM's parallel make mechanism.
1918    
1919    ----------------------------------------------------------------------
1920    Name: Matthias Blume
1921    Date: 2001/03/19 17:53:00 EST
1922    Tag: blume-20010319-parallel
1923    Description:
1924    
1925    Parallel make (using compile servers) now works again.
1926    
1927    To this end, CM.stabilize and CMB.make have been modified to work in
1928    two passes when compile servers are attached:
1929       1. Compile everything, do not perform stabilization; this pass
1930          uses compile servers
1931       2. Stabilize everything; this pass does not use compile servers
1932    If there are no compile servers, the two passes are combined into one
1933    (as before).  Splitting the passes increases the inherent parallelism
1934    in the dependency graph because the entire graph including all
1935    libraries is available at the same time.  This, in turn, improves
1936    server utilization.  The downside is that the master process will
1937    have to do some extra work after compilation is done (because for
1938    technical reasons it must re-read all the binfiles during stabilization).
1939    
1940    ----------------------------------------------------------------------
1941    Name: Matthias Blume
1942    Date: 2001/03/16 12:22:00 EST
1943    Tag: blume-20010316-bootfiles
1944    Description:
1945    
1946    Created a new set of bootfiles (for your automatic installation convenience).
1947    
1948    ----------------------------------------------------------------------
1949    Name: Matthias Blume
1950    Date: 2001/03/16 11:00:00 EST
1951    Tag: blume-20010316-MLTREE-fixup
1952    Description:
1953    
1954    This is a minor fixup for an (untagged) earlier commit by Allen.
1955    (A file was missing).
1956    
1957    ----------------------------------------------------------------------
1958    Name: Allen Leung
1959    Date: Mon Mar  5 18:54:57 EST 2001
1960    Tag: leunga-20010305-cut-support
1961    
1962    1. New support for alternative control-flow in MLTREE.
1963       Currently we support
1964    
1965          FLOW_TO(CALL ...., [k1,...,kn])
1966    
1967       This is needed for 'cuts to' in C-- and try/handle-like constructs
1968       in Moby
1969    
1970       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
1971    
1972    2. Register Allocator
1973    
1974       Changes in interface [from Fermin, John]
1975    
1976    3. Alpha 8-bit SLL support [Fermin]
1977    
1978    4. All architectures
1979    
1980       A new module (ClusterExpandCopies) for expanding parallel copies.
1981    
1982    ----------------------------------------------------------------------
1983    Name: Allen Leung
1984    Date: 2001/02/27 23:07:00 EST
1985    Tag: leunga-20010227-minor-stuff
1986    
1987    1. Alpha bug fix for CMOVNE
1988    2. Handle mltree COND(..,FCMP ...,...)
1989    3. Bug fix in simplifier
1990    
1991    ----------------------------------------------------------------------
1992    Name: Matthias Blume
1993    Date: 2001/01/30 17:50:00 EST
1994    Tag: blume-20010130-sync
1995    Description:
1996    
1997    This is just a minor update to sync my devel branch with the main brach.
1998    The only visible change is the addition of some README files.
1999    
2000    ----------------------------------------------------------------------
2001    Name: Matthias Blume
2002    Date: 2001/01/12 23:30:00 JST
2003    Tag: blume-20010112-bootfiles
2004    Description:
2005    
2006    Made a new set of bootfiles that goes with the current state of the
2007    repository.
2008    
2009    ----------------------------------------------------------------------
2010    Name: Matthias Blume
2011    Date: 2001/01/12 21:20:00 JST
2012    Tag: blume-20010112-sync
2013    Description:
2014    
2015    I am just flushing out some minor changes that had accumulated in
2016    my private branch in order to sync with the main tree.  (This is
2017    mainly because I had CVS trouble when trying to merge _into_ my
2018    private branch.)
2019    
2020    Most people should be completely unaffected by this.
2021    
2022    ----------------------------------------------------------------------
2023    Name: Allen Leung
2024    Date: Thu Jan 11 21:03:00 EST 2001
2025    Tag: leunga-20010111-labexp=mltree
2026    Description:
2027    
2028    1.  Removed the type LabelExp and replace it by MLTree.
2029    2.  Rewritten mltree-simplify with the pattern matcher tool.
2030    3.  There were some bugs in alpha code generator which would break
2031        64-bit code generation.
2032    4.  Redo the tools to generate code with the
2033    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
2034        are now generated by perl scripts.
2035    
2036    ----------------------------------------------------------------------
2037    Name: Matthias Blume
2038    Date: 2001/01/10 21:55:00 JST
2039    Tag: blume-20010110-rcc
2040    Description:
2041    
2042    The RCC stuff now seems to work (but only on the x86).
2043    This required hacking of the c-calls interface (and -implementation) in
2044    MLRISC.
2045    
2046    Normal compiler users should be unaffected.
2047    
2048    ----------------------------------------------------------------------
2049    Name: Matthias Blume
2050    Date: 2001/01/09 01:20:00 JST
2051    Tag: blume-20010109-rcc
2052    Description:
2053    
2054    This is a fairly big patch, flushing out a large number of pending
2055    changes that I made to my development copy over the last couple of days.
2056    
2057    Of practical relevance at this moment is a workaround for a pickling
2058    bug that Allen ran into the other day.  The cause of the bug itself is
2059    still unknown and it might be hard to fix it properly, but the
2060    workaround has some merits of its own (namely somewhat reducing pickling
2061    overhead for certain libraries).  Therefore, I think this solution should
2062    be satisfactory at this time.
2063    
2064    The rest of the changes (i.e., the vast majority) has to do with my
2065    ongoing efforts of providing direct support for C function calls from
2066    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
2067    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
2068    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
2069    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
2070    handle RCC.
2071    
2072    The last part (the changes to mlriscGen.sml) are still known to be
2073    wrong on the x86 and not implemented on all other architectures.  But
2074    the infrastructure is in place. I had to change a few functor
2075    signatures in the backend to be able to route the CCalls interface
2076    from MLRISC there, and I had to specialize the mltree type (on the
2077    x86) to include the necessary extensions. (The extensions themselves
2078    were already there and redy to go in MLRISC/x86).
2079    
2080    Everything should be very happy as soon as someone helps me with
2081    mlriscGen.sml...
2082    
2083    In any case, nothing of this should matter to anyone as long as the
2084    new primop is not being used (which is going to be the case unless you
2085    find it where I hid it :). The rest of the compiler is completely
2086    unaffected.
2087    
2088    ----------------------------------------------------------------------
2089    Name: Matthias Blume
2090    Date: 2001/01/05 00:30:00 JST
2091    Tag: blume-20010105-primops
2092    Description:
2093    
2094    Added some experimental support for work that I am doing right now.
2095    These changes mostly concern added primops, but there is also a new
2096    experimental C library in the runtime system (but currently not enabled
2097    anywhere except on Linux/X86).
2098    
2099    In the course of adding primops (and playing with them), I discovered that
2100    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
2101    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
2102    To recover, I made type information in INL_PRIM mandatory and changed
2103    prim.sml as well as built-in.sml accordingly.  The InLine structure now
2104    has complete, correct type information (i.e., no bottom types).
2105    
2106    Since all these changes mean that we need new binfiles, I also bumped the
2107    version number to 110.32.1.
2108    
2109    ----------------------------------------------------------------------
2110    Name: Matthias Blume
2111    Date: 2000/12/30 22:10:00 JST
2112    Tag: blume-20001230-various
2113    Description:
2114    
2115    Added proxy libraries for MLRISC and let MLRISC libraries refer
2116    to each other using path anchors.  (See CM manual for explanation.)
2117    
2118    Updated CM documentation.
2119    
2120    Fixed some bugs in CM.
2121    
2122    Implemented "proxy" libraries (= syntactic sugar for CM).
2123    
2124    Added "-quiet" option to makeml and changed runtime system accordingly.
2125    
2126    Added cleanup handler for exportML to reset timers and compiler stats.
2127    
2128    ----------------------------------------------------------------------
2129    Name: Lal George
2130    Date: 2000/12/22 22:22:58 EST 2000
2131    Tag: Release_110_32
2132    Description:
2133    
2134            Infinite precision used throughout MLRISC.
2135            see MLRISC/mltree/machine-int.sig
2136    
2137    ----------------------------------------------------------------------
2138    Name: Matthias Blume
2139    Date: 2000/12/22 23:16:00 JST
2140    Tag: blume-20001222-warn
2141    Description:
2142    
2143    Corrected wording and formatting of some CM warning message which I
2144    broke in my previous patch.
2145    
2146    ----------------------------------------------------------------------
2147    Name: Matthias Blume
2148    Date: 2000/12/22 21:20:00 JST
2149    Tag: blume-20001222-anchorenv
2150    Description:
2151    
2152    Fixed CM's handling of anchor environments in connection with CMB.make.
2153    
2154    ----------------------------------------------------------------------
2155    Name: Matthias Blume
2156    Date: 2000/12/22 13:15:00 JST
2157    Tag: blume-20001222-cleanup
2158    Description:
2159    
2160    Removed src/cm/ffi which does not (and did not) belong here.
2161    
2162    ----------------------------------------------------------------------
2163    Name: Matthias Blume
2164    Date: 2000/12/21 23:55:00 JST
2165    Tag: blume-20001221-exn
2166    Description:
2167    
2168    Probably most important: CM no longer silently swallows all exceptions
2169    in the compiler.
2170    Plus: some other minor CM changes.  For example, CM now reports some
2171    sizes for generated binfiles (code, data, envpickle, lambdapickle).
2172    
2173    ----------------------------------------------------------------------
2174    Name: Matthias Blume
2175    Date: 2000/12/15 00:01:05 JST
2176    Tag: blume-20001215-dirtool
2177    Description:
2178    
2179    - "dir" tool added.
2180    - improvements and cleanup to Tools structure
2181    - documentation updates
2182    
2183    ----------------------------------------------------------------------
2184    Name: Allen Leung
2185    Date: Thu Dec 14 03:45:24 EST 2000
2186    Description:
2187    Tag:  leunga-20001214-int-inf
2188    Description:
2189    
2190       In IntInf, added these standard functions, which are missing from our
2191    implementation:
2192    
2193        andb : int * int -> int
2194        xorb : int * int -> int
2195        orb  : int * int -> int
2196        notb : int -> int
2197         <<   : int * word -> int
2198        ~>>  : int * word -> int
2199    
2200       Not tested, I hope they are correct.
2201    
2202    ----------------------------------------------------------------------
2203    Name: Allen Leung
2204    Date: Fri Dec  8 19:23:26 EST 2000
2205    Description:
2206    Tag:  leunga-20001208-nowhere
2207    Description:
2208    
2209      Slight improvements to the 'nowhere' tool to handle OR-patterns,
2210    to generate better error messages etc.  Plus a brief manual.
2211    
2212    ----------------------------------------------------------------------
2213    Name: Lal George
2214    Date: 2000/12/08 09:54:02 EST 2000
2215    Tag: Release_110_31
2216    Description:
2217    
2218    - Version 110.31
2219    ----------------------------------------------------------------------
2220    Name: Allen Leung
2221    Date: Thu Dec  7 22:01:04 EST 2000
2222    Tag:  leunga-20001207-cell-monster-hack
2223    Description:
2224    
2225    Major MLRISC internal changes.  Affect all clients.
2226    Summary:
2227    
2228    1.  Type CELLS.cell = int is now replaced by a datatype.
2229        As a result, the old regmap is now gone.  Almost all interfaces
2230        in MLRISC change as a consequence.
2231    
2232    2.  A new brand version of machine description tool (v3.0) that generates
2233        modules expecting the new interface.  The old version is removed.
2234    
2235    3.  The RA interface has been further abstracted into two new functors.
2236        RISC_RA and X86RA.  These functors have much simpler interfaces.
2237        [See also directory MLRISC/demo.]
2238    
2239    4.  Some other new source->source code generation tools are available:
2240    
2241        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
2242        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
2243           I use this tool to generate the peephole optimizers---with the new
2244           cell type changes, peephole rules are becoming difficult to write
2245           without conditional pattern matching.
2246    
2247    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
2248        cover the entire MLRISC source tree so many things broke.
2249    
2250    6.  CM files have been moved to the subdirectory MLRISC/cm.
2251        They are moved because there are a lot of them and they clutter up the
2252        root dir.
2253    
2254    7.  More detailed documentation to come...
2255    
2256        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
2257        a makeml -rebuild first.  This is because of other other
2258        changes that Matthias has made (see below).
2259    
2260    
2261    ----------------------------------------------------------------------
2262    Name: Matthias Blume
2263    Date: 2000/11/30 23:12:00 JST
2264    Tag: blume-20001130-filereorg
2265    Description:
2266    
2267    Some manual updates and some file reorganizations in CM.
2268    
2269    ----------------------------------------------------------------------
2270    Name: Matthias Blume
2271    Date: 2000/11/24 17:45:00 JST
2272    Tag: blume-20001124-link
2273    Description:
2274    
2275    Drastically improved link traversal code for the case that the dynamic
2276    value was already loaded at bootstrap time.  As a result, CM and CMB
2277    now both load blazingly fast -- even on a very slow machine.  Also,
2278    memory consumption has been further reduced by this.
2279    
2280    Warning: The format of the PIDMAP file has changed.  THerefore, to
2281    bootstrap you have to do this:
2282    
2283    1. Run CMB.make
2284    2. Make a symbolic link for the boot directory:
2285         ln -s sml.boot.ARCH-OS xxx
2286    3. "Rebuild" the boot directory:
2287         ./makeml -boot xxx -rebuild sml ; rm xxx
2288    4. Boot normally:
2289          ./makeml
2290    
2291    ----------------------------------------------------------------------
2292    Name: Matthias Blume
2293    Date: 2000/11/21 21:20:00 JST
2294    Tag: blume-20001121-tools
2295    Description:
2296    
2297    Continued hacking on autoloading problem -- with success this time.
2298    Also changed tool-plugin mechanism.  See new CM manual.
2299    
2300    ----------------------------------------------------------------------
2301    Name: Matthias Blume
2302    Date: 2000/11/19 14:30:00 JST
2303    Tag:  blume-20001119-autoload
2304    Description:
2305    
2306    Some hacking to make autoloading faster.  Success for CMB, no success
2307    so far for CM.  There is a reduced structure CM' that autoloads faster.
2308    (This is a temporary, non-documented hack to be eliminated again when
2309    the general problem is solved.)
2310    
2311    ----------------------------------------------------------------------
2312    Name: Matthias Blume
2313    Date: 2000/11/17 14:10:00 JST
2314    Tag: blume-20001117-pickle-lib
2315    Description:
2316    
2317    1. Eliminated comp-lib.cm
2318    2. Made pickle-lib.cm
2319    3. Eliminated all uses of intset.sml (from comp-lib.cm)
2320    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
2321       equivalent constructs from smlnj-lib.cm (INtHashTable).
2322    5. Point 4. also goes for those uses of intmap.* in MLRISC.
2323       Duplicated intmap modules thrown out.
2324    6. Hunted down all duplicated SCC code and replaced it with
2325       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
2326    7. Rewrote Feedback module.
2327    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
2328       should be thrown out and equivalent modules from smlnj-lib.cm
2329       should be used (IntRedBlackSet, IntListSet, ...).
2330    
2331    Confirmed that compiler compiles to fixpoint.
2332    
2333    ----------------------------------------------------------------------
2334    Name: Allen Leung
2335    Date: 2000/11/10 18:00:00
2336    Tag: leunga-20001110-new-x86-fp
2337    
2338    A new x86 floating point code generator has been added.
2339    By default this is turned off.  To turn this on, do:
2340    
2341        CM.autoload "$smlnj/compiler.cm";
2342        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
2343    
2344    Changes:
2345    
2346    1.  Changed FTAN to FPTAN so that the assembly output is correct.
2347    2.  Changed the extension callback for FTANGENT to generate:
2348    
2349              fptan
2350              fstp  %st(0)
2351        instead of
2352              fptan
2353              fstpl ftempmem
2354    
2355    3.  Numerous assembly fixes for x86.
2356    
2357    5.  Cleaned up the machine code output module x86/x86MC.sml and added
2358        support for a whole bunch of instructions and addressing modes:
2359    
2360          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
2361          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
2362          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
2363          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
2364          fxch %st(n)
2365          fld %st(n)
2366          fst %st(n)
2367          fst mem
2368          fstp %st(n)
2369          fucom %st(n)
2370          fucomp %st(n)
2371    
2372        All these are now generated when the fast fp mode is turned on.
2373    
2374    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
2375    
2376    ----------------------------------------------------------------------
2377    Name: Matthias Blume
2378    Date: 2000/11/09 11:20:00 JST
2379    Tag: blume-20001109-scc
2380    Description:
2381    
2382    Eliminated some code duplication:
2383    
2384    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
2385       (Otherwise the functor is useless.)
2386    2. Used GraphSCCFn where SCCUtilFun was used previously.
2387    3. Got rid of SCCUtilFun (in comp-lib.cm).
2388    
2389    ----------------------------------------------------------------------
2390    Name: Lal George
2391    Date: 2000/11/06 09:02:21 EST 2000
2392    Tag: Release_110_30
2393    Description:
2394    
2395    - Version 110.30
2396    ----------------------------------------------------------------------
2397    Name: Matthias Blume
2398    Date: 2000/11/04 14:45:00
2399    Tag: blume-20001104-mlbuild
2400    Description:
2401    
2402    - Made ml-build faster on startup.
2403    - Documentation fixes.
2404    
2405    ----------------------------------------------------------------------
2406    Name: Matthias Blume
2407    Date: 2000/11/02 17:00:00 JST
2408    Tag: blume-20001102-condcomp
2409    Description:
2410    
2411    - Small tweaks to pickler -- new BOOTFILES!
2412    - Version bumped to 110.29.2.
2413    - Added conditional compilation facility to init.cmi (see comment there).
2414    ----------------------------------------------------------------------
2415    Name: Allen Leung
2416    Date: 2000/10/23 19:31:00
2417    Tag: leunga-20001023-demo-ra
2418    
2419    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
2420    2. Test programs for the graph library updated
2421    3. Some new MLRISC demo programs added
2422    
2423    ----------------------------------------------------------------------
2424    Name: Matthias Blume
2425    Date: 2000/08/31 22:15:00 JST
2426    Tag: blume-20001017-errmsg
2427    Description:
2428    
2429    More error message grief: Where there used to be no messages, there
2430    now were some that had bogus error regions.  Fixed.
2431    
2432    ----------------------------------------------------------------------
2433    Name: Matthias Blume
2434    Date: 2000/08/31 17:30:00 JST
2435    Tag: blume-20001017-v110p29p1
2436    Description:
2437    
2438    I made a version 110.29.1 with new bootfiles.
2439    
2440    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
2441              CM documentation changes and a small bugfix in CM's error reporting.
2442    
2443    ----------------------------------------------------------------------
2444    Name: Lal George
2445    Date: 2000/09/27 14:42:35 EDT
2446    Tag: george-20000927-nodestatus
2447    Description:
2448    
2449    Changed the type of the nodestatus, so that:
2450    
2451            SPILLED(~1)             is now SPILLED
2452            SPILLED(m) where m>=0   is now MEMREG(m)
2453            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
2454    
2455    ----------------------------------------------------------------------
2456    Name: Matthias Blume
2457    Date: 2000/09/07 14:45:00 JST
2458    Tag: blume-20000907-cmerrmsg
2459    Description:
2460    
2461    Small tweak to CM to avoid getting ML syntax error messages twice.
2462    
2463    ----------------------------------------------------------------------
2464    Name: Matthias Blume
2465    Date: 2000/08/31 18:00:00 JST
2466    Tag: blume-20000831-cvsbootfiles
2467    Description:
2468    
2469    New URL for boot files (because the 110.29 files on the BL server do
2470    now work correctly with my updated install scripts for yacc and lex).
2471    
2472    ----------------------------------------------------------------------
2473    Name: Matthias Blume
2474    Date: 2000/08/08 12:33:00 JST
2475    Tag: blume-20000808-manual
2476    Description:
2477    
2478    Tiny update to CM manual.
2479    
2480    ----------------------------------------------------------------------
2481    Name: Allen Leung
2482    Date: 2000/08/7 19:31:00
2483    Tag: leunga-20000807-a-whole-bunch-of-stuff
2484    
2485      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
2486    and Mobdy.
2487    
2488    1.  x86
2489    
2490       a.  Fixes to peephole module by John and Dan.
2491       b.  Assembly fix to SETcc by Allen.
2492       c.  Fix to c-call by John.
2493       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
2494       e.  Instruction selection optimization to SETcc as suggested by John.
2495    
2496           For example,
2497    
2498            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
2499    
2500           should generate:
2501    
2502            MOVL a, x
2503            SUBL b, x
2504            SHRL 31, x
2505    
2506    2.  IR stuff
2507    
2508         A bunch of new DJ-graph related algorithms added.  These
2509         speed up SSA construction.
2510    
2511    3.  SSA + Scheduling
2512    
2513         Added code for SSA and scheduling to the repository
2514    
2515    ----------------------------------------------------------------------
2516    Name: Lal George
2517    Date: 2000/07/27 11:53:14 EDT
2518    
2519    Tag: lal-20000727-linux-ppc
2520    Description:
2521    
2522     Made changes to support Linux PPC.
2523     p.s. I have confirmation that the 110.29 boot files work fine.
2524    
2525    ----------------------------------------------------------------------
2526    Name: Matthias Blume
2527    Date: 2000/07/27 17:40:00 JST
2528    Tag: blume-20000727-scripts
2529    Description:
2530    
2531    !!!! WARNING !!!!
2532    You must recompile the runtime system!
2533    !!!! WARNING !!!!
2534    
2535    This is basically another round of script-enhancements:
2536    
2537    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
2538       and undefine CM preprocessor symbols.
2539    
2540    2. ml-build avoids generating a new heap image if it finds that the
2541       existing one is still ok.  (The condition is that no ML file had to
2542       be recompiled and all ML files are found to be older that the heap
2543       file.)
2544    
2545       To make this work smoothly, I also hacked the runtime system as
2546       well as SMLofNJ.SysInfo to get access to the heap image suffix
2547       (.sparc-solaris, ...) that is currently being used.
2548    
2549       Moreover, the signature of CM.mk_standalone has changed.  See the
2550       CM manual.
2551    
2552    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
2553       CM manual for details.)
2554    
2555    4. More CM manual updates:
2556        - all of the above has been documented.
2557        - there is now a section describing the (CM-related) command line
2558          arguments that are accepted by the "sml" command
2559    
2560    ----------------------------------------------------------------------
2561    Name: Matthias Blume
2562    Date: 2000/07/25 16:20:00 JST
2563    Tag: blume-20000725-makedepend
2564    Description:
2565    
2566    Added a script called ml-makedepend.  This can be used in makefiles
2567    for Unix' make in a way very similar to the "makedepend" command for
2568    C.
2569    
2570    The script internally uses function CM.sources.
2571    
2572    Synopsis:
2573    
2574        ml-makedepend [-f makefile] cmfile targetname
2575    
2576    The default for the makefile is "makefile" (or "Makefile" should
2577    "makefile" not exist).
2578    
2579    ml-makedepend adds a cmfile/targetname-specific section to this
2580    makefile (after removing the previous version of this section).  The
2581    section contains a single dependency specification with targetname on
2582    the LHS (targetname is an arbitrary name), and a list of files derived
2583    from the cmfile on the RHS.  Some of the files on the RHS are
2584    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
2585    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
2586    path names.  The makefile writer is responsible for making sure that
2587    these variables have correct at the time "make" is invoked.
2588    
2589    ----------------------------------------------------------------------
2590    Name: Matthias Blume
2591    Date: 2000/07/22 23:30:00 JST
2592    Tag: blume-20000722-urlupdate
2593    Description:
2594    
2595    Changed BOOT and config/srcarchiveurl to point to BL server:
2596    
2597        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
2598    
2599    ----------------------------------------------------------------------
2600    Name: Matthias Blume
2601    Date: 2000/07/18 18:00:00 JST
2602    Tag: blume-20000718-Version_110_29
2603    Description:
2604    
2605    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
2606    
2607    2. Updated config/version to 110.29
2608    
2609    3. Updated config/srcarchiveurl
2610    
2611    3. New boot files!
2612       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
2613    
2614    ----------------------------------------------------------------------
2615    Name: Matthias Blume
2616    Date: 2000/07/11 13:58:00 JST
2617    Tag: blume-20000711-doctypo
2618    Description:
2619    
2620    Fixed a few typos in CM manual.
2621    
2622    ----------------------------------------------------------------------
2623    Name: Allen Leung
2624    Date: 2000/06/15 00:38:00
2625    Tag: leunga-20000704-sparc-x86
2626    
2627    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
2628    2. fix to x86 RET bug [found by Dan Grossman]
2629    3. sparc assembly bug fix for ticc instructions [found by Fermin]
2630    
2631       Affects c-- and moby only
2632    
2633    ----------------------------------------------------------------------
2634    Name: Matthias Blume
2635    Date: 2000/07/04 15:26:00
2636    Tag: blume-20000704-trigger
2637    Description:
2638    
2639    1. Improvements to CM manual.
2640    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
2641       of getting a back-trace.  The function, when called, raises an
2642       internal exception which explicitly carries the full back-trace history,
2643       so it is unaffected by any intervening handle-raise pairs ("trivial"
2644       or not).  The interactive loop will print that history once it arrives
2645       at top level.
2646       Short of having all exceptions implicitly carry the full history, the
2647       recommended way of using this facility is:
2648         - compile your program with instrumentation "on"
2649         - run it, when it raises an exception, look at the history
2650         - if the history is "cut off" because of some handler, go and modify
2651           your program so that it explicitly calls BTrace.trigger
2652         - recompile (still instrumented), and rerun; look at the full history
2653    
2654    ----------------------------------------------------------------------
2655    Name: Matthias Blume
2656    Date: 2000/07/03 15:36:00 JST
2657    Tag: blume-20000702-manual
2658    Description:
2659    
2660    Small corrections and updates to CM manual.
2661    
2662    ----------------------------------------------------------------------
2663    Name: Matthias Blume
2664    Date: 2000/06/29 16:04:00 JST
2665    Tag: blume-20000629-yacctool
2666    Description:
2667    
2668    Changes:
2669    
2670    1. Class "mlyacc" now takes separate arguments to pass options to
2671       generated .sml- and .sig-files independently.
2672    2. Corresponding CM manual updates.
2673    3. BTrace module now also reports call sites.  (However, for loop clusters
2674       it only shows from where the cluster was entered.)  There are associated
2675       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
2676    
2677    ----------------------------------------------------------------------
2678    Name: Matthias Blume
2679    Date: 2000/06/27 16:51:00 JST
2680    Tag: blume-20000627-noweb
2681    Description:
2682    
2683    Changes:
2684    
2685     1. Implemented "subdir" and "witness" options for noweb tool.
2686        This caused some slight internal changes in CM's tool implementation.
2687     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
2688        some remaining issues from earlier path anchor changes.
2689     3. Updated CM manual accordingly.
2690    
2691     4. Changed implementation of back-tracing so that I now consider it
2692        ready for prime-time.
2693    
2694        In particular, you don't have to explicitly trigger the back-trace
2695        anymore.  Instead, if you are running BTrace-instrumented code and
2696        there is an uncaught exception (regardless of whether or not it was
2697        raised in instrumented code), the top-level evalloop will print
2698        the back-trace.
2699    
2700        Features:
2701    
2702          - Instrumented and uninstrumented code work together seemlessly.
2703            (Of course, uninstrumented code is never mentioned in actual
2704             back-traces.)
2705    
2706          - Asymptotic time- and space-complexity of instrumented code is
2707            equal to that of uninstrumented code.  (This means that
2708            tail-recursion is preserved by the instrumentation phase.)
2709    
2710          - Modules whose code has been instrumented in different sessions
2711            work together without problem.
2712    
2713          - There is no penalty whatsoever on uninstrumented code.
2714    
2715          - There is no penalty on "raise" expressions, even in
2716            instrumented code.
2717    
2718        A potential bug (or perhaps it is a feature, too):
2719    
2720          A back-trace reaches no further than the outermost instrumented
2721          non-trivial "raise".  Here, a "trivial" raise is one that is the
2722          sole RHS of a "handle" rule.  Thus, back-traces reach trough
2723    
2724               <exp> handle e => raise e
2725    
2726          and even
2727    
2728               <exp> handle Foo => raise Bar
2729    
2730          and, of course, through
2731    
2732               <exp> handle Foo => ...
2733    
2734         if the exception was not Foo.
2735    
2736         Back-traces always reach right through any un-instrumented code
2737         including any of its "handle" expressions, trivial or not.
2738    
2739       To try this out, do the following:
2740    
2741         - Erase all existing binfiles for your program.
2742           (You may keep binfiles for those modules where you think you
2743            definitely don't need back-tracing.)
2744         - Turn on back-trace instrumentation:
2745              SMLofNJ.Internals.BTrace.mode (SOME true);
2746         - Recompile your program.  (I.e., run "CM.make" or "use".)
2747         - You may now turn instrumentation off again (if you want):
2748              SMLofNJ.Internals.BTrace.mode (SOME false);
2749         - Run your program as usual.  If it raises an exception that
2750           reaches the interactive toplevel, then a back-trace will
2751           automatically be printed.  After that, the toplevel loop
2752           will print the exception history as usual.
2753    
2754    ----------------------------------------------------------------------
2755    Name: Matthias Blume
2756    Date: 2000/06/26 09:56:46 JST
2757    Tag: blume-20000626-setup
2758    Description:
2759    
2760    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
2761          ML code before and after compiling a file (e.g., to set compiler
2762          flags)
2763    
2764    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
2765              - associated changes to btrace.sml (BTrace instrumentation pass)
2766              - cleaner implementation of btimp.sml (BTrace tracing and report
2767                module)
2768    
2769    CM manual: * new path encoding documented
2770               * description of setup-parameter to "sml" added
2771    
2772    The biggest user-visible change to back-tracing is that it is no
2773    longer necessary to compile all traced modules within the same
2774    session.  (This was a real limitation.)
2775    
2776    ----------------------------------------------------------------------
2777    Name: Matthias Blume
2778    Date: 2000/06/24 12:40:00 JST
2779    Tag: blume-20000624-startup
2780    Description:
2781    
2782    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
2783    bit too often -- to put it mildly. :)
2784    
2785    ----------------------------------------------------------------------
2786    Name: Matthias Blume
2787    Date: 2000/06/23 18:20:00 JST
2788    Tag: blume-20000623-btrace
2789    Description:
2790    
2791    This updates adds a backtrace facility to aid programmers in debugging
2792    their programs.  This involves the following changes:
2793    
2794    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
2795       keeping track of the current call stack.  When programs are compiled
2796       in a special mode, the compiler will insert calls to these hooks
2797       into the user program.
2798       "Hook" means that it is possible for different implementations of
2799       back-tracing to register themselves (at different times).
2800    
2801    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
2802       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
2803       It can be turned on using this call:
2804         SMLofNJ.Internals.BTrace.mode (SOME true);
2805       Turning it off again:
2806         SMLofNJ.Internals.BTrace.mode (SOME false);
2807       Querying the current status:
2808         SMLofNJ.Internals.BTrace.mode NONE;
2809       Annotated programs are about twice as big as normal ones, and they
2810       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
2811       where all hooks do nothing).  The slowdown with a plugin that is
2812       actually useful (such as the one supplied by default) is even greater,
2813       but in the case of the default plugin it is still only an constant
2814       factor (amortized).
2815    
2816    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
2817       with a sub-structure BTrace for controlling back-tracing.  In particular,
2818       the above-mentioned function "mode" controls whether the annotation
2819       phase is invoked by the compiler.  Another important function is
2820       "trigger": when called it aborts the current execution and causes
2821       the top-level loop to print a full back-trace.
2822    
2823    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
2824       for back-tracing.  It keeps track of the dynamic call stack and in
2825       addition to that it keeps a partial history at each "level" of that
2826       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
2827       d and b (at separate times, dynamically), then the report will show:
2828    
2829       GOTO   d
2830             /c
2831       GOTO  \b
2832       CALL   a
2833    
2834       This shows that there was an initial non-tail call of a, then a
2835       tail-call to b or c, looping behavior in a cluster of functions that
2836       consist of b and c, and then a goto from that cluster (i.e., either from
2837       b or from c) to d.
2838    
2839       Note that (depending on the user program) the amount of information
2840       that the back-trace module has to keep track of at each level is bounded
2841       by a constant.  Thus, the whole implementation has the same asymptotical
2842       complexity as the original program (both in space and in time).
2843    
2844    5. compiler/TopLevel/interact/evalloop.sml has been modified to
2845       handle the special exception SMLofNJ.Internals.BTrace.BTrace
2846       which is raised by the "trigger" function mentioned above.
2847    
2848    Notes on usage:
2849    
2850    - Annotated code works well together with unannotated code:
2851    Unannotated calls simply do not show up at all in the backtrace.
2852    
2853    - It is not a good idea to let modules that were annotated during
2854    different sessions run at the same time.  This is because the compiler
2855    chooses small integers to identify individual functions, and there
2856    will be clashes if different modules were compiled in separate sessions.
2857    (Nothing will crash, and you will even be told about the clashes, but
2858    back-trace information will in general not be useful.)
2859    
2860    - Back-tracing can be confused by callcc and capture.
2861    
2862    - The only way of getting a back-trace right now is to explicitly
2863    invoke the "trigger" function from your user program.  Eventually, we
2864    should make every exception carry back-trace information (if
2865    available).  But since this creates more overhead at "raise"-time
2866    (similar to the current exnHistory overhead), I have not yet
2867    implemented this.  (The implementation will be rather easy.)  With
2868    exceptions carrying back-trace information, this facility will be even
2869    more useful because users don't need to modify their programs...
2870    
2871    - While it is possible to compile the compiler with back-trace
2872    annotations turned on (I did it to get some confidence in
2873    correctness), you must make absolutely sure that core.sml and
2874    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
2875    be compiled with annotation because there is no core access yet, but
2876    if you compile btimp.sml with annotation, then the system will go into
2877    an infinite recursion and crash.)
2878    Since CM currently does not know about BTrace, the only way to turn
2879    annotations on and off for different modules of the compiler is to
2880    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
2881    this is awkward and clumsy.
2882    
2883    Sample sessions:
2884    
2885    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2886    - SMLofNJ.Internals.BTrace.mode (SOME true);
2887    [autoloading]
2888    [autoloading done]
2889    val it = false : bool
2890    - structure X = struct
2891    -     fun main n = let
2892    -         fun a (x, 0) = d x
2893    -           | a (x, n) = b (x, n - 1)
2894    -         and b (x, n) = c (x, n)
2895    -         and c (x, n) = a (x, n)
2896    -         and d x = e (x, 3)
2897    -         and e (x, 0) = f x
2898    -           | e (x, n) = e (x, n - 1)
2899    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
2900    -           | f n = n * g (n - 1)
2901    -         and g n = a (n, 3)
2902    -     in
2903    -         f n
2904    -     end
2905    - end;
2906    structure X : sig val main : int -> int end
2907    - X.main 3;
2908    *** BACK-TRACE ***
2909    GOTO   stdIn:4.2-13.20: X.main[2].f
2910    GOTO-( stdIn:4.2-13.20: X.main[2].e
2911    GOTO   stdIn:4.2-13.20: X.main[2].d
2912         / stdIn:4.2-13.20: X.main[2].a
2913         | stdIn:4.2-13.20: X.main[2].b
2914    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2915    CALL   stdIn:4.2-13.20: X.main[2].g
2916    GOTO   stdIn:4.2-13.20: X.main[2].f
2917    GOTO-( stdIn:4.2-13.20: X.main[2].e
2918    GOTO   stdIn:4.2-13.20: X.main[2].d
2919         / stdIn:4.2-13.20: X.main[2].a
2920         | stdIn:4.2-13.20: X.main[2].b
2921    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2922    CALL   stdIn:4.2-13.20: X.main[2].g
2923    GOTO   stdIn:4.2-13.20: X.main[2].f
2924    GOTO-( stdIn:4.2-13.20: X.main[2].e
2925    GOTO   stdIn:4.2-13.20: X.main[2].d
2926         / stdIn:4.2-13.20: X.main[2].a
2927         | stdIn:4.2-13.20: X.main[2].b
2928    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2929    CALL   stdIn:4.2-13.20: X.main[2].g
2930    GOTO   stdIn:4.2-13.20: X.main[2].f
2931    CALL   stdIn:2.15-17.4: X.main[2]
2932    -
2933    
2934    (Note that because of a FLINt bug the above code currently does not
2935    compile without BTrace turned on.)
2936    
2937    Here is another example, using my modified Tiger compiler:
2938    
2939    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2940    - SMLofNJ.Internals.BTrace.mode (SOME true);
2941    [autoloading]
2942    [autoloading done]
2943    val it = false : bool
2944    - CM.make "sources.cm";
2945    [autoloading]
2946    ...
2947    [autoloading done]
2948    [scanning sources.cm]
2949    [parsing (sources.cm):parse.sml]
2950    [creating directory CM/SKEL ...]
2951    [parsing (sources.cm):tiger.lex.sml]
2952    ...
2953    [wrote CM/sparc-unix/semant.sml]
2954    [compiling (sources.cm):main.sml]
2955    [wrote CM/sparc-unix/main.sml]
2956    [New bindings added.]
2957    val it = true : bool
2958    - Main.compile ("../testcases/merge.tig", "foo.out");
2959    *** BACK-TRACE ***
2960    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
2961    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2962    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2963    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2964    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2965    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2966    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
2967         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
2968    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
2969    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2970    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
2971    CALL   main.sml:1.18-118.4: Main.compile[2]
2972    -
2973    
2974    ----------------------------------------------------------------------
2975    Name: Matthias Blumen
2976    Date: 2000/06/21 18:00:00 JST
2977    Tag: blume-20000621-manual
2978    Description:
2979    
2980    CM manual update: Path environments documented.
2981    
2982    ----------------------------------------------------------------------
2983    Name: Matthias Blume
2984    Date: 2000/06/19 13:40:00
2985    Tag: blume-20000619-manual
2986    Description:
2987    
2988    CM manual and system/README update.  This only covers the fact that
2989    there are no more implicit anchors.  (Path environments and the "bind"
2990    option to "cm" have yet to be documented.)
2991    
2992    ----------------------------------------------------------------------
2993    Name: Matthias Blume
2994    Date: 2000/06/19 11:05:00 JST
2995    Tag: blume-20000619-chdir-bugfix
2996    Description:
2997    
2998    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
2999    
3000    ----------------------------------------------------------------------
3001    Name: Matthias Blume
3002    Date: 2000/06/18 22:00:10 JST
3003    Tag: blume-20000618-implicit-anchors-really-gone
3004    Description:
3005    
3006    I updates the previous HISTORY entry where I forgot to mention that
3007    implicit anchors are no longer with us.
3008    
3009    The current update also gets rid of the (now useless) controller
3010    CM.Control.implicit_anchors.
3011    
3012    ----------------------------------------------------------------------
3013    Name: Matthias Blume
3014    Date: 2000/06/16 17:30:00 JST
3015    Tag: blume-20000616-anchorenv
3016    Description:
3017    
3018    This patch implements the long anticipated (just kidding :) "anchor
3019    environment" mechanism.  In the course of doing this, I also
3020    re-implemented CM's internal "SrcPath" module from scratch.  The new
3021    one should be more robust in certain boundary cases.  In any case, it
3022    is a lot cleaner than its predecessor (IMHO).
3023    
3024    This time, although there is yet another boot file format change, I
3025    kept the unpickler backward-compatible.  As a result, no new bootfiles
3026    are necessary and bootstrapping is straightforward.  (You cannot read
3027    new bootfiles into an old system, but the other way around is no
3028    problem.)
3029    
3030    Visible changes:
3031    
3032    ** 0. Implicit path anchors (without the leading $-symbol) are no
3033    longer recognized at all. This means that such path names are not
3034    illegal either.  For example, the name basis.cm simply refers to a
3035    local file called "basis.cm" (i.e, the name is an ordinary path
3036    relative to .cm-files directory).  Or, to put it differently, only
3037    names that start with $ are anchored paths.
3038    
3039    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
3040    vanished.
3041    
3042    John (Reppy) had critizised this as soon as I originally proposed and
3043    implemented it, but at that time I did not really deeply believe
3044    him. :) Now I came full-circle because I need the $<singlearc> syntax
3045    in another place where it cannot be seen as an abbreviation for
3046    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
3047    seems to mean (i.e., it "expands" into the corresponding anchor
3048    value).
3049    
3050    However, when paths are used as members in CM description files, it
3051    continues to be true that there must be at least another arc after the
3052    anchor.  This is now enforced separately during semantic analysis
3053    (i.e., from a lexical/syntactical point of view, the notation is ok.)
3054    
3055    ** 2. The "cm" class now accepts an option "bind".  The option's value
3056    is a sub-option list of precisely two items -- one labeled "anchor"
3057    and the other one labeled "value".  As you might expect, "anchor" is
3058    used to specify an anchor name to be bound, and "value" specifies what
3059    the anchor is being bound to.
3060    
3061    The value must be a directory name and can be given in either standard
3062    syntax (including the possibility that it is itself an anchored path)
3063    or native syntax.
3064    
3065    Examples:
3066    
3067       foo.cm (bind:(anchor:bar value:$mystuff/bar))
3068       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
3069    
3070    and so on.
3071    
3072    The meaning of this is that the .cm-file will be processed with an
3073    augmented anchor environment where the given anchor(s) is/are bound to
3074    the given values(s).
3075    
3076    The rationale for having this feature is this: Suppose you are trying
3077    to use two different (already stable) libraries a.cm and b.cm (that
3078    you perhaps didn't write yourself).  Further, suppose each of these
3079    two libraries internally uses its own auxiliary library $aux/lib.cm.
3080    Normally you would now have a problem because the anchor "lib" can not
3081    be bound to more than one value globally.  Therefore, the project that
3082    uses both a.cm and b.cm must locally redirect the anchor to some other
3083    place:
3084    
3085       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
3086       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
3087    
3088    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
3089    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
3090    
3091    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
3092    you when you do so at the time of CM.stabilize).  Therefore, you can
3093    also use an anchored path as the value:
3094    
3095      a.cm (bind:(anchor:lib value:$a-lib))
3096      b.cm (bind:(anchor:lib value:$b-lib))
3097    
3098    Now you can globally configure (using the usual CM.Anchor.anchor or
3099    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
3100    itself is always locally bound, setting it globally is no longer
3101    meaningful or necessary (but it does not hurt either).  In fact, "lib"
3102    can still be used as a global anchor for separate purposes.  As a
3103    matter of fact, one can locally define "lib" in terms of a global
3104    "lib":
3105    
3106      a.cm (bind:(anchor:lib value:$lib/a))
3107      b.cm (bind:(anchor:lib value:$lib/b))
3108    
3109    ** 3: The encoding of path names has changed.  This affects the way
3110    path names are shown in CM's progress report and also the internal
3111    protocol encoding used for parallel make.
3112    
3113    The encoding now uses one or more ':'-separated segments.  Each
3114    segments corresponds to a file that has been specified relative to the
3115    file given by its preceding segment.  The first segment is either
3116    relative to the CWD, absolute, or anchored.  Each segment itself is
3117    basically a Unix pathname; all segments but the first are relative.
3118    
3119    Example:
3120    
3121       $foo/bar/baz.cm:a/b/c.sml
3122    
3123    This path denotes the file bar/a/b/c.sml relative to the directory
3124    denoted by anchor "foo".  Notice that the encoding also includes
3125    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
3126    paths are resolved relative to the .cm-files directory, so baz.cm must
3127    be ignored to get the "real" pathname.
3128    
3129    To make this fact more obvious, CM puts the names of such "virtual
3130    arcs" into parentheses when they appear in progress reports. (No
3131    parentheses will appear in the internal protocol encoding.)  Thus,
3132    what you really see is:
3133    
3134      $foo/bar/(baz.cm):a/b/c.sml
3135    
3136    I find this notation to be much more informative than before.
3137    
3138    Another new feature of the encoding is that special characters
3139    including parentheses, colons, (back)slashes, and white space are
3140    written as \ddd (where ddd is the decimal encoding of the character).
3141    
3142    *** The CM manual still needs to be updated.
3143    
3144    ----------------------------------------------------------------------
3145    Name: Allen Leung
3146    Date: 2000/06/15 00:38:00
3147    Tag: leunga-20000615-x86-peephole
3148    
3149    x86 Peephole fix by Fermin.  Affects c-- and moby only.
3150    
3151    ----------------------------------------------------------------------
3152    Name: Matthias Blume
3153    Date: 2000/06/12 11:40:00
3154    Tag: blume-20000612-parmakefix
3155    Description:
3156    
3157    More cleanup after changing the file naming scheme: This time I
3158    repaired the parallel make mechanism for CMB.make which I broke earlier.
3159    
3160    ----------------------------------------------------------------------
3161    Name: Allen Leung
3162    Date: 2000/06/09 01:25:00
3163    Tag: leunga-20000609-various
3164    
3165    None of these things should affect normal SML/NJ operations
3166    
3167    1. Peephole improvements provided by Fermin (c--)
3168    2. New annotation DEFUSE for adding extra dependence (moby)
3169    3. New X86 LOCK instructions (moby)
3170    4. New machine description language for reservation tables (scheduling)
3171    5. Fixes to various optimization/analysis modules (branch chaining, dominator
3172       trees etc.)
3173    6. I've changed the CM files so that they can work with versions
3174       110.0.6, 110.25 and 110.28
3175    
3176    ----------------------------------------------------------------------
3177    Name: Matthias Blume
3178    Date: 2000/06/09 12:40:00
3179    Tag: blume-20000609-log
3180    Description:
3181    
3182    - Removed all(?) remaining RCS Log entries from sources.
3183    
3184    - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for
3185      anchored paths).
3186    
3187    ----------------------------------------------------------------------
3188    Name: Matthias Blume
3189    Date: 2000/06/07 17:00:00 JST
3190    Tag: blume-20000607-no-implicit-anchors
3191    Description:
3192    
3193    1. This update changes the default setting for
3194    CM.Control.implicit_anchors from true to false.  This means that
3195    implicit anchors are no longer permitted by default.  I also tried to
3196    make sure that nothing else still relies on implicit anchors.
3197    (This is the next step on the schedule towards a CM that does not even
3198    have the notion of implicit anchors anymore.)
3199    
3200    2. More CM manual updates.
3201    
3202    3. I managed to track down and fix the pickling bug I mentioned last
3203    time.  Because of the previously existing workaround, this entails no
3204    immediate practical changes.
3205    
3206    ----------------------------------------------------------------------
3207    Name: Matthias Blume
3208    Date: 2000/06/06 11:15:00 JST
3209    Tag: blume-20000606-lazierpickle
3210    Description:
3211    
3212    !!!! NEW BOOT FILES !!!!
3213    
3214    * The main purpose of this update is to make library pickles lazier in
3215    order to reduce the initial space penalty for autoloading a library.
3216    As a result, it is now possible to have $smlnj/compiler.cm
3217    pre-registered.  This should take care of the many complaints or
3218    inquiries about missing structure Compiler.  This required changes to
3219    CM's internal data structures and small tweaks to some algorithms.
3220    
3221    As a neat additional effect, it is no longer necessary (for the sake
3222    of lean heap image files) to distinguish between a "minimal" CM and a
3223    "full" CM.  Now, there is only one CM (i.e., the "full" version:
3224    $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the
3225    interactive top level. ($smlnj/cm/minimal.cm is gone.)
3226    
3227    To make the life of compiler-hackers easier, "makeml" now also
3228    pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm).  In other
3229    words, after you bootstrap a new sml for the first time, you will not
3230    have to autoload $smlnj/cmb.cm again afterwards.  (The first time
3231    around you will still have to do it, though.)
3232    
3233    * A second change consists of major updates to the CM manual.  There
3234    are now several appendices with summary information and also a full
3235    specification of the CM description file syntax.
3236    
3237    * In directory src/system I added the script "allcross".  This script
3238    invokes sml and cross-compiles the compiler for all supported
3239    architectures.  (Useful when providing a new set of boot files.)
3240    
3241    * There seems to be a latent bug in my "lazy pickles" mechanism.  I
3242    added a small tweak to pickle-util.sml to work around this problem,
3243    but it is not a proper fix yet.  I will investigate further.  (The
3244    effect of the bug was an inflation of library pickle size.)
3245    
3246    * Version number increased to 110.28.1 (to avoid compatibility problems).
3247    
3248    ----------------------------------------------------------------------
3249    Name: Allen Leung
3250    Date: 2000/05/25 17:28 EDT
3251    Tag: leunga-20000525-ra
3252    Description:
3253    
3254      Fixed a bug in freezing phase of the register allocator.
3255    
3256    ----------------------------------------------------------------------
3257    Name: Allen Leung
3258    Date: 2000/05/15 22:53 EDT
3259    Tag: leunga-20000515-alpha-x86-ra
3260    Description:
3261    
3262      1. Alpha
3263    
3264          Slight cleanup.  Removed the instruction SGNXL
3265    
3266      2. X86
3267    
3268          Added the following instructions to the instruction set:
3269    
3270            ROLx, RORx,
3271            BTx, BTSx, BTLx, BTRx,
3272            XCHGx, and variants with the LOCK prefix
3273    
3274      3. Register Allocation
3275    
3276          The module ra-rewrite-with-renaming has been improved.
3277    
3278      These have no effect on SML/NJ.
3279    
3280    ----------------------------------------------------------------------
3281    Name: Matthias Blume
3282    Date: 2000/05/15 16:20:00 JST
3283    Tag: blume-20000515-lightrebuild
3284    Description:
3285    
3286    1. I added an alternative to "-rebuild" to "makeml".  The difference is
3287       that prior to calling CMB.make' the CM-variable "LIGHT" will be
3288       defined.  In effect, the command will not build any cross-compiler
3289       backends and therefore finish more quickly.
3290    
3291       The "fixpt" script also takes a "-light" switch to be able to use
3292       this new facility while compiling for a fixpoint.
3293    
3294    2. I replaced all mentions of anchored paths in group owner specifications
3295       with simple relative paths (usually starting with "..").
3296       The rationale is that a library's internal workings should not be
3297       compromised by the lack of some anchor.  (An anchor is necessary
3298       for someone who wants to refer to the library by an anchored path,
3299       but it should not be necessary to build the same library in the first
3300       place.)
3301    
3302    3. I changed the way CM's tool mechanism determines the shell command
3303       string used for things like ml-yacc etc. so that it does not break
3304       when CM.Control.implicit_anchors is turned off.
3305    
3306    ----------------------------------------------------------------------
3307    Name: Matthias Blume
3308    Date: 2000/05/12 18:20:00 JST
3309    Tag: blume-20000512-ml-build
3310    Description:
3311    
3312    Fixed a bug in config/_ml-build that prevented ml-yacc and ml-lex from
3313    getting installed properly (by config/install.sh).
3314    
3315    ----------------------------------------------------------------------
3316    Name: Matthias Blume
3317    Date: 2000/05/12 17:30:00 JST
3318    Tag: blume-20000512-anchors
3319    Description:
3320    
3321    !!! NEW BOOT FILES !!!
3322    
3323    This change is in preparation of fading out support for "implicitly
3324    anchored path names".  I went through all sources and used the
3325    explicit (and relatively new) $-notation.  See system/README and the
3326    CM manual for more info on this.
3327    
3328    I also modified the anchoring scheme for some things such as "smlnj",
3329    "MLRISC", "cm", etc. to take advantage of the fact that explicit
3330    anchors are more expressive: anchor name and first arc do not have to
3331    coincide.  This entails the following user-visible change:
3332    
3333    You have to write $smlnj/foo/bar instead of smlnj/foo/bar.  In
3334    particular, when you fire up sml with a command-line argument, say,
3335    e.g.:
3336    
3337       sml '$smlnj/cmb.cm'
3338    
3339    At the ML toplevel prompt:
3340    
3341       CM.autoload "$smlnj/cmb.cm";
3342    
3343    There is also a new controller in CM.Control that can be used to turn
3344    off all remaining support for implicit anchors by saying:
3345    
3346        CM.autoload "$smlnj/
3347        #set CM.Control.implicit_anchors false;
3348    
3349    This causes CM to reject implicitly anchored paths.  This is (for the
3350    time being) less permissive than the "final" version where there will
3351    be no more such implicit anchors and relative paths will be just that:
3352    relative.
3353    
3354    The next step (version after next version?) will be to make the
3355    default for CM.Control.implicit_anchors false.  After the dust has
3356    settled, I can then produce the "final" version of this...
3357    
3358    Note: Since bootstrapping is a bit tricky, I provided new boot files.
3359    
3360    ----------------------------------------------------------------------
3361    Name: Matthias Blume
3362    Date: 2000/05/11 16:30:00 JST
3363    Tag: blume-20000511-sources
3364    Description:
3365    
3366    The main change is that I added function CM.sources as a generalized
3367    version of the earlier CM.makedepend.  This entails the following
3368    additional changes:
3369    
3370      - CM.makedepend has been dropped.
3371    
3372      - CM manual has been updated.
3373    
3374      - TOOLS signature and API have been changed.
3375    
3376    ----------------------------------------------------------------------
3377    Name: Allen Leung
3378    Date: 2000/05/10 21:17 EDT
3379    Tag: leunga-20000510-moby-c--ssa
3380    Description:
3381    
3382      Various bug fixes and new features for C--, Moby and MLRISC optimizations.
3383    None of these affect SML/NJ.
3384    
3385    1. Register Allocation
3386    
3387        a. A new ra spilling module (ra/ra-spill-with-renaming) is implemented.
3388           This module tries to remove local (i.e. basic block level) redundancies
3389           during spilling.
3390    
3391        b. A new framework for performing region based register allocation.
3392           Not yet entirely functional.
3393    
3394    2. X86
3395    
3396       a. DefUse for POP was missing the stack pointer [found by Lal]
3397       b. Reload for CALL was incorrect in X86Spill [found by John]
3398       c. Various fixes in X86Spill so that it can be used correctly for
3399          the new spilling module.
3400    
3401    3. SSA/IR
3402    
3403       a. New module ir/dj-dataflow.sml implements elimination based
3404          data flow analysis.
3405    
3406    4. MLRiscGen
3407    
3408       a. Fix for gc type annotation
3409    
3410    5. MDGen
3411    
3412       Various fixes for machine description -> ml code translation.  For ssa
3413       only.
3414    
3415    ----------------------------------------------------------------------
3416    Name: Allen Leung
3417    Date: 2000/05/08 22:17 EDT
3418    Tag: leunga-20000508-labexp
3419    Description:
3420    
3421      Fermin has found a few assembly problems with constant expressions
3422      generated in LabelExp.  Mostly, the problems involve extra parentheses,
3423      which choke on dumb assemblers.  This is his fix.
3424    
3425    ----------------------------------------------------------------------
3426    Name: Dave MacQueen
3427    Date: 2000/04/09 14:00 EDT
3428    Tag: dbm-20000502-Version_110_28
3429    Description:
3430    
3431    1. Updated src/compiler/TopLevel/main/version.sml to version 110.28
3432    
3433    2. Updated config/version to 110.28
3434    
3435    3. Updated config/srcarchiveurl
3436    
3437    3. New boot files!
3438       ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.28/
3439    
3440    ----------------------------------------------------------------------
3441    Name: Matthias Blume
3442    Date: 2000/05/01 19:05:00 JST
3443    Tag: blume-20000501-noweb
3444    Description:
3445    
3446    A new noweb tool has been added.  The existing system is entirely
3447    unaffected by this, but some CM users have asked for renewed noweb
3448    support.  Everything is documented in the CM manual.
3449    
3450    New (plugin) libraries:
3451    
3452       noweb-tool.cm
3453       nw-ext.cm
3454    
3455    ----------------------------------------------------------------------
3456    Name: Dave MacQueen
3457    Date: 2000/04/30 12:40PM EDT
3458    Tag: dbm-20000430-bug_fixes
3459    Description:
3460    
3461    1. Fix for bug 1498
3462       smlnj/src/system/Basis/Implementation/Unsafe/object.sig
3463       smlnj/src/system/Basis/Implementation/Unsafe/object.sml
3464         added toRealArray function
3465       smlnj/src/compiler/MiscUtil/print/ppobj.sml
3466         added check for tag Obj.RealArray to array printing case in ppObj
3467    
3468    2. Fix for bug 1510
3469       smlnj/src/compiler/Semant/types/typesutil.sml
3470         fixed definition of dummyargs (used by equalTycon) so that
3471         dummy args are distinct types
3472    
3473    ----------------------------------------------------------------------
3474    Name: Matthias Blume
3475    Date: 2000/04/30 01:00:00 JST
3476    Tag: blume-20000430-versions
3477    Description:
3478    
3479    1. CM version numbering added.  This is an implementation of Lal's
3480       proposal for adding version numbers and version checking to .cm
3481       files.  Lal said that his proposal was just that -- a proposal.
3482       For the time being I went ahead and implemented it so that people
3483       can comment on it.  Everything is completely backward-compatible
3484       (except for the stable library format, i.e., new bootfiles!).
3485    
3486       As usual, see the CM manual for details.
3487    
3488    2. An alternative syntax for anchored paths has been implemented.
3489       Dave has recently voiced the same concerns that I had when I did
3490       this, so there should be some support.  My take is that eventually
3491       I will let support for the current syntax (where anchors are
3492       "implicit") fade out in favor of the new, explicit syntax.
3493       In order to be backward-compatible, both old and new syntax are
3494       currently supported.
3495    
3496       Again, see the CM manual for details.
3497    
3498    3. Parallel make is trying to be slightly smarter:  When the master
3499       process finds a "bottleneck", i.e., when there is only one
3500       compilation unit that can be compiled and everybody else is
3501       waiting on it, then it will simply compile it directly instead
3502       of clumsily telling one of the slaves to do it.
3503    
3504    4. Support for "unsharing" added.  This is necessary in order to be
3505       able to have two different versions of the same library running
3506       at the same time (e.g., for trying out a new MLRISC while still
3507       having the old MLRISC linked into the current compiler, etc.)
3508       See the CM manual.
3509    
3510    5. Simple "makedepend" functionality added for generating Makefile
3511       dependency information.  (This is rather crude at the moment.
3512       Expect some changes here in the future.)
3513    
3514    6. ".fun" added as a recognized suffix for ML files. Also documented
3515       explicitly in the manual that the fallback behavior (unknown suffix
3516       -> ML file) is not an official feature!
3517    
3518    7. Small changes to the pickler for stable libraries.
3519    
3520    8. Several internal changes to CM (for cleanup/improvement).
3521    
3522    
3523    !!!! NEW BINFILES !!!!
3524    
3525    ----------------------------------------------------------------------
3526    Name: Matthias Blume
3527    Date: 2000/04/28 17:30:00 JST
3528    Tag: blume-20000428-pathconfig
3529    Description:
3530    
3531    1. I changed config/install.sh to remove duplicate entries from the
3532       lib/pathconfig file at the end.  Moreover, the final version of
3533       lib/pathconfig is sorted alphabetically.  The same (sorting) is done
3534       in src/system/installml.
3535    
3536    2. The config/install.sh script now consistently uses relative
3537       pathnames in lib/pathconfig whenever the anchor is in the lib
3538       directory.  (So far this was true for the libraries that come
3539       pre-compiled and bundled as part of the bootfiles but not for
3540       libraries that are compiled by the script itself.)
3541    
3542    ----------------------------------------------------------------------
3543    Name: Matthias Blume
3544    Date: 2000/04/26 13:10:00 JST
3545    Tag: blume-20000426-fun_suffix
3546    Description:
3547    
3548    Added ".fun" as a recognized file name suffix (for ML code).
3549    
3550  ----------------------------------------------------------------------  ----------------------------------------------------------------------
3551  Name: Allen Leung  Name: Allen Leung
3552  Date: 2000/04/25 17:00:00 EST  Date: 2000/04/25 17:00:00 EST
# Line 200  Line 3736 
3736    
3737  3.  Assembly  3.  Assembly
3738    
3739      When generating assemby, resolve the value of client defined constants,      When generating assembly, resolve the value of client defined constants,
3740      instead of generating symbolic values.  This is controlled by the      instead of generating symbolic values.  This is controlled by the
3741      new flag "asm-resolve-constants", which is default to true.      new flag "asm-resolve-constants", which is default to true.
3742    
# Line 223  Line 3759 
3759    
3760  To this end, I arranged that instead of "structure Core" as "structure  To this end, I arranged that instead of "structure Core" as "structure
3761  _Core" is bound in the pervasive environment.  Core access is done via  _Core" is bound in the pervasive environment.  Core access is done via
3762  _Core (which can never be accidentially rebound because _Core is not a  _Core (which can never be accidentally rebound because _Core is not a
3763  legal surface-syntax symbol).  legal surface-syntax symbol).
3764    
3765  The current solution is much cleaner because the core environment is  The current solution is much cleaner because the core environment is
# Line 233  Line 3769 
3769  with dynamic and symbolic parts of the core environment.  with dynamic and symbolic parts of the core environment.
3770    
3771  Remaining hackery (to bind the "magic" symbol _Core) is localized in the  Remaining hackery (to bind the "magic" symbol _Core) is localized in the
3772  compilation mananger's bootstrap compiler (actually: in the "init group"  compilation manager's bootstrap compiler (actually: in the "init group"
3773  handling).  See the comments in src/system/smlnj/init/init.cmi for  handling).  See the comments in src/system/smlnj/init/init.cmi for
3774  more details.  more details.
3775    
# Line 348  Line 3884 
3884     (specified in the .cm file at each instance where the tool's class is     (specified in the .cm file at each instance where the tool's class is
3885     used).     used).
3886    
3887     This was done to accomodate the new "make" and "shell" tools which     This was done to accommodate the new "make" and "shell" tools which
3888     facilitate fairly seemless hookup to portions of code managed using     facilitate fairly seamless hookup to portions of code managed using
3889     Makefiles or Shell scripts.     Makefiles or Shell scripts.
3890    
3891     There are no classes "shared" or "private" anymore.  Instead, the     There are no classes "shared" or "private" anymore.  Instead, the
# Line 361  Line 3897 
3897    
3898     All existing tools are described in the CM manual.     All existing tools are described in the CM manual.
3899    
3900     - Slightly better error handling.  (CM now surpresses many followup     - Slightly better error handling.  (CM now suppresses many followup
3901     error messages that tended to be more annoying than helpful.)     error messages that tended to be more annoying than helpful.)
3902    
3903  2. Major changes to the compiler's static environment data structures.  2. Major changes to the compiler's static environment data structures.
# Line 392  Line 3928 
3928       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
3929       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
3930       Please, don't be too harsh on me for messing with this code a bit more       Please, don't be too harsh on me for messing with this code a bit more
3931       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
3932       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
3933       Dave's hands. :)       Dave's hands. :)
3934    
# Line 495  Line 4031 
4031    
4032       I've changed andl to testl in the floating point test sequence       I've changed andl to testl in the floating point test sequence
4033       whenever appropriate.  The Intel optimization guide states that       whenever appropriate.  The Intel optimization guide states that
4034       testl is perferable to andl.       testl is preferable to andl.
4035    
4036  7. RA (x86 only)  7. RA (x86 only)
4037    
# Line 677  Line 4213 
4213    
4214  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an
4215  additional argument called "template" which is an optional string that  additional argument called "template" which is an optional string that
4216  specifiel the layout of the tool command line.  See the CM manual for  specifies the layout of the tool command line.  See the CM manual for
4217  explanation.  explanation.
4218    
4219  2. A spec