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 1073, Fri Feb 15 22:07:38 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  Name: Matthias Blume
747  Date: 2002/02/15 17:05:00  Date: 2002/02/15 17:05:00
748  Tag: Release_110_39  Tag: Release_110_39

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

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