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 1054, Wed Feb 6 19:27:27 2002 UTC revision 1156, Thu Mar 21 22:01:11 2002 UTC
# Line 13  Line 13 
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: Allen Leung
17    Date: 2002/03/21 17:15:00 EST
18    Tag: leunga-20020321-x86-fp-cfg
19    Description:
20    
21      1. Recoded the buggy parts of x86-fp.
22    
23         a. All the block reordering code has been removed.
24            We now depend on the block placement phases to do this work.
25    
26         b. Critical edge splitting code has been simplified and moved into the
27            CFG modules, as where they belong.
28    
29         Both of these were quite buggy and complex.  The code is now much, much
30         simpler.
31    
32      2. X86 backend.
33    
34         a. Added instructions for 64-bit support.  Instruction selection for
35            64-bit has not been committed, however, since that
36            requires changes to MLTREE which haven't been approved by
37            Lal and John.
38    
39         b. Added support for FUCOMI and FUCOMIP when generating code for
40            PentiumPro and above.  We only generate these instructions in
41            the fast-fp mode.
42    
43         c. Added cases for JP and JNP in X86FreqProps.
44    
45      3. CFG
46    
47         CFG now has a bunch of methods for edge splitting and merging.
48    
49      4. Machine description.
50    
51         John's simplification of MLTREE_BASIS.fcond broke a few machine
52         description things:
53    
54         rtl-build.{sig,sml} and hppa.mdl fixed.
55    
56         NOTE: the machine description stuff in the repository is still broken.
57               Again, I can't put my fixes in because that involves
58               changes to MLTREE.
59    
60    ----------------------------------------------------------------------
61    Name: Matthias Blume
62    Date: 2002/03/20 15:55:00 EST
63    Tag: blume-20020320-kmp
64    Description:
65    
66    Implemented Knuth-Morris-Pratt string matching in PreString and used
67    it for String.isSubstring, Substring.isSubstring, and
68    Substring.position.
69    
70    (Might need some stress-testing.  Simple examples worked fine.)
71    
72    ----------------------------------------------------------------------
73    Name: Matthias Blume
74    Date: 2002/03/19 16:37:00 EST
75    Tag: blume-20020319-witnesses
76    Description:
77    
78    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
79    
80    This implements a generic mechanism for changing constness qualifiers
81    anywhere within big C types without resorting to outright "casts".
82    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
83    modify the constness at the outermost level.)
84    The implementation of "convert" is based on the idea of "witness"
85    values -- values that are not used by the operation but whose types
86    "testify" to their applicability.  On the implementation side, "convert"
87    is simply a projection (returning its second curried argument).  With
88    cross-module inlining, it should not result in any machine code being
89    generated.
90    
91    ----------------------------------------------------------------------
92    Name: Matthias Blume
93    Date: 2002/03/15 16:40:00 EST
94    Tag: blume-20020315-basis
95    Description:
96    
97    Provided (preliminary?) implementations for
98    
99      {String,Substring}.{concatWith,isSuffix,isSubstring}
100    
101    and
102    
103      Substring.full
104    
105    Those are in the Basis spec but they were missing in SML/NJ.
106    
107    ----------------------------------------------------------------------
108    Name: Matthias Blume
109    Date: 2002/03/14 21:30:00 EST
110    Tag: blume-20020314-controls
111    Description:
112    
113    Controls:
114    ---------
115    
116    1. Factored out the recently-added Controls : CONTROLS stuff and put
117       it into its own library $/controls-lib.cm.  The source tree for
118       this is under src/smlnj-lib/Controls.
119    
120    2. Changed the names of types and functions in this interface, so they
121       make a bit more "sense":
122    
123          module -> registry
124          'a registry -> 'a group
125    
126    3. The interface now deals in ref cells only.  The getter/setter interface
127       is (mostly) gone.
128    
129    4. Added a function that lets one register an already-existing ref cell.
130    
131    5. Made the corresponding modifications to the rest of the code so that
132       everything compiles again.
133    
134    6. Changed the implementation of Controls.MLRISC back to something closer
135       to the original.  In particular, this module (and therefore MLRISC)
136       does not depend on Controls.  There now is some link-time code in
137       int-sys.sml that registers the MLRISC controls with the Controls
138       module.
139    
140    CM:
141    ---
142    
143      * One can now specify the lambda-split aggressiveness in init.cmi.
144    
145    ----------------------------------------------------------------------
146    Name: Allen Leung
147    Date: 2002/03/13 17:30:00 EST
148    Tag: leunga-20020313-x86-fp-unary
149    Description:
150    
151    Bug fix for:
152    
153    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
154    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
155    > - fun f(x,(y,z)) = Real.~ y;
156    > [autoloading]
157    > [autoloading done]
158    >       fchsl   (%eax), 184(%esp)
159    > Error: MLRisc bug: X86MCEmitter.emitInstr
160    >
161    > uncaught exception Error
162    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
163    
164    The problem was that the code generator did not generate any fp registers
165    in this case, and the ra didn't know that it needed to run the X86FP phase to
166    translate the pseudo fp instruction.   This only happened with unary fp
167    operators in certain situations.
168    
169    ----------------------------------------------------------------------
170    Name: Matthias Blume
171    Date: 2002/03/13 14:00:00 EST
172    Tag: blume-20020313-overload-etc
173    Description:
174    
175    1. Added _overload as a synonym for overload for backward compatibility.
176       (Control.overloadKW must be true for either version to be accepted.)
177    
178    2. Fixed bug in install script that caused more things to be installed
179       than what was requested in config/targets.
180    
181    3. Made CM aware of the (_)overload construct so that autoloading
182       works.
183    
184    ----------------------------------------------------------------------
185    Name: Matthias Blume
186    Date: 2002/03/12 22:03:00 EST
187    Tag: blume-20020312-url
188    Description:
189    
190    Forgot to update BOOT and srcarchiveurl.
191    
192    ----------------------------------------------------------------------
193    Name: Matthias Blume
194    Date: 2002/03/12 17:30:00 EST
195    Tag: blume-20020312-version110392
196    Description:
197    
198    Yet another version number bump (because of small changes to the
199    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
200    
201    Changes:
202    
203      The new pid generation scheme described a few weeks ago was overly
204      complicated.  I implemented a new mechanism that is simpler and
205      provides a bit more "stability":  Once CM has seen a compilation
206      unit, it keeps its identity constant (as long as you do not delete
207      those crucial CM/GUID/* files).  This means that when you change
208      an interface, compile, then go back to the old interface, and
209      compile again, you arrive at the original pid.
210    
211      There now also is a mechanism that instructs CM to use the plain
212      environment hash as a module's pid (effectively making its GUID
213      the empty string).  For this, "noguid" must be specified as an
214      option to the .sml file in question within its .cm file.
215      This is most useful for code that is being generated by tools such
216      as ml-nlffigen (because during development programmers tend to
217      erase the tool's entire output directory tree including CM's cached
218      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
219      revert to the old, broken behavior of SML/NJ, but in specific cases
220      where there is no danger of interface confusion, its use is ok
221      (I think).
222    
223      ml-nlffigen by default generates "noguid" annotations.  They can be
224      turned off by specifying -guid in its command line.
225    
226    ----------------------------------------------------------------------
227    Name: Lal George
228    Date: 2002/03/12 12 14:42:36 EST
229    Tag: george-20020312-frequency-computation
230    Description:
231    
232    Integrated jump chaining and static block frequency into the
233    compiler. More details and numbers later.
234    
235    ----------------------------------------------------------------------
236    Name: Lal George
237    Date: 2002/03/11 11 22:38:53 EST
238    Tag: george-20020311-jump-chain-elim
239    Description:
240    
241    Tested the jump chain elimination on all architectures (except the
242    hppa).  This is on by default right now and is profitable for the
243    alpha and x86, however, it may not be profitable for the sparc and ppc
244    when compiling the compiler.
245    
246    The gc test will typically jump to a label at the end of the cluster,
247    where there is another jump to an external cluster containing the actual
248    code to invoke gc. This is to allow factoring of common gc invocation
249    sequences. That is to say, we generate:
250    
251            f:
252               testgc
253               ja   L1      % jump if above to L1
254    
255            L1:
256               jmp L2
257    
258    
259    After jump chain elimination the 'ja L1' instructions is converted to
260    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
261    up being implemented in their long form (if L2 is far away) using:
262    
263            jbe     L3      % jump if below or equal to L3
264            jmp     L2
265         L3:
266            ...
267    
268    
269    For large compilation units L2  may be far away.
270    
271    
272    ----------------------------------------------------------------------
273    Name: Matthias Blume
274    Date: 2002/03/11 13:30:00 EST
275    Tag: blume-20020311-mltreeeval
276    Description:
277    
278    A functor parameter was missing.
279    
280    ----------------------------------------------------------------------
281    Name: Allen Leung
282    Date: 2002/03/11 10:30:00 EST
283    Tag: leunga-20020311-runtime-string0
284    Description:
285    
286       The representation of the empty string now points to a
287    legal null terminated C string instead of unit.  It is now possible
288    to convert an ML string into C string with InlineT.CharVector.getData.
289    This compiles into one single machine instruction.
290    
291    ----------------------------------------------------------------------
292    Name: Allen Leung
293    Date: 2002/03/10 23:55:00 EST
294    Tag: leunga-20020310-x86-call
295    Description:
296    
297       Added machine generation for CALL instruction (relative displacement mode)
298    
299    ----------------------------------------------------------------------
300    Name: Matthias Blume
301    Date: 2002/03/08 16:05:00
302    Tag: blume-20020308-entrypoints
303    Description:
304    
305    Version number bumped to 110.39.1.  NEW BOOTFILES!
306    
307    Entrypoints: non-zero offset into a code object where execution should begin.
308    
309    - Added the notion of an entrypoint to CodeObj.
310    - Added reading/writing of entrypoint info to Binfile.
311    - Made runtime system bootloader aware of entrypoints.
312    - Use the address of the label of the first function given to mlriscGen
313      as the entrypoint.  This address is currently always 0, but it will
314      not be 0 once we turn on block placement.
315    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
316      with entry points) from mlriscGen.
317    
318    ----------------------------------------------------------------------
319    Name: Allen Leung
320    Date: 2002/03/07 20:45:00 EST
321    Tag: leunga-20020307-x86-cmov
322    Description:
323    
324       Bug fixes for CMOVcc on x86.
325    
326       1. Added machine code generation for CMOVcc
327       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
328       3. CMOVcc cannot have an immediate operand as argument.
329    
330    ----------------------------------------------------------------------
331    Name: Matthias Blume
332    Date: 2002/03/07 16:15:00 EST
333    Tag: blume-20020307-controls
334    Description:
335    
336    This is a very large but mostly boring patch which makes (almost)
337    every tuneable compiler knob (i.e., pretty much everything under
338    Control.* plus a few other things) configurable via both the command
339    line and environment variables in the style CM did its configuration
340    until now.
341    
342    Try starting sml with '-h' (or, if you are brave, '-H')
343    
344    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
345    implements the underlying generic mechanism.
346    
347    The interface to some of the existing such facilities has changed somewhat.
348    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
349    (The getFoo interface is still there for backward-compatibility, but its
350    use is deprecated.)
351    
352    The ml-build script passes -Cxxx=yyy command-line arguments through so
353    that one can now twiddle the compiler settings when using this "batch"
354    compiler.
355    
356    TODO items:
357    
358    We should go through and throw out all controls that are no longer
359    connected to anything.  Moreover, we should go through and provide
360    meaningful (and correct!) documentation strings for those controls
361    that still are connected.
362    
363    Currently, multiple calls to Controls.new are accepted (only the first
364    has any effect).  Eventually we should make sure that every control
365    is being made (via Controls.new) exactly once.  Future access can then
366    be done using Controls.acc.
367    
368    Finally, it would probably be a good idea to use the getter-setter
369    interface to controls rather than ref cells.  For the time being, both
370    styles are provided by the Controls module, but getter-setter pairs are
371    better if thread-safety is of any concern because they can be wrapped.
372    
373    *****************************************
374    
375    One bug fix: The function blockPlacement in three of the MLRISC
376    backpatch files used to be hard-wired to one of two possibilities at
377    link time (according to the value of the placementFlag).  But (I
378    think) it should rather sense the flag every time.
379    
380    *****************************************
381    
382    Other assorted changes (by other people who did not supply a HISTORY entry):
383    
384    1. the cross-module inliner now works much better (Monnier)
385    2. representation of weights, frequencies, and probabilities in MLRISC
386       changed in preparation of using those for weighted block placement
387       (Reppy, George)
388    
389    ----------------------------------------------------------------------
390    Name: Lal George
391    Date: 2002/03/07 14:44:24 EST 2002
392    Tag: george-20020307-weighted-block-placement
393    
394    Tested the weighted block placement optimization on all architectures
395    (except the hppa) using AMPL to generate the block and edge frequencies.
396    Changes were required in the machine properties to correctly
397    categorize trap instructions. There is an MLRISC flag
398    "weighted-block-placement" that can be used to enable weighted block
399    placement, but this will be ineffective without block/edge
400    frequencies (coming soon).
401    
402    
403    ----------------------------------------------------------------------
404    Name: Lal George
405    Date: 2002/03/05 17:24:48 EST
406    Tag: george-20020305-linkage-cluster
407    
408    In order to support the block placement optimization, a new cluster
409    is generated as the very first cluster (called the linkage cluster).
410    It contains a single jump to the 'real' entry point for the compilation
411    unit. Block placement has no effect on the linkage cluster itself, but
412    all the other clusters  have full freedom in the manner in which they
413    reorder blocks or functions.
414    
415    On the x86 the typical linkage code that is generated is:
416       ----------------------
417            .align 2
418       L0:
419            addl    $L1-L0, 72(%esp)
420            jmp     L1
421    
422    
423            .align  2
424       L1:
425       ----------------------
426    
427    72(%esp) is the memory location for the stdlink register. This
428    must contain the address of the CPS function being called. In the
429    above example, it contains the address of  L0; before
430    calling L1 (the real entry point for the compilation unit), it
431    must contain the address for L1, and hence
432    
433            addl $L1-L0, 72(%esp)
434    
435    I have tested this on all architectures except the hppa.The increase
436    in code size is of course negligible
437    
438    ----------------------------------------------------------------------
439    Name: Allen Leung
440    Date: 2002/03/03 13:20:00 EST
441    Tag: leunga-20020303-mlrisc-tools
442    
443      Added #[ ... ] expressions to mlrisc tools
444    
445    ----------------------------------------------------------------------
446    Name: Matthias Blume
447    Date: 2002/02/27 12:29:00 EST
448    Tag: blume-20020227-cdebug
449    Description:
450    
451    - made types in structure C and C_Debug to be equal
452    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
453    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
454    
455    ----------------------------------------------------------------------
456    Name: Matthias Blume
457    Date: 2002/02/26 12:00:00 EST
458    Tag: blume-20020226-ffi
459    Description:
460    
461    1. Fixed a minor bug in CM's "noweb" tool:
462       If numbering is turned off, then truly don't number (i.e., do not
463       supply the -L option to noweb).  The previous behavior was to supply
464       -L'' -- which caused noweb to use the "default" line numbering scheme.
465       Thanks to Chris Richards for pointing this out (and supplying the fix).
466    
467    2. Once again, I reworked some aspects of the FFI:
468    
469       A. The incomplete/complete type business:
470    
471       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
472         gone!
473       - ML types representing an incomplete type are now *equal* to
474         ML types representing their corresponding complete types (just like
475         in C).  This is still safe because ml-nlffigen will not generate
476         RTTI for incomplete types, nor will it generate functions that
477         require access to such RTTI.   But when ML code generated from both
478         incomplete and complete versions of the C type meet, the ML types
479         are trivially interoperable.
480    
481         NOTE:  These changes restore the full generality of the translation
482         (which was previously lost when I eliminated functorization)!
483    
484       B. Enum types:
485    
486       - Structure C now has a type constructor "enum" that is similar to
487         how the "su" constructor works.  However, "enum" is not a phantom
488         type because each "T enum" has values (and is isomorphic to
489         MLRep.Signed.int).
490       - There are generic access operations for enum objects (using
491         MLRep.Signed.int).
492       - ml-nlffigen will generate a structure E_foo for each "enum foo".
493         * The structure contains the definition of type "mlrep" (the ML-side
494         representation type of the enum).  Normally, mlrep is the same
495         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
496         then mlrep will be defined as a datatype -- thus facilitating
497         pattern matching on mlrep values.
498         ("-ec" will be suppressed if there are duplicate values in an
499          enumeration.)
500         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
501         will be generated for each C enum constant xxx.
502         * Conversion functions m2i and i2m convert between mlrep and
503         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
504         * Coversion functions c and ml convert between mlrep and "tag enum".
505         * Access functions (get/set) fetch and store mlrep values.
506       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
507         enumerations are merged into one single enumeration represented by
508         structure E_'.
509    
510    ----------------------------------------------------------------------
511    Name: Allen Leung
512    Date: 2002/02/25 04:45:00 EST
513    Tag: leunga-20020225-cps-spill
514    
515    This is a new implementation of the CPS spill phase.
516    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
517    In case of problems, replace it with the old file spill.sml
518    
519    The current compiler runs into some serious performance problems when
520    constructing a large record.  This can happen when we try to compile a
521    structure with many items.  Even a very simple structure like the following
522    makes the compiler slow down.
523    
524        structure Foo = struct
525           val x_1 = 0w1 : Word32.int
526           val x_2 = 0w2 : Word32.int
527           val x_3 = 0w3 : Word32.int
528           ...
529           val x_N = 0wN : Word32.int
530        end
531    
532    The following table shows the compile time, from N=1000 to N=4000,
533    with the old compiler:
534    
535    N
536    1000   CPS 100 spill                           0.04u  0.00s  0.00g
537           MLRISC ra                               0.06u  0.00s  0.05g
538              (spills = 0 reloads = 0)
539           TOTAL                                   0.63u  0.07s  0.21g
540    
541    1100   CPS 100 spill                           8.25u  0.32s  0.64g
542           MLRISC ra                               5.68u  0.59s  3.93g
543              (spills = 0 reloads = 0)
544           TOTAL                                   14.71u  0.99s  4.81g
545    
546    1500   CPS 100 spill                           58.55u  2.34s  1.74g
547           MLRISC ra                               5.54u  0.65s  3.91g
548              (spills = 543 reloads = 1082)
549           TOTAL                                   65.40u  3.13s  6.00g
550    
551    2000   CPS 100 spill                           126.69u  4.84s  3.08g
552           MLRISC ra                               0.80u  0.10s  0.55g
553              (spills = 42 reloads = 84)
554           TOTAL                                   129.42u  5.10s  4.13g
555    
556    3000   CPS 100 spill                           675.59u  19.03s  11.64g
557           MLRISC ra                               2.69u  0.27s  1.38g
558              (spills = 62 reloads = 124)
559           TOTAL                                   682.48u  19.61s  13.99g
560    
561    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
562           MLRISC ra                               4.96u  0.27s  2.72g
563              (spills = 85 reloads = 170)
564           TOTAL                                   2375.26u  57.21s  48.00g
565    
566    As you can see the old cps spill module suffers from some serious
567    performance problem.  But since I cannot decipher the old code fully,
568    instead of patching the problems up, I'm reimplementing it
569    with a different algorithm.  The new code is more modular,
570    smaller when compiled, and substantially faster
571    (O(n log n) time and O(n) space).  Timing of the new spill module:
572    
573    4000  CPS 100 spill                           0.02u  0.00s  0.00g
574          MLRISC ra                               0.25u  0.02s  0.15g
575             (spills=1 reloads=3)
576          TOTAL                                   7.74u  0.34s  1.62g
577    
578    Implementation details:
579    
580    As far as I can tell, the purpose of the CPS spill module is to make sure the
581    number of live variables at any program point (the bandwidth)
582    does not exceed a certain limit, which is determined by the
583    size of the spill area.
584    
585    When the bandwidth is too large, we decrease the register pressure by
586    packing live variables into spill records.  How we achieve this is
587    completely different than what we did in the old code.
588    
589    First, there is something about the MLRiscGen code generator
590    that we should be aware of:
591    
592    o MLRiscGen performs code motion!
593    
594       In particular, it will move floating point computations and
595       address computations involving only the heap pointer to
596       their use sites (if there is only a single use).
597       What this means is that if we have a CPS record construction
598       statement
599    
600           RECORD(k,vl,w,e)
601    
602       we should never count the new record address w as live if w
603       has only one use (which is often the case).
604    
605       We should do something similar to floating point, but the transformation
606       there is much more complex, so I won't deal with that.
607    
608    Secondly, there are now two new cps primops at our disposal:
609    
610     1. rawrecord of record_kind option
611        This pure operator allocates some uninitialized storage from the heap.
612        There are two forms:
613    
614         rawrecord NONE [INT n]  allocates a tagless record of length n
615         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
616                                     and initializes the tag.
617    
618     2. rawupdate of cty
619          rawupdate cty (v,i,x)
620          Assigns to x to the ith component of record v.
621          The storelist is not updated.
622    
623    We use these new primops for both spilling and increment record construction.
624    
625     1. Spilling.
626    
627        This is implemented with a linear scan algorithm (but generalized
628        to trees).  The algorithm will create a single spill record at the
629        beginning of the cps function and use rawupdate to spill to it,
630        and SELECT or SELp to reload from it.  So both spills and reloads
631        are fine-grain operations.  In contrast, in the old algorithm
632        "spills" have to be bundled together in records.
633    
634        Ideally, we should sink the spill record construction to where
635        it is needed.  We can even split the spill record into multiple ones
636        at the places where they are needed.  But CPS is not a good
637        representation for global code motion, so I'll keep it simple and
638        am not attempting this.
639    
640     2. Incremental record construction (aka record splitting).
641    
642        Long records with many component values which are simulatenously live
643        (recall that single use record addresses are not considered to
644         be live) are constructed with rawrecord and rawupdate.
645        We allocate space on the heap with rawrecord first, then gradually
646        fill it in with rawupdate.  This is the technique suggested to me
647        by Matthias.
648    
649        Some restrictions on when this is applicable:
650        1. It is not a VECTOR record.  The code generator currently does not handle
651           this case. VECTOR record uses double indirection like arrays.
652        2. All the record component values are defined in the same "basic block"
653           as the record constructor.  This is to prevent speculative
654           record construction.
655    
656    ----------------------------------------------------------------------
657    Name: Allen Leung
658    Date: 2002/02/22 01:02:00 EST
659    Tag: leunga-20020222-mlrisc-tools
660    
661    Minor bug fixes in the parser and rewriter
662    
663    ----------------------------------------------------------------------
664    Name: Allen Leung
665    Date: 2002/02/21 20:20:00 EST
666    Tag: leunga-20020221-peephole
667    
668    Regenerated the peephole files.  Some contained typos in the specification
669    and some didn't compile because of pretty printing bugs in the old version
670    of 'nowhere'.
671    
672    ----------------------------------------------------------------------
673    Name: Allen Leung
674    Date: 2002/02/19 20:20:00 EST
675    Tag: leunga-20020219-mlrisc-tools
676    Description:
677    
678       Minor bug fixes to the mlrisc-tools library:
679    
680       1.  Fixed up parsing colon suffixed keywords
681       2.  Added the ability to shut the error messages up
682       3.  Reimplemented the pretty printer and fixed up/improved
683           the pretty printing of handle and -> types.
684       4.  Fixed up generation of literal symbols in the nowhere tool.
685       5.  Added some SML keywords to to sml.sty
686    
687    ----------------------------------------------------------------------
688    Name: Matthias Blume
689    Date: 2002/02/19 16:20:00 EST
690    Tag: blume-20020219-cmffi
691    Description:
692    
693    A wild mix of changes, some minor, some major:
694    
695    * All C FFI-related libraries are now anchored under $c:
696        $/c.cm      --> $c/c.cm
697        $/c-int.cm  --> $c/internals/c-int.cm
698        $/memory.cm --> $c/memory/memory.cm
699    
700    * "make" tool (in CM) now treats its argument pathname slightly
701      differently:
702        1. If the native expansion is an absolute name, then before invoking
703           the "make" command on it, CM will apply OS.Path.mkRelative
704           (with relativeTo = OS.FileSys.getDir()) to it.
705        2. The argument will be passed through to subsequent phases of CM
706           processing without "going native".  In particular, if the argument
707           was an anchored path, then "make" will not lose track of that anchor.
708    
709    * Compiler backends now "know" their respective C calling conventions
710      instead of having to be told about it by ml-nlffigen.  This relieves
711      ml-nlffigen from one of its burdens.
712    
713    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
714    
715    * Export C_DEBUG and C_Debug from $c/c.cm.
716    
717    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
718      subtyping relationship between incomplete pointers and their complete
719      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
720      with the convention of instantiating 'o with ('t, 'c) obj whenever
721      the pointer target type is complete.  In the incomplete case, 'o
722      will be instantiated with some "'c iobj" -- a type obtained by
723      using one of the functors PointerToIncompleteType or PointerToCompleteType.
724    
725      Operations that work on both incomplete and complete pointer types are
726      typed as taking an 'o ptr while operations that require the target to
727      be known are typed as taking some ('t, 'c) obj ptr.
728    
729      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
730      where void is an eqtype without any values.  This makes it possible
731      to work on voidptr values using functions meant to operate on light
732      incomplete pointers.
733    
734    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
735      been vastly simplified.
736    
737    ----------------------------------------------------------------------
738    Name: Matthias Blume
739    Date: 2002/02/19 10:48:00 EST
740    Tag: blume-20020219-pqfix
741    Description:
742    
743    Applied Chris Okasaki's bug fix for priority queues.
744    
745    ----------------------------------------------------------------------
746    Name: Matthias Blume
747    Date: 2002/02/15 17:05:00
748    Tag: Release_110_39
749    Description:
750    
751    Last-minute retagging is becoming a tradition... :-(
752    
753    This is the working release 110.39.
754    
755    ----------------------------------------------------------------------
756    Name: Matthias Blume
757    Date: 2002/02/15 16:00:00 EST
758    Tag: Release_110_39-orig
759    Description:
760    
761    Working release 110.39.  New bootfiles.
762    
763    (Update: There was a small bug in the installer so it wouldn't work
764    with all shells.  So I retagged. -Matthias)
765    
766    ----------------------------------------------------------------------
767    Name: Matthias Blume
768    Date: 2002/02/15 14:17:00 EST
769    Tag: blume-20020215-showbindings
770    Description:
771    
772    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
773    the latter can be useful for exploring what bindings are available at
774    the interactive prompt.  (The first function returns only the list
775    of symbols that are really bound, the second prints those but also the
776    ones that CM's autoloading mechanism knows about.)
777    
778    ----------------------------------------------------------------------
779    Name: Matthias Blume
780    Date: 2002/02/15 12:08:00 EST
781    Tag: blume-20020215-iptrs
782    Description:
783    
784    Two improvements to ml-nlffigen:
785    
786      1. Write files only if they do not exist or if their current contents
787         do not coincide with what's being written.  (That is, avoid messing
788         with the time stamps unless absolutely necessary.)
789    
790      2. Implement a "repository" mechanism for generated files related
791         to "incomplete pointer types".   See the README file for details.
792    
793    ----------------------------------------------------------------------
794    Name: Matthias Blume
795    Date: 2002/02/14 11:50:00 EST
796    Tag: blume-20020214-quote
797    Description:
798    
799    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
800    because of the new and improved tag generation scheme.  (Thanks to Allen
801    Leung for pointing it out.)
802    
803    ----------------------------------------------------------------------
804    Name: Lal George
805    Date: 2002/02/14 09:55:27 EST 2002
806    Tag: george-20020214-isabelle-bug
807    Description:
808    
809    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
810    of Isabelle on the x86.
811    
812    From Allen:
813    -----------
814     I've found the problem:
815    
816         in ra-core.sml, I use the counter "blocked" to keep track of the
817         true number of elements in the freeze queue.  When the counter goes
818         to zero, I skip examining the queue.  But I've messed up the
819         bookkeeping in combine():
820    
821             else ();
822             case !ucol of
823               PSEUDO => (if !cntv > 0 then
824                     (if !cntu > 0 then blocked := !blocked - 1 else ();
825                                        ^^^^^^^^^^^^^^^^^^^^^^^
826                      moveu := mergeMoveList(!movev, !moveu)
827                     )
828                  else ();
829    
830         combine() is called to coalesce two nodes u and v.
831         I think I was thinking that if the move counts of u and v are both
832         greater than zero then after they are coalesced then one node is
833         removed from the freeze queue.  Apparently I was thinking that
834         both u and v are of low degree, but that's clearly not necessarily true.
835    
836    
837    02/12/2002:
838        Here's the patch.  HOL now compiles.
839    
840        I don't know how this impact on performance (compile
841        time or runtime).  This bug caused the RA (especially on the x86)
842        to go thru the potential spill phase when there are still nodes on the
843        freeze queue.
844    
845    
846    
847    
848    ----------------------------------------------------------------------
849    Name: Matthias Blume
850    Date: 2002/02/13 22:40:00 EST
851    Tag: blume-20020213-fptr-rtti
852    Description:
853    
854    Fixed a bug in ml-nlffigen that was introduced with one of the previous
855    updates.
856    
857    ----------------------------------------------------------------------
858    Name: Matthias Blume
859    Date: 2002/02/13 16:41:00 EST
860    Tag: blume-20020213-cmlpq
861    Description:
862    
863    Added new priority queue export symbols (which have just been added to
864    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
865    not compile and the installer would choke.)
866    
867    ----------------------------------------------------------------------
868    Name: Matthias Blume
869    Date: 2002/02/13 16:15:00 EST
870    Tag: blume-20020213-various
871    Description:
872    
873    1. More tweaks to ml-nlffigen:
874    
875       - better internal datastructures (resulting in slight speedup)
876       - "-match" option requires exact match
877       - "localized" gensym counters (untagged structs/unions nested within
878         other structs/unions or within typedefs get a fresh counter; their
879         tag will be prefixed by a concatenation of their parents' tags)
880       - bug fixes (related to calculation of transitive closure of types
881         to be included in the output)
882    
883    2. Minor Basis updates:
884    
885       - added implementations for List.collate and Option.app
886    
887    ----------------------------------------------------------------------
888    Name: Matthias Blume
889    Date: 2002/02/11 15:55:00 EST
890    Tag: blume-20020211-gensym
891    Description:
892    
893    Added a "-gensym" option to command line of ml-nlffigen.  This can be
894    used to specify a "stem" -- a string that is inserted in all "gensym'd"
895    names (ML structure names that correspond to unnamed C structs, unions,
896    and enums), so that separate runs of ml-nlffigen do not clash.
897    
898    ----------------------------------------------------------------------
899    Name: Matthias Blume
900    Date: 2002/02/11 12:05:00 EST
901    Tag: blume-20020211-gensml
902    Description:
903    
904    A quick fix for a problem with GenSML (in the pgraph-util library):
905    Make generation of toplevel "local" optional.  (Strictly speaking,
906    signature definitions within "local" are not legal SML.)
907    
908    Other than that: updates to INSTALL and cm/TODO.
909    
910    ----------------------------------------------------------------------
911    Name: Matthias Blume
912    Date: 2002/02/08 15:00:00 EST
913    Tag: blume-20020208-uniquepid
914    Description:
915    
916    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
917    
918    1. The installer (config/install.sh) has gotten smarter:
919    
920         - Configuration options are a bit easier to specify now
921           (in config/targets).
922         - Bug in recognizing .tar.bz2 files fixed.
923         - Installer automatically resolves dependencies between
924           configuration options (e.g., if you ask for eXene, you will
925           also get cml -- regardless whether you asked for it or not).
926         - Installer can run in "quieter mode" by setting the environment
927           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
928           "completely silent", though.
929         - Build HashCons library as part of smlnj-lib.
930    
931    2. A new scheme for assigning persistent identifiers to compilation
932       units (and, by extension, to types etc.) has been put into place.
933       This fixes a long-standing bug where types and even dynamic values
934       can get internally confused, thereby compromising type safety
935       (abstraction) and dynamic correctness.  See
936    
937         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
938    
939       for an example of how things could go wrong until now.
940    
941       The downside of the new scheme is that pids are not quite as
942       persistent as they used to be: CM will generate a fresh pid
943       for every compilation unit that it thinks it sees for the first
944       time.  That means that if you compile starting from a clean, fresh
945       source tree at two different times, you end up with different
946       binaries.
947    
948       Cutoff recompilation, however, has not been compromised because
949       CM keeps pid information in special caches between runs.
950    
951    ----------------------------------------------------------------------
952    Name: Lal George
953    Date: 2002/02/07 15:34:13 EST 2002
954    Tag: <none>
955    Description:
956    
957    Compilers that generate assembly code may produce  global labels
958    whose value is resolved at link time. The various peephole optimization
959    modules did not take this in account.
960    
961    TODO. The Labels.addrOf function should really return an option
962    type so that clients are forced to deal with this issue, rather
963    than an exception being raised.
964    
965    ----------------------------------------------------------------------
966  Name: Lal George  Name: Lal George
967  Date: 2002/02/06 13:55:02 EST  Date: 2002/02/06 13:55:02 EST
968  Tag: george-20020206-ra-breakup  Tag: george-20020206-ra-breakup

Legend:
Removed from v.1054  
changed lines
  Added in v.1156

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