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 939, Tue Sep 25 19:25:48 2001 UTC revision 1156, Thu Mar 21 22:01:11 2002 UTC
# Line 8  Line 8 
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  Name:
11  Date:  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: 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
967    Date: 2002/02/06 13:55:02 EST
968    Tag: george-20020206-ra-breakup
969    Description:
970    
971    1. A bug fix from Allen.
972    
973        A typo causes extra fstp %st(0)'s to be generated at compensation
974        edges, which might cause stack underflow traps at runtime.  This
975        occurs in fft where there are extraneous fstps right before the 'into'
976        trap instruction (in this case they are harmless since none of the
977        integers overflow.)
978    
979    2. Pulled out various utility modules that were embedded in the modules
980       of the register allocator. I need these modules for other purposes, but
981       they are not complete enough to put into a library (just yet).
982    ----------------------------------------------------------------------
983    Name: Matthias Blume
984    Date: 2002/01/31 16:05:00 EST
985    Tag: blume-20020131-sparc-ccalls
986    Description:
987    
988    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
989       of extra stack space by mistake.  Fixed.
990    
991    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
992    
993    ----------------------------------------------------------------------
994    Name: Allen Leung
995    Date: 2002/01/30
996    Tag: leunga-20020130-nowhere-bug-fix
997    Description:
998    
999       MLRISC bug fixes:
1000       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
1001       2. MachineInt.fromString was negating its value.
1002    
1003    ----------------------------------------------------------------------
1004    Name: Matthias Blume
1005    Date: 2002/01/29
1006    Tag: blume-20020129-INSTALL
1007    Description:
1008    
1009    - Added somewhat detailed installation instructions (file INSTALL).
1010    - Fixed curl-detection bug in config/install.sh.
1011    - It is now possible to select the URL getter using the URLGETTER
1012      environment variable:
1013    
1014          not set / "unknown"      --> automatic detection (script tries wget,
1015                                       curl, and lynx)
1016          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
1017                                       how to properly invoke them)
1018          other                    --> use $URLGETTER directly, it must take
1019                                       precisely two command-line arguments
1020                                       (source URL and destination file name)
1021    
1022    ----------------------------------------------------------------------
1023    Name: Matthias Blume
1024    Date: 2002/01/28
1025    Tag: blume-20020128-sparc-ccalls
1026    Description:
1027    
1028    - Fixed problem with calculation of "used" registers in sparc-c-calls.
1029    - Make use of the allocParam argument in sparc-c-calls.
1030    
1031    ----------------------------------------------------------------------
1032    Name: Matthias Blume
1033    Date: 2002/01/28
1034    Tag: blume-20020128-allocParam
1035    Description:
1036    
1037    John Reppy:  Changes c-calls API to accept client-callback for
1038    allocating extra stack space.
1039    me: Corresponding changes to mlriscGen (using a dummy argument that
1040        does not change the current behavior).
1041    
1042    ----------------------------------------------------------------------
1043    Name: Matthias Blume
1044    Date: 2002/01/28 12:00:00
1045    Tag: Release_110_38
1046    Description:
1047    
1048    This time for real!!!
1049    
1050    ----------------------------------------------------------------------
1051    Name: Matthias Blume
1052    Date: 2002/01/28 10:56:00 EST
1053    Tag: blume-20020128-retraction
1054    Description:
1055    
1056    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
1057       with blume-Release_110_38-retracted.)
1058    
1059    1. Fixed a problem with incorrect rounding modes in real64.sml.
1060       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
1061    
1062    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
1063       and enums fixed.  The naming of corresponding ML identifiers should
1064       now be consistent again.
1065    
1066    ----------------------------------------------------------------------
1067    Name: Allen Leung
1068    Date: 2002/01/27
1069    Tag: leunga-20020127-nowhere
1070    Description:
1071    
1072       Added a target called nowhere in the configuration scripts.
1073       Enabling this will build the MLRISC 'nowhere' tool (for translating
1074       programs with where-clauses into legal SML code) during installation.
1075    
1076    ----------------------------------------------------------------------
1077    Name: Matthias Blume
1078    Date: 2002/01/25 21:27:00 EST
1079    Tag: blume-Release_110_38-retracted
1080    Description:
1081    
1082    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
1083    
1084    README will be added later.
1085    
1086    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
1087    (Release_110_38) removed.  Reason: Last-minute bug fixes.
1088    
1089    ----------------------------------------------------------------------
1090    Name: Matthias Blume
1091    Date: 2002/01/25
1092    Tag: blume-20020125-ffi
1093    Description:
1094    
1095    A large number of tweaks and improvements to ml-nlffi-lib and
1096    ml-nlffigen:
1097    
1098       - ML represenation types have been streamlined
1099       - getter and setter functions work with concrete values, not abstract
1100         ones where possible
1101       - ml-nlffigen command line more flexible (see README file there)
1102       - some bugs have been fixed (hopefully)
1103    
1104    ----------------------------------------------------------------------
1105    Name: Lal George
1106    Date: 2002/01/24
1107    Tag: george-20020124-risc-ra-interface
1108    Description:
1109    
1110       There is a dramatic simplification in the interface to the
1111       register allocator for RISC architectures as a result of making
1112       parallel copy instructions explicit.
1113    
1114    ----------------------------------------------------------------------
1115    Name: Matthias Blume
1116    Date: 2002/01/22
1117    Tag: blume-20020122-x86-ccalls
1118    Description:
1119    
1120    Bug fix for c-calls on x86 (having to do with how char- and
1121    short-arguments are being handled).
1122    
1123    ----------------------------------------------------------------------
1124    Name: Matthias Blume
1125    Date: 2002/01/21
1126    Tag: blume-20020121-ff
1127    Description:
1128    
1129    Another day of fiddling with the FFI...
1130    
1131    1. Bug fix/workaround:  CKIT does not complain about negative array
1132       dimensions, so ml-nlffigen has to guard itself against this possibility.
1133       (Otherwise a negative dimension would send it into an infinite loop.)
1134    
1135    2. Some of the abstract types (light objects, light pointers, most "base"
1136       types) in structure C are now eqtypes.
1137    
1138    3. Added constructors and test functions for NULL function pointers.
1139    
1140    ----------------------------------------------------------------------
1141    Name: Matthias Blume
1142    Date: 2002/01/18
1143    Tag: blume-20020118-ready-for-new-release
1144    Description:
1145    
1146    Made config/srcarchiveurl point to a new place.  (Will provide boot
1147    files shortly.)
1148    
1149    Maybe we christen this to be 110.38?
1150    
1151    ----------------------------------------------------------------------
1152    Name: Matthias Blume
1153    Date: 2002/01/18
1154    Tag: blume-20020118-more-ffifiddle
1155    Description:
1156    
1157    Today's FFI fiddling:
1158    
1159      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
1160        C.Set.* that use concrete (MLRep.*) arguments and results instead
1161        of abstract ones.
1162    
1163      - Provided word-style bit operations etc. for "int" representation
1164        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
1165        and Long.
1166    
1167    ----------------------------------------------------------------------
1168    Name: Matthias Blume
1169    Date: 2002/01/18
1170    Tag: blume-20020118-use-x86-fp
1171    Description:
1172    
1173    Now that x86-fast-fp seems to be working, I turned it back on again
1174    by default.  (Seems to work fine now, even with the FFI.)
1175    
1176    Other than that, I added some documentation about the FFI to
1177    src/ml-nlffigen/README and updated the FFI test examples in
1178    src/ml-nlffi-lib/Tests/*.
1179    
1180    ----------------------------------------------------------------------
1181    Name: Allen Leung
1182    Date: 2002/01/17
1183    Tag: leunga-20020117-x86-fast-fp-call
1184    Description:
1185    
1186       1. Fixed a problem with handling return fp values when x86's fast fp
1187          mode is turned on.
1188    
1189       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
1190          of %f32.
1191    
1192       3. Added a constructor INT32lit to the ast of MLRISC tools.
1193    
1194    ----------------------------------------------------------------------
1195    Name: Matthias Blume
1196    Date: 2002/01/16
1197    Tag: blume-20020116-ffifiddle
1198    Description:
1199    
1200    More fiddling with the FFI interface:
1201    
1202     - Make constness 'c instead of rw wherever possible.  This eliminates
1203       the need for certain explicit coercions.  (However, due to ML's
1204       value polymorphism, there will still be many cases where explicit
1205       coercions are necessary.  Phantom types are not the whole answer
1206       to modeling a subtyping relationship in ML.)
1207    
1208     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
1209    
1210     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
1211       clumsy workaround for varargs problem.)
1212    
1213    ----------------------------------------------------------------------
1214    Name: Lal George
1215    Date: 2002/01/15
1216    Tag: <none>
1217    Description:
1218    
1219    1. Since COPY instructions are no longer native to the architecture,
1220       a generic functor can be used to implement the expandCopies function.
1221    
1222    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
1223       TEXT segment.
1224    
1225    ----------------------------------------------------------------------
1226    Name: Matthias Blume
1227    Date: 2002/01/15
1228    Tag: blume-20020115-ffiupdates
1229    Description:
1230    
1231    1. Fix for bug resulting in single-precision float values being returned
1232       incorrectly from FFI calls.
1233    
1234    2. Small modifications to C FFI API:
1235    
1236        - memory-allocation routines return straight objects (no options)
1237          and raise an exception in out-of-memory situations
1238        - unsafe extensions to cast between function pointers and pointers
1239          from/to ints
1240        - added structure C_Debug as an alternative to structure C where
1241          pointer-dereferencing (|*| and |*!) always check for null-pointers
1242        - added open_lib' to DynLinkage;  open_lib' works like open_lib
1243          but also takes a (possibly empty) list of existing library handles
1244          that the current library depends on
1245    
1246    ----------------------------------------------------------------------
1247    Name: Matthias Blume
1248    Date: 2002/01/10
1249    Tag: blume-20020110-newffigen
1250    Description:
1251    
1252    1. Updates to portable graph code.
1253    
1254    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
1255       more scalable now so that even huge interfaces such as the one
1256       for GTK compile in finite time and space. :-)
1257       See src/ml-nlffigen/README for details on what's new.
1258    
1259    ----------------------------------------------------------------------
1260    Name: Lal George
1261    Date: 2001/01/09 14:31:35 EST 2002
1262    Tag: george-20011206-rm-native-copy
1263    Description:
1264    
1265            Removed the native COPY and FCOPY instructions
1266            from all the architectures and replaced it with the
1267            explicit COPY instruction from the previous commit.
1268    
1269            It is now possible to simplify many of the optimizations
1270            modules that manipulate copies. This has not been
1271            done in this change.
1272    
1273    ----------------------------------------------------------------------
1274    Name: Lal George
1275    Date: 2001/12/06 16:50:13 EST 2001
1276    Tag: george-20011206-mlrisc-instruction
1277    Description:
1278    
1279    Changed the representation of instructions from being fully abstract
1280    to being partially concrete. That is to say:
1281    
1282      from
1283            type instruction
1284    
1285      to
1286            type instr                              (* machine instruction *)
1287    
1288            datatype instruction =
1289                LIVE of {regs: C.cellset, spilled: C.cellset}
1290              | KILL of {regs: C.cellset, spilled: C.cellset}
1291              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1292              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1293              | INSTR of instr
1294    
1295    This makes the handling of certain special instructions that appear on
1296    all architectures easier and uniform.
1297    
1298    LIVE and KILL say that a list of registers are live or killed at the
1299    program point where they appear. No spill code is generated when an
1300    element of the 'regs' field is spilled, but the register is moved to
1301    the 'spilled' (which is present, more for debugging than anything else).
1302    
1303    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1304    We used to generate:
1305    
1306            DEFFREG f1
1307            f1 := f2 + f3
1308            trapb
1309    
1310    but now generate:
1311    
1312            f1 := f2 + f3
1313            trapb
1314            LIVE {regs=[f1,f2,f3], spilled=[]}
1315    
1316    Furthermore, the DEFFREG (hack) required that all floating point instruction
1317    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1318    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1319    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1320    this architecture).
1321    
1322    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1323    all the architectures. This will result in further simplification of the
1324    register allocator that must be aware of them for coalescing purposes, and
1325    will also simplify certain aspects of the machine description that provides
1326    callbacks related to parallel copies.
1327    
1328    ANNOTATION should be obvious, and now INSTR represents the honest to God
1329    machine instruction set!
1330    
1331    The <arch>/instructions/<arch>Instr.sml files define certain utility
1332    functions for making porting easier -- essentially converting upper case
1333    to lower case. All machine instructions (of type instr) are in upper case,
1334    and the lower case form generates an MLRISC instruction. For example on
1335    the alpha we have:
1336    
1337      datatype instr =
1338         LDA of {r:cell, b:cell, d:operand}
1339       | ...
1340    
1341      val lda : {r:cell, b:cell, d:operand} -> instruction
1342        ...
1343    
1344    where lda is just (INSTR o LDA), etc.
1345    
1346    ----------------------------------------------------------------------
1347    Name: Matthias Blume
1348    Date: 2001/11/22 21:40:00 EST
1349    Tag: Release_110_37
1350    Description:
1351    
1352    Release 110.37.  This time for real.
1353    
1354    ----------------------------------------------------------------------
1355    Name: Matthias Blume
1356    Date: 2001/11/21 16:35:00 EST
1357    Tag: blume-20011121-foot-in-mouth
1358    Description:
1359    
1360    Removed the "Release_110_37" tag because of a serious bug.
1361    This will be re-tagged once the bug is fixed.
1362    
1363    ----------------------------------------------------------------------
1364    Name: Matthias Blume
1365    Date: 2001/11/21 16:14:00 EST
1366    Tag: blume-20011121-forgottenfile
1367    Description:
1368    
1369    Forgot to add a file.  (Just a .tex-file -- part of
1370    the CM manual source.)
1371    
1372    ----------------------------------------------------------------------
1373    Name: Matthias Blume
1374    Date: 2001/11/21 16:10:00 EST
1375    Tag: blume-20011121-invalid_110_37
1376    Description:
1377    
1378    Note: I removed the original tag "Release_110_37" from this commit
1379          because we found a serious bug in all non-x86 backends.
1380          - Matthias
1381    
1382    1. Modifications to the SML/NJ code generator and to the runtime system
1383       so that code object name strings are directly inserted into code
1384       objects at code generation time.  The only business the runtime system
1385       has with this is now to read the name strings on occasions.
1386       (The encoding of the name string has also changed somewhat.)
1387    
1388    2. CM now implements a simple "set calculus" for specifying export lists.
1389       In particular, it is now possible to refer to the export lists of
1390       other libraries/groups/sources and form unions as well as differences.
1391       See the latest CM manual for details.
1392    
1393    3. An separate notion of "proxy" libraries has again be eliminated from
1394       CM's model.  (Proxy libraries are now simply a special case of using
1395       the export list calculus.)
1396    
1397    4. Some of the existing libraries now take advantage of the new set
1398       calculus.
1399       (Notice that not all libraries have been converted because some
1400       of the existing .cm-files are supposed to be backward compatible
1401       with 110.0.x.)
1402    
1403    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
1404       "General.exnMessage"!  The former relies on a certain hook to be
1405       initialized, and that often does not happen in the stand-alone case.)
1406    
1407    ----------------------------------------------------------------------
1408    Name: Lal George
1409    Date: 2001/11/21  13:56:18 EST
1410    Tag: george-2001121-pseudo-ops
1411    Description:
1412    
1413      Implemented a complete redesign of MLRISC pseudo-ops. Now there
1414      ought to never be any question of incompatabilities with
1415      pseudo-op syntax expected by host assemblers.
1416    
1417      For now, only modules supporting GAS syntax are implemented
1418      but more should follow, such as MASM, and vendor assembler
1419      syntax, e.g. IBM as, Sun as, etc.
1420    
1421    ----------------------------------------------------------------------
1422    Name: Matthias Blume
1423    Date: 2001/11/14 11:52:00 EST
1424    Tag: blume-20011114-srcname
1425    Description:
1426    
1427    1. Routed the name of the current source file to mlriscgen where it
1428       should be directly emitted into the code object.  (This last part
1429       is yet to be done.)
1430    
1431    2. Some cleanup of the pgraph code to make it match the proposal that
1432       I put out the other day.  (The proposal notwithstanding, things are
1433       still in flux here.)
1434    
1435    ----------------------------------------------------------------------
1436    Name: Lal George
1437    Date: 2001/11/14 09:44:04 EST
1438    Tag:
1439    Description:
1440    
1441      Fix for a backpatching bug reported by Allen.
1442    
1443      Because the boundary between short and long span-dependent
1444      instructions is +/- 128, there are an astounding number of
1445      span-dependent instructions whose size is over estimated.
1446    
1447      Allen came up with the idea of letting the size of span
1448      dependent instructions be non-monotonic, for a maxIter
1449      number of times, after which the size must be monotonically
1450      increasing.
1451    
1452      This table shows the number of span-dependent instructions
1453      whose size was over-estimated as a function of maxIter, for the
1454      file Parse/parse/ml.grm.sml:
1455    
1456         maxIter            # of instructions:
1457            10                      687
1458            20                      438
1459            30                      198
1460            40                        0
1461    
1462      In compiling the compiler, there is no significant difference in
1463      compilation speed between maxIter=10 and maxIter=40. Actually,
1464      my measurements showed that maxIter=40 was a tad faster than
1465      maxIter=10! Also 96% of the  files in the compiler reach a fix
1466      point within 13 iterations, so fixing maxIter at 40, while high,
1467      is okay.
1468    
1469    ----------------------------------------------------------------------
1470    Name: Matthias Blume
1471    Date: 2001/10/31 15:25:00 EST
1472    Tag: blume-20011031-pgraph
1473    Description:
1474    
1475    CKIT:
1476    * Changed the "Function" constructor of type Ast.ctype to carry optional
1477      argument identifiers.
1478    * Changed the return type of TypeUtil.getFunction accordingly.
1479    * Type equality ignores the argument names.
1480    * TypeUtil.composite tries to preserve argument names but gives up quickly
1481      if there is a mismatch.
1482    
1483    installation script:
1484    * attempts to use "curl" if available (unless "wget" is available as well)
1485    
1486    CM:
1487    * has an experimental implementation of "portable graphs" which I will
1488      soon propose as an implementation-independent library format
1489    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
1490    
1491    NLFFI-LIB:
1492    * some cleanup (all cosmetic)
1493    
1494    NLFFIGEN:
1495    * temporarily disabled the mechanism that suppresses ML output for
1496      C definitions whose identifiers start with an underscore character
1497    * generate val bindings for enum constants
1498    * user can request that only one style (light or heavy) is being used;
1499      default is to use both (command-line arguments: -heavy and -light)
1500    * fixed bug in handling of function types involving incomplete pointers
1501    * generate ML entry points that take record arguments (i.e., using
1502      named arguments) for C functions that have a prototype with named
1503      arguments
1504      (see changes to CKIT)
1505    
1506    ----------------------------------------------------------------------
1507    Name: Allen Leung
1508    Date: 2001/10/27 20:34:00 EDT
1509    Tag: leunga-20011027-x86-fast-fp-call
1510    Description:
1511    
1512       Fixed the bug described in blume-20010920-slowfp.
1513    
1514       The fix involves
1515          1. generating FCOPYs in FSTP in ia32-svid
1516          2. marking a CALL with the appropriate annotation
1517    
1518    ----------------------------------------------------------------------
1519    Name: Matthias Blume
1520    Date: 2001/10/16 11:32:00 EDT
1521    Tag: blume-20011016-netbsd
1522    Description:
1523    
1524    Underscore patch from Chris Richards (fixing problem with compiling
1525    runtime system under recent NetBSD).
1526    
1527    ----------------------------------------------------------------------
1528    Name: Allen Leung
1529    Date: 2001/10/12 17:18:32 EDT 2001
1530    Tag: leung-20011012-x86-printflowgraph
1531    Description:
1532    
1533    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
1534    
1535    ----------------------------------------------------------------------
1536    Name: Lal George
1537    Date: 2001/10/11 23:51:34 EDT
1538    Tag: george-20011011-too-many-instrs
1539    Description:
1540    
1541    The representation of a program point never expected to see more
1542    than 65536 instructions in a basic block!
1543    
1544    ----------------------------------------------------------------------
1545    Name: Lal George
1546    Date: 2001/10/09 09:41:37 EDT
1547    Tag: george-20011008-mlrisc-labels
1548    Description:
1549    
1550    Changed the machine description files to support printing of
1551    local and global labels in assembly code, based on host assembler
1552    conventions.
1553    
1554    ----------------------------------------------------------------------
1555  Name: Matthias Blume  Name: Matthias Blume
1556  Date: 2001/09/25 15:25:00 EDT  Date: 2001/09/25 15:25:00 EDT
1557  Tag: blume-20010925-exninfo  Tag: blume-20010925-exninfo

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

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