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