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

Legend:
Removed from v.643  
changed lines
  Added in v.1132

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