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

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