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

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