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 841, Fri Jun 15 21:38:20 2001 UTC revision 1128, Fri Mar 8 21:05:27 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  Name: Matthias Blume
17    Date: 2002/03/08 16:05:00
18    Tag: blume-20020308-entrypoints
19    Description:
20    
21    Version number bumped to 110.39.1.  NEW BOOTFILES!
22    
23    Entrypoints: non-zero offset into a code object where execution should begin.
24    
25    - Added the notion of an entrypoint to CodeObj.
26    - Added reading/writing of entrypoint info to Binfile.
27    - Made runtime system bootloader aware of entrypoints.
28    - Use the address of the label of the first function given to mlriscGen
29      as the entrypoint.  This address is currently always 0, but it will
30      not be 0 once we turn on block placement.
31    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
32      with entry points) from mlriscGen.
33    
34    ----------------------------------------------------------------------
35    Name: Allen Leung
36    Date: 2002/03/07 20:45:00 EST
37    Tag: leunga-20020307-x86-cmov
38    Description:
39    
40       Bug fixes for CMOVcc on x86.
41    
42       1. Added machine code generation for CMOVcc
43       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
44       3. CMOVcc cannot have an immediate operand as argument.
45    
46    ----------------------------------------------------------------------
47    Name: Matthias Blume
48    Date: 2002/03/07 16:15:00 EST
49    Tag: blume-20020307-controls
50    Description:
51    
52    This is a very large but mostly boring patch which makes (almost)
53    every tuneable compiler knob (i.e., pretty much everything under
54    Control.* plus a few other things) configurable via both the command
55    line and environment variables in the style CM did its configuration
56    until now.
57    
58    Try starting sml with '-h' (or, if you are brave, '-H')
59    
60    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
61    implements the underlying generic mechanism.
62    
63    The interface to some of the existing such facilities has changed somewhat.
64    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
65    (The getFoo interface is still there for backward-compatibility, but its
66    use is deprecated.)
67    
68    The ml-build script passes -Cxxx=yyy command-line arguments through so
69    that one can now twiddle the compiler settings when using this "batch"
70    compiler.
71    
72    TODO items:
73    
74    We should go through and throw out all controls that are no longer
75    connected to anything.  Moreover, we should go through and provide
76    meaningful (and correct!) documentation strings for those controls
77    that still are connected.
78    
79    Currently, multiple calls to Controls.new are accepted (only the first
80    has any effect).  Eventually we should make sure that every control
81    is being made (via Controls.new) exactly once.  Future access can then
82    be done using Controls.acc.
83    
84    Finally, it would probably be a good idea to use the getter-setter
85    interface to controls rather than ref cells.  For the time being, both
86    styles are provided by the Controls module, but getter-setter pairs are
87    better if thread-safety is of any concern because they can be wrapped.
88    
89    *****************************************
90    
91    One bug fix: The function blockPlacement in three of the MLRISC
92    backpatch files used to be hard-wired to one of two possibilities at
93    link time (according to the value of the placementFlag).  But (I
94    think) it should rather sense the flag every time.
95    
96    *****************************************
97    
98    Other assorted changes (by other people who did not supply a HISTORY entry):
99    
100    1. the cross-module inliner now works much better (Monnier)
101    2. representation of weights, frequencies, and probabilities in MLRISC
102       changed in preparation of using those for weighted block placement
103       (Reppy, George)
104    
105    ----------------------------------------------------------------------
106    Name: Lal George
107    Date: 2002/03/07 14:44:24 EST 2002
108    Tag: george-20020307-weighted-block-placement
109    
110    Tested the weighted block placement optimization on all architectures
111    (except the hppa) using AMPL to generate the block and edge frequencies.
112    Changes were required in the machine properties to correctly
113    categorize trap instructions. There is an MLRISC flag
114    "weighted-block-placement" that can be used to enable weighted block
115    placement, but this will be ineffective without block/edge
116    frequencies (coming soon).
117    
118    
119    ----------------------------------------------------------------------
120    Name: Lal George
121    Date: 2002/03/05 17:24:48 EST
122    Tag: george-20020305-linkage-cluster
123    
124    In order to support the block placement optimization, a new cluster
125    is generated as the very first cluster (called the linkage cluster).
126    It contains a single jump to the 'real' entry point for the compilation
127    unit. Block placement has no effect on the linkage cluster itself, but
128    all the other clusters  have full freedom in the manner in which they
129    reorder blocks or functions.
130    
131    On the x86 the typical linkage code that is generated is:
132       ----------------------
133            .align 2
134       L0:
135            addl    $L1-L0, 72(%esp)
136            jmp     L1
137    
138    
139            .align  2
140       L1:
141       ----------------------
142    
143    72(%esp) is the memory location for the stdlink register. This
144    must contain the address of the CPS function being called. In the
145    above example, it contains the address of  L0; before
146    calling L1 (the real entry point for the compilation unit), it
147    must contain the address for L1, and hence
148    
149            addl $L1-L0, 72(%esp)
150    
151    I have tested this on all architectures except the hppa.The increase
152    in code size is of course negligible
153    
154    ----------------------------------------------------------------------
155    Name: Allen Leung
156    Date: 2002/03/03 13:20:00 EST
157    Tag: leunga-20020303-mlrisc-tools
158    
159      Added #[ ... ] expressions to mlrisc tools
160    
161    ----------------------------------------------------------------------
162    Name: Matthias Blume
163    Date: 2002/02/27 12:29:00 EST
164    Tag: blume-20020227-cdebug
165    Description:
166    
167    - made types in structure C and C_Debug to be equal
168    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
169    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
170    
171    ----------------------------------------------------------------------
172    Name: Matthias Blume
173    Date: 2002/02/26 12:00:00 EST
174    Tag: blume-20020226-ffi
175    Description:
176    
177    1. Fixed a minor bug in CM's "noweb" tool:
178       If numbering is turned off, then truly don't number (i.e., do not
179       supply the -L option to noweb).  The previous behavior was to supply
180       -L'' -- which caused noweb to use the "default" line numbering scheme.
181       Thanks to Chris Richards for pointing this out (and supplying the fix).
182    
183    2. Once again, I reworked some aspects of the FFI:
184    
185       A. The incomplete/complete type business:
186    
187       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
188         gone!
189       - ML types representing an incomplete type are now *equal* to
190         ML types representing their corresponding complete types (just like
191         in C).  This is still safe because ml-nlffigen will not generate
192         RTTI for incomplete types, nor will it generate functions that
193         require access to such RTTI.   But when ML code generated from both
194         incomplete and complete versions of the C type meet, the ML types
195         are trivially interoperable.
196    
197         NOTE:  These changes restore the full generality of the translation
198         (which was previously lost when I eliminated functorization)!
199    
200       B. Enum types:
201    
202       - Structure C now has a type constructor "enum" that is similar to
203         how the "su" constructor works.  However, "enum" is not a phantom
204         type because each "T enum" has values (and is isomorphic to
205         MLRep.Signed.int).
206       - There are generic access operations for enum objects (using
207         MLRep.Signed.int).
208       - ml-nlffigen will generate a structure E_foo for each "enum foo".
209         * The structure contains the definition of type "mlrep" (the ML-side
210         representation type of the enum).  Normally, mlrep is the same
211         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
212         then mlrep will be defined as a datatype -- thus facilitating
213         pattern matching on mlrep values.
214         ("-ec" will be suppressed if there are duplicate values in an
215          enumeration.)
216         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
217         will be generated for each C enum constant xxx.
218         * Conversion functions m2i and i2m convert between mlrep and
219         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
220         * Coversion functions c and ml convert between mlrep and "tag enum".
221         * Access functions (get/set) fetch and store mlrep values.
222       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
223         enumerations are merged into one single enumeration represented by
224         structure E_'.
225    
226    ----------------------------------------------------------------------
227    Name: Allen Leung
228    Date: 2002/02/25 04:45:00 EST
229    Tag: leunga-20020225-cps-spill
230    
231    This is a new implementation of the CPS spill phase.
232    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
233    In case of problems, replace it with the old file spill.sml
234    
235    The current compiler runs into some serious performance problems when
236    constructing a large record.  This can happen when we try to compile a
237    structure with many items.  Even a very simple structure like the following
238    makes the compiler slow down.
239    
240        structure Foo = struct
241           val x_1 = 0w1 : Word32.int
242           val x_2 = 0w2 : Word32.int
243           val x_3 = 0w3 : Word32.int
244           ...
245           val x_N = 0wN : Word32.int
246        end
247    
248    The following table shows the compile time, from N=1000 to N=4000,
249    with the old compiler:
250    
251    N
252    1000   CPS 100 spill                           0.04u  0.00s  0.00g
253           MLRISC ra                               0.06u  0.00s  0.05g
254              (spills = 0 reloads = 0)
255           TOTAL                                   0.63u  0.07s  0.21g
256    
257    1100   CPS 100 spill                           8.25u  0.32s  0.64g
258           MLRISC ra                               5.68u  0.59s  3.93g
259              (spills = 0 reloads = 0)
260           TOTAL                                   14.71u  0.99s  4.81g
261    
262    1500   CPS 100 spill                           58.55u  2.34s  1.74g
263           MLRISC ra                               5.54u  0.65s  3.91g
264              (spills = 543 reloads = 1082)
265           TOTAL                                   65.40u  3.13s  6.00g
266    
267    2000   CPS 100 spill                           126.69u  4.84s  3.08g
268           MLRISC ra                               0.80u  0.10s  0.55g
269              (spills = 42 reloads = 84)
270           TOTAL                                   129.42u  5.10s  4.13g
271    
272    3000   CPS 100 spill                           675.59u  19.03s  11.64g
273           MLRISC ra                               2.69u  0.27s  1.38g
274              (spills = 62 reloads = 124)
275           TOTAL                                   682.48u  19.61s  13.99g
276    
277    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
278           MLRISC ra                               4.96u  0.27s  2.72g
279              (spills = 85 reloads = 170)
280           TOTAL                                   2375.26u  57.21s  48.00g
281    
282    As you can see the old cps spill module suffers from some serious
283    performance problem.  But since I cannot decipher the old code fully,
284    instead of patching the problems up, I'm reimplementing it
285    with a different algorithm.  The new code is more modular,
286    smaller when compiled, and substantially faster
287    (O(n log n) time and O(n) space).  Timing of the new spill module:
288    
289    4000  CPS 100 spill                           0.02u  0.00s  0.00g
290          MLRISC ra                               0.25u  0.02s  0.15g
291             (spills=1 reloads=3)
292          TOTAL                                   7.74u  0.34s  1.62g
293    
294    Implementation details:
295    
296    As far as I can tell, the purpose of the CPS spill module is to make sure the
297    number of live variables at any program point (the bandwidth)
298    does not exceed a certain limit, which is determined by the
299    size of the spill area.
300    
301    When the bandwidth is too large, we decrease the register pressure by
302    packing live variables into spill records.  How we achieve this is
303    completely different than what we did in the old code.
304    
305    First, there is something about the MLRiscGen code generator
306    that we should be aware of:
307    
308    o MLRiscGen performs code motion!
309    
310       In particular, it will move floating point computations and
311       address computations involving only the heap pointer to
312       their use sites (if there is only a single use).
313       What this means is that if we have a CPS record construction
314       statement
315    
316           RECORD(k,vl,w,e)
317    
318       we should never count the new record address w as live if w
319       has only one use (which is often the case).
320    
321       We should do something similar to floating point, but the transformation
322       there is much more complex, so I won't deal with that.
323    
324    Secondly, there are now two new cps primops at our disposal:
325    
326     1. rawrecord of record_kind option
327        This pure operator allocates some uninitialized storage from the heap.
328        There are two forms:
329    
330         rawrecord NONE [INT n]  allocates a tagless record of length n
331         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
332                                     and initializes the tag.
333    
334     2. rawupdate of cty
335          rawupdate cty (v,i,x)
336          Assigns to x to the ith component of record v.
337          The storelist is not updated.
338    
339    We use these new primops for both spilling and increment record construction.
340    
341     1. Spilling.
342    
343        This is implemented with a linear scan algorithm (but generalized
344        to trees).  The algorithm will create a single spill record at the
345        beginning of the cps function and use rawupdate to spill to it,
346        and SELECT or SELp to reload from it.  So both spills and reloads
347        are fine-grain operations.  In contrast, in the old algorithm
348        "spills" have to be bundled together in records.
349    
350        Ideally, we should sink the spill record construction to where
351        it is needed.  We can even split the spill record into multiple ones
352        at the places where they are needed.  But CPS is not a good
353        representation for global code motion, so I'll keep it simple and
354        am not attempting this.
355    
356     2. Incremental record construction (aka record splitting).
357    
358        Long records with many component values which are simulatenously live
359        (recall that single use record addresses are not considered to
360         be live) are constructed with rawrecord and rawupdate.
361        We allocate space on the heap with rawrecord first, then gradually
362        fill it in with rawupdate.  This is the technique suggested to me
363        by Matthias.
364    
365        Some restrictions on when this is applicable:
366        1. It is not a VECTOR record.  The code generator currently does not handle
367           this case. VECTOR record uses double indirection like arrays.
368        2. All the record component values are defined in the same "basic block"
369           as the record constructor.  This is to prevent speculative
370           record construction.
371    
372    ----------------------------------------------------------------------
373    Name: Allen Leung
374    Date: 2002/02/22 01:02:00 EST
375    Tag: leunga-20020222-mlrisc-tools
376    
377    Minor bug fixes in the parser and rewriter
378    
379    ----------------------------------------------------------------------
380    Name: Allen Leung
381    Date: 2002/02/21 20:20:00 EST
382    Tag: leunga-20020221-peephole
383    
384    Regenerated the peephole files.  Some contained typos in the specification
385    and some didn't compile because of pretty printing bugs in the old version
386    of 'nowhere'.
387    
388    ----------------------------------------------------------------------
389    Name: Allen Leung
390    Date: 2002/02/19 20:20:00 EST
391    Tag: leunga-20020219-mlrisc-tools
392    Description:
393    
394       Minor bug fixes to the mlrisc-tools library:
395    
396       1.  Fixed up parsing colon suffixed keywords
397       2.  Added the ability to shut the error messages up
398       3.  Reimplemented the pretty printer and fixed up/improved
399           the pretty printing of handle and -> types.
400       4.  Fixed up generation of literal symbols in the nowhere tool.
401       5.  Added some SML keywords to to sml.sty
402    
403    ----------------------------------------------------------------------
404    Name: Matthias Blume
405    Date: 2002/02/19 16:20:00 EST
406    Tag: blume-20020219-cmffi
407    Description:
408    
409    A wild mix of changes, some minor, some major:
410    
411    * All C FFI-related libraries are now anchored under $c:
412        $/c.cm      --> $c/c.cm
413        $/c-int.cm  --> $c/internals/c-int.cm
414        $/memory.cm --> $c/memory/memory.cm
415    
416    * "make" tool (in CM) now treats its argument pathname slightly
417      differently:
418        1. If the native expansion is an absolute name, then before invoking
419           the "make" command on it, CM will apply OS.Path.mkRelative
420           (with relativeTo = OS.FileSys.getDir()) to it.
421        2. The argument will be passed through to subsequent phases of CM
422           processing without "going native".  In particular, if the argument
423           was an anchored path, then "make" will not lose track of that anchor.
424    
425    * Compiler backends now "know" their respective C calling conventions
426      instead of having to be told about it by ml-nlffigen.  This relieves
427      ml-nlffigen from one of its burdens.
428    
429    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
430    
431    * Export C_DEBUG and C_Debug from $c/c.cm.
432    
433    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
434      subtyping relationship between incomplete pointers and their complete
435      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
436      with the convention of instantiating 'o with ('t, 'c) obj whenever
437      the pointer target type is complete.  In the incomplete case, 'o
438      will be instantiated with some "'c iobj" -- a type obtained by
439      using one of the functors PointerToIncompleteType or PointerToCompleteType.
440    
441      Operations that work on both incomplete and complete pointer types are
442      typed as taking an 'o ptr while operations that require the target to
443      be known are typed as taking some ('t, 'c) obj ptr.
444    
445      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
446      where void is an eqtype without any values.  This makes it possible
447      to work on voidptr values using functions meant to operate on light
448      incomplete pointers.
449    
450    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
451      been vastly simplified.
452    
453    ----------------------------------------------------------------------
454    Name: Matthias Blume
455    Date: 2002/02/19 10:48:00 EST
456    Tag: blume-20020219-pqfix
457    Description:
458    
459    Applied Chris Okasaki's bug fix for priority queues.
460    
461    ----------------------------------------------------------------------
462    Name: Matthias Blume
463    Date: 2002/02/15 17:05:00
464    Tag: Release_110_39
465    Description:
466    
467    Last-minute retagging is becoming a tradition... :-(
468    
469    This is the working release 110.39.
470    
471    ----------------------------------------------------------------------
472    Name: Matthias Blume
473    Date: 2002/02/15 16:00:00 EST
474    Tag: Release_110_39-orig
475    Description:
476    
477    Working release 110.39.  New bootfiles.
478    
479    (Update: There was a small bug in the installer so it wouldn't work
480    with all shells.  So I retagged. -Matthias)
481    
482    ----------------------------------------------------------------------
483    Name: Matthias Blume
484    Date: 2002/02/15 14:17:00 EST
485    Tag: blume-20020215-showbindings
486    Description:
487    
488    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
489    the latter can be useful for exploring what bindings are available at
490    the interactive prompt.  (The first function returns only the list
491    of symbols that are really bound, the second prints those but also the
492    ones that CM's autoloading mechanism knows about.)
493    
494    ----------------------------------------------------------------------
495    Name: Matthias Blume
496    Date: 2002/02/15 12:08:00 EST
497    Tag: blume-20020215-iptrs
498    Description:
499    
500    Two improvements to ml-nlffigen:
501    
502      1. Write files only if they do not exist or if their current contents
503         do not coincide with what's being written.  (That is, avoid messing
504         with the time stamps unless absolutely necessary.)
505    
506      2. Implement a "repository" mechanism for generated files related
507         to "incomplete pointer types".   See the README file for details.
508    
509    ----------------------------------------------------------------------
510    Name: Matthias Blume
511    Date: 2002/02/14 11:50:00 EST
512    Tag: blume-20020214-quote
513    Description:
514    
515    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
516    because of the new and improved tag generation scheme.  (Thanks to Allen
517    Leung for pointing it out.)
518    
519    ----------------------------------------------------------------------
520    Name: Lal George
521    Date: 2002/02/14 09:55:27 EST 2002
522    Tag: george-20020214-isabelle-bug
523    Description:
524    
525    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
526    of Isabelle on the x86.
527    
528    From Allen:
529    -----------
530     I've found the problem:
531    
532         in ra-core.sml, I use the counter "blocked" to keep track of the
533         true number of elements in the freeze queue.  When the counter goes
534         to zero, I skip examining the queue.  But I've messed up the
535         bookkeeping in combine():
536    
537             else ();
538             case !ucol of
539               PSEUDO => (if !cntv > 0 then
540                     (if !cntu > 0 then blocked := !blocked - 1 else ();
541                                        ^^^^^^^^^^^^^^^^^^^^^^^
542                      moveu := mergeMoveList(!movev, !moveu)
543                     )
544                  else ();
545    
546         combine() is called to coalesce two nodes u and v.
547         I think I was thinking that if the move counts of u and v are both
548         greater than zero then after they are coalesced then one node is
549         removed from the freeze queue.  Apparently I was thinking that
550         both u and v are of low degree, but that's clearly not necessarily true.
551    
552    
553    02/12/2002:
554        Here's the patch.  HOL now compiles.
555    
556        I don't know how this impact on performance (compile
557        time or runtime).  This bug caused the RA (especially on the x86)
558        to go thru the potential spill phase when there are still nodes on the
559        freeze queue.
560    
561    
562    
563    
564    ----------------------------------------------------------------------
565    Name: Matthias Blume
566    Date: 2002/02/13 22:40:00 EST
567    Tag: blume-20020213-fptr-rtti
568    Description:
569    
570    Fixed a bug in ml-nlffigen that was introduced with one of the previous
571    updates.
572    
573    ----------------------------------------------------------------------
574    Name: Matthias Blume
575    Date: 2002/02/13 16:41:00 EST
576    Tag: blume-20020213-cmlpq
577    Description:
578    
579    Added new priority queue export symbols (which have just been added to
580    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
581    not compile and the installer would choke.)
582    
583    ----------------------------------------------------------------------
584    Name: Matthias Blume
585    Date: 2002/02/13 16:15:00 EST
586    Tag: blume-20020213-various
587    Description:
588    
589    1. More tweaks to ml-nlffigen:
590    
591       - better internal datastructures (resulting in slight speedup)
592       - "-match" option requires exact match
593       - "localized" gensym counters (untagged structs/unions nested within
594         other structs/unions or within typedefs get a fresh counter; their
595         tag will be prefixed by a concatenation of their parents' tags)
596       - bug fixes (related to calculation of transitive closure of types
597         to be included in the output)
598    
599    2. Minor Basis updates:
600    
601       - added implementations for List.collate and Option.app
602    
603    ----------------------------------------------------------------------
604    Name: Matthias Blume
605    Date: 2002/02/11 15:55:00 EST
606    Tag: blume-20020211-gensym
607    Description:
608    
609    Added a "-gensym" option to command line of ml-nlffigen.  This can be
610    used to specify a "stem" -- a string that is inserted in all "gensym'd"
611    names (ML structure names that correspond to unnamed C structs, unions,
612    and enums), so that separate runs of ml-nlffigen do not clash.
613    
614    ----------------------------------------------------------------------
615    Name: Matthias Blume
616    Date: 2002/02/11 12:05:00 EST
617    Tag: blume-20020211-gensml
618    Description:
619    
620    A quick fix for a problem with GenSML (in the pgraph-util library):
621    Make generation of toplevel "local" optional.  (Strictly speaking,
622    signature definitions within "local" are not legal SML.)
623    
624    Other than that: updates to INSTALL and cm/TODO.
625    
626    ----------------------------------------------------------------------
627    Name: Matthias Blume
628    Date: 2002/02/08 15:00:00 EST
629    Tag: blume-20020208-uniquepid
630    Description:
631    
632    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
633    
634    1. The installer (config/install.sh) has gotten smarter:
635    
636         - Configuration options are a bit easier to specify now
637           (in config/targets).
638         - Bug in recognizing .tar.bz2 files fixed.
639         - Installer automatically resolves dependencies between
640           configuration options (e.g., if you ask for eXene, you will
641           also get cml -- regardless whether you asked for it or not).
642         - Installer can run in "quieter mode" by setting the environment
643           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
644           "completely silent", though.
645         - Build HashCons library as part of smlnj-lib.
646    
647    2. A new scheme for assigning persistent identifiers to compilation
648       units (and, by extension, to types etc.) has been put into place.
649       This fixes a long-standing bug where types and even dynamic values
650       can get internally confused, thereby compromising type safety
651       (abstraction) and dynamic correctness.  See
652    
653         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
654    
655       for an example of how things could go wrong until now.
656    
657       The downside of the new scheme is that pids are not quite as
658       persistent as they used to be: CM will generate a fresh pid
659       for every compilation unit that it thinks it sees for the first
660       time.  That means that if you compile starting from a clean, fresh
661       source tree at two different times, you end up with different
662       binaries.
663    
664       Cutoff recompilation, however, has not been compromised because
665       CM keeps pid information in special caches between runs.
666    
667    ----------------------------------------------------------------------
668    Name: Lal George
669    Date: 2002/02/07 15:34:13 EST 2002
670    Tag: <none>
671    Description:
672    
673    Compilers that generate assembly code may produce  global labels
674    whose value is resolved at link time. The various peephole optimization
675    modules did not take this in account.
676    
677    TODO. The Labels.addrOf function should really return an option
678    type so that clients are forced to deal with this issue, rather
679    than an exception being raised.
680    
681    ----------------------------------------------------------------------
682    Name: Lal George
683    Date: 2002/02/06 13:55:02 EST
684    Tag: george-20020206-ra-breakup
685    Description:
686    
687    1. A bug fix from Allen.
688    
689        A typo causes extra fstp %st(0)'s to be generated at compensation
690        edges, which might cause stack underflow traps at runtime.  This
691        occurs in fft where there are extraneous fstps right before the 'into'
692        trap instruction (in this case they are harmless since none of the
693        integers overflow.)
694    
695    2. Pulled out various utility modules that were embedded in the modules
696       of the register allocator. I need these modules for other purposes, but
697       they are not complete enough to put into a library (just yet).
698    ----------------------------------------------------------------------
699    Name: Matthias Blume
700    Date: 2002/01/31 16:05:00 EST
701    Tag: blume-20020131-sparc-ccalls
702    Description:
703    
704    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
705       of extra stack space by mistake.  Fixed.
706    
707    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
708    
709    ----------------------------------------------------------------------
710    Name: Allen Leung
711    Date: 2002/01/30
712    Tag: leunga-20020130-nowhere-bug-fix
713    Description:
714    
715       MLRISC bug fixes:
716       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
717       2. MachineInt.fromString was negating its value.
718    
719    ----------------------------------------------------------------------
720    Name: Matthias Blume
721    Date: 2002/01/29
722    Tag: blume-20020129-INSTALL
723    Description:
724    
725    - Added somewhat detailed installation instructions (file INSTALL).
726    - Fixed curl-detection bug in config/install.sh.
727    - It is now possible to select the URL getter using the URLGETTER
728      environment variable:
729    
730          not set / "unknown"      --> automatic detection (script tries wget,
731                                       curl, and lynx)
732          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
733                                       how to properly invoke them)
734          other                    --> use $URLGETTER directly, it must take
735                                       precisely two command-line arguments
736                                       (source URL and destination file name)
737    
738    ----------------------------------------------------------------------
739    Name: Matthias Blume
740    Date: 2002/01/28
741    Tag: blume-20020128-sparc-ccalls
742    Description:
743    
744    - Fixed problem with calculation of "used" registers in sparc-c-calls.
745    - Make use of the allocParam argument in sparc-c-calls.
746    
747    ----------------------------------------------------------------------
748    Name: Matthias Blume
749    Date: 2002/01/28
750    Tag: blume-20020128-allocParam
751    Description:
752    
753    John Reppy:  Changes c-calls API to accept client-callback for
754    allocating extra stack space.
755    me: Corresponding changes to mlriscGen (using a dummy argument that
756        does not change the current behavior).
757    
758    ----------------------------------------------------------------------
759    Name: Matthias Blume
760    Date: 2002/01/28 12:00:00
761    Tag: Release_110_38
762    Description:
763    
764    This time for real!!!
765    
766    ----------------------------------------------------------------------
767    Name: Matthias Blume
768    Date: 2002/01/28 10:56:00 EST
769    Tag: blume-20020128-retraction
770    Description:
771    
772    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
773       with blume-Release_110_38-retracted.)
774    
775    1. Fixed a problem with incorrect rounding modes in real64.sml.
776       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
777    
778    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
779       and enums fixed.  The naming of corresponding ML identifiers should
780       now be consistent again.
781    
782    ----------------------------------------------------------------------
783    Name: Allen Leung
784    Date: 2002/01/27
785    Tag: leunga-20020127-nowhere
786    Description:
787    
788       Added a target called nowhere in the configuration scripts.
789       Enabling this will build the MLRISC 'nowhere' tool (for translating
790       programs with where-clauses into legal SML code) during installation.
791    
792    ----------------------------------------------------------------------
793    Name: Matthias Blume
794    Date: 2002/01/25 21:27:00 EST
795    Tag: blume-Release_110_38-retracted
796    Description:
797    
798    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
799    
800    README will be added later.
801    
802    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
803    (Release_110_38) removed.  Reason: Last-minute bug fixes.
804    
805    ----------------------------------------------------------------------
806    Name: Matthias Blume
807    Date: 2002/01/25
808    Tag: blume-20020125-ffi
809    Description:
810    
811    A large number of tweaks and improvements to ml-nlffi-lib and
812    ml-nlffigen:
813    
814       - ML represenation types have been streamlined
815       - getter and setter functions work with concrete values, not abstract
816         ones where possible
817       - ml-nlffigen command line more flexible (see README file there)
818       - some bugs have been fixed (hopefully)
819    
820    ----------------------------------------------------------------------
821    Name: Lal George
822    Date: 2002/01/24
823    Tag: george-20020124-risc-ra-interface
824    Description:
825    
826       There is a dramatic simplification in the interface to the
827       register allocator for RISC architectures as a result of making
828       parallel copy instructions explicit.
829    
830    ----------------------------------------------------------------------
831    Name: Matthias Blume
832    Date: 2002/01/22
833    Tag: blume-20020122-x86-ccalls
834    Description:
835    
836    Bug fix for c-calls on x86 (having to do with how char- and
837    short-arguments are being handled).
838    
839    ----------------------------------------------------------------------
840    Name: Matthias Blume
841    Date: 2002/01/21
842    Tag: blume-20020121-ff
843    Description:
844    
845    Another day of fiddling with the FFI...
846    
847    1. Bug fix/workaround:  CKIT does not complain about negative array
848       dimensions, so ml-nlffigen has to guard itself against this possibility.
849       (Otherwise a negative dimension would send it into an infinite loop.)
850    
851    2. Some of the abstract types (light objects, light pointers, most "base"
852       types) in structure C are now eqtypes.
853    
854    3. Added constructors and test functions for NULL function pointers.
855    
856    ----------------------------------------------------------------------
857    Name: Matthias Blume
858    Date: 2002/01/18
859    Tag: blume-20020118-ready-for-new-release
860    Description:
861    
862    Made config/srcarchiveurl point to a new place.  (Will provide boot
863    files shortly.)
864    
865    Maybe we christen this to be 110.38?
866    
867    ----------------------------------------------------------------------
868    Name: Matthias Blume
869    Date: 2002/01/18
870    Tag: blume-20020118-more-ffifiddle
871    Description:
872    
873    Today's FFI fiddling:
874    
875      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
876        C.Set.* that use concrete (MLRep.*) arguments and results instead
877        of abstract ones.
878    
879      - Provided word-style bit operations etc. for "int" representation
880        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
881        and Long.
882    
883    ----------------------------------------------------------------------
884    Name: Matthias Blume
885    Date: 2002/01/18
886    Tag: blume-20020118-use-x86-fp
887    Description:
888    
889    Now that x86-fast-fp seems to be working, I turned it back on again
890    by default.  (Seems to work fine now, even with the FFI.)
891    
892    Other than that, I added some documentation about the FFI to
893    src/ml-nlffigen/README and updated the FFI test examples in
894    src/ml-nlffi-lib/Tests/*.
895    
896    ----------------------------------------------------------------------
897    Name: Allen Leung
898    Date: 2002/01/17
899    Tag: leunga-20020117-x86-fast-fp-call
900    Description:
901    
902       1. Fixed a problem with handling return fp values when x86's fast fp
903          mode is turned on.
904    
905       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
906          of %f32.
907    
908       3. Added a constructor INT32lit to the ast of MLRISC tools.
909    
910    ----------------------------------------------------------------------
911    Name: Matthias Blume
912    Date: 2002/01/16
913    Tag: blume-20020116-ffifiddle
914    Description:
915    
916    More fiddling with the FFI interface:
917    
918     - Make constness 'c instead of rw wherever possible.  This eliminates
919       the need for certain explicit coercions.  (However, due to ML's
920       value polymorphism, there will still be many cases where explicit
921       coercions are necessary.  Phantom types are not the whole answer
922       to modeling a subtyping relationship in ML.)
923    
924     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
925    
926     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
927       clumsy workaround for varargs problem.)
928    
929    ----------------------------------------------------------------------
930    Name: Lal George
931    Date: 2002/01/15
932    Tag: <none>
933    Description:
934    
935    1. Since COPY instructions are no longer native to the architecture,
936       a generic functor can be used to implement the expandCopies function.
937    
938    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
939       TEXT segment.
940    
941    ----------------------------------------------------------------------
942    Name: Matthias Blume
943    Date: 2002/01/15
944    Tag: blume-20020115-ffiupdates
945    Description:
946    
947    1. Fix for bug resulting in single-precision float values being returned
948       incorrectly from FFI calls.
949    
950    2. Small modifications to C FFI API:
951    
952        - memory-allocation routines return straight objects (no options)
953          and raise an exception in out-of-memory situations
954        - unsafe extensions to cast between function pointers and pointers
955          from/to ints
956        - added structure C_Debug as an alternative to structure C where
957          pointer-dereferencing (|*| and |*!) always check for null-pointers
958        - added open_lib' to DynLinkage;  open_lib' works like open_lib
959          but also takes a (possibly empty) list of existing library handles
960          that the current library depends on
961    
962    ----------------------------------------------------------------------
963    Name: Matthias Blume
964    Date: 2002/01/10
965    Tag: blume-20020110-newffigen
966    Description:
967    
968    1. Updates to portable graph code.
969    
970    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
971       more scalable now so that even huge interfaces such as the one
972       for GTK compile in finite time and space. :-)
973       See src/ml-nlffigen/README for details on what's new.
974    
975    ----------------------------------------------------------------------
976    Name: Lal George
977    Date: 2001/01/09 14:31:35 EST 2002
978    Tag: george-20011206-rm-native-copy
979    Description:
980    
981            Removed the native COPY and FCOPY instructions
982            from all the architectures and replaced it with the
983            explicit COPY instruction from the previous commit.
984    
985            It is now possible to simplify many of the optimizations
986            modules that manipulate copies. This has not been
987            done in this change.
988    
989    ----------------------------------------------------------------------
990    Name: Lal George
991    Date: 2001/12/06 16:50:13 EST 2001
992    Tag: george-20011206-mlrisc-instruction
993    Description:
994    
995    Changed the representation of instructions from being fully abstract
996    to being partially concrete. That is to say:
997    
998      from
999            type instruction
1000    
1001      to
1002            type instr                              (* machine instruction *)
1003    
1004            datatype instruction =
1005                LIVE of {regs: C.cellset, spilled: C.cellset}
1006              | KILL of {regs: C.cellset, spilled: C.cellset}
1007              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1008              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1009              | INSTR of instr
1010    
1011    This makes the handling of certain special instructions that appear on
1012    all architectures easier and uniform.
1013    
1014    LIVE and KILL say that a list of registers are live or killed at the
1015    program point where they appear. No spill code is generated when an
1016    element of the 'regs' field is spilled, but the register is moved to
1017    the 'spilled' (which is present, more for debugging than anything else).
1018    
1019    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1020    We used to generate:
1021    
1022            DEFFREG f1
1023            f1 := f2 + f3
1024            trapb
1025    
1026    but now generate:
1027    
1028            f1 := f2 + f3
1029            trapb
1030            LIVE {regs=[f1,f2,f3], spilled=[]}
1031    
1032    Furthermore, the DEFFREG (hack) required that all floating point instruction
1033    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1034    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1035    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1036    this architecture).
1037    
1038    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1039    all the architectures. This will result in further simplification of the
1040    register allocator that must be aware of them for coalescing purposes, and
1041    will also simplify certain aspects of the machine description that provides
1042    callbacks related to parallel copies.
1043    
1044    ANNOTATION should be obvious, and now INSTR represents the honest to God
1045    machine instruction set!
1046    
1047    The <arch>/instructions/<arch>Instr.sml files define certain utility
1048    functions for making porting easier -- essentially converting upper case
1049    to lower case. All machine instructions (of type instr) are in upper case,
1050    and the lower case form generates an MLRISC instruction. For example on
1051    the alpha we have:
1052    
1053      datatype instr =
1054         LDA of {r:cell, b:cell, d:operand}
1055       | ...
1056    
1057      val lda : {r:cell, b:cell, d:operand} -> instruction
1058        ...
1059    
1060    where lda is just (INSTR o LDA), etc.
1061    
1062    ----------------------------------------------------------------------
1063    Name: Matthias Blume
1064    Date: 2001/11/22 21:40:00 EST
1065    Tag: Release_110_37
1066    Description:
1067    
1068    Release 110.37.  This time for real.
1069    
1070    ----------------------------------------------------------------------
1071    Name: Matthias Blume
1072    Date: 2001/11/21 16:35:00 EST
1073    Tag: blume-20011121-foot-in-mouth
1074    Description:
1075    
1076    Removed the "Release_110_37" tag because of a serious bug.
1077    This will be re-tagged once the bug is fixed.
1078    
1079    ----------------------------------------------------------------------
1080    Name: Matthias Blume
1081    Date: 2001/11/21 16:14:00 EST
1082    Tag: blume-20011121-forgottenfile
1083    Description:
1084    
1085    Forgot to add a file.  (Just a .tex-file -- part of
1086    the CM manual source.)
1087    
1088    ----------------------------------------------------------------------
1089    Name: Matthias Blume
1090    Date: 2001/11/21 16:10:00 EST
1091    Tag: blume-20011121-invalid_110_37
1092    Description:
1093    
1094    Note: I removed the original tag "Release_110_37" from this commit
1095          because we found a serious bug in all non-x86 backends.
1096          - Matthias
1097    
1098    1. Modifications to the SML/NJ code generator and to the runtime system
1099       so that code object name strings are directly inserted into code
1100       objects at code generation time.  The only business the runtime system
1101       has with this is now to read the name strings on occasions.
1102       (The encoding of the name string has also changed somewhat.)
1103    
1104    2. CM now implements a simple "set calculus" for specifying export lists.
1105       In particular, it is now possible to refer to the export lists of
1106       other libraries/groups/sources and form unions as well as differences.
1107       See the latest CM manual for details.
1108    
1109    3. An separate notion of "proxy" libraries has again be eliminated from
1110       CM's model.  (Proxy libraries are now simply a special case of using
1111       the export list calculus.)
1112    
1113    4. Some of the existing libraries now take advantage of the new set
1114       calculus.
1115       (Notice that not all libraries have been converted because some
1116       of the existing .cm-files are supposed to be backward compatible
1117       with 110.0.x.)
1118    
1119    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
1120       "General.exnMessage"!  The former relies on a certain hook to be
1121       initialized, and that often does not happen in the stand-alone case.)
1122    
1123    ----------------------------------------------------------------------
1124    Name: Lal George
1125    Date: 2001/11/21  13:56:18 EST
1126    Tag: george-2001121-pseudo-ops
1127    Description:
1128    
1129      Implemented a complete redesign of MLRISC pseudo-ops. Now there
1130      ought to never be any question of incompatabilities with
1131      pseudo-op syntax expected by host assemblers.
1132    
1133      For now, only modules supporting GAS syntax are implemented
1134      but more should follow, such as MASM, and vendor assembler
1135      syntax, e.g. IBM as, Sun as, etc.
1136    
1137    ----------------------------------------------------------------------
1138    Name: Matthias Blume
1139    Date: 2001/11/14 11:52:00 EST
1140    Tag: blume-20011114-srcname
1141    Description:
1142    
1143    1. Routed the name of the current source file to mlriscgen where it
1144       should be directly emitted into the code object.  (This last part
1145       is yet to be done.)
1146    
1147    2. Some cleanup of the pgraph code to make it match the proposal that
1148       I put out the other day.  (The proposal notwithstanding, things are
1149       still in flux here.)
1150    
1151    ----------------------------------------------------------------------
1152    Name: Lal George
1153    Date: 2001/11/14 09:44:04 EST
1154    Tag:
1155    Description:
1156    
1157      Fix for a backpatching bug reported by Allen.
1158    
1159      Because the boundary between short and long span-dependent
1160      instructions is +/- 128, there are an astounding number of
1161      span-dependent instructions whose size is over estimated.
1162    
1163      Allen came up with the idea of letting the size of span
1164      dependent instructions be non-monotonic, for a maxIter
1165      number of times, after which the size must be monotonically
1166      increasing.
1167    
1168      This table shows the number of span-dependent instructions
1169      whose size was over-estimated as a function of maxIter, for the
1170      file Parse/parse/ml.grm.sml:
1171    
1172         maxIter            # of instructions:
1173            10                      687
1174            20                      438
1175            30                      198
1176            40                        0
1177    
1178      In compiling the compiler, there is no significant difference in
1179      compilation speed between maxIter=10 and maxIter=40. Actually,
1180      my measurements showed that maxIter=40 was a tad faster than
1181      maxIter=10! Also 96% of the  files in the compiler reach a fix
1182      point within 13 iterations, so fixing maxIter at 40, while high,
1183      is okay.
1184    
1185    ----------------------------------------------------------------------
1186    Name: Matthias Blume
1187    Date: 2001/10/31 15:25:00 EST
1188    Tag: blume-20011031-pgraph
1189    Description:
1190    
1191    CKIT:
1192    * Changed the "Function" constructor of type Ast.ctype to carry optional
1193      argument identifiers.
1194    * Changed the return type of TypeUtil.getFunction accordingly.
1195    * Type equality ignores the argument names.
1196    * TypeUtil.composite tries to preserve argument names but gives up quickly
1197      if there is a mismatch.
1198    
1199    installation script:
1200    * attempts to use "curl" if available (unless "wget" is available as well)
1201    
1202    CM:
1203    * has an experimental implementation of "portable graphs" which I will
1204      soon propose as an implementation-independent library format
1205    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
1206    
1207    NLFFI-LIB:
1208    * some cleanup (all cosmetic)
1209    
1210    NLFFIGEN:
1211    * temporarily disabled the mechanism that suppresses ML output for
1212      C definitions whose identifiers start with an underscore character
1213    * generate val bindings for enum constants
1214    * user can request that only one style (light or heavy) is being used;
1215      default is to use both (command-line arguments: -heavy and -light)
1216    * fixed bug in handling of function types involving incomplete pointers
1217    * generate ML entry points that take record arguments (i.e., using
1218      named arguments) for C functions that have a prototype with named
1219      arguments
1220      (see changes to CKIT)
1221    
1222    ----------------------------------------------------------------------
1223    Name: Allen Leung
1224    Date: 2001/10/27 20:34:00 EDT
1225    Tag: leunga-20011027-x86-fast-fp-call
1226    Description:
1227    
1228       Fixed the bug described in blume-20010920-slowfp.
1229    
1230       The fix involves
1231          1. generating FCOPYs in FSTP in ia32-svid
1232          2. marking a CALL with the appropriate annotation
1233    
1234    ----------------------------------------------------------------------
1235    Name: Matthias Blume
1236    Date: 2001/10/16 11:32:00 EDT
1237    Tag: blume-20011016-netbsd
1238    Description:
1239    
1240    Underscore patch from Chris Richards (fixing problem with compiling
1241    runtime system under recent NetBSD).
1242    
1243    ----------------------------------------------------------------------
1244    Name: Allen Leung
1245    Date: 2001/10/12 17:18:32 EDT 2001
1246    Tag: leung-20011012-x86-printflowgraph
1247    Description:
1248    
1249    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
1250    
1251    ----------------------------------------------------------------------
1252    Name: Lal George
1253    Date: 2001/10/11 23:51:34 EDT
1254    Tag: george-20011011-too-many-instrs
1255    Description:
1256    
1257    The representation of a program point never expected to see more
1258    than 65536 instructions in a basic block!
1259    
1260    ----------------------------------------------------------------------
1261    Name: Lal George
1262    Date: 2001/10/09 09:41:37 EDT
1263    Tag: george-20011008-mlrisc-labels
1264    Description:
1265    
1266    Changed the machine description files to support printing of
1267    local and global labels in assembly code, based on host assembler
1268    conventions.
1269    
1270    ----------------------------------------------------------------------
1271    Name: Matthias Blume
1272    Date: 2001/09/25 15:25:00 EDT
1273    Tag: blume-20010925-exninfo
1274    Description:
1275    
1276    I provided a non-hook implementation of exnName (at the toplevel) and
1277    made the "dummy" implementation of exnMessage (at the toplevel) more
1278    useful: if nothing gets "hooked in", then at least you are going to
1279    see the exception name and a message indicating why you don't see more.
1280    
1281    [For the time being, programs that need exnMessage and want to use
1282    ml-build should either use General.exnMessage (strongly recommended) or
1283    refer to structure General at some other point so that CM sees a
1284    static dependency.]
1285    
1286    [Similar remarks go for "print" and "use":  If you want to use their
1287    functionality in stand-alone programs generated by ml-build, then use
1288    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
1289    
1290    ----------------------------------------------------------------------
1291    Name: Matthias Blume
1292    Date: 2001/09/20 17:28:00 EDT
1293    Tag: blume-20010920-slowfp
1294    Description:
1295    
1296    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
1297    
1298    ----------------------------------------------------------------------
1299    Name: Matthias Blume
1300    Date: 2001/09/20 17:20:00 EDT
1301    Tag: blume-20010920-canonicalpaths
1302    Description:
1303    
1304    0. Updated the BOOT file (something that I forgot to do earlier).
1305    
1306    1. Small internal change to CM so that it avoids "/../" in filenames
1307       as much as possible (but only where it is safe).
1308    
1309    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
1310       that arguments that contain delimiters are passed through correctly.
1311       This change also means that all "special" arguments of the form
1312       @SMLxxx... must come first.
1313    
1314    3. Changed install script to put relative anchor names for tool commands
1315       into pathconfig.
1316    
1317    ----------------------------------------------------------------------
1318    Name: Matthias Blume
1319    Date: 2001/09/18 15:35:00 EDT
1320    Tag: blume-20010918-readme11036
1321    Description:
1322    
1323    Added README files.
1324    
1325    ----------------------------------------------------------------------
1326    Name: Matthias Blume
1327    Date: 2001/09/18 11:45:00 EDT
1328    Tag: Release_110_36 (retag)
1329    Description:
1330    
1331    Fixed mistake in config/preloads. Retagged as 110.36.
1332    
1333    ----------------------------------------------------------------------
1334    Name: Matthias Blume
1335    Date: 2001/09/18 09:40:00 EDT
1336    Tag: Release_110_36_orig (tag changed)
1337    Description:
1338    
1339    New version (110.36).  New bootfiles.
1340    
1341    ----------------------------------------------------------------------
1342    Name: Matthias Blume
1343    Date: 2001/09/14 16:15:00 EDT
1344    Tag: blume-20010914-x86fastfp
1345    Description:
1346    
1347    John committed some changes that Allen made, in particular a (hopefully)
1348    correctly working version of the x86-fp module.
1349    
1350    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
1351    flag to "true".  Everything seems to compile to a fixpoint ok, and
1352    "mandelbrot" speeds up by about 15%.
1353    
1354    ----------------------------------------------------------------------
1355    Name: Matthias Blume
1356    Date: 2001/09/13 11:20:00 EDT
1357    Tag: blume-20010913-minimal
1358    Description:
1359    
1360    1. Stefan Monnier's patch to fix a miscompilation problem that
1361       was brought to light by John Reppy's work on Moby.
1362    
1363    2. Implemented a minimal "structure Compiler" that contains just
1364       "version" and "architecture".  The minimal version will be
1365       available when the full version is not.  This is for backward-
1366       compatibility with code that wants to test Compiler.version.
1367    
1368    ----------------------------------------------------------------------
1369    Name: Matthias Blume
1370    Date: 2001/08/28 14:03:00 EDT
1371    Tag: blume-20010828-ml-lex
1372    Description:
1373    
1374    Fix for bug 1581, received from Neophytos Michael.
1375    
1376    ----------------------------------------------------------------------
1377    Name: Matthias Blume
1378    Date: 2001/08/27 11:20:00 EDT
1379    Tag: blume-20010827-readme11035
1380    Description:
1381    
1382    Fleshed out the README file for 110.35.
1383    
1384    ----------------------------------------------------------------------
1385    Name: Matthias Blume
1386    Date: 2001/08/24 17:10:00 EDT
1387    Tag: Release_110_35
1388    Description:
1389    
1390    New version number (110.35).  New bootfiles.
1391    
1392    ----------------------------------------------------------------------
1393    Name: Lal George
1394    Date: 2001/08/24 13:47:18 EDT 2001
1395    Tag: george-20010824-MLRISC-graphs
1396    Description:
1397    
1398     removed clusters from MLRISC completely and replaced with graphs.
1399    
1400    ----------------------------------------------------------------------
1401    Name: Matthias Blume
1402    Date: 2001/08/23 17:50:00 EDT
1403    Tag: blume-20010823-toplevel
1404    Description:
1405    
1406    - some reorganization of the code that implements various kinds of
1407      environments in the compiler (static, dynamic, symbolic, combined)
1408    - re-implemented the EnvRef module so that evalStream works properly
1409      (if the stream contains references to "use", "CM.make", etc.)
1410    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1411    
1412    ----------------------------------------------------------------------
1413    Name: Matthias Blume
1414    Date: 2001/08/20 15:50 EDT
1415    Tag: blume20010820-slipup
1416    Description:
1417    
1418    I forgot to commit a few files.  Here they are...
1419    
1420    ----------------------------------------------------------------------
1421    Name: Matthias Blume
1422    Date: 2001/08/20 15:35:00 EDT
1423    Tag: blume-20010820-debugprof
1424    Description:
1425    
1426    !!!! NEW BOOTFILES !!!!
1427    
1428    This is another round of reorganizing the compiler sources.  This
1429    time the main goal was to factor out all the "instrumentation"
1430    passes (for profiling and backtracing) into their own library.
1431    The difficulty was to do it in such a way that it does not depend
1432    on elaborate.cm but only on elabdata.cm.
1433    
1434    Therefore there have been further changes to both elaborate.cm and
1435    elabdata.cm -- more "generic" things have been moved from the former
1436    to the latter.  As a result, I was forced to split the assignment
1437    of numbers indicating "primtyc"s into two portions: SML-generic and
1438    SML/NJ-specific.  Since it would have been awkward to maintain,
1439    I bit the bullet and actually _changed_ the mapping between these
1440    numbers and primtycs.  The bottom line of this is that you need
1441    a new set of bin- and bootfiles.
1442    
1443    I have built new bootfiles for all architectures, so doing a fresh
1444    checkout and config/install.sh should be all you need.
1445    
1446    The newly created library's name is
1447    
1448        $smlnj/viscomp/debugprof.cm
1449    
1450    and its sources live under
1451    
1452        src/compiler/DebugProf
1453    
1454    ----------------------------------------------------------------------
1455    Name: Matthias Blume
1456    Date: 2001/08/15 17:15:00 EDT
1457    Tag: blume-20010815-compreorg
1458    Description:
1459    
1460    This is a first cut at reorganizing the CM libraries that make up the
1461    core of the compiler.  The idea is to separate out pieces that could
1462    be used independently by tools, e.g., the parser, the typechecker, etc.
1463    
1464    The current status is a step in this direction, but it is not quite
1465    satisfactory yet.  Expect more changes in the future.
1466    
1467    Here is the current (new) organization...
1468    
1469        What used to be $smlnj/viscomp/core.cm is now divided into
1470        six CM libraries:
1471    
1472             $smlnj/viscomp/basics.cm
1473                           /parser.cm
1474                           /elabdata.cm
1475                           /elaborate.cm
1476                           /execute.cm
1477                           /core.cm
1478    
1479        The CM files for these libraries live under src/system/smlnj/viscomp.
1480        All these libraries are proxy libraries that contain precisely
1481        one CM library component.  Here are the locations of the components
1482        (all within the src/compiler tree):
1483    
1484             Basics/basics.cm
1485             Parse/parser.cm
1486             ElabData/elabdata.cm
1487             Elaborator/elaborate.cm
1488             Execution/execute.cm
1489             core.cm
1490    
1491         [This organization is the same that has been used already
1492         for a while for the architecture-specific parts of the visible
1493         compiler and for the old version of core.cm.]
1494    
1495         As you will notice, many source files have been moved from their
1496         respective original locations to a new home in one of the above
1497         subtrees.
1498    
1499         The division of labor between the new libraries is the following:
1500    
1501             basics.cm:
1502                - Simple, basic definitions that pertain to many (or all) of
1503                  the other libraries.
1504             parser.cm:
1505                - The SML parser, producing output of type Ast.dec.
1506                - The type family for Ast is also defined and exported here.
1507             elabdata.cm:
1508                - The datatypes that describe input and output of the elaborator.
1509                  This includes types, absyn, and static environments.
1510             elaborator.cm:
1511                - The SML/NJ type checker and elaborator.
1512                  This maps an Ast.dec (with a given static environment) to
1513                  an Absyn.dec (with a new static environment).
1514                - This libraries implements certain modules that used to be
1515                  structures as functors (to remove dependencies on FLINT).
1516             execute.cm:
1517                - Everything having to do with executing binary code objects.
1518                - Dynamic environments.
1519             core.cm:
1520                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1521                - Top-level modules.
1522                - FLINT (this should eventually become its own library)
1523    
1524    Notes:
1525    
1526    I am not 100% happy with the way I separated the elaborator (and its
1527    data structures) from FLINT.  Two instances of the same problem:
1528    
1529        1. Data structures contain certain fields that carry FLINT-specific
1530           information.  I hacked around this using exn and the property list
1531           module from smlnj-lib.  But the fact that there are middle-end
1532           specific fields around at all is a bit annoying.
1533    
1534        2. The elaborator calculates certain FLINT-related information.  I tried
1535           to make this as abstract as I could using functorization, but, again,
1536           the fact that the elaborator has to perform calculations on behalf
1537           of the middle-end at all is not nice.
1538    
1539        3. Having to used exn and property lists is unfortunate because it
1540           weakens type checking.  The other alternative (parameterizing
1541           nearly *everything*) is not appealing, though.
1542    
1543    I removed the "rebinding =" warning hack because due to the new organization
1544    it was awkward to maintain it.  As a result, the compiler now issues some of
1545    these warnings when compiling init.cmi during bootstrap compilation. On
1546    the plus side, you also get a warning when you do, for example:
1547       val op = = Int32.+
1548    which was not the case up to now.
1549    
1550    I placed "assign" and "deref" into the _Core structure so that the
1551    code that deals with the "lazy" keyword can find them there.  This
1552    removes the need for having access to the primitive environment
1553    during elaboration.
1554    
1555    ----------------------------------------------------------------------
1556    Name: Matthias Blume
1557    Date: 2001/08/13
1558    Tag: blume-20010813-closures
1559    Description:
1560    
1561    This fix was sent to us by Zhong Shao.  It is supposed to improve the
1562    performance of certain loops by avoiding needless closure allocation.
1563    
1564    ----------------------------------------------------------------------
1565    Name: Lal George
1566    Date: 2001/07/31 10:03:23 EDT 2001
1567    Tag: george-20010731-x86-fmalloc
1568    Description: Fixed bug in x86 calls
1569    
1570        There was a bug where call instructions would mysteriously
1571        vanish. The call instruction had to be one that returned
1572        a floating point value.
1573    
1574    ----------------------------------------------------------------------
1575    Name: Lal George
1576    Date: 2001/07/19 16:36:29 EDT 2001
1577    Tag: george-20010719-simple-cells
1578    Description:
1579    
1580    I have dramatically simplified the interface for CELLS in MLRISC.
1581    
1582    In summary, the cells interface is broken up into three parts:
1583    
1584      1. CellsBasis : CELLS_BASIS
1585    
1586            CellsBasis is a top level structure and common for all
1587            architectures.  it contains the definitions of basic datatypes
1588            and utility  functions over these types.
1589    
1590      2. functor Cells() : CELLS
1591    
1592            Cells generates an interface for CELLS that incorporates the
1593            specific resources on the target architecture, such as the
1594            presence of special register classes, their number and size,
1595            and various useful substructures.
1596    
1597      3. <ARCH>CELLS
1598    
1599            e.g. SparcCells: SPARCCELLS
1600    
1601            <ARCH>CELLS usually contains additional bindings for special
1602            registers  on the architecture, such as:
1603    
1604                    val r0 : cell           (* register zero *)
1605                    val y : cell            (* Y register *)
1606                    val psr : cell          (* processor status register *)
1607                    ...
1608    
1609            The structure returned by applying the Cells functor is opened
1610            in this interface.
1611    
1612    The main implication of all this is that the datatypes for cells is
1613    split between CellsBasis and CELLS -- a fairly simple change for user
1614    code.
1615    
1616    In the old scheme the CELLS interface had a definitional binding of
1617    the form:
1618    
1619            signature CELLS = sig
1620    
1621               structure CellsBasis = CellsBasis
1622    
1623               ...
1624    
1625            end
1626    
1627    With all the sharing constraints that goes on in MLRISC, this old
1628    design  quickly leads to errors such as:
1629    
1630            "structure definition spec inside of sharing ... "
1631    
1632    
1633    and appears to require an unacceptable amount of sharing and where
1634    constraint hackery.
1635    
1636    I think this error message (the interaction of definitional specs and
1637    sharing) requires more explanation on our web page.
1638    
1639    ----------------------------------------------------------------------
1640    Name: Matthias Blume
1641    Date: 2001/07/19 15:00:00 EDT
1642    Tag: blume-20010719-libreorg
1643    Description:
1644    
1645    This update puts together a fairly extensive but straightforward change
1646    to the way the libraries that implement the interactive system are
1647    organized:
1648    
1649       The biggest change is the elimination of structure Compiler.  As a
1650       replacement for this structure, there is now a CM library
1651       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
1652       that exports all the substructures of the original structure Compiler
1653       directly.  So instead of saying Compiler.Foo.bar one now simply
1654       says Foo.bar.  (The CM libraries actually export a collection of
1655       structures that is richer than the collection of substructures of
1656       structure Compiler.)
1657    
1658       To make the transition smooth, there is a separate library called
1659       $smlnj/compiler/compiler.cm which puts together and exports the
1660       original structure Compiler (or at least something very close to it).
1661    
1662       There are five members of the original structure Compiler
1663       that are not exported directly but which instead became members
1664       of a new structure Backend (described by signature BACKEND).  These are:
1665       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
1666       Interact (: INTERACT), structure Machine (: MACHINE), and val
1667       architecture (: string).
1668    
1669       Structure Compiler.Version has become structure CompilerVersion.
1670    
1671       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
1672       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
1673       or x86, respectively.
1674       Each of these exports the same frontend structures that
1675       $smlnj/compiler.cm exports.  But they do not have a structure Backend
1676       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
1677       Hppa, PPC, Sparc, or X86, respectively.
1678    
1679       Library $smlnj/compiler/all.cm exports the union of the exports of
1680       $smlnj/compiler/<arch>.cm
1681    
1682       There are no structures <Arch>Compiler anymore, use
1683       $smlnj/compiler/<arch>.cm instead.
1684    
1685       Library host-compiler-0.cm is gone.  Instead, the internal library
1686       that instantiates CM is now called cm0.cm.  Selection of the host
1687       compiler (backend) is no longer done here but. (Responsibility for it
1688       now lies with $smlnj/compiler/current.cm.  This seems to be more
1689       logical.)
1690    
1691       Many individual files have been moved or renamed.  Some files have
1692       been split into multiple files, and some "dead" files have been deleted.
1693    
1694    Aside from these changes to library organization, there are also changes
1695    to the way the code itself is organized:
1696    
1697       Structure Binfile has been re-implemented in such a way that it no
1698       longer needs any knowledge of the compiler.  It exclusively deals
1699       with the details of binfile layout.  It no longer invokes the
1700       compiler (for the purpose of creating new prospective binfile
1701       content), and it no longer has any knowledge of how to interpret
1702       pickles.
1703    
1704       Structure Compile (: COMPILE) has been stripped down to the bare
1705       essentials of compilation.  It no longer deals with linking/execution.
1706       The interface has been cleaned up considerably.
1707    
1708       Utility routines for dealing with linking and execution have been
1709       moved into their own substructures.
1710    
1711       (The ultimate goal of these changes is to provide a light-weight
1712       binfile loader/linker (at least for, e.g., stable libraries) that
1713       does not require CM or the compiler to be present.)
1714    
1715    CM documentation has been updated to reflect the changes to library
1716    organization.
1717    
1718    ----------------------------------------------------------------------
1719    Name: Matthias Blume
1720    Date: 2001/07/10 17:30:00 EDT
1721    Tag: Release_110_34
1722    Description:
1723    
1724    Minor tweak to 110.34 (re-tagged):
1725    
1726      - README.html file added to CVS repository
1727      - runtime compiles properly under FreeBSD 3.X and 4.X
1728    
1729    ----------------------------------------------------------------------
1730    Name: Matthias Blume
1731    Date: 2001/07/10 17:30:00 EDT
1732    Tag: Release_110_34
1733    Description:
1734    
1735    New version number (110.34). New bootfiles.
1736    
1737    ----------------------------------------------------------------------
1738    Name: Matthias Blume
1739    Date: 2001/07/09 16:00:00 EDT
1740    Tag: blume-20010709-more-varargs
1741    Description:
1742    
1743    I changed the handling of varargs in ml-nlffigen again:
1744    The ellipsis ... will now simply be ignored (with an accompanying warning).
1745    
1746    The immediate effect is that you can actually call a varargs function
1747    from ML -- but you can't actually supply any arguments beyond the ones
1748    specified explicitly.  (For example, you can call printf with its format
1749    string, but you cannot pass additional arguments.)
1750    
1751    This behavior is only marginally more useful than the one before, but
1752    it has the advantage that a function or, more importantly, a function
1753    type never gets dropped on the floor, thus avoiding follow-up problems with
1754    other types that refer to the offending one.
1755    
1756    ----------------------------------------------------------------------
1757    Name: Matthias Blume
1758    Date: 2001/07/09 11:25:00 EDT
1759    Tag: blume-20010709-varargs
1760    Description:
1761    
1762    1. ckit-lib.cm now exports structure Error
1763    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
1764       with a warning accompanied by a source location.  Moreover, it
1765       merely skips the offending function or type and proceeds with the
1766       rest of its work.u  As a result, one can safely feed C code containing
1767       "..." to ml-nlffigen.
1768    3. There are some internal improvements to CM, providing slightly
1769       more general string substitutions in the tools subsystem.
1770    
1771    ----------------------------------------------------------------------
1772    Name: Matthias Blume
1773    Date: 2001/06/27 15:10:00 EDT
1774    Tag: blume-20010627-concur
1775    Description:
1776    
1777    Fixed a small bug in CM's handling of parallel compilation.
1778    (You could observe the bug by Control-C-interrupting an ordinary
1779    CMB.make or CM.stabilize and then attaching some compile servers.
1780    The result was that all of a sudden the previously interrupted
1781    compilation would continue on its own.  This was because of
1782    an over-optimization: CM did not bother to clean out certain queues
1783    when no servers were attached "anyway", resulting in the contents
1784    of these queues to grab control when new servers did get attached.)
1785    
1786    There is also another minor update to the CM manual.
1787    
1788    ----------------------------------------------------------------------
1789    Name: Matthias Blume
1790    Date: 2001/06/26 16:15:00 EDT
1791    Tag: blume-20010626-cmdoc
1792    Description:
1793    
1794    Minor typo fixed in CM manual (syntax diagram for libraries).
1795    
1796    ----------------------------------------------------------------------
1797    Name: Matthias Blume
1798    Date: 2001/06/25 22:55:00 EDT
1799    Tag: blume-20010625-x86pc
1800    Description:
1801    
1802    Fixed a nasty bug in the X86 assembly code that caused signal
1803    handlers to fail (crash) randomly.
1804    
1805    ----------------------------------------------------------------------
1806    Name: Matthias Blume
1807    Date: 2001/06/25 12:05:00 EDT
1808    Tag: blume-20010625-nlffigen
1809    Description:
1810    
1811    This update fixes a number of minor bugs in ml-nlffigen as reported by
1812    Nick Carter <nbc@andrew.cmu.edu>.
1813    
1814      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
1815      2. Default names for generated files are now derived from the name of
1816         the C file *without its directory*.  In particular, this causes generated
1817         files to be placed locally even if the C file is in some system directory.
1818      3. Default names for generated signatures and structures are also derived
1819         from the C file name without its directory.  This avoids silly things
1820         like "structure GL/GL".
1821         (Other silly names are still possible because ml-nlffigen does not do
1822          a thorough check of whether generated names are legal ML identifiers.
1823          When in doubt, use command line arguments to force particular names.)
1824    
1825    ----------------------------------------------------------------------
1826    Name: Matthias Blume
1827    Date: 2001/06/21 12:25:00 EDT
1828    Tag: blume-20010621-eXene
1829    Description:
1830    
1831    eXene now compiles and (sort of) works again.
1832    
1833    The library name (for version > 110.33) is $/eXene.cm.
1834    
1835    I also added an new example in src/eXene/examples/nbody.  See the
1836    README file there for details.
1837    
1838    ----------------------------------------------------------------------
1839    Name: Matthias Blume
1840    Date: 2001/06/20 16:40:00 EDT
1841    Tag: blume-20010620-cml
1842    Description:
1843    
1844    CML now compiles and works again.
1845    
1846    Libraries (for version > 110.33):
1847    
1848      $cml/cml.cm            Main CML library.
1849      $cml/basis.cm          CML's version of $/basis.cm.
1850      $cml/cml-internal.cm   Internal helper library.
1851      $cml/core-cml.cm       Internal helper library.
1852      $cml-lib/trace-cml.cm  Tracing facility.
1853      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
1854    
1855    The installer (config/install.sh) has been taught how to properly
1856    install this stuff.
1857    
1858    ----------------------------------------------------------------------
1859    Name: Matthias Blume
1860    Date: 2001/06/19 17:55:00 EDT
1861    Tag: blume-20010619-instantiate
1862    Description:
1863    
1864    This un-breaks the fix for bug 1432.
1865    (The bug was originally fixed in 110.9 but I broke it again some
1866    time after that.)
1867    
1868    ----------------------------------------------------------------------
1869    Name: Matthias Blume
1870    Date: 2001/06/19 17:25:00 EDT
1871    Tag: blume-20010619-signals
1872    Description:
1873    
1874    This should (hopefully) fix the long-standing signal handling bug.
1875    (The runtime system was constructing a continuation record with an
1876    incorrect descriptor which would cause the GC to drop data on the floor...)
1877    
1878    ----------------------------------------------------------------------
1879    Name: Matthias Blume
1880  Date: 2001/06/15 15:05:00 EDT  Date: 2001/06/15 15:05:00 EDT
1881  Tag: blume-20010615-moresparc  Tag: blume-20010615-moresparc
1882  Description:  Description:
# Line 2429  Line 4292 
4292       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
4293       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
4294       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
4295       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
4296       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
4297       Dave's hands. :)       Dave's hands. :)
4298    

Legend:
Removed from v.841  
changed lines
  Added in v.1128

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