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

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