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 645, Mon May 15 07:17:30 2000 UTC revision 987, Wed Nov 21 21:14:44 2001 UTC
# Line 11  Line 11 
11  Date:  Date:
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15    ----------------------------------------------------------------------
16    Name: Matthias Blume
17    Date: 2001/11/21 16:14:00 EST
18    Tag: blume-20011121-forgottenfile
19    Description:
20    
21    Forgot to add a file.  (Just a .tex-file -- part of
22    the CM manual source.)
23    
24    ----------------------------------------------------------------------
25    Name: Matthias Blume
26    Date: 2001/11/21 16:10:00 EST
27    Tag: Release_110_37
28    Description:
29    
30    1. Modifications to the SML/NJ code generator and to the runtime system
31       so that code object name strings are directly inserted into code
32       objects at code generation time.  The only business the runtime system
33       has with this is now to read the name strings on occasions.
34       (The encoding of the name string has also changed somewhat.)
35    
36    2. CM now implements a simple "set calculus" for specifying export lists.
37       In particular, it is now possible to refer to the export lists of
38       other libraries/groups/sources and form unions as well as differences.
39       See the latest CM manual for details.
40    
41    3. An separate notion of "proxy" libraries has again be eliminated from
42       CM's model.  (Proxy libraries are now simply a special case of using
43       the export list calculus.)
44    
45    4. Some of the existing libraries now take advantage of the new set
46       calculus.
47       (Notice that not all libraries have been converted because some
48       of the existing .cm-files are supposed to be backward compatible
49       with 110.0.x.)
50    
51    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
52       "General.exnMessage"!  The former relies on a certain hook to be
53       initialized, and that often does not happen in the stand-alone case.)
54    
55    ----------------------------------------------------------------------
56    Name: Lal George
57    Date: 2001/11/21  13:56:18 EST
58    Tag: george-2001121-pseudo-ops
59    Description:
60    
61      Implemented a complete redesign of MLRISC pseudo-ops. Now there
62      ought to never be any question of incompatabilities with
63      pseudo-op syntax expected by host assemblers.
64    
65      For now, only modules supporting GAS syntax are implemented
66      but more should follow, such as MASM, and vendor assembler
67      syntax, e.g. IBM as, Sun as, etc.
68    
69    ----------------------------------------------------------------------
70    Name: Matthias Blume
71    Date: 2001/11/14 11:52:00 EST
72    Tag: blume-20011114-srcname
73    Description:
74    
75    1. Routed the name of the current source file to mlriscgen where it
76       should be directly emitted into the code object.  (This last part
77       is yet to be done.)
78    
79    2. Some cleanup of the pgraph code to make it match the proposal that
80       I put out the other day.  (The proposal notwithstanding, things are
81       still in flux here.)
82    
83    ----------------------------------------------------------------------
84    Name: Lal George
85    Date: 2001/11/14 09:44:04 EST
86    Tag:
87    Description:
88    
89      Fix for a backpatching bug reported by Allen.
90    
91      Because the boundary between short and long span-dependent
92      instructions is +/- 128, there are an astounding number of
93      span-dependent instructions whose size is over estimated.
94    
95      Allen came up with the idea of letting the size of span
96      dependent instructions be non-monotonic, for a maxIter
97      number of times, after which the size must be monotonically
98      increasing.
99    
100      This table shows the number of span-dependent instructions
101      whose size was over-estimated as a function of maxIter, for the
102      file Parse/parse/ml.grm.sml:
103    
104         maxIter            # of instructions:
105            10                      687
106            20                      438
107            30                      198
108            40                        0
109    
110      In compiling the compiler, there is no significant difference in
111      compilation speed between maxIter=10 and maxIter=40. Actually,
112      my measurements showed that maxIter=40 was a tad faster than
113      maxIter=10! Also 96% of the  files in the compiler reach a fix
114      point within 13 iterations, so fixing maxIter at 40, while high,
115      is okay.
116    
117    ----------------------------------------------------------------------
118    Name: Matthias Blume
119    Date: 2001/10/31 15:25:00 EST
120    Tag: blume-20011031-pgraph
121    Description:
122    
123    CKIT:
124    * Changed the "Function" constructor of type Ast.ctype to carry optional
125      argument identifiers.
126    * Changed the return type of TypeUtil.getFunction accordingly.
127    * Type equality ignores the argument names.
128    * TypeUtil.composite tries to preserve argument names but gives up quickly
129      if there is a mismatch.
130    
131    installation script:
132    * attempts to use "curl" if available (unless "wget" is available as well)
133    
134    CM:
135    * has an experimental implementation of "portable graphs" which I will
136      soon propose as an implementation-independent library format
137    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
138    
139    NLFFI-LIB:
140    * some cleanup (all cosmetic)
141    
142    NLFFIGEN:
143    * temporarily disabled the mechanism that suppresses ML output for
144      C definitions whose identifiers start with an underscore character
145    * generate val bindings for enum constants
146    * user can request that only one style (light or heavy) is being used;
147      default is to use both (command-line arguments: -heavy and -light)
148    * fixed bug in handling of function types involving incomplete pointers
149    * generate ML entry points that take record arguments (i.e., using
150      named arguments) for C functions that have a prototype with named
151      arguments
152      (see changes to CKIT)
153    
154    ----------------------------------------------------------------------
155    Name: Allen Leung
156    Date: 2001/10/27 20:34:00 EDT
157    Tag: leunga-20011027-x86-fast-fp-call
158    Description:
159    
160       Fixed the bug described in blume-20010920-slowfp.
161    
162       The fix involves
163          1. generating FCOPYs in FSTP in ia32-svid
164          2. marking a CALL with the appropriate annotation
165    
166    ----------------------------------------------------------------------
167    Name: Matthias Blume
168    Date: 2001/10/16 11:32:00 EDT
169    Tag: blume-20011016-netbsd
170    Description:
171    
172    Underscore patch from Chris Richards (fixing problem with compiling
173    runtime system under recent NetBSD).
174    
175    ----------------------------------------------------------------------
176    Name: Allen Leung
177    Date: 2001/10/12 17:18:32 EDT 2001
178    Tag: leung-20011012-x86-printflowgraph
179    Description:
180    
181    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
182    
183    ----------------------------------------------------------------------
184    Name: Lal George
185    Date: 2001/10/11 23:51:34 EDT
186    Tag: george-20011011-too-many-instrs
187    Description:
188    
189    The representation of a program point never expected to see more
190    than 65536 instructions in a basic block!
191    
192    ----------------------------------------------------------------------
193    Name: Lal George
194    Date: 2001/10/09 09:41:37 EDT
195    Tag: george-20011008-mlrisc-labels
196    Description:
197    
198    Changed the machine description files to support printing of
199    local and global labels in assembly code, based on host assembler
200    conventions.
201    
202    ----------------------------------------------------------------------
203    Name: Matthias Blume
204    Date: 2001/09/25 15:25:00 EDT
205    Tag: blume-20010925-exninfo
206    Description:
207    
208    I provided a non-hook implementation of exnName (at the toplevel) and
209    made the "dummy" implementation of exnMessage (at the toplevel) more
210    useful: if nothing gets "hooked in", then at least you are going to
211    see the exception name and a message indicating why you don't see more.
212    
213    [For the time being, programs that need exnMessage and want to use
214    ml-build should either use General.exnMessage (strongly recommended) or
215    refer to structure General at some other point so that CM sees a
216    static dependency.]
217    
218    [Similar remarks go for "print" and "use":  If you want to use their
219    functionality in stand-alone programs generated by ml-build, then use
220    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
221    
222    ----------------------------------------------------------------------
223    Name: Matthias Blume
224    Date: 2001/09/20 17:28:00 EDT
225    Tag: blume-20010920-slowfp
226    Description:
227    
228    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
229    
230    ----------------------------------------------------------------------
231    Name: Matthias Blume
232    Date: 2001/09/20 17:20:00 EDT
233    Tag: blume-20010920-canonicalpaths
234    Description:
235    
236    0. Updated the BOOT file (something that I forgot to do earlier).
237    
238    1. Small internal change to CM so that it avoids "/../" in filenames
239       as much as possible (but only where it is safe).
240    
241    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
242       that arguments that contain delimiters are passed through correctly.
243       This change also means that all "special" arguments of the form
244       @SMLxxx... must come first.
245    
246    3. Changed install script to put relative anchor names for tool commands
247       into pathconfig.
248    
249    ----------------------------------------------------------------------
250    Name: Matthias Blume
251    >>>>>>> 1.169
252    Date: 2001/09/18 15:35:00 EDT
253    Tag: blume-20010918-readme11036
254    Description:
255    
256    Added README files.
257    
258    ----------------------------------------------------------------------
259    Name: Matthias Blume
260    Date: 2001/09/18 11:45:00 EDT
261    Tag: Release_110_36 (retag)
262    Description:
263    
264    Fixed mistake in config/preloads. Retagged as 110.36.
265    
266    ----------------------------------------------------------------------
267    Name: Matthias Blume
268    Date: 2001/09/18 09:40:00 EDT
269    Tag: Release_110_36_orig (tag changed)
270    Description:
271    
272    New version (110.36).  New bootfiles.
273    
274    ----------------------------------------------------------------------
275    Name: Matthias Blume
276    Date: 2001/09/14 16:15:00 EDT
277    Tag: blume-20010914-x86fastfp
278    Description:
279    
280    John committed some changes that Allen made, in particular a (hopefully)
281    correctly working version of the x86-fp module.
282    
283    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
284    flag to "true".  Everything seems to compile to a fixpoint ok, and
285    "mandelbrot" speeds up by about 15%.
286    
287    ----------------------------------------------------------------------
288    Name: Matthias Blume
289    Date: 2001/09/13 11:20:00 EDT
290    Tag: blume-20010913-minimal
291    Description:
292    
293    1. Stefan Monnier's patch to fix a miscompilation problem that
294       was brought to light by John Reppy's work on Moby.
295    
296    2. Implemented a minimal "structure Compiler" that contains just
297       "version" and "architecture".  The minimal version will be
298       available when the full version is not.  This is for backward-
299       compatibility with code that wants to test Compiler.version.
300    
301    ----------------------------------------------------------------------
302    Name: Matthias Blume
303    Date: 2001/08/28 14:03:00 EDT
304    Tag: blume-20010828-ml-lex
305    Description:
306    
307    Fix for bug 1581, received from Neophytos Michael.
308    
309    ----------------------------------------------------------------------
310    Name: Matthias Blume
311    Date: 2001/08/27 11:20:00 EDT
312    Tag: blume-20010827-readme11035
313    Description:
314    
315    Fleshed out the README file for 110.35.
316    
317    ----------------------------------------------------------------------
318    Name: Matthias Blume
319    Date: 2001/08/24 17:10:00 EDT
320    Tag: Release_110_35
321    Description:
322    
323    New version number (110.35).  New bootfiles.
324    
325    ----------------------------------------------------------------------
326    Name: Lal George
327    Date: 2001/08/24 13:47:18 EDT 2001
328    Tag: george-20010824-MLRISC-graphs
329    Description:
330    
331     removed clusters from MLRISC completely and replaced with graphs.
332    
333    ----------------------------------------------------------------------
334    Name: Matthias Blume
335    Date: 2001/08/23 17:50:00 EDT
336    Tag: blume-20010823-toplevel
337    Description:
338    
339    - some reorganization of the code that implements various kinds of
340      environments in the compiler (static, dynamic, symbolic, combined)
341    - re-implemented the EnvRef module so that evalStream works properly
342      (if the stream contains references to "use", "CM.make", etc.)
343    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
344    
345    ----------------------------------------------------------------------
346    Name: Matthias Blume
347    Date: 2001/08/20 15:50 EDT
348    Tag: blume20010820-slipup
349    Description:
350    
351    I forgot to commit a few files.  Here they are...
352    
353    ----------------------------------------------------------------------
354    Name: Matthias Blume
355    Date: 2001/08/20 15:35:00 EDT
356    Tag: blume-20010820-debugprof
357    Description:
358    
359    !!!! NEW BOOTFILES !!!!
360    
361    This is another round of reorganizing the compiler sources.  This
362    time the main goal was to factor out all the "instrumentation"
363    passes (for profiling and backtracing) into their own library.
364    The difficulty was to do it in such a way that it does not depend
365    on elaborate.cm but only on elabdata.cm.
366    
367    Therefore there have been further changes to both elaborate.cm and
368    elabdata.cm -- more "generic" things have been moved from the former
369    to the latter.  As a result, I was forced to split the assignment
370    of numbers indicating "primtyc"s into two portions: SML-generic and
371    SML/NJ-specific.  Since it would have been awkward to maintain,
372    I bit the bullet and actually _changed_ the mapping between these
373    numbers and primtycs.  The bottom line of this is that you need
374    a new set of bin- and bootfiles.
375    
376    I have built new bootfiles for all architectures, so doing a fresh
377    checkout and config/install.sh should be all you need.
378    
379    The newly created library's name is
380    
381        $smlnj/viscomp/debugprof.cm
382    
383    and its sources live under
384    
385        src/compiler/DebugProf
386    
387    ----------------------------------------------------------------------
388    Name: Matthias Blume
389    Date: 2001/08/15 17:15:00 EDT
390    Tag: blume-20010815-compreorg
391    Description:
392    
393    This is a first cut at reorganizing the CM libraries that make up the
394    core of the compiler.  The idea is to separate out pieces that could
395    be used independently by tools, e.g., the parser, the typechecker, etc.
396    
397    The current status is a step in this direction, but it is not quite
398    satisfactory yet.  Expect more changes in the future.
399    
400    Here is the current (new) organization...
401    
402        What used to be $smlnj/viscomp/core.cm is now divided into
403        six CM libraries:
404    
405             $smlnj/viscomp/basics.cm
406                           /parser.cm
407                           /elabdata.cm
408                           /elaborate.cm
409                           /execute.cm
410                           /core.cm
411    
412        The CM files for these libraries live under src/system/smlnj/viscomp.
413        All these libraries are proxy libraries that contain precisely
414        one CM library component.  Here are the locations of the components
415        (all within the src/compiler tree):
416    
417             Basics/basics.cm
418             Parse/parser.cm
419             ElabData/elabdata.cm
420             Elaborator/elaborate.cm
421             Execution/execute.cm
422             core.cm
423    
424         [This organization is the same that has been used already
425         for a while for the architecture-specific parts of the visible
426         compiler and for the old version of core.cm.]
427    
428         As you will notice, many source files have been moved from their
429         respective original locations to a new home in one of the above
430         subtrees.
431    
432         The division of labor between the new libraries is the following:
433    
434             basics.cm:
435                - Simple, basic definitions that pertain to many (or all) of
436                  the other libraries.
437             parser.cm:
438                - The SML parser, producing output of type Ast.dec.
439                - The type family for Ast is also defined and exported here.
440             elabdata.cm:
441                - The datatypes that describe input and output of the elaborator.
442                  This includes types, absyn, and static environments.
443             elaborator.cm:
444                - The SML/NJ type checker and elaborator.
445                  This maps an Ast.dec (with a given static environment) to
446                  an Absyn.dec (with a new static environment).
447                - This libraries implements certain modules that used to be
448                  structures as functors (to remove dependencies on FLINT).
449             execute.cm:
450                - Everything having to do with executing binary code objects.
451                - Dynamic environments.
452             core.cm:
453                - SML/NJ-specific instantiations of the elaborator and MLRISC.
454                - Top-level modules.
455                - FLINT (this should eventually become its own library)
456    
457    Notes:
458    
459    I am not 100% happy with the way I separated the elaborator (and its
460    data structures) from FLINT.  Two instances of the same problem:
461    
462        1. Data structures contain certain fields that carry FLINT-specific
463           information.  I hacked around this using exn and the property list
464           module from smlnj-lib.  But the fact that there are middle-end
465           specific fields around at all is a bit annoying.
466    
467        2. The elaborator calculates certain FLINT-related information.  I tried
468           to make this as abstract as I could using functorization, but, again,
469           the fact that the elaborator has to perform calculations on behalf
470           of the middle-end at all is not nice.
471    
472        3. Having to used exn and property lists is unfortunate because it
473           weakens type checking.  The other alternative (parameterizing
474           nearly *everything*) is not appealing, though.
475    
476    I removed the "rebinding =" warning hack because due to the new organization
477    it was awkward to maintain it.  As a result, the compiler now issues some of
478    these warnings when compiling init.cmi during bootstrap compilation. On
479    the plus side, you also get a warning when you do, for example:
480       val op = = Int32.+
481    which was not the case up to now.
482    
483    I placed "assign" and "deref" into the _Core structure so that the
484    code that deals with the "lazy" keyword can find them there.  This
485    removes the need for having access to the primitive environment
486    during elaboration.
487    
488    ----------------------------------------------------------------------
489    Name: Matthias Blume
490    Date: 2001/08/13
491    Tag: blume-20010813-closures
492    Description:
493    
494    This fix was sent to us by Zhong Shao.  It is supposed to improve the
495    performance of certain loops by avoiding needless closure allocation.
496    
497    ----------------------------------------------------------------------
498    Name: Lal George
499    Date: 2001/07/31 10:03:23 EDT 2001
500    Tag: george-20010731-x86-fmalloc
501    Description: Fixed bug in x86 calls
502    
503        There was a bug where call instructions would mysteriously
504        vanish. The call instruction had to be one that returned
505        a floating point value.
506    
507    ----------------------------------------------------------------------
508    Name: Lal George
509    Date: 2001/07/19 16:36:29 EDT 2001
510    Tag: george-20010719-simple-cells
511    Description:
512    
513    I have dramatically simplified the interface for CELLS in MLRISC.
514    
515    In summary, the cells interface is broken up into three parts:
516    
517      1. CellsBasis : CELLS_BASIS
518    
519            CellsBasis is a top level structure and common for all
520            architectures.  it contains the definitions of basic datatypes
521            and utility  functions over these types.
522    
523      2. functor Cells() : CELLS
524    
525            Cells generates an interface for CELLS that incorporates the
526            specific resources on the target architecture, such as the
527            presence of special register classes, their number and size,
528            and various useful substructures.
529    
530      3. <ARCH>CELLS
531    
532            e.g. SparcCells: SPARCCELLS
533    
534            <ARCH>CELLS usually contains additional bindings for special
535            registers  on the architecture, such as:
536    
537                    val r0 : cell           (* register zero *)
538                    val y : cell            (* Y register *)
539                    val psr : cell          (* processor status register *)
540                    ...
541    
542            The structure returned by applying the Cells functor is opened
543            in this interface.
544    
545    The main implication of all this is that the datatypes for cells is
546    split between CellsBasis and CELLS -- a fairly simple change for user
547    code.
548    
549    In the old scheme the CELLS interface had a definitional binding of
550    the form:
551    
552            signature CELLS = sig
553    
554               structure CellsBasis = CellsBasis
555    
556               ...
557    
558            end
559    
560    With all the sharing constraints that goes on in MLRISC, this old
561    design  quickly leads to errors such as:
562    
563            "structure definition spec inside of sharing ... "
564    
565    
566    and appears to require an unacceptable amount of sharing and where
567    constraint hackery.
568    
569    I think this error message (the interaction of definitional specs and
570    sharing) requires more explanation on our web page.
571    
572    ----------------------------------------------------------------------
573    Name: Matthias Blume
574    Date: 2001/07/19 15:00:00 EDT
575    Tag: blume-20010719-libreorg
576    Description:
577    
578    This update puts together a fairly extensive but straightforward change
579    to the way the libraries that implement the interactive system are
580    organized:
581    
582       The biggest change is the elimination of structure Compiler.  As a
583       replacement for this structure, there is now a CM library
584       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
585       that exports all the substructures of the original structure Compiler
586       directly.  So instead of saying Compiler.Foo.bar one now simply
587       says Foo.bar.  (The CM libraries actually export a collection of
588       structures that is richer than the collection of substructures of
589       structure Compiler.)
590    
591       To make the transition smooth, there is a separate library called
592       $smlnj/compiler/compiler.cm which puts together and exports the
593       original structure Compiler (or at least something very close to it).
594    
595       There are five members of the original structure Compiler
596       that are not exported directly but which instead became members
597       of a new structure Backend (described by signature BACKEND).  These are:
598       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
599       Interact (: INTERACT), structure Machine (: MACHINE), and val
600       architecture (: string).
601    
602       Structure Compiler.Version has become structure CompilerVersion.
603    
604       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
605       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
606       or x86, respectively.
607       Each of these exports the same frontend structures that
608       $smlnj/compiler.cm exports.  But they do not have a structure Backend
609       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
610       Hppa, PPC, Sparc, or X86, respectively.
611    
612       Library $smlnj/compiler/all.cm exports the union of the exports of
613       $smlnj/compiler/<arch>.cm
614    
615       There are no structures <Arch>Compiler anymore, use
616       $smlnj/compiler/<arch>.cm instead.
617    
618       Library host-compiler-0.cm is gone.  Instead, the internal library
619       that instantiates CM is now called cm0.cm.  Selection of the host
620       compiler (backend) is no longer done here but. (Responsibility for it
621       now lies with $smlnj/compiler/current.cm.  This seems to be more
622       logical.)
623    
624       Many individual files have been moved or renamed.  Some files have
625       been split into multiple files, and some "dead" files have been deleted.
626    
627    Aside from these changes to library organization, there are also changes
628    to the way the code itself is organized:
629    
630       Structure Binfile has been re-implemented in such a way that it no
631       longer needs any knowledge of the compiler.  It exclusively deals
632       with the details of binfile layout.  It no longer invokes the
633       compiler (for the purpose of creating new prospective binfile
634       content), and it no longer has any knowledge of how to interpret
635       pickles.
636    
637       Structure Compile (: COMPILE) has been stripped down to the bare
638       essentials of compilation.  It no longer deals with linking/execution.
639       The interface has been cleaned up considerably.
640    
641       Utility routines for dealing with linking and execution have been
642       moved into their own substructures.
643    
644       (The ultimate goal of these changes is to provide a light-weight
645       binfile loader/linker (at least for, e.g., stable libraries) that
646       does not require CM or the compiler to be present.)
647    
648    CM documentation has been updated to reflect the changes to library
649    organization.
650    
651    ----------------------------------------------------------------------
652    Name: Matthias Blume
653    Date: 2001/07/10 17:30:00 EDT
654    Tag: Release_110_34
655    Description:
656    
657    Minor tweak to 110.34 (re-tagged):
658    
659      - README.html file added to CVS repository
660      - runtime compiles properly under FreeBSD 3.X and 4.X
661    
662    ----------------------------------------------------------------------
663    Name: Matthias Blume
664    Date: 2001/07/10 17:30:00 EDT
665    Tag: Release_110_34
666    Description:
667    
668    New version number (110.34). New bootfiles.
669    
670    ----------------------------------------------------------------------
671    Name: Matthias Blume
672    Date: 2001/07/09 16:00:00 EDT
673    Tag: blume-20010709-more-varargs
674    Description:
675    
676    I changed the handling of varargs in ml-nlffigen again:
677    The ellipsis ... will now simply be ignored (with an accompanying warning).
678    
679    The immediate effect is that you can actually call a varargs function
680    from ML -- but you can't actually supply any arguments beyond the ones
681    specified explicitly.  (For example, you can call printf with its format
682    string, but you cannot pass additional arguments.)
683    
684    This behavior is only marginally more useful than the one before, but
685    it has the advantage that a function or, more importantly, a function
686    type never gets dropped on the floor, thus avoiding follow-up problems with
687    other types that refer to the offending one.
688    
689    ----------------------------------------------------------------------
690    Name: Matthias Blume
691    Date: 2001/07/09 11:25:00 EDT
692    Tag: blume-20010709-varargs
693    Description:
694    
695    1. ckit-lib.cm now exports structure Error
696    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
697       with a warning accompanied by a source location.  Moreover, it
698       merely skips the offending function or type and proceeds with the
699       rest of its work.u  As a result, one can safely feed C code containing
700       "..." to ml-nlffigen.
701    3. There are some internal improvements to CM, providing slightly
702       more general string substitutions in the tools subsystem.
703    
704    ----------------------------------------------------------------------
705    Name: Matthias Blume
706    Date: 2001/06/27 15:10:00 EDT
707    Tag: blume-20010627-concur
708    Description:
709    
710    Fixed a small bug in CM's handling of parallel compilation.
711    (You could observe the bug by Control-C-interrupting an ordinary
712    CMB.make or CM.stabilize and then attaching some compile servers.
713    The result was that all of a sudden the previously interrupted
714    compilation would continue on its own.  This was because of
715    an over-optimization: CM did not bother to clean out certain queues
716    when no servers were attached "anyway", resulting in the contents
717    of these queues to grab control when new servers did get attached.)
718    
719    There is also another minor update to the CM manual.
720    
721    ----------------------------------------------------------------------
722    Name: Matthias Blume
723    Date: 2001/06/26 16:15:00 EDT
724    Tag: blume-20010626-cmdoc
725    Description:
726    
727    Minor typo fixed in CM manual (syntax diagram for libraries).
728    
729    ----------------------------------------------------------------------
730    Name: Matthias Blume
731    Date: 2001/06/25 22:55:00 EDT
732    Tag: blume-20010625-x86pc
733    Description:
734    
735    Fixed a nasty bug in the X86 assembly code that caused signal
736    handlers to fail (crash) randomly.
737    
738    ----------------------------------------------------------------------
739    Name: Matthias Blume
740    Date: 2001/06/25 12:05:00 EDT
741    Tag: blume-20010625-nlffigen
742    Description:
743    
744    This update fixes a number of minor bugs in ml-nlffigen as reported by
745    Nick Carter <nbc@andrew.cmu.edu>.
746    
747      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
748      2. Default names for generated files are now derived from the name of
749         the C file *without its directory*.  In particular, this causes generated
750         files to be placed locally even if the C file is in some system directory.
751      3. Default names for generated signatures and structures are also derived
752         from the C file name without its directory.  This avoids silly things
753         like "structure GL/GL".
754         (Other silly names are still possible because ml-nlffigen does not do
755          a thorough check of whether generated names are legal ML identifiers.
756          When in doubt, use command line arguments to force particular names.)
757    
758    ----------------------------------------------------------------------
759    Name: Matthias Blume
760    Date: 2001/06/21 12:25:00 EDT
761    Tag: blume-20010621-eXene
762    Description:
763    
764    eXene now compiles and (sort of) works again.
765    
766    The library name (for version > 110.33) is $/eXene.cm.
767    
768    I also added an new example in src/eXene/examples/nbody.  See the
769    README file there for details.
770    
771    ----------------------------------------------------------------------
772    Name: Matthias Blume
773    Date: 2001/06/20 16:40:00 EDT
774    Tag: blume-20010620-cml
775    Description:
776    
777    CML now compiles and works again.
778    
779    Libraries (for version > 110.33):
780    
781      $cml/cml.cm            Main CML library.
782      $cml/basis.cm          CML's version of $/basis.cm.
783      $cml/cml-internal.cm   Internal helper library.
784      $cml/core-cml.cm       Internal helper library.
785      $cml-lib/trace-cml.cm  Tracing facility.
786      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
787    
788    The installer (config/install.sh) has been taught how to properly
789    install this stuff.
790    
791    ----------------------------------------------------------------------
792    Name: Matthias Blume
793    Date: 2001/06/19 17:55:00 EDT
794    Tag: blume-20010619-instantiate
795    Description:
796    
797    This un-breaks the fix for bug 1432.
798    (The bug was originally fixed in 110.9 but I broke it again some
799    time after that.)
800    
801    ----------------------------------------------------------------------
802    Name: Matthias Blume
803    Date: 2001/06/19 17:25:00 EDT
804    Tag: blume-20010619-signals
805    Description:
806    
807    This should (hopefully) fix the long-standing signal handling bug.
808    (The runtime system was constructing a continuation record with an
809    incorrect descriptor which would cause the GC to drop data on the floor...)
810    
811    ----------------------------------------------------------------------
812    Name: Matthias Blume
813    Date: 2001/06/15 15:05:00 EDT
814    Tag: blume-20010615-moresparc
815    Description:
816    
817    Here is a short late-hour update related to Sparc c-calls:
818    
819     -- made handling of double-word arguments a bit smarter
820    
821     -- instruction selection phase tries to collapse certain clumsily
822        constructed ML-Trees; typical example:
823    
824            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
825    
826        This currently has no further impact on SML/NJ since mlriscGen does
827        not seem to generate such patterns in the first place, and c-calls
828        (which did generate them in the beginning) has meanwhile been fixed
829        so as to avoid them as well.
830    
831    ----------------------------------------------------------------------
832    Name: Matthias Blume
833    Date: 2001/06/15 15:05:00 EDT
834    Tag: blume-20010615-sparc
835    Description:
836    
837    The purpose of this update is to provide an implementation of NLFFI
838    on Sparc machines.
839    
840    Here are the changes in detail:
841    
842       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
843       the Sparc implementation of the c-calls API.
844       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
845       for accessing the ML frame.  Thus, we have a real frame pointer and
846       can freely modify %sp without need for an omit-frame-ptr phase.
847       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
848       this case.
849       * ml-nlffigen has been taught to produce code for different architectures
850       and calling conventions.
851       * In a way similar to what was done in the x86 case, the Sparc
852       backend uses its own specific extension to mltree.  (For example,
853       it needs to be able to generate UNIMP instructions which are part
854       of the calling convention.)
855       * ml-nlffi-lib was reorganized to make it more modular (in particular,
856       to make it easier to plug in new machine- and os-dependent parts).
857    
858    There are some other fairly unrelated bug fixes and cleanups as well:
859    
860       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
861       that they properly share their libraries with existing SML/NJ libraries.
862       * I fixed a minor cosmetic bug in CM, supressing certain spurious
863       follow-up error messages.
864       * Updates to CM/CMB documentation.
865    
866    TODO items:
867    
868       * MLRISC should use a different register as its asmTemp on the Sparc.
869         (The current %o2 is a really bad choice because it is part of the
870         calling conventions, so things might interfere in unexpected ways.)
871    
872    ----------------------------------------------------------------------
873    Name: Matthias Blume
874    Date: 2001/06/07
875    Tag: blume-20010607-calls
876    Description:
877    
878    A number of internal changes related to C calls and calling conventions:
879    
880    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
881       number of bytes popped implicitly (by the callee).  In most cases
882       this field is 0 but on x86/win32 it is some non-zero value.  This
883       is information provided for the benefit of the "omit-frameptr" pass.
884    2. The CALL instruction on the x86 carries a similar "pops" field.
885       The instruction selection phase copies its value from the ML-Tree
886       CALL statement.
887    3. On all other architectures, the instruction selection phase checks
888       whether "pops=0" and complains if not.
889    4. The c-calls implementation for x86 now accepts two calling conventions:
890       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
891       up after the call and pops is set to 0.  For "stdcall", the caller
892       does nothing, leaving the cleanup to the callee; pops is set to
893       the number of bytes that were pushed onto the stack.
894    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
895       distinguish between "ccall" and "stdcall".
896    6. The UNIMP instruction has been added to the supported Sparc instruction
897       set. (This is needed for implementing the official C calling convention
898       on this architecture.)
899    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
900       work with the latest CM.
901    
902    ----------------------------------------------------------------------
903    Name: Matthias Blume
904    Date: 2001/06/05 15:10:00 EDT
905    Tag: blume-20010605-cm-index
906    Description:
907    
908    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
909    
910    1. CM can now generate "index files".  These are human-readable files
911       that list on a per-.cm-file basis each toplevel symbol defined or
912       imported.  The location of the index file for
913       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
914       To enable index-file generation, set CM.Control.generate_index to true
915       or export an environment-symbol: export CM_GENERATE_INDEX=true.
916    
917       The CM manual has been updated accordingly.
918    
919    2. I made some slight modifications to the c-calls API in MLRISC.
920    
921         a) There is now a callback to support saving/restoring of
922            dedicated but caller-save registers around the actual call
923            instruction.
924         b) One can optionally specify a comment-annotation for the
925            call instruction.
926    
927    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
928       (For example, the comment annotation shows the C prototype of
929        the function being called.)
930    
931    ----------------------------------------------------------------------
932    Name: Matthias Blume
933    Date: 2001/06/01 13:30:00 EDT
934    Tag: blume-20010601-nlffi-cleanup
935    Description:
936    
937    This is mostly a cleanup of MLFFI stuff:
938    
939       - some signature files have been put into a more exposed place
940       - the ugly 'f type parameter is gone (simplifies types tremendously!)
941       - ml-nlffigen changed accordingly
942       - tutorial updated
943    
944    Other changes:
945    
946       - author's affiliation in CM manual(s) updated
947       - some more recognized keywords added to Allen's sml.sty
948    
949    ----------------------------------------------------------------------
950    Name: Matthias Blume
951    Date: 2001/05/25 15:30:00 EDT
952    Tag: blume-20010525-iptr
953    Description:
954    
955      - put the official 110.33-README (as it appears on the ftp server) under
956        CVS
957      - fixed a small bug related to incomplete pointer types in
958        ml-nlffigen
959      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
960        (it does not need the 'f type parameter)
961    
962    ----------------------------------------------------------------------
963    Name: Matthias Blume
964    Date: 2001/05/23 14:30:00 EDT
965    Tag: Release_110_33
966    Description:
967    
968    New version number (110.33).  New bootfiles.
969    
970    ----------------------------------------------------------------------
971    Name: Matthias Blume
972    Date: 2001/05/22 18:06:00 EDT
973    Tag: blume-20010522-targets
974    Description:
975    
976    Made install.sh use file config/targets.customized if it exists, falling
977    back to config/targets if it doesn't.  This way one can have a customized
978    version of the targets file without touching the "real thing", thus
979    eliminating the constant fear of accidentally checking something bogus
980    back into the CVS repository...  (File config/targets.customized must
981    not be added to the repository!)
982    
983    ----------------------------------------------------------------------
984    Name: Matthias Blume
985    Date: 2001/05/22 16:30:00 EDT
986    Tag: blume-20010522-minitut
987    Description:
988    
989    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
990       struct returns.
991    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
992       incomplete, preliminary documentation for NLFFI.
993    
994    ----------------------------------------------------------------------
995    Name: Matthias Blume
996    Date: 2001/05/14 11:30:00 EDT
997    Tag: blume-20010514-script
998    Description:
999    
1000    Some bugs in install script fixed.
1001    
1002    In addition to that I also made a slight change to the NLFFI API:
1003    Functors generated by ml-nlffigen now take the dynamic library as a
1004    straight functor argument, not as a suspended one.  (The original
1005    functor code used to force the suspension right away anyway, so there
1006    was nothing gained by this complication of the interface.)
1007    
1008    ----------------------------------------------------------------------
1009    Name: Matthias Blume
1010    Date: 2001/05/11 14:35:00 EDT
1011    Tag: blume-20010511-ml-nlffi
1012    Description:
1013    
1014    I finally took the plunge and added my new FFI code to the main
1015    repository.  For x86-linux it is now ready for prime-time.
1016    
1017    There are two new subdirectories of "src":
1018    
1019      - ml-nlffi-lib:
1020           The utility library for programs using the FFI interface.
1021           Here is the implementation of $/c.cm and its associated low-level
1022           partners $/c-int.cm and $/memory.cm.
1023      - ml-nlffigen:
1024           A stand-alone program for generating ML glue code from C source
1025           code.
1026    
1027    Building ml-nlffigen requires $/ckit-lib.cm.
1028    
1029    The config/install.sh script has been updates to do the Right Thing
1030    (hopefully).
1031    
1032    Notice that the source tree for the C-Kit will not be put under "src"
1033    but directly under the installation root directory.  (This is the
1034    structure that currently exists on the CVS server when you check out
1035    module "sml".)  Fortunately, config/install.sh knows about this oddity.
1036    
1037    Bugs: No documentation yet.
1038    
1039    ----------------------------------------------------------------------
1040    Name: Matthias Blume
1041    Date: 2001/05/09 16:35:00 EDT
1042    Tag: blume-20010509-cpscontract
1043    Description:
1044    
1045    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
1046    wrapper/unwrapper elimination did not decrement usage counts and some
1047    dead variables got overlooked by the dead-up logic.)
1048    
1049    ----------------------------------------------------------------------
1050    Name: Lal George
1051    Date: 2001/05/08  17:26:09 EDT
1052    Tag: george-20010508-omit-frameptr
1053    Description:
1054    
1055    Changes to implement the omit-frame-pointer optimization to support
1056    raw C calls. For now, there is only support on the Intel x86, but
1057    other architectures will follow as more experience is gained with this.
1058    
1059    
1060    ----------------------------------------------------------------------
1061    Name: Matthias Blume
1062    Date: 2001/05/07 14:40:00 EDT
1063    Tag: blume-20010507-proxies
1064    Description:
1065    
1066    I made into "proxy libraries" all libraries that qualify for such a
1067    change.  (A qualifying library is a library that has another library or
1068    groups as its sole member and repeats that member's export list
1069    verbatim.  A proxy library avoids this repetition by omitting its export
1070    list, effectively inheriting the list that its (only) member exports.
1071    See the CM manual for more explanation.)
1072    The main effect is that explicit export lists for these libraries
1073    do not have to be kepts in sync, making maintenance a bit easier.
1074    
1075    I also added copyright notices to many .cm-files.
1076    
1077    Last but not least, I made a new set of bootfiles.
1078    
1079    ----------------------------------------------------------------------
1080    Name: Matthias Blume
1081    Date: 2001/05/04 17:00:00 EDT
1082    Tag: blume-20010504-cm-lsplit
1083    Description:
1084    
1085    0. John merged pending changes to $/smlnj-lib.cm
1086    
1087    1. Allen's previous change accidentally backed out of one of Lal's
1088       earlier changes.  I undid this mistake (re-introducing Lal's change).
1089    
1090    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
1091       within the compiler where applicable.  There is some code simplification
1092       because of that.
1093    
1094    3. The "split" phase (in FLINT) is now part of the default list of phases.
1095       Compiler.Control.LambdaSplitting.* can be used to globally control the
1096       lambda-splitting (cross-module-inlining) engine.  In addition to that,
1097       it can now also be controlled on a per-source basis: CM has been taught
1098       a new tool parameter applicable to ML source files.
1099    
1100       - To turn lambda-splitting off completely:
1101            local open Compiler.Control.LambdaSplitting in
1102                val _ = set Off
1103            end
1104       - To make "no lambda-splitting" the global default (but allow per-source
1105         overriding); this is the initial setting:
1106            local open Compiler.Control.LambdaSplitting in
1107                val _ = set (Default NONE)
1108            end
1109       - To make "lambda-splitting with aggressiveness a" the global default
1110         (and allow per-source overriding):
1111            local open Compiler.Control.LambdaSplitting in
1112                val _ = set (Default (SOME a))
1113            end
1114    
1115       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
1116         write (in the respective .cm-file):
1117            a.sml (lambdasplitting:off)
1118       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
1119            a.sml (lambdasplitting:on)
1120       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
1121         <a> is a decimal non-negative integer):
1122            a.sml (lambdasplitting:<a>)
1123       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
1124            a.sml (lambdasplitting:infinity)
1125       - To use the global default for a.sml:
1126            a.sml (lambdasplitting:default)
1127         or simply
1128            a.sml
1129    
1130    ----------------------------------------------------------------------
1131    Name: Allen Leung
1132    Date: 2001/05/04 01:57:00 EDT
1133    Tag: leunga-20010504-sync
1134    Description:
1135    
1136      MLRISC features.
1137    
1138      1. Fix to CMPXCHG instructions.
1139      2. Changed RA interface to allow annotations in callbacks.
1140      3. Added a new method to the stream interface to allow annotations updates.
1141    
1142    ----------------------------------------------------------------------
1143    Name: Matthias Blume
1144    Date: 2001/05/01 11:45:00 EDT
1145    Tag: blume-20010501-pcedittmp
1146    Description:
1147    
1148    Changed install.sh to use the current working directory instead of
1149    /usr/tmp for a temporary file (pcedittmp).  The previous choice
1150    of /usr/tmp caused trouble with MacOS X because of file premission
1151    problems.
1152    
1153    ----------------------------------------------------------------------
1154    Name: Matthias Blume
1155    Date: 2001/04/20 11:10:00 EDT
1156    Tag: blume-20010420-inMLflag
1157    Description:
1158    
1159     - added vp_limitPtrMask to vproc-state.h
1160       (for use by the raw-C-calls mechanism to implement proper interrupt
1161        handling)
1162     - made the ML compiler aware of various data-structure offsets so it
1163       can generate code for accessing the vp_inML flag and vp_limitPtrMask
1164     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
1165       raw C-calls
1166    
1167    ----------------------------------------------------------------------
1168    Name: Lal George
1169    Date: 2001/04/20 09:15:28 EDT
1170    Tag: george-20010420-macosX
1171    Description:
1172    
1173     - Changes to port to Mac OS X; Darwin.
1174    
1175     - In the process I found that sqrt was broken on the PPC, because the
1176       fsqrt instruction is not implemented.
1177    
1178    ----------------------------------------------------------------------
1179    Name: Matthias Blume
1180    Date: 2001/04/18 12:45:00 EDT
1181    Tag: blume-20010418-ccalls
1182    Description:
1183    
1184     - fixed two off-by-4 errors in the x86-specific c-calls implementation
1185       (this bug prevented structure arguments containing pointers from being
1186        passed correctly)
1187     - changed the raw-C-call code in mlriscGen.sml in such a way that
1188       structure arguments are represented as a pointer to the beginning
1189       of the structure (instead of having a series of synthesized arguments,
1190       one for each structure member)
1191    
1192     - made makeml script's verbosity level configurable via environment
1193       variable (MAKEML_VERBOSITY)
1194    
1195     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
1196       in rawmem-x86.sml; we are now using the real thing
1197    
1198    ----------------------------------------------------------------------
1199    Name: Matthias Blume
1200    Date: 2001/03/22 16:25:00 EST
1201    Tag: blume-20010322-bootfiles
1202    Description:
1203    
1204    Created a new set of bootfiles (for your automatic installation convenience).
1205    
1206    ----------------------------------------------------------------------
1207    Name: Matthias Blume
1208    Date: 2001/03/22 15:10:00 EST
1209    Tag: blume-20010322-rawmem-parcm
1210    Description:
1211    
1212    1. All "raw memory access" primitives for the new FFI are implemented now
1213       (at least on the x86).
1214    2. Some further cleanup of CM's parallel make mechanism.
1215    
1216    ----------------------------------------------------------------------
1217    Name: Matthias Blume
1218    Date: 2001/03/19 17:53:00 EST
1219    Tag: blume-20010319-parallel
1220    Description:
1221    
1222    Parallel make (using compile servers) now works again.
1223    
1224    To this end, CM.stabilize and CMB.make have been modified to work in
1225    two passes when compile servers are attached:
1226       1. Compile everything, do not perform stabilization; this pass
1227          uses compile servers
1228       2. Stabilize everything; this pass does not use compile servers
1229    If there are no compile servers, the two passes are combined into one
1230    (as before).  Splitting the passes increases the inherent parallelism
1231    in the dependency graph because the entire graph including all
1232    libraries is available at the same time.  This, in turn, improves
1233    server utilization.  The downside is that the master process will
1234    have to do some extra work after compilation is done (because for
1235    technical reasons it must re-read all the binfiles during stabilization).
1236    
1237    ----------------------------------------------------------------------
1238    Name: Matthias Blume
1239    Date: 2001/03/16 12:22:00 EST
1240    Tag: blume-20010316-bootfiles
1241    Description:
1242    
1243    Created a new set of bootfiles (for your automatic installation convenience).
1244    
1245    ----------------------------------------------------------------------
1246    Name: Matthias Blume
1247    Date: 2001/03/16 11:00:00 EST
1248    Tag: blume-20010316-MLTREE-fixup
1249    Description:
1250    
1251    This is a minor fixup for an (untagged) earlier commit by Allen.
1252    (A file was missing).
1253    
1254    ----------------------------------------------------------------------
1255    Name: Allen Leung
1256    Date: Mon Mar  5 18:54:57 EST 2001
1257    Tag: leunga-20010305-cut-support
1258    
1259    1. New support for alternative control-flow in MLTREE.
1260       Currently we support
1261    
1262          FLOW_TO(CALL ...., [k1,...,kn])
1263    
1264       This is needed for 'cuts to' in C-- and try/handle-like constructs
1265       in Moby
1266    
1267       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
1268    
1269    2. Register Allocator
1270    
1271       Changes in interface [from Fermin, John]
1272    
1273    3. Alpha 8-bit SLL support [Fermin]
1274    
1275    4. All architectures
1276    
1277       A new module (ClusterExpandCopies) for expanding parallel copies.
1278    
1279    ----------------------------------------------------------------------
1280    Name: Allen Leung
1281    Date: 2001/02/27 23:07:00 EST
1282    Tag: leunga-20010227-minor-stuff
1283    
1284    1. Alpha bug fix for CMOVNE
1285    2. Handle mltree COND(..,FCMP ...,...)
1286    3. Bug fix in simplifier
1287    
1288    ----------------------------------------------------------------------
1289    Name: Matthias Blume
1290    Date: 2001/01/30 17:50:00 EST
1291    Tag: blume-20010130-sync
1292    Description:
1293    
1294    This is just a minor update to sync my devel branch with the main brach.
1295    The only visible change is the addition of some README files.
1296    
1297    ----------------------------------------------------------------------
1298    Name: Matthias Blume
1299    Date: 2001/01/12 23:30:00 JST
1300    Tag: blume-20010112-bootfiles
1301    Description:
1302    
1303    Made a new set of bootfiles that goes with the current state of the
1304    repository.
1305    
1306    ----------------------------------------------------------------------
1307    Name: Matthias Blume
1308    Date: 2001/01/12 21:20:00 JST
1309    Tag: blume-20010112-sync
1310    Description:
1311    
1312    I am just flushing out some minor changes that had accumulated in
1313    my private branch in order to sync with the main tree.  (This is
1314    mainly because I had CVS trouble when trying to merge _into_ my
1315    private branch.)
1316    
1317    Most people should be completely unaffected by this.
1318    
1319    ----------------------------------------------------------------------
1320    Name: Allen Leung
1321    Date: Thu Jan 11 21:03:00 EST 2001
1322    Tag: leunga-20010111-labexp=mltree
1323    Description:
1324    
1325    1.  Removed the type LabelExp and replace it by MLTree.
1326    2.  Rewritten mltree-simplify with the pattern matcher tool.
1327    3.  There were some bugs in alpha code generator which would break
1328        64-bit code generation.
1329    4.  Redo the tools to generate code with the
1330    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
1331        are now generated by perl scripts.
1332    
1333    ----------------------------------------------------------------------
1334    Name: Matthias Blume
1335    Date: 2001/01/10 21:55:00 JST
1336    Tag: blume-20010110-rcc
1337    Description:
1338    
1339    The RCC stuff now seems to work (but only on the x86).
1340    This required hacking of the c-calls interface (and -implementation) in
1341    MLRISC.
1342    
1343    Normal compiler users should be unaffected.
1344    
1345    ----------------------------------------------------------------------
1346    Name: Matthias Blume
1347    Date: 2001/01/09 01:20:00 JST
1348    Tag: blume-20010109-rcc
1349    Description:
1350    
1351    This is a fairly big patch, flushing out a large number of pending
1352    changes that I made to my development copy over the last couple of days.
1353    
1354    Of practical relevance at this moment is a workaround for a pickling
1355    bug that Allen ran into the other day.  The cause of the bug itself is
1356    still unknown and it might be hard to fix it properly, but the
1357    workaround has some merits of its own (namely somewhat reducing pickling
1358    overhead for certain libraries).  Therefore, I think this solution should
1359    be satisfactory at this time.
1360    
1361    The rest of the changes (i.e., the vast majority) has to do with my
1362    ongoing efforts of providing direct support for C function calls from
1363    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
1364    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
1365    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
1366    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
1367    handle RCC.
1368    
1369    The last part (the changes to mlriscGen.sml) are still known to be
1370    wrong on the x86 and not implemented on all other architectures.  But
1371    the infrastructure is in place. I had to change a few functor
1372    signatures in the backend to be able to route the CCalls interface
1373    from MLRISC there, and I had to specialize the mltree type (on the
1374    x86) to include the necessary extensions. (The extensions themselves
1375    were already there and redy to go in MLRISC/x86).
1376    
1377    Everything should be very happy as soon as someone helps me with
1378    mlriscGen.sml...
1379    
1380    In any case, nothing of this should matter to anyone as long as the
1381    new primop is not being used (which is going to be the case unless you
1382    find it where I hid it :). The rest of the compiler is completely
1383    unaffected.
1384    
1385    ----------------------------------------------------------------------
1386    Name: Matthias Blume
1387    Date: 2001/01/05 00:30:00 JST
1388    Tag: blume-20010105-primops
1389    Description:
1390    
1391    Added some experimental support for work that I am doing right now.
1392    These changes mostly concern added primops, but there is also a new
1393    experimental C library in the runtime system (but currently not enabled
1394    anywhere except on Linux/X86).
1395    
1396    In the course of adding primops (and playing with them), I discovered that
1397    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
1398    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
1399    To recover, I made type information in INL_PRIM mandatory and changed
1400    prim.sml as well as built-in.sml accordingly.  The InLine structure now
1401    has complete, correct type information (i.e., no bottom types).
1402    
1403    Since all these changes mean that we need new binfiles, I also bumped the
1404    version number to 110.32.1.
1405    
1406    ----------------------------------------------------------------------
1407    Name: Matthias Blume
1408    Date: 2000/12/30 22:10:00 JST
1409    Tag: blume-20001230-various
1410    Description:
1411    
1412    Added proxy libraries for MLRISC and let MLRISC libraries refer
1413    to each other using path anchors.  (See CM manual for explanation.)
1414    
1415    Updated CM documentation.
1416    
1417    Fixed some bugs in CM.
1418    
1419    Implemented "proxy" libraries (= syntactic sugar for CM).
1420    
1421    Added "-quiet" option to makeml and changed runtime system accordingly.
1422    
1423    Added cleanup handler for exportML to reset timers and compiler stats.
1424    
1425    ----------------------------------------------------------------------
1426    Name: Lal George
1427    Date: 2000/12/22 22:22:58 EST 2000
1428    Tag: Release_110_32
1429    Description:
1430    
1431            Infinite precision used throughout MLRISC.
1432            see MLRISC/mltree/machine-int.sig
1433    
1434    ----------------------------------------------------------------------
1435    Name: Matthias Blume
1436    Date: 2000/12/22 23:16:00 JST
1437    Tag: blume-20001222-warn
1438    Description:
1439    
1440    Corrected wording and formatting of some CM warning message which I
1441    broke in my previous patch.
1442    
1443    ----------------------------------------------------------------------
1444    Name: Matthias Blume
1445    Date: 2000/12/22 21:20:00 JST
1446    Tag: blume-20001222-anchorenv
1447    Description:
1448    
1449    Fixed CM's handling of anchor environments in connection with CMB.make.
1450    
1451    ----------------------------------------------------------------------
1452    Name: Matthias Blume
1453    Date: 2000/12/22 13:15:00 JST
1454    Tag: blume-20001222-cleanup
1455    Description:
1456    
1457    Removed src/cm/ffi which does not (and did not) belong here.
1458    
1459    ----------------------------------------------------------------------
1460    Name: Matthias Blume
1461    Date: 2000/12/21 23:55:00 JST
1462    Tag: blume-20001221-exn
1463    Description:
1464    
1465    Probably most important: CM no longer silently swallows all exceptions
1466    in the compiler.
1467    Plus: some other minor CM changes.  For example, CM now reports some
1468    sizes for generated binfiles (code, data, envpickle, lambdapickle).
1469    
1470    ----------------------------------------------------------------------
1471    Name: Matthias Blume
1472    Date: 2000/12/15 00:01:05 JST
1473    Tag: blume-20001215-dirtool
1474    Description:
1475    
1476    - "dir" tool added.
1477    - improvements and cleanup to Tools structure
1478    - documentation updates
1479    
1480    ----------------------------------------------------------------------
1481    Name: Allen Leung
1482    Date: Thu Dec 14 03:45:24 EST 2000
1483    Description:
1484    Tag:  leunga-20001214-int-inf
1485    Description:
1486    
1487       In IntInf, added these standard functions, which are missing from our
1488    implementation:
1489    
1490        andb : int * int -> int
1491        xorb : int * int -> int
1492        orb  : int * int -> int
1493        notb : int -> int
1494         <<   : int * word -> int
1495        ~>>  : int * word -> int
1496    
1497       Not tested, I hope they are correct.
1498    
1499    ----------------------------------------------------------------------
1500    Name: Allen Leung
1501    Date: Fri Dec  8 19:23:26 EST 2000
1502    Description:
1503    Tag:  leunga-20001208-nowhere
1504    Description:
1505    
1506      Slight improvements to the 'nowhere' tool to handle OR-patterns,
1507    to generate better error messages etc.  Plus a brief manual.
1508    
1509    ----------------------------------------------------------------------
1510    Name: Lal George
1511    Date: 2000/12/08 09:54:02 EST 2000
1512    Tag: Release_110_31
1513    Description:
1514    
1515    - Version 110.31
1516    ----------------------------------------------------------------------
1517    Name: Allen Leung
1518    Date: Thu Dec  7 22:01:04 EST 2000
1519    Tag:  leunga-20001207-cell-monster-hack
1520    Description:
1521    
1522    Major MLRISC internal changes.  Affect all clients.
1523    Summary:
1524    
1525    1.  Type CELLS.cell = int is now replaced by a datatype.
1526        As a result, the old regmap is now gone.  Almost all interfaces
1527        in MLRISC change as a consequence.
1528    
1529    2.  A new brand version of machine description tool (v3.0) that generates
1530        modules expecting the new interface.  The old version is removed.
1531    
1532    3.  The RA interface has been further abstracted into two new functors.
1533        RISC_RA and X86RA.  These functors have much simpler interfaces.
1534        [See also directory MLRISC/demo.]
1535    
1536    4.  Some other new source->source code generation tools are available:
1537    
1538        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
1539        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
1540           I use this tool to generate the peephole optimizers---with the new
1541           cell type changes, peephole rules are becoming difficult to write
1542           without conditional pattern matching.
1543    
1544    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
1545        cover the entire MLRISC source tree so many things broke.
1546    
1547    6.  CM files have been moved to the subdirectory MLRISC/cm.
1548        They are moved because there are a lot of them and they clutter up the
1549        root dir.
1550    
1551    7.  More detailed documentation to come...
1552    
1553        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
1554        a makeml -rebuild first.  This is because of other other
1555        changes that Matthias has made (see below).
1556    
1557    
1558    ----------------------------------------------------------------------
1559    Name: Matthias Blume
1560    Date: 2000/11/30 23:12:00 JST
1561    Tag: blume-20001130-filereorg
1562    Description:
1563    
1564    Some manual updates and some file reorganizations in CM.
1565    
1566    ----------------------------------------------------------------------
1567    Name: Matthias Blume
1568    Date: 2000/11/24 17:45:00 JST
1569    Tag: blume-20001124-link
1570    Description:
1571    
1572    Drastically improved link traversal code for the case that the dynamic
1573    value was already loaded at bootstrap time.  As a result, CM and CMB
1574    now both load blazingly fast -- even on a very slow machine.  Also,
1575    memory consumption has been further reduced by this.
1576    
1577    Warning: The format of the PIDMAP file has changed.  THerefore, to
1578    bootstrap you have to do this:
1579    
1580    1. Run CMB.make
1581    2. Make a symbolic link for the boot directory:
1582         ln -s sml.boot.ARCH-OS xxx
1583    3. "Rebuild" the boot directory:
1584         ./makeml -boot xxx -rebuild sml ; rm xxx
1585    4. Boot normally:
1586          ./makeml
1587    
1588    ----------------------------------------------------------------------
1589    Name: Matthias Blume
1590    Date: 2000/11/21 21:20:00 JST
1591    Tag: blume-20001121-tools
1592    Description:
1593    
1594    Continued hacking on autoloading problem -- with success this time.
1595    Also changed tool-plugin mechanism.  See new CM manual.
1596    
1597    ----------------------------------------------------------------------
1598    Name: Matthias Blume
1599    Date: 2000/11/19 14:30:00 JST
1600    Tag:  blume-20001119-autoload
1601    Description:
1602    
1603    Some hacking to make autoloading faster.  Success for CMB, no success
1604    so far for CM.  There is a reduced structure CM' that autoloads faster.
1605    (This is a temporary, non-documented hack to be eliminated again when
1606    the general problem is solved.)
1607    
1608    ----------------------------------------------------------------------
1609    Name: Matthias Blume
1610    Date: 2000/11/17 14:10:00 JST
1611    Tag: blume-20001117-pickle-lib
1612    Description:
1613    
1614    1. Eliminated comp-lib.cm
1615    2. Made pickle-lib.cm
1616    3. Eliminated all uses of intset.sml (from comp-lib.cm)
1617    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
1618       equivalent constructs from smlnj-lib.cm (INtHashTable).
1619    5. Point 4. also goes for those uses of intmap.* in MLRISC.
1620       Duplicated intmap modules thrown out.
1621    6. Hunted down all duplicated SCC code and replaced it with
1622       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
1623    7. Rewrote Feedback module.
1624    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
1625       should be thrown out and equivalent modules from smlnj-lib.cm
1626       should be used (IntRedBlackSet, IntListSet, ...).
1627    
1628    Confirmed that compiler compiles to fixpoint.
1629    
1630    ----------------------------------------------------------------------
1631    Name: Allen Leung
1632    Date: 2000/11/10 18:00:00
1633    Tag: leunga-20001110-new-x86-fp
1634    
1635    A new x86 floating point code generator has been added.
1636    By default this is turned off.  To turn this on, do:
1637    
1638        CM.autoload "$smlnj/compiler.cm";
1639        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
1640    
1641    Changes:
1642    
1643    1.  Changed FTAN to FPTAN so that the assembly output is correct.
1644    2.  Changed the extension callback for FTANGENT to generate:
1645    
1646              fptan
1647              fstp  %st(0)
1648        instead of
1649              fptan
1650              fstpl ftempmem
1651    
1652    3.  Numerous assembly fixes for x86.
1653    
1654    5.  Cleaned up the machine code output module x86/x86MC.sml and added
1655        support for a whole bunch of instructions and addressing modes:
1656    
1657          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
1658          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
1659          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
1660          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
1661          fxch %st(n)
1662          fld %st(n)
1663          fst %st(n)
1664          fst mem
1665          fstp %st(n)
1666          fucom %st(n)
1667          fucomp %st(n)
1668    
1669        All these are now generated when the fast fp mode is turned on.
1670    
1671    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
1672    
1673    ----------------------------------------------------------------------
1674    Name: Matthias Blume
1675    Date: 2000/11/09 11:20:00 JST
1676    Tag: blume-20001109-scc
1677    Description:
1678    
1679    Eliminated some code duplication:
1680    
1681    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
1682       (Otherwise the functor is useless.)
1683    2. Used GraphSCCFn where SCCUtilFun was used previously.
1684    3. Got rid of SCCUtilFun (in comp-lib.cm).
1685    
1686    ----------------------------------------------------------------------
1687    Name: Lal George
1688    Date: 2000/11/06 09:02:21 EST 2000
1689    Tag: Release_110_30
1690    Description:
1691    
1692    - Version 110.30
1693    ----------------------------------------------------------------------
1694    Name: Matthias Blume
1695    Date: 2000/11/04 14:45:00
1696    Tag: blume-20001104-mlbuild
1697    Description:
1698    
1699    - Made ml-build faster on startup.
1700    - Documentation fixes.
1701    
1702    ----------------------------------------------------------------------
1703    Name: Matthias Blume
1704    Date: 2000/11/02 17:00:00 JST
1705    Tag: blume-20001102-condcomp
1706    Description:
1707    
1708    - Small tweaks to pickler -- new BOOTFILES!
1709    - Version bumped to 110.29.2.
1710    - Added conditional compilation facility to init.cmi (see comment there).
1711    ----------------------------------------------------------------------
1712    Name: Allen Leung
1713    Date: 2000/10/23 19:31:00
1714    Tag: leunga-20001023-demo-ra
1715    
1716    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
1717    2. Test programs for the graph library updated
1718    3. Some new MLRISC demo programs added
1719    
1720    ----------------------------------------------------------------------
1721    Name: Matthias Blume
1722    Date: 2000/08/31 22:15:00 JST
1723    Tag: blume-20001017-errmsg
1724    Description:
1725    
1726    More error message grief: Where there used to be no messages, there
1727    now were some that had bogus error regions.  Fixed.
1728    
1729    ----------------------------------------------------------------------
1730    Name: Matthias Blume
1731    Date: 2000/08/31 17:30:00 JST
1732    Tag: blume-20001017-v110p29p1
1733    Description:
1734    
1735    I made a version 110.29.1 with new bootfiles.
1736    
1737    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
1738              CM documentation changes and a small bugfix in CM's error reporting.
1739    
1740    ----------------------------------------------------------------------
1741    Name: Lal George
1742    Date: 2000/09/27 14:42:35 EDT
1743    Tag: george-20000927-nodestatus
1744    Description:
1745    
1746    Changed the type of the nodestatus, so that:
1747    
1748            SPILLED(~1)             is now SPILLED
1749            SPILLED(m) where m>=0   is now MEMREG(m)
1750            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
1751    
1752    ----------------------------------------------------------------------
1753    Name: Matthias Blume
1754    Date: 2000/09/07 14:45:00 JST
1755    Tag: blume-20000907-cmerrmsg
1756    Description:
1757    
1758    Small tweak to CM to avoid getting ML syntax error messages twice.
1759    
1760    ----------------------------------------------------------------------
1761    Name: Matthias Blume
1762    Date: 2000/08/31 18:00:00 JST
1763    Tag: blume-20000831-cvsbootfiles
1764    Description:
1765    
1766    New URL for boot files (because the 110.29 files on the BL server do
1767    now work correctly with my updated install scripts for yacc and lex).
1768    
1769    ----------------------------------------------------------------------
1770    Name: Matthias Blume
1771    Date: 2000/08/08 12:33:00 JST
1772    Tag: blume-20000808-manual
1773    Description:
1774    
1775    Tiny update to CM manual.
1776    
1777    ----------------------------------------------------------------------
1778    Name: Allen Leung
1779    Date: 2000/08/7 19:31:00
1780    Tag: leunga-20000807-a-whole-bunch-of-stuff
1781    
1782      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
1783    and Mobdy.
1784    
1785    1.  x86
1786    
1787       a.  Fixes to peephole module by John and Dan.
1788       b.  Assembly fix to SETcc by Allen.
1789       c.  Fix to c-call by John.
1790       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
1791       e.  Instruction selection optimization to SETcc as suggested by John.
1792    
1793           For example,
1794    
1795            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
1796    
1797           should generate:
1798    
1799            MOVL a, x
1800            SUBL b, x
1801            SHRL 31, x
1802    
1803    2.  IR stuff
1804    
1805         A bunch of new DJ-graph related algorithms added.  These
1806         speed up SSA construction.
1807    
1808    3.  SSA + Scheduling
1809    
1810         Added code for SSA and scheduling to the repository
1811    
1812    ----------------------------------------------------------------------
1813    Name: Lal George
1814    Date: 2000/07/27 11:53:14 EDT
1815    
1816    Tag: lal-20000727-linux-ppc
1817    Description:
1818    
1819     Made changes to support Linux PPC.
1820     p.s. I have confirmation that the 110.29 boot files work fine.
1821    
1822    ----------------------------------------------------------------------
1823    Name: Matthias Blume
1824    Date: 2000/07/27 17:40:00 JST
1825    Tag: blume-20000727-scripts
1826    Description:
1827    
1828    !!!! WARNING !!!!
1829    You must recompile the runtime system!
1830    !!!! WARNING !!!!
1831    
1832    This is basically another round of script-enhancements:
1833    
1834    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
1835       and undefine CM preprocessor symbols.
1836    
1837    2. ml-build avoids generating a new heap image if it finds that the
1838       existing one is still ok.  (The condition is that no ML file had to
1839       be recompiled and all ML files are found to be older that the heap
1840       file.)
1841    
1842       To make this work smoothly, I also hacked the runtime system as
1843       well as SMLofNJ.SysInfo to get access to the heap image suffix
1844       (.sparc-solaris, ...) that is currently being used.
1845    
1846       Moreover, the signature of CM.mk_standalone has changed.  See the
1847       CM manual.
1848    
1849    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
1850       CM manual for details.)
1851    
1852    4. More CM manual updates:
1853        - all of the above has been documented.
1854        - there is now a section describing the (CM-related) command line
1855          arguments that are accepted by the "sml" command
1856    
1857    ----------------------------------------------------------------------
1858    Name: Matthias Blume
1859    Date: 2000/07/25 16:20:00 JST
1860    Tag: blume-20000725-makedepend
1861    Description:
1862    
1863    Added a script called ml-makedepend.  This can be used in makefiles
1864    for Unix' make in a way very similar to the "makedepend" command for
1865    C.
1866    
1867    The script internally uses function CM.sources.
1868    
1869    Synopsis:
1870    
1871        ml-makedepend [-f makefile] cmfile targetname
1872    
1873    The default for the makefile is "makefile" (or "Makefile" should
1874    "makefile" not exist).
1875    
1876    ml-makedepend adds a cmfile/targetname-specific section to this
1877    makefile (after removing the previous version of this section).  The
1878    section contains a single dependency specification with targetname on
1879    the LHS (targetname is an arbitrary name), and a list of files derived
1880    from the cmfile on the RHS.  Some of the files on the RHS are
1881    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
1882    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
1883    path names.  The makefile writer is responsible for making sure that
1884    these variables have correct at the time "make" is invoked.
1885    
1886    ----------------------------------------------------------------------
1887    Name: Matthias Blume
1888    Date: 2000/07/22 23:30:00 JST
1889    Tag: blume-20000722-urlupdate
1890    Description:
1891    
1892    Changed BOOT and config/srcarchiveurl to point to BL server:
1893    
1894        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
1895    
1896    ----------------------------------------------------------------------
1897    Name: Matthias Blume
1898    Date: 2000/07/18 18:00:00 JST
1899    Tag: blume-20000718-Version_110_29
1900    Description:
1901    
1902    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
1903    
1904    2. Updated config/version to 110.29
1905    
1906    3. Updated config/srcarchiveurl
1907    
1908    3. New boot files!
1909       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
1910    
1911    ----------------------------------------------------------------------
1912    Name: Matthias Blume
1913    Date: 2000/07/11 13:58:00 JST
1914    Tag: blume-20000711-doctypo
1915    Description:
1916    
1917    Fixed a few typos in CM manual.
1918    
1919    ----------------------------------------------------------------------
1920    Name: Allen Leung
1921    Date: 2000/06/15 00:38:00
1922    Tag: leunga-20000704-sparc-x86
1923    
1924    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
1925    2. fix to x86 RET bug [found by Dan Grossman]
1926    3. sparc assembly bug fix for ticc instructions [found by Fermin]
1927    
1928       Affects c-- and moby only
1929    
1930    ----------------------------------------------------------------------
1931    Name: Matthias Blume
1932    Date: 2000/07/04 15:26:00
1933    Tag: blume-20000704-trigger
1934    Description:
1935    
1936    1. Improvements to CM manual.
1937    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
1938       of getting a back-trace.  The function, when called, raises an
1939       internal exception which explicitly carries the full back-trace history,
1940       so it is unaffected by any intervening handle-raise pairs ("trivial"
1941       or not).  The interactive loop will print that history once it arrives
1942       at top level.
1943       Short of having all exceptions implicitly carry the full history, the
1944       recommended way of using this facility is:
1945         - compile your program with instrumentation "on"
1946         - run it, when it raises an exception, look at the history
1947         - if the history is "cut off" because of some handler, go and modify
1948           your program so that it explicitly calls BTrace.trigger
1949         - recompile (still instrumented), and rerun; look at the full history
1950    
1951    ----------------------------------------------------------------------
1952    Name: Matthias Blume
1953    Date: 2000/07/03 15:36:00 JST
1954    Tag: blume-20000702-manual
1955    Description:
1956    
1957    Small corrections and updates to CM manual.
1958    
1959    ----------------------------------------------------------------------
1960    Name: Matthias Blume
1961    Date: 2000/06/29 16:04:00 JST
1962    Tag: blume-20000629-yacctool
1963    Description:
1964    
1965    Changes:
1966    
1967    1. Class "mlyacc" now takes separate arguments to pass options to
1968       generated .sml- and .sig-files independently.
1969    2. Corresponding CM manual updates.
1970    3. BTrace module now also reports call sites.  (However, for loop clusters
1971       it only shows from where the cluster was entered.)  There are associated
1972       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
1973    
1974    ----------------------------------------------------------------------
1975    Name: Matthias Blume
1976    Date: 2000/06/27 16:51:00 JST
1977    Tag: blume-20000627-noweb
1978    Description:
1979    
1980    Changes:
1981    
1982     1. Implemented "subdir" and "witness" options for noweb tool.
1983        This caused some slight internal changes in CM's tool implementation.
1984     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
1985        some remaining issues from earlier path anchor changes.
1986     3. Updated CM manual accordingly.
1987    
1988     4. Changed implementation of back-tracing so that I now consider it
1989        ready for prime-time.
1990    
1991        In particular, you don't have to explicitly trigger the back-trace
1992        anymore.  Instead, if you are running BTrace-instrumented code and
1993        there is an uncaught exception (regardless of whether or not it was
1994        raised in instrumented code), the top-level evalloop will print
1995        the back-trace.
1996    
1997        Features:
1998    
1999          - Instrumented and uninstrumented code work together seemlessly.
2000            (Of course, uninstrumented code is never mentioned in actual
2001             back-traces.)
2002    
2003          - Asymptotic time- and space-complexity of instrumented code is
2004            equal to that of uninstrumented code.  (This means that
2005            tail-recursion is preserved by the instrumentation phase.)
2006    
2007          - Modules whose code has been instrumented in different sessions
2008            work together without problem.
2009    
2010          - There is no penalty whatsoever on uninstrumented code.
2011    
2012          - There is no penalty on "raise" expressions, even in
2013            instrumented code.
2014    
2015        A potential bug (or perhaps it is a feature, too):
2016    
2017          A back-trace reaches no further than the outermost instrumented
2018          non-trivial "raise".  Here, a "trivial" raise is one that is the
2019          sole RHS of a "handle" rule.  Thus, back-traces reach trough
2020    
2021               <exp> handle e => raise e
2022    
2023          and even
2024    
2025               <exp> handle Foo => raise Bar
2026    
2027          and, of course, through
2028    
2029               <exp> handle Foo => ...
2030    
2031         if the exception was not Foo.
2032    
2033         Back-traces always reach right through any un-instrumented code
2034         including any of its "handle" expressions, trivial or not.
2035    
2036       To try this out, do the following:
2037    
2038         - Erase all existing binfiles for your program.
2039           (You may keep binfiles for those modules where you think you
2040            definitely don't need back-tracing.)
2041         - Turn on back-trace instrumentation:
2042              SMLofNJ.Internals.BTrace.mode (SOME true);
2043         - Recompile your program.  (I.e., run "CM.make" or "use".)
2044         - You may now turn instrumentation off again (if you want):
2045              SMLofNJ.Internals.BTrace.mode (SOME false);
2046         - Run your program as usual.  If it raises an exception that
2047           reaches the interactive toplevel, then a back-trace will
2048           automatically be printed.  After that, the toplevel loop
2049           will print the exception history as usual.
2050    
2051    ----------------------------------------------------------------------
2052    Name: Matthias Blume
2053    Date: 2000/06/26 09:56:46 JST
2054    Tag: blume-20000626-setup
2055    Description:
2056    
2057    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
2058          ML code before and after compiling a file (e.g., to set compiler
2059          flags)
2060    
2061    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
2062              - associated changes to btrace.sml (BTrace instrumentation pass)
2063              - cleaner implementation of btimp.sml (BTrace tracing and report
2064                module)
2065    
2066    CM manual: * new path encoding documented
2067               * description of setup-parameter to "sml" added
2068    
2069    The biggest user-visible change to back-tracing is that it is no
2070    longer necessary to compile all traced modules within the same
2071    session.  (This was a real limitation.)
2072    
2073    ----------------------------------------------------------------------
2074    Name: Matthias Blume
2075    Date: 2000/06/24 12:40:00 JST
2076    Tag: blume-20000624-startup
2077    Description:
2078    
2079    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
2080    bit too often -- to put it mildly. :)
2081    
2082    ----------------------------------------------------------------------
2083    Name: Matthias Blume
2084    Date: 2000/06/23 18:20:00 JST
2085    Tag: blume-20000623-btrace
2086    Description:
2087    
2088    This updates adds a backtrace facility to aid programmers in debugging
2089    their programs.  This involves the following changes:
2090    
2091    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
2092       keeping track of the current call stack.  When programs are compiled
2093       in a special mode, the compiler will insert calls to these hooks
2094       into the user program.
2095       "Hook" means that it is possible for different implementations of
2096       back-tracing to register themselves (at different times).
2097    
2098    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
2099       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
2100       It can be turned on using this call:
2101         SMLofNJ.Internals.BTrace.mode (SOME true);
2102       Turning it off again:
2103         SMLofNJ.Internals.BTrace.mode (SOME false);
2104       Querying the current status:
2105         SMLofNJ.Internals.BTrace.mode NONE;
2106       Annotated programs are about twice as big as normal ones, and they
2107       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
2108       where all hooks do nothing).  The slowdown with a plugin that is
2109       actually useful (such as the one supplied by default) is even greater,
2110       but in the case of the default plugin it is still only an constant
2111       factor (amortized).
2112    
2113    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
2114       with a sub-structure BTrace for controlling back-tracing.  In particular,
2115       the above-mentioned function "mode" controls whether the annotation
2116       phase is invoked by the compiler.  Another important function is
2117       "trigger": when called it aborts the current execution and causes
2118       the top-level loop to print a full back-trace.
2119    
2120    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
2121       for back-tracing.  It keeps track of the dynamic call stack and in
2122       addition to that it keeps a partial history at each "level" of that
2123       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
2124       d and b (at separate times, dynamically), then the report will show:
2125    
2126       GOTO   d
2127             /c
2128       GOTO  \b
2129       CALL   a
2130    
2131       This shows that there was an initial non-tail call of a, then a
2132       tail-call to b or c, looping behavior in a cluster of functions that
2133       consist of b and c, and then a goto from that cluster (i.e., either from
2134       b or from c) to d.
2135    
2136       Note that (depending on the user program) the amount of information
2137       that the back-trace module has to keep track of at each level is bounded
2138       by a constant.  Thus, the whole implementation has the same asymptotical
2139       complexity as the original program (both in space and in time).
2140    
2141    5. compiler/TopLevel/interact/evalloop.sml has been modified to
2142       handle the special exception SMLofNJ.Internals.BTrace.BTrace
2143       which is raised by the "trigger" function mentioned above.
2144    
2145    Notes on usage:
2146    
2147    - Annotated code works well together with unannotated code:
2148    Unannotated calls simply do not show up at all in the backtrace.
2149    
2150    - It is not a good idea to let modules that were annotated during
2151    different sessions run at the same time.  This is because the compiler
2152    chooses small integers to identify individual functions, and there
2153    will be clashes if different modules were compiled in separate sessions.
2154    (Nothing will crash, and you will even be told about the clashes, but
2155    back-trace information will in general not be useful.)
2156    
2157    - Back-tracing can be confused by callcc and capture.
2158    
2159    - The only way of getting a back-trace right now is to explicitly
2160    invoke the "trigger" function from your user program.  Eventually, we
2161    should make every exception carry back-trace information (if
2162    available).  But since this creates more overhead at "raise"-time
2163    (similar to the current exnHistory overhead), I have not yet
2164    implemented this.  (The implementation will be rather easy.)  With
2165    exceptions carrying back-trace information, this facility will be even
2166    more useful because users don't need to modify their programs...
2167    
2168    - While it is possible to compile the compiler with back-trace
2169    annotations turned on (I did it to get some confidence in
2170    correctness), you must make absolutely sure that core.sml and
2171    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
2172    be compiled with annotation because there is no core access yet, but
2173    if you compile btimp.sml with annotation, then the system will go into
2174    an infinite recursion and crash.)
2175    Since CM currently does not know about BTrace, the only way to turn
2176    annotations on and off for different modules of the compiler is to
2177    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
2178    this is awkward and clumsy.
2179    
2180    Sample sessions:
2181    
2182    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2183    - SMLofNJ.Internals.BTrace.mode (SOME true);
2184    [autoloading]
2185    [autoloading done]
2186    val it = false : bool
2187    - structure X = struct
2188    -     fun main n = let
2189    -         fun a (x, 0) = d x
2190    -           | a (x, n) = b (x, n - 1)
2191    -         and b (x, n) = c (x, n)
2192    -         and c (x, n) = a (x, n)
2193    -         and d x = e (x, 3)
2194    -         and e (x, 0) = f x
2195    -           | e (x, n) = e (x, n - 1)
2196    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
2197    -           | f n = n * g (n - 1)
2198    -         and g n = a (n, 3)
2199    -     in
2200    -         f n
2201    -     end
2202    - end;
2203    structure X : sig val main : int -> int end
2204    - X.main 3;
2205    *** BACK-TRACE ***
2206    GOTO   stdIn:4.2-13.20: X.main[2].f
2207    GOTO-( stdIn:4.2-13.20: X.main[2].e
2208    GOTO   stdIn:4.2-13.20: X.main[2].d
2209         / stdIn:4.2-13.20: X.main[2].a
2210         | stdIn:4.2-13.20: X.main[2].b
2211    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2212    CALL   stdIn:4.2-13.20: X.main[2].g
2213    GOTO   stdIn:4.2-13.20: X.main[2].f
2214    GOTO-( stdIn:4.2-13.20: X.main[2].e
2215    GOTO   stdIn:4.2-13.20: X.main[2].d
2216         / stdIn:4.2-13.20: X.main[2].a
2217         | stdIn:4.2-13.20: X.main[2].b
2218    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2219    CALL   stdIn:4.2-13.20: X.main[2].g
2220    GOTO   stdIn:4.2-13.20: X.main[2].f
2221    GOTO-( stdIn:4.2-13.20: X.main[2].e
2222    GOTO   stdIn:4.2-13.20: X.main[2].d
2223         / stdIn:4.2-13.20: X.main[2].a
2224         | stdIn:4.2-13.20: X.main[2].b
2225    GOTO-\ stdIn:4.2-13.20: X.main[2].c
2226    CALL   stdIn:4.2-13.20: X.main[2].g
2227    GOTO   stdIn:4.2-13.20: X.main[2].f
2228    CALL   stdIn:2.15-17.4: X.main[2]
2229    -
2230    
2231    (Note that because of a FLINt bug the above code currently does not
2232    compile without BTrace turned on.)
2233    
2234    Here is another example, using my modified Tiger compiler:
2235    
2236    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
2237    - SMLofNJ.Internals.BTrace.mode (SOME true);
2238    [autoloading]
2239    [autoloading done]
2240    val it = false : bool
2241    - CM.make "sources.cm";
2242    [autoloading]
2243    ...
2244    [autoloading done]
2245    [scanning sources.cm]
2246    [parsing (sources.cm):parse.sml]
2247    [creating directory CM/SKEL ...]
2248    [parsing (sources.cm):tiger.lex.sml]
2249    ...
2250    [wrote CM/sparc-unix/semant.sml]
2251    [compiling (sources.cm):main.sml]
2252    [wrote CM/sparc-unix/main.sml]
2253    [New bindings added.]
2254    val it = true : bool
2255    - Main.compile ("../testcases/merge.tig", "foo.out");
2256    *** BACK-TRACE ***
2257    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
2258    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2259    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2260    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
2261    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2262    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2263    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
2264         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
2265    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
2266    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
2267    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
2268    CALL   main.sml:1.18-118.4: Main.compile[2]
2269    -
2270    
2271    ----------------------------------------------------------------------
2272    Name: Matthias Blumen
2273    Date: 2000/06/21 18:00:00 JST
2274    Tag: blume-20000621-manual
2275    Description:
2276    
2277    CM manual update: Path environments documented.
2278    
2279    ----------------------------------------------------------------------
2280    Name: Matthias Blume
2281    Date: 2000/06/19 13:40:00
2282    Tag: blume-20000619-manual
2283    Description:
2284    
2285    CM manual and system/README update.  This only covers the fact that
2286    there are no more implicit anchors.  (Path environments and the "bind"
2287    option to "cm" have yet to be documented.)
2288    
2289    ----------------------------------------------------------------------
2290    Name: Matthias Blume
2291    Date: 2000/06/19 11:05:00 JST
2292    Tag: blume-20000619-chdir-bugfix
2293    Description:
2294    
2295    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
2296    
2297    ----------------------------------------------------------------------
2298    Name: Matthias Blume
2299    Date: 2000/06/18 22:00:10 JST
2300    Tag: blume-20000618-implicit-anchors-really-gone
2301    Description:
2302    
2303    I updates the previous HISTORY entry where I forgot to mention that
2304    implicit anchors are no longer with us.
2305    
2306    The current update also gets rid of the (now useless) controller
2307    CM.Control.implicit_anchors.
2308    
2309    ----------------------------------------------------------------------
2310    Name: Matthias Blume
2311    Date: 2000/06/16 17:30:00 JST
2312    Tag: blume-20000616-anchorenv
2313    Description:
2314    
2315    This patch implements the long anticipated (just kidding :) "anchor
2316    environment" mechanism.  In the course of doing this, I also
2317    re-implemented CM's internal "SrcPath" module from scratch.  The new
2318    one should be more robust in certain boundary cases.  In any case, it
2319    is a lot cleaner than its predecessor (IMHO).
2320    
2321    This time, although there is yet another boot file format change, I
2322    kept the unpickler backward-compatible.  As a result, no new bootfiles
2323    are necessary and bootstrapping is straightforward.  (You cannot read
2324    new bootfiles into an old system, but the other way around is no
2325    problem.)
2326    
2327    Visible changes:
2328    
2329    ** 0. Implicit path anchors (without the leading $-symbol) are no
2330    longer recognized at all. This means that such path names are not
2331    illegal either.  For example, the name basis.cm simply refers to a
2332    local file called "basis.cm" (i.e, the name is an ordinary path
2333    relative to .cm-files directory).  Or, to put it differently, only
2334    names that start with $ are anchored paths.
2335    
2336    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
2337    vanished.
2338    
2339    John (Reppy) had critizised this as soon as I originally proposed and
2340    implemented it, but at that time I did not really deeply believe
2341    him. :) Now I came full-circle because I need the $<singlearc> syntax
2342    in another place where it cannot be seen as an abbreviation for
2343    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
2344    seems to mean (i.e., it "expands" into the corresponding anchor
2345    value).
2346    
2347    However, when paths are used as members in CM description files, it
2348    continues to be true that there must be at least another arc after the
2349    anchor.  This is now enforced separately during semantic analysis
2350    (i.e., from a lexical/syntactical point of view, the notation is ok.)
2351    
2352    ** 2. The "cm" class now accepts an option "bind".  The option's value
2353    is a sub-option list of precisely two items -- one labeled "anchor"
2354    and the other one labeled "value".  As you might expect, "anchor" is
2355    used to specify an anchor name to be bound, and "value" specifies what
2356    the anchor is being bound to.
2357    
2358    The value must be a directory name and can be given in either standard
2359    syntax (including the possibility that it is itself an anchored path)
2360    or native syntax.
2361    
2362    Examples:
2363    
2364       foo.cm (bind:(anchor:bar value:$mystuff/bar))
2365       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
2366    
2367    and so on.
2368    
2369    The meaning of this is that the .cm-file will be processed with an
2370    augmented anchor environment where the given anchor(s) is/are bound to
2371    the given values(s).
2372    
2373    The rationale for having this feature is this: Suppose you are trying
2374    to use two different (already stable) libraries a.cm and b.cm (that
2375    you perhaps didn't write yourself).  Further, suppose each of these
2376    two libraries internally uses its own auxiliary library $aux/lib.cm.
2377    Normally you would now have a problem because the anchor "lib" can not
2378    be bound to more than one value globally.  Therefore, the project that
2379    uses both a.cm and b.cm must locally redirect the anchor to some other
2380    place:
2381    
2382       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
2383       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
2384    
2385    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
2386    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
2387    
2388    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
2389    you when you do so at the time of CM.stabilize).  Therefore, you can
2390    also use an anchored path as the value:
2391    
2392      a.cm (bind:(anchor:lib value:$a-lib))
2393      b.cm (bind:(anchor:lib value:$b-lib))
2394    
2395    Now you can globally configure (using the usual CM.Anchor.anchor or
2396    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
2397    itself is always locally bound, setting it globally is no longer
2398    meaningful or necessary (but it does not hurt either).  In fact, "lib"
2399    can still be used as a global anchor for separate purposes.  As a
2400    matter of fact, one can locally define "lib" in terms of a global
2401    "lib":
2402    
2403      a.cm (bind:(anchor:lib value:$lib/a))
2404      b.cm (bind:(anchor:lib value:$lib/b))
2405    
2406    ** 3: The encoding of path names has changed.  This affects the way
2407    path names are shown in CM's progress report and also the internal
2408    protocol encoding used for parallel make.
2409    
2410    The encoding now uses one or more ':'-separated segments.  Each
2411    segments corresponds to a file that has been specified relative to the
2412    file given by its preceding segment.  The first segment is either
2413    relative to the CWD, absolute, or anchored.  Each segment itself is
2414    basically a Unix pathname; all segments but the first are relative.
2415    
2416    Example:
2417    
2418       $foo/bar/baz.cm:a/b/c.sml
2419    
2420    This path denotes the file bar/a/b/c.sml relative to the directory
2421    denoted by anchor "foo".  Notice that the encoding also includes
2422    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
2423    paths are resolved relative to the .cm-files directory, so baz.cm must
2424    be ignored to get the "real" pathname.
2425    
2426    To make this fact more obvious, CM puts the names of such "virtual
2427    arcs" into parentheses when they appear in progress reports. (No
2428    parentheses will appear in the internal protocol encoding.)  Thus,
2429    what you really see is:
2430    
2431      $foo/bar/(baz.cm):a/b/c.sml
2432    
2433    I find this notation to be much more informative than before.
2434    
2435    Another new feature of the encoding is that special characters
2436    including parentheses, colons, (back)slashes, and white space are
2437    written as \ddd (where ddd is the decimal encoding of the character).
2438    
2439    *** The CM manual still needs to be updated.
2440    
2441    ----------------------------------------------------------------------
2442    Name: Allen Leung
2443    Date: 2000/06/15 00:38:00
2444    Tag: leunga-20000615-x86-peephole
2445    
2446    x86 Peephole fix by Fermin.  Affects c-- and moby only.
2447    
2448    ----------------------------------------------------------------------
2449    Name: Matthias Blume
2450    Date: 2000/06/12 11:40:00
2451    Tag: blume-20000612-parmakefix
2452    Description:
2453    
2454    More cleanup after changing the file naming scheme: This time I
2455    repaired the parallel make mechanism for CMB.make which I broke earlier.
2456    
2457    ----------------------------------------------------------------------
2458    Name: Allen Leung
2459    Date: 2000/06/09 01:25:00
2460    Tag: leunga-20000609-various
2461    
2462    None of these things should affect normal SML/NJ operations
2463    
2464    1. Peephole improvements provided by Fermin (c--)
2465    2. New annotation DEFUSE for adding extra dependence (moby)
2466    3. New X86 LOCK instructions (moby)
2467    4. New machine description language for reservation tables (scheduling)
2468    5. Fixes to various optimization/analysis modules (branch chaining, dominator
2469       trees etc.)
2470    6. I've changed the CM files so that they can work with versions
2471       110.0.6, 110.25 and 110.28
2472    
2473    ----------------------------------------------------------------------
2474    Name: Matthias Blume
2475    Date: 2000/06/09 12:40:00
2476    Tag: blume-20000609-log
2477    Description:
2478    
2479    - Removed all(?) remaining RCS Log entries from sources.
2480    
2481    - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for
2482      anchored paths).
2483    
2484    ----------------------------------------------------------------------
2485    Name: Matthias Blume
2486    Date: 2000/06/07 17:00:00 JST
2487    Tag: blume-20000607-no-implicit-anchors
2488    Description:
2489    
2490    1. This update changes the default setting for
2491    CM.Control.implicit_anchors from true to false.  This means that
2492    implicit anchors are no longer permitted by default.  I also tried to
2493    make sure that nothing else still relies on implicit anchors.
2494    (This is the next step on the schedule towards a CM that does not even
2495    have the notion of implicit anchors anymore.)
2496    
2497    2. More CM manual updates.
2498    
2499    3. I managed to track down and fix the pickling bug I mentioned last
2500    time.  Because of the previously existing workaround, this entails no
2501    immediate practical changes.
2502    
2503    ----------------------------------------------------------------------
2504    Name: Matthias Blume
2505    Date: 2000/06/06 11:15:00 JST
2506    Tag: blume-20000606-lazierpickle
2507    Description:
2508    
2509    !!!! NEW BOOT FILES !!!!
2510    
2511    * The main purpose of this update is to make library pickles lazier in
2512    order to reduce the initial space penalty for autoloading a library.
2513    As a result, it is now possible to have $smlnj/compiler.cm
2514    pre-registered.  This should take care of the many complaints or
2515    inquiries about missing structure Compiler.  This required changes to
2516    CM's internal data structures and small tweaks to some algorithms.
2517    
2518    As a neat additional effect, it is no longer necessary (for the sake
2519    of lean heap image files) to distinguish between a "minimal" CM and a
2520    "full" CM.  Now, there is only one CM (i.e., the "full" version:
2521    $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the
2522    interactive top level. ($smlnj/cm/minimal.cm is gone.)
2523    
2524    To make the life of compiler-hackers easier, "makeml" now also
2525    pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm).  In other
2526    words, after you bootstrap a new sml for the first time, you will not
2527    have to autoload $smlnj/cmb.cm again afterwards.  (The first time
2528    around you will still have to do it, though.)
2529    
2530    * A second change consists of major updates to the CM manual.  There
2531    are now several appendices with summary information and also a full
2532    specification of the CM description file syntax.
2533    
2534    * In directory src/system I added the script "allcross".  This script
2535    invokes sml and cross-compiles the compiler for all supported
2536    architectures.  (Useful when providing a new set of boot files.)
2537    
2538    * There seems to be a latent bug in my "lazy pickles" mechanism.  I
2539    added a small tweak to pickle-util.sml to work around this problem,
2540    but it is not a proper fix yet.  I will investigate further.  (The
2541    effect of the bug was an inflation of library pickle size.)
2542    
2543    * Version number increased to 110.28.1 (to avoid compatibility problems).
2544    
2545    ----------------------------------------------------------------------
2546    Name: Allen Leung
2547    Date: 2000/05/25 17:28 EDT
2548    Tag: leunga-20000525-ra
2549    Description:
2550    
2551      Fixed a bug in freezing phase of the register allocator.
2552    
2553    ----------------------------------------------------------------------
2554    Name: Allen Leung
2555    Date: 2000/05/15 22:53 EDT
2556    Tag: leunga-20000515-alpha-x86-ra
2557    Description:
2558    
2559      1. Alpha
2560    
2561          Slight cleanup.  Removed the instruction SGNXL
2562    
2563      2. X86
2564    
2565          Added the following instructions to the instruction set:
2566    
2567            ROLx, RORx,
2568            BTx, BTSx, BTLx, BTRx,
2569            XCHGx, and variants with the LOCK prefix
2570    
2571      3. Register Allocation
2572    
2573          The module ra-rewrite-with-renaming has been improved.
2574    
2575      These have no effect on SML/NJ.
2576    
2577  ----------------------------------------------------------------------  ----------------------------------------------------------------------
2578  Name: Matthias Blume  Name: Matthias Blume
2579  Date: 2000/05/15 16:20:00 JST  Date: 2000/05/15 16:20:00 JST
# Line 470  Line 3033 
3033    
3034  3.  Assembly  3.  Assembly
3035    
3036      When generating assemby, resolve the value of client defined constants,      When generating assembly, resolve the value of client defined constants,
3037      instead of generating symbolic values.  This is controlled by the      instead of generating symbolic values.  This is controlled by the
3038      new flag "asm-resolve-constants", which is default to true.      new flag "asm-resolve-constants", which is default to true.
3039    
# Line 493  Line 3056 
3056    
3057  To this end, I arranged that instead of "structure Core" as "structure  To this end, I arranged that instead of "structure Core" as "structure
3058  _Core" is bound in the pervasive environment.  Core access is done via  _Core" is bound in the pervasive environment.  Core access is done via
3059  _Core (which can never be accidentially rebound because _Core is not a  _Core (which can never be accidentally rebound because _Core is not a
3060  legal surface-syntax symbol).  legal surface-syntax symbol).
3061    
3062  The current solution is much cleaner because the core environment is  The current solution is much cleaner because the core environment is
# Line 503  Line 3066 
3066  with dynamic and symbolic parts of the core environment.  with dynamic and symbolic parts of the core environment.
3067    
3068  Remaining hackery (to bind the "magic" symbol _Core) is localized in the  Remaining hackery (to bind the "magic" symbol _Core) is localized in the
3069  compilation mananger's bootstrap compiler (actually: in the "init group"  compilation manager's bootstrap compiler (actually: in the "init group"
3070  handling).  See the comments in src/system/smlnj/init/init.cmi for  handling).  See the comments in src/system/smlnj/init/init.cmi for
3071  more details.  more details.
3072    
# Line 618  Line 3181 
3181     (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
3182     used).     used).
3183    
3184     This was done to accomodate the new "make" and "shell" tools which     This was done to accommodate the new "make" and "shell" tools which
3185     facilitate fairly seemless hookup to portions of code managed using     facilitate fairly seamless hookup to portions of code managed using
3186     Makefiles or Shell scripts.     Makefiles or Shell scripts.
3187    
3188     There are no classes "shared" or "private" anymore.  Instead, the     There are no classes "shared" or "private" anymore.  Instead, the
# Line 631  Line 3194 
3194    
3195     All existing tools are described in the CM manual.     All existing tools are described in the CM manual.
3196    
3197     - Slightly better error handling.  (CM now surpresses many followup     - Slightly better error handling.  (CM now suppresses many followup
3198     error messages that tended to be more annoying than helpful.)     error messages that tended to be more annoying than helpful.)
3199    
3200  2. Major changes to the compiler's static environment data structures.  2. Major changes to the compiler's static environment data structures.
# Line 662  Line 3225 
3225       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
3226       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
3227       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
3228       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
3229       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
3230       Dave's hands. :)       Dave's hands. :)
3231    
# Line 765  Line 3328 
3328    
3329       I've changed andl to testl in the floating point test sequence       I've changed andl to testl in the floating point test sequence
3330       whenever appropriate.  The Intel optimization guide states that       whenever appropriate.  The Intel optimization guide states that
3331       testl is perferable to andl.       testl is preferable to andl.
3332    
3333  7. RA (x86 only)  7. RA (x86 only)
3334    
# Line 947  Line 3510 
3510    
3511  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an
3512  additional argument called "template" which is an optional string that  additional argument called "template" which is an optional string that
3513  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
3514  explanation.  explanation.
3515    
3516  2. A special-purpose tool can be "regisitered" by simply dropping the  2. A special-purpose tool can be "registered" by simply dropping the
3517  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same
3518  directory where the .cm file lives that uses this tool.  (The  directory where the .cm file lives that uses this tool.  (The
3519  behavior/misfeature until now was to look for the tool description  behavior/misfeature until now was to look for the tool description
# Line 994  Line 3557 
3557  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for
3558  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,
3559  they might be the result of an earlier partial run of fixpt (which  they might be the result of an earlier partial run of fixpt (which
3560  perhaps got accidentially killed).  In this case, fixpt will quickly  perhaps got accidentally killed).  In this case, fixpt will quickly
3561  move through what exists before continuing where it left off earlier,  move through what exists before continuing where it left off earlier,
3562  and, thus, saves a lot of time.  and, thus, saves a lot of time.
3563    
# Line 1044  Line 3607 
3607    it from that remote directory.    it from that remote directory.
3608    This should simplify installation further:  For machines that have    This should simplify installation further:  For machines that have
3609    access to the internet, just fetch <version>-config.tgz, unpack it,    access to the internet, just fetch <version>-config.tgz, unpack it,
3610    edit config/targets, and go (run config/install.sh).  The scipt will    edit config/targets, and go (run config/install.sh).  The script will
3611    fetch everything else that it might need all by itself.    fetch everything else that it might need all by itself.
3612    
3613    For CVS users, this mechanism is not relevant for source archives, but    For CVS users, this mechanism is not relevant for source archives, but

Legend:
Removed from v.645  
changed lines
  Added in v.987

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