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

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