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 1045, Mon Jan 28 22:13:13 2002 UTC revision 1128, Fri Mar 8 21:05:27 2002 UTC
# Line 14  Line 14 
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  Date: 2002/01/28
741  Tag: blume-20020128-sparc-ccalls  Tag: blume-20020128-sparc-ccalls
742  Description:  Description:
# Line 593  Line 1316 
1316    
1317  ----------------------------------------------------------------------  ----------------------------------------------------------------------
1318  Name: Matthias Blume  Name: Matthias Blume
 >>>>>>> 1.169  
1319  Date: 2001/09/18 15:35:00 EDT  Date: 2001/09/18 15:35:00 EDT
1320  Tag: blume-20010918-readme11036  Tag: blume-20010918-readme11036
1321  Description:  Description:

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

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