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 697, Tue Aug 8 03:33:13 2000 UTC revision 1132, Mon Mar 11 18:32:50 2002 UTC
# Line 8  Line 8 
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  Name:
11  Date:  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15    ----------------------------------------------------------------------
16    Name: Matthias Blume
17    Date: 2002/03/11 13:30:00 EST
18    Tag: blume-20020311-mltreeeval
19    Description:
20    
21    A functor parameter was missing.
22    
23    ----------------------------------------------------------------------
24    Name: Allen Leung
25    Date: 2002/03/11 10:30:00 EST
26    Tag: leunga-20020310-runtime-string0
27    Description:
28    
29       The representation of the empty string now points to a
30    legal null terminated C string instead of unit.  It is now possible
31    to convert an ML string into C string with InlineT.CharVector.getData.
32    This compiles into one single machine instruction.
33    
34    ----------------------------------------------------------------------
35    Name: Allen Leung
36    Date: 2002/03/10 23:55:00 EST
37    Tag: leunga-20020310-x86-call
38    Description:
39    
40       Added machine generation for CALL instruction (relative displacement mode)
41    
42    ----------------------------------------------------------------------
43    Name: Matthias Blume
44    Date: 2002/03/08 16:05:00
45    Tag: blume-20020308-entrypoints
46    Description:
47    
48    Version number bumped to 110.39.1.  NEW BOOTFILES!
49    
50    Entrypoints: non-zero offset into a code object where execution should begin.
51    
52    - Added the notion of an entrypoint to CodeObj.
53    - Added reading/writing of entrypoint info to Binfile.
54    - Made runtime system bootloader aware of entrypoints.
55    - Use the address of the label of the first function given to mlriscGen
56      as the entrypoint.  This address is currently always 0, but it will
57      not be 0 once we turn on block placement.
58    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
59      with entry points) from mlriscGen.
60    
61    ----------------------------------------------------------------------
62    Name: Allen Leung
63    Date: 2002/03/07 20:45:00 EST
64    Tag: leunga-20020307-x86-cmov
65    Description:
66    
67       Bug fixes for CMOVcc on x86.
68    
69       1. Added machine code generation for CMOVcc
70       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
71       3. CMOVcc cannot have an immediate operand as argument.
72    
73    ----------------------------------------------------------------------
74    Name: Matthias Blume
75    Date: 2002/03/07 16:15:00 EST
76    Tag: blume-20020307-controls
77    Description:
78    
79    This is a very large but mostly boring patch which makes (almost)
80    every tuneable compiler knob (i.e., pretty much everything under
81    Control.* plus a few other things) configurable via both the command
82    line and environment variables in the style CM did its configuration
83    until now.
84    
85    Try starting sml with '-h' (or, if you are brave, '-H')
86    
87    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
88    implements the underlying generic mechanism.
89    
90    The interface to some of the existing such facilities has changed somewhat.
91    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
92    (The getFoo interface is still there for backward-compatibility, but its
93    use is deprecated.)
94    
95    The ml-build script passes -Cxxx=yyy command-line arguments through so
96    that one can now twiddle the compiler settings when using this "batch"
97    compiler.
98    
99    TODO items:
100    
101    We should go through and throw out all controls that are no longer
102    connected to anything.  Moreover, we should go through and provide
103    meaningful (and correct!) documentation strings for those controls
104    that still are connected.
105    
106    Currently, multiple calls to Controls.new are accepted (only the first
107    has any effect).  Eventually we should make sure that every control
108    is being made (via Controls.new) exactly once.  Future access can then
109    be done using Controls.acc.
110    
111    Finally, it would probably be a good idea to use the getter-setter
112    interface to controls rather than ref cells.  For the time being, both
113    styles are provided by the Controls module, but getter-setter pairs are
114    better if thread-safety is of any concern because they can be wrapped.
115    
116    *****************************************
117    
118    One bug fix: The function blockPlacement in three of the MLRISC
119    backpatch files used to be hard-wired to one of two possibilities at
120    link time (according to the value of the placementFlag).  But (I
121    think) it should rather sense the flag every time.
122    
123    *****************************************
124    
125    Other assorted changes (by other people who did not supply a HISTORY entry):
126    
127    1. the cross-module inliner now works much better (Monnier)
128    2. representation of weights, frequencies, and probabilities in MLRISC
129       changed in preparation of using those for weighted block placement
130       (Reppy, George)
131    
132    ----------------------------------------------------------------------
133    Name: Lal George
134    Date: 2002/03/07 14:44:24 EST 2002
135    Tag: george-20020307-weighted-block-placement
136    
137    Tested the weighted block placement optimization on all architectures
138    (except the hppa) using AMPL to generate the block and edge frequencies.
139    Changes were required in the machine properties to correctly
140    categorize trap instructions. There is an MLRISC flag
141    "weighted-block-placement" that can be used to enable weighted block
142    placement, but this will be ineffective without block/edge
143    frequencies (coming soon).
144    
145    
146    ----------------------------------------------------------------------
147    Name: Lal George
148    Date: 2002/03/05 17:24:48 EST
149    Tag: george-20020305-linkage-cluster
150    
151    In order to support the block placement optimization, a new cluster
152    is generated as the very first cluster (called the linkage cluster).
153    It contains a single jump to the 'real' entry point for the compilation
154    unit. Block placement has no effect on the linkage cluster itself, but
155    all the other clusters  have full freedom in the manner in which they
156    reorder blocks or functions.
157    
158    On the x86 the typical linkage code that is generated is:
159       ----------------------
160            .align 2
161       L0:
162            addl    $L1-L0, 72(%esp)
163            jmp     L1
164    
165    
166            .align  2
167       L1:
168       ----------------------
169    
170    72(%esp) is the memory location for the stdlink register. This
171    must contain the address of the CPS function being called. In the
172    above example, it contains the address of  L0; before
173    calling L1 (the real entry point for the compilation unit), it
174    must contain the address for L1, and hence
175    
176            addl $L1-L0, 72(%esp)
177    
178    I have tested this on all architectures except the hppa.The increase
179    in code size is of course negligible
180    
181    ----------------------------------------------------------------------
182    Name: Allen Leung
183    Date: 2002/03/03 13:20:00 EST
184    Tag: leunga-20020303-mlrisc-tools
185    
186      Added #[ ... ] expressions to mlrisc tools
187    
188    ----------------------------------------------------------------------
189    Name: Matthias Blume
190    Date: 2002/02/27 12:29:00 EST
191    Tag: blume-20020227-cdebug
192    Description:
193    
194    - made types in structure C and C_Debug to be equal
195    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
196    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
197    
198    ----------------------------------------------------------------------
199    Name: Matthias Blume
200    Date: 2002/02/26 12:00:00 EST
201    Tag: blume-20020226-ffi
202    Description:
203    
204    1. Fixed a minor bug in CM's "noweb" tool:
205       If numbering is turned off, then truly don't number (i.e., do not
206       supply the -L option to noweb).  The previous behavior was to supply
207       -L'' -- which caused noweb to use the "default" line numbering scheme.
208       Thanks to Chris Richards for pointing this out (and supplying the fix).
209    
210    2. Once again, I reworked some aspects of the FFI:
211    
212       A. The incomplete/complete type business:
213    
214       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
215         gone!
216       - ML types representing an incomplete type are now *equal* to
217         ML types representing their corresponding complete types (just like
218         in C).  This is still safe because ml-nlffigen will not generate
219         RTTI for incomplete types, nor will it generate functions that
220         require access to such RTTI.   But when ML code generated from both
221         incomplete and complete versions of the C type meet, the ML types
222         are trivially interoperable.
223    
224         NOTE:  These changes restore the full generality of the translation
225         (which was previously lost when I eliminated functorization)!
226    
227       B. Enum types:
228    
229       - Structure C now has a type constructor "enum" that is similar to
230         how the "su" constructor works.  However, "enum" is not a phantom
231         type because each "T enum" has values (and is isomorphic to
232         MLRep.Signed.int).
233       - There are generic access operations for enum objects (using
234         MLRep.Signed.int).
235       - ml-nlffigen will generate a structure E_foo for each "enum foo".
236         * The structure contains the definition of type "mlrep" (the ML-side
237         representation type of the enum).  Normally, mlrep is the same
238         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
239         then mlrep will be defined as a datatype -- thus facilitating
240         pattern matching on mlrep values.
241         ("-ec" will be suppressed if there are duplicate values in an
242          enumeration.)
243         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
244         will be generated for each C enum constant xxx.
245         * Conversion functions m2i and i2m convert between mlrep and
246         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
247         * Coversion functions c and ml convert between mlrep and "tag enum".
248         * Access functions (get/set) fetch and store mlrep values.
249       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
250         enumerations are merged into one single enumeration represented by
251         structure E_'.
252    
253    ----------------------------------------------------------------------
254    Name: Allen Leung
255    Date: 2002/02/25 04:45:00 EST
256    Tag: leunga-20020225-cps-spill
257    
258    This is a new implementation of the CPS spill phase.
259    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
260    In case of problems, replace it with the old file spill.sml
261    
262    The current compiler runs into some serious performance problems when
263    constructing a large record.  This can happen when we try to compile a
264    structure with many items.  Even a very simple structure like the following
265    makes the compiler slow down.
266    
267        structure Foo = struct
268           val x_1 = 0w1 : Word32.int
269           val x_2 = 0w2 : Word32.int
270           val x_3 = 0w3 : Word32.int
271           ...
272           val x_N = 0wN : Word32.int
273        end
274    
275    The following table shows the compile time, from N=1000 to N=4000,
276    with the old compiler:
277    
278    N
279    1000   CPS 100 spill                           0.04u  0.00s  0.00g
280           MLRISC ra                               0.06u  0.00s  0.05g
281              (spills = 0 reloads = 0)
282           TOTAL                                   0.63u  0.07s  0.21g
283    
284    1100   CPS 100 spill                           8.25u  0.32s  0.64g
285           MLRISC ra                               5.68u  0.59s  3.93g
286              (spills = 0 reloads = 0)
287           TOTAL                                   14.71u  0.99s  4.81g
288    
289    1500   CPS 100 spill                           58.55u  2.34s  1.74g
290           MLRISC ra                               5.54u  0.65s  3.91g
291              (spills = 543 reloads = 1082)
292           TOTAL                                   65.40u  3.13s  6.00g
293    
294    2000   CPS 100 spill                           126.69u  4.84s  3.08g
295           MLRISC ra                               0.80u  0.10s  0.55g
296              (spills = 42 reloads = 84)
297           TOTAL                                   129.42u  5.10s  4.13g
298    
299    3000   CPS 100 spill                           675.59u  19.03s  11.64g
300           MLRISC ra                               2.69u  0.27s  1.38g
301              (spills = 62 reloads = 124)
302           TOTAL                                   682.48u  19.61s  13.99g
303    
304    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
305           MLRISC ra                               4.96u  0.27s  2.72g
306              (spills = 85 reloads = 170)
307           TOTAL                                   2375.26u  57.21s  48.00g
308    
309    As you can see the old cps spill module suffers from some serious
310    performance problem.  But since I cannot decipher the old code fully,
311    instead of patching the problems up, I'm reimplementing it
312    with a different algorithm.  The new code is more modular,
313    smaller when compiled, and substantially faster
314    (O(n log n) time and O(n) space).  Timing of the new spill module:
315    
316    4000  CPS 100 spill                           0.02u  0.00s  0.00g
317          MLRISC ra                               0.25u  0.02s  0.15g
318             (spills=1 reloads=3)
319          TOTAL                                   7.74u  0.34s  1.62g
320    
321    Implementation details:
322    
323    As far as I can tell, the purpose of the CPS spill module is to make sure the
324    number of live variables at any program point (the bandwidth)
325    does not exceed a certain limit, which is determined by the
326    size of the spill area.
327    
328    When the bandwidth is too large, we decrease the register pressure by
329    packing live variables into spill records.  How we achieve this is
330    completely different than what we did in the old code.
331    
332    First, there is something about the MLRiscGen code generator
333    that we should be aware of:
334    
335    o MLRiscGen performs code motion!
336    
337       In particular, it will move floating point computations and
338       address computations involving only the heap pointer to
339       their use sites (if there is only a single use).
340       What this means is that if we have a CPS record construction
341       statement
342    
343           RECORD(k,vl,w,e)
344    
345       we should never count the new record address w as live if w
346       has only one use (which is often the case).
347    
348       We should do something similar to floating point, but the transformation
349       there is much more complex, so I won't deal with that.
350    
351    Secondly, there are now two new cps primops at our disposal:
352    
353     1. rawrecord of record_kind option
354        This pure operator allocates some uninitialized storage from the heap.
355        There are two forms:
356    
357         rawrecord NONE [INT n]  allocates a tagless record of length n
358         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
359                                     and initializes the tag.
360    
361     2. rawupdate of cty
362          rawupdate cty (v,i,x)
363          Assigns to x to the ith component of record v.
364          The storelist is not updated.
365    
366    We use these new primops for both spilling and increment record construction.
367    
368     1. Spilling.
369    
370        This is implemented with a linear scan algorithm (but generalized
371        to trees).  The algorithm will create a single spill record at the
372        beginning of the cps function and use rawupdate to spill to it,
373        and SELECT or SELp to reload from it.  So both spills and reloads
374        are fine-grain operations.  In contrast, in the old algorithm
375        "spills" have to be bundled together in records.
376    
377        Ideally, we should sink the spill record construction to where
378        it is needed.  We can even split the spill record into multiple ones
379        at the places where they are needed.  But CPS is not a good
380        representation for global code motion, so I'll keep it simple and
381        am not attempting this.
382    
383     2. Incremental record construction (aka record splitting).
384    
385        Long records with many component values which are simulatenously live
386        (recall that single use record addresses are not considered to
387         be live) are constructed with rawrecord and rawupdate.
388        We allocate space on the heap with rawrecord first, then gradually
389        fill it in with rawupdate.  This is the technique suggested to me
390        by Matthias.
391    
392        Some restrictions on when this is applicable:
393        1. It is not a VECTOR record.  The code generator currently does not handle
394           this case. VECTOR record uses double indirection like arrays.
395        2. All the record component values are defined in the same "basic block"
396           as the record constructor.  This is to prevent speculative
397           record construction.
398    
399    ----------------------------------------------------------------------
400    Name: Allen Leung
401    Date: 2002/02/22 01:02:00 EST
402    Tag: leunga-20020222-mlrisc-tools
403    
404    Minor bug fixes in the parser and rewriter
405    
406    ----------------------------------------------------------------------
407    Name: Allen Leung
408    Date: 2002/02/21 20:20:00 EST
409    Tag: leunga-20020221-peephole
410    
411    Regenerated the peephole files.  Some contained typos in the specification
412    and some didn't compile because of pretty printing bugs in the old version
413    of 'nowhere'.
414    
415    ----------------------------------------------------------------------
416    Name: Allen Leung
417    Date: 2002/02/19 20:20:00 EST
418    Tag: leunga-20020219-mlrisc-tools
419    Description:
420    
421       Minor bug fixes to the mlrisc-tools library:
422    
423       1.  Fixed up parsing colon suffixed keywords
424       2.  Added the ability to shut the error messages up
425       3.  Reimplemented the pretty printer and fixed up/improved
426           the pretty printing of handle and -> types.
427       4.  Fixed up generation of literal symbols in the nowhere tool.
428       5.  Added some SML keywords to to sml.sty
429    
430    ----------------------------------------------------------------------
431    Name: Matthias Blume
432    Date: 2002/02/19 16:20:00 EST
433    Tag: blume-20020219-cmffi
434    Description:
435    
436    A wild mix of changes, some minor, some major:
437    
438    * All C FFI-related libraries are now anchored under $c:
439        $/c.cm      --> $c/c.cm
440        $/c-int.cm  --> $c/internals/c-int.cm
441        $/memory.cm --> $c/memory/memory.cm
442    
443    * "make" tool (in CM) now treats its argument pathname slightly
444      differently:
445        1. If the native expansion is an absolute name, then before invoking
446           the "make" command on it, CM will apply OS.Path.mkRelative
447           (with relativeTo = OS.FileSys.getDir()) to it.
448        2. The argument will be passed through to subsequent phases of CM
449           processing without "going native".  In particular, if the argument
450           was an anchored path, then "make" will not lose track of that anchor.
451    
452    * Compiler backends now "know" their respective C calling conventions
453      instead of having to be told about it by ml-nlffigen.  This relieves
454      ml-nlffigen from one of its burdens.
455    
456    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
457    
458    * Export C_DEBUG and C_Debug from $c/c.cm.
459    
460    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
461      subtyping relationship between incomplete pointers and their complete
462      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
463      with the convention of instantiating 'o with ('t, 'c) obj whenever
464      the pointer target type is complete.  In the incomplete case, 'o
465      will be instantiated with some "'c iobj" -- a type obtained by
466      using one of the functors PointerToIncompleteType or PointerToCompleteType.
467    
468      Operations that work on both incomplete and complete pointer types are
469      typed as taking an 'o ptr while operations that require the target to
470      be known are typed as taking some ('t, 'c) obj ptr.
471    
472      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
473      where void is an eqtype without any values.  This makes it possible
474      to work on voidptr values using functions meant to operate on light
475      incomplete pointers.
476    
477    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
478      been vastly simplified.
479    
480    ----------------------------------------------------------------------
481    Name: Matthias Blume
482    Date: 2002/02/19 10:48:00 EST
483    Tag: blume-20020219-pqfix
484    Description:
485    
486    Applied Chris Okasaki's bug fix for priority queues.
487    
488    ----------------------------------------------------------------------
489    Name: Matthias Blume
490    Date: 2002/02/15 17:05:00
491    Tag: Release_110_39
492    Description:
493    
494    Last-minute retagging is becoming a tradition... :-(
495    
496    This is the working release 110.39.
497    
498    ----------------------------------------------------------------------
499    Name: Matthias Blume
500    Date: 2002/02/15 16:00:00 EST
501    Tag: Release_110_39-orig
502    Description:
503    
504    Working release 110.39.  New bootfiles.
505    
506    (Update: There was a small bug in the installer so it wouldn't work
507    with all shells.  So I retagged. -Matthias)
508    
509    ----------------------------------------------------------------------
510    Name: Matthias Blume
511    Date: 2002/02/15 14:17:00 EST
512    Tag: blume-20020215-showbindings
513    Description:
514    
515    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
516    the latter can be useful for exploring what bindings are available at
517    the interactive prompt.  (The first function returns only the list
518    of symbols that are really bound, the second prints those but also the
519    ones that CM's autoloading mechanism knows about.)
520    
521    ----------------------------------------------------------------------
522    Name: Matthias Blume
523    Date: 2002/02/15 12:08:00 EST
524    Tag: blume-20020215-iptrs
525    Description:
526    
527    Two improvements to ml-nlffigen:
528    
529      1. Write files only if they do not exist or if their current contents
530         do not coincide with what's being written.  (That is, avoid messing
531         with the time stamps unless absolutely necessary.)
532    
533      2. Implement a "repository" mechanism for generated files related
534         to "incomplete pointer types".   See the README file for details.
535    
536    ----------------------------------------------------------------------
537    Name: Matthias Blume
538    Date: 2002/02/14 11:50:00 EST
539    Tag: blume-20020214-quote
540    Description:
541    
542    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
543    because of the new and improved tag generation scheme.  (Thanks to Allen
544    Leung for pointing it out.)
545    
546    ----------------------------------------------------------------------
547    Name: Lal George
548    Date: 2002/02/14 09:55:27 EST 2002
549    Tag: george-20020214-isabelle-bug
550    Description:
551    
552    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
553    of Isabelle on the x86.
554    
555    From Allen:
556    -----------
557     I've found the problem:
558    
559         in ra-core.sml, I use the counter "blocked" to keep track of the
560         true number of elements in the freeze queue.  When the counter goes
561         to zero, I skip examining the queue.  But I've messed up the
562         bookkeeping in combine():
563    
564             else ();
565             case !ucol of
566               PSEUDO => (if !cntv > 0 then
567                     (if !cntu > 0 then blocked := !blocked - 1 else ();
568                                        ^^^^^^^^^^^^^^^^^^^^^^^
569                      moveu := mergeMoveList(!movev, !moveu)
570                     )
571                  else ();
572    
573         combine() is called to coalesce two nodes u and v.
574         I think I was thinking that if the move counts of u and v are both
575         greater than zero then after they are coalesced then one node is
576         removed from the freeze queue.  Apparently I was thinking that
577         both u and v are of low degree, but that's clearly not necessarily true.
578    
579    
580    02/12/2002:
581        Here's the patch.  HOL now compiles.
582    
583        I don't know how this impact on performance (compile
584        time or runtime).  This bug caused the RA (especially on the x86)
585        to go thru the potential spill phase when there are still nodes on the
586        freeze queue.
587    
588    
589    
590    
591    ----------------------------------------------------------------------
592    Name: Matthias Blume
593    Date: 2002/02/13 22:40:00 EST
594    Tag: blume-20020213-fptr-rtti
595    Description:
596    
597    Fixed a bug in ml-nlffigen that was introduced with one of the previous
598    updates.
599    
600    ----------------------------------------------------------------------
601    Name: Matthias Blume
602    Date: 2002/02/13 16:41:00 EST
603    Tag: blume-20020213-cmlpq
604    Description:
605    
606    Added new priority queue export symbols (which have just been added to
607    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
608    not compile and the installer would choke.)
609    
610    ----------------------------------------------------------------------
611    Name: Matthias Blume
612    Date: 2002/02/13 16:15:00 EST
613    Tag: blume-20020213-various
614    Description:
615    
616    1. More tweaks to ml-nlffigen:
617    
618       - better internal datastructures (resulting in slight speedup)
619       - "-match" option requires exact match
620       - "localized" gensym counters (untagged structs/unions nested within
621         other structs/unions or within typedefs get a fresh counter; their
622         tag will be prefixed by a concatenation of their parents' tags)
623       - bug fixes (related to calculation of transitive closure of types
624         to be included in the output)
625    
626    2. Minor Basis updates:
627    
628       - added implementations for List.collate and Option.app
629    
630    ----------------------------------------------------------------------
631    Name: Matthias Blume
632    Date: 2002/02/11 15:55:00 EST
633    Tag: blume-20020211-gensym
634    Description:
635    
636    Added a "-gensym" option to command line of ml-nlffigen.  This can be
637    used to specify a "stem" -- a string that is inserted in all "gensym'd"
638    names (ML structure names that correspond to unnamed C structs, unions,
639    and enums), so that separate runs of ml-nlffigen do not clash.
640    
641    ----------------------------------------------------------------------
642    Name: Matthias Blume
643    Date: 2002/02/11 12:05:00 EST
644    Tag: blume-20020211-gensml
645    Description:
646    
647    A quick fix for a problem with GenSML (in the pgraph-util library):
648    Make generation of toplevel "local" optional.  (Strictly speaking,
649    signature definitions within "local" are not legal SML.)
650    
651    Other than that: updates to INSTALL and cm/TODO.
652    
653    ----------------------------------------------------------------------
654    Name: Matthias Blume
655    Date: 2002/02/08 15:00:00 EST
656    Tag: blume-20020208-uniquepid
657    Description:
658    
659    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
660    
661    1. The installer (config/install.sh) has gotten smarter:
662    
663         - Configuration options are a bit easier to specify now
664           (in config/targets).
665         - Bug in recognizing .tar.bz2 files fixed.
666         - Installer automatically resolves dependencies between
667           configuration options (e.g., if you ask for eXene, you will
668           also get cml -- regardless whether you asked for it or not).
669         - Installer can run in "quieter mode" by setting the environment
670           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
671           "completely silent", though.
672         - Build HashCons library as part of smlnj-lib.
673    
674    2. A new scheme for assigning persistent identifiers to compilation
675       units (and, by extension, to types etc.) has been put into place.
676       This fixes a long-standing bug where types and even dynamic values
677       can get internally confused, thereby compromising type safety
678       (abstraction) and dynamic correctness.  See
679    
680         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
681    
682       for an example of how things could go wrong until now.
683    
684       The downside of the new scheme is that pids are not quite as
685       persistent as they used to be: CM will generate a fresh pid
686       for every compilation unit that it thinks it sees for the first
687       time.  That means that if you compile starting from a clean, fresh
688       source tree at two different times, you end up with different
689       binaries.
690    
691       Cutoff recompilation, however, has not been compromised because
692       CM keeps pid information in special caches between runs.
693    
694    ----------------------------------------------------------------------
695    Name: Lal George
696    Date: 2002/02/07 15:34:13 EST 2002
697    Tag: <none>
698    Description:
699    
700    Compilers that generate assembly code may produce  global labels
701    whose value is resolved at link time. The various peephole optimization
702    modules did not take this in account.
703    
704    TODO. The Labels.addrOf function should really return an option
705    type so that clients are forced to deal with this issue, rather
706    than an exception being raised.
707    
708    ----------------------------------------------------------------------
709    Name: Lal George
710    Date: 2002/02/06 13:55:02 EST
711    Tag: george-20020206-ra-breakup
712    Description:
713    
714    1. A bug fix from Allen.
715    
716        A typo causes extra fstp %st(0)'s to be generated at compensation
717        edges, which might cause stack underflow traps at runtime.  This
718        occurs in fft where there are extraneous fstps right before the 'into'
719        trap instruction (in this case they are harmless since none of the
720        integers overflow.)
721    
722    2. Pulled out various utility modules that were embedded in the modules
723       of the register allocator. I need these modules for other purposes, but
724       they are not complete enough to put into a library (just yet).
725    ----------------------------------------------------------------------
726    Name: Matthias Blume
727    Date: 2002/01/31 16:05:00 EST
728    Tag: blume-20020131-sparc-ccalls
729    Description:
730    
731    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
732       of extra stack space by mistake.  Fixed.
733    
734    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
735    
736    ----------------------------------------------------------------------
737    Name: Allen Leung
738    Date: 2002/01/30
739    Tag: leunga-20020130-nowhere-bug-fix
740    Description:
741    
742       MLRISC bug fixes:
743       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
744       2. MachineInt.fromString was negating its value.
745    
746    ----------------------------------------------------------------------
747    Name: Matthias Blume
748    Date: 2002/01/29
749    Tag: blume-20020129-INSTALL
750    Description:
751    
752    - Added somewhat detailed installation instructions (file INSTALL).
753    - Fixed curl-detection bug in config/install.sh.
754    - It is now possible to select the URL getter using the URLGETTER
755      environment variable:
756    
757          not set / "unknown"      --> automatic detection (script tries wget,
758                                       curl, and lynx)
759          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
760                                       how to properly invoke them)
761          other                    --> use $URLGETTER directly, it must take
762                                       precisely two command-line arguments
763                                       (source URL and destination file name)
764    
765    ----------------------------------------------------------------------
766    Name: Matthias Blume
767    Date: 2002/01/28
768    Tag: blume-20020128-sparc-ccalls
769    Description:
770    
771    - Fixed problem with calculation of "used" registers in sparc-c-calls.
772    - Make use of the allocParam argument in sparc-c-calls.
773    
774    ----------------------------------------------------------------------
775    Name: Matthias Blume
776    Date: 2002/01/28
777    Tag: blume-20020128-allocParam
778    Description:
779    
780    John Reppy:  Changes c-calls API to accept client-callback for
781    allocating extra stack space.
782    me: Corresponding changes to mlriscGen (using a dummy argument that
783        does not change the current behavior).
784    
785    ----------------------------------------------------------------------
786    Name: Matthias Blume
787    Date: 2002/01/28 12:00:00
788    Tag: Release_110_38
789    Description:
790    
791    This time for real!!!
792    
793    ----------------------------------------------------------------------
794    Name: Matthias Blume
795    Date: 2002/01/28 10:56:00 EST
796    Tag: blume-20020128-retraction
797    Description:
798    
799    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
800       with blume-Release_110_38-retracted.)
801    
802    1. Fixed a problem with incorrect rounding modes in real64.sml.
803       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
804    
805    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
806       and enums fixed.  The naming of corresponding ML identifiers should
807       now be consistent again.
808    
809    ----------------------------------------------------------------------
810    Name: Allen Leung
811    Date: 2002/01/27
812    Tag: leunga-20020127-nowhere
813    Description:
814    
815       Added a target called nowhere in the configuration scripts.
816       Enabling this will build the MLRISC 'nowhere' tool (for translating
817       programs with where-clauses into legal SML code) during installation.
818    
819    ----------------------------------------------------------------------
820    Name: Matthias Blume
821    Date: 2002/01/25 21:27:00 EST
822    Tag: blume-Release_110_38-retracted
823    Description:
824    
825    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
826    
827    README will be added later.
828    
829    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
830    (Release_110_38) removed.  Reason: Last-minute bug fixes.
831    
832    ----------------------------------------------------------------------
833    Name: Matthias Blume
834    Date: 2002/01/25
835    Tag: blume-20020125-ffi
836    Description:
837    
838    A large number of tweaks and improvements to ml-nlffi-lib and
839    ml-nlffigen:
840    
841       - ML represenation types have been streamlined
842       - getter and setter functions work with concrete values, not abstract
843         ones where possible
844       - ml-nlffigen command line more flexible (see README file there)
845       - some bugs have been fixed (hopefully)
846    
847    ----------------------------------------------------------------------
848    Name: Lal George
849    Date: 2002/01/24
850    Tag: george-20020124-risc-ra-interface
851    Description:
852    
853       There is a dramatic simplification in the interface to the
854       register allocator for RISC architectures as a result of making
855       parallel copy instructions explicit.
856    
857    ----------------------------------------------------------------------
858    Name: Matthias Blume
859    Date: 2002/01/22
860    Tag: blume-20020122-x86-ccalls
861    Description:
862    
863    Bug fix for c-calls on x86 (having to do with how char- and
864    short-arguments are being handled).
865    
866    ----------------------------------------------------------------------
867    Name: Matthias Blume
868    Date: 2002/01/21
869    Tag: blume-20020121-ff
870    Description:
871    
872    Another day of fiddling with the FFI...
873    
874    1. Bug fix/workaround:  CKIT does not complain about negative array
875       dimensions, so ml-nlffigen has to guard itself against this possibility.
876       (Otherwise a negative dimension would send it into an infinite loop.)
877    
878    2. Some of the abstract types (light objects, light pointers, most "base"
879       types) in structure C are now eqtypes.
880    
881    3. Added constructors and test functions for NULL function pointers.
882    
883    ----------------------------------------------------------------------
884    Name: Matthias Blume
885    Date: 2002/01/18
886    Tag: blume-20020118-ready-for-new-release
887    Description:
888    
889    Made config/srcarchiveurl point to a new place.  (Will provide boot
890    files shortly.)
891    
892    Maybe we christen this to be 110.38?
893    
894    ----------------------------------------------------------------------
895    Name: Matthias Blume
896    Date: 2002/01/18
897    Tag: blume-20020118-more-ffifiddle
898    Description:
899    
900    Today's FFI fiddling:
901    
902      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
903        C.Set.* that use concrete (MLRep.*) arguments and results instead
904        of abstract ones.
905    
906      - Provided word-style bit operations etc. for "int" representation
907        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
908        and Long.
909    
910    ----------------------------------------------------------------------
911    Name: Matthias Blume
912    Date: 2002/01/18
913    Tag: blume-20020118-use-x86-fp
914    Description:
915    
916    Now that x86-fast-fp seems to be working, I turned it back on again
917    by default.  (Seems to work fine now, even with the FFI.)
918    
919    Other than that, I added some documentation about the FFI to
920    src/ml-nlffigen/README and updated the FFI test examples in
921    src/ml-nlffi-lib/Tests/*.
922    
923    ----------------------------------------------------------------------
924    Name: Allen Leung
925    Date: 2002/01/17
926    Tag: leunga-20020117-x86-fast-fp-call
927    Description:
928    
929       1. Fixed a problem with handling return fp values when x86's fast fp
930          mode is turned on.
931    
932       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
933          of %f32.
934    
935       3. Added a constructor INT32lit to the ast of MLRISC tools.
936    
937    ----------------------------------------------------------------------
938    Name: Matthias Blume
939    Date: 2002/01/16
940    Tag: blume-20020116-ffifiddle
941    Description:
942    
943    More fiddling with the FFI interface:
944    
945     - Make constness 'c instead of rw wherever possible.  This eliminates
946       the need for certain explicit coercions.  (However, due to ML's
947       value polymorphism, there will still be many cases where explicit
948       coercions are necessary.  Phantom types are not the whole answer
949       to modeling a subtyping relationship in ML.)
950    
951     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
952    
953     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
954       clumsy workaround for varargs problem.)
955    
956    ----------------------------------------------------------------------
957    Name: Lal George
958    Date: 2002/01/15
959    Tag: <none>
960    Description:
961    
962    1. Since COPY instructions are no longer native to the architecture,
963       a generic functor can be used to implement the expandCopies function.
964    
965    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
966       TEXT segment.
967    
968    ----------------------------------------------------------------------
969    Name: Matthias Blume
970    Date: 2002/01/15
971    Tag: blume-20020115-ffiupdates
972    Description:
973    
974    1. Fix for bug resulting in single-precision float values being returned
975       incorrectly from FFI calls.
976    
977    2. Small modifications to C FFI API:
978    
979        - memory-allocation routines return straight objects (no options)
980          and raise an exception in out-of-memory situations
981        - unsafe extensions to cast between function pointers and pointers
982          from/to ints
983        - added structure C_Debug as an alternative to structure C where
984          pointer-dereferencing (|*| and |*!) always check for null-pointers
985        - added open_lib' to DynLinkage;  open_lib' works like open_lib
986          but also takes a (possibly empty) list of existing library handles
987          that the current library depends on
988    
989    ----------------------------------------------------------------------
990    Name: Matthias Blume
991    Date: 2002/01/10
992    Tag: blume-20020110-newffigen
993    Description:
994    
995    1. Updates to portable graph code.
996    
997    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
998       more scalable now so that even huge interfaces such as the one
999       for GTK compile in finite time and space. :-)
1000       See src/ml-nlffigen/README for details on what's new.
1001    
1002    ----------------------------------------------------------------------
1003    Name: Lal George
1004    Date: 2001/01/09 14:31:35 EST 2002
1005    Tag: george-20011206-rm-native-copy
1006    Description:
1007    
1008            Removed the native COPY and FCOPY instructions
1009            from all the architectures and replaced it with the
1010            explicit COPY instruction from the previous commit.
1011    
1012            It is now possible to simplify many of the optimizations
1013            modules that manipulate copies. This has not been
1014            done in this change.
1015    
1016    ----------------------------------------------------------------------
1017    Name: Lal George
1018    Date: 2001/12/06 16:50:13 EST 2001
1019    Tag: george-20011206-mlrisc-instruction
1020    Description:
1021    
1022    Changed the representation of instructions from being fully abstract
1023    to being partially concrete. That is to say:
1024    
1025      from
1026            type instruction
1027    
1028      to
1029            type instr                              (* machine instruction *)
1030    
1031            datatype instruction =
1032                LIVE of {regs: C.cellset, spilled: C.cellset}
1033              | KILL of {regs: C.cellset, spilled: C.cellset}
1034              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1035              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1036              | INSTR of instr
1037    
1038    This makes the handling of certain special instructions that appear on
1039    all architectures easier and uniform.
1040    
1041    LIVE and KILL say that a list of registers are live or killed at the
1042    program point where they appear. No spill code is generated when an
1043    element of the 'regs' field is spilled, but the register is moved to
1044    the 'spilled' (which is present, more for debugging than anything else).
1045    
1046    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1047    We used to generate:
1048    
1049            DEFFREG f1
1050            f1 := f2 + f3
1051            trapb
1052    
1053    but now generate:
1054    
1055            f1 := f2 + f3
1056            trapb
1057            LIVE {regs=[f1,f2,f3], spilled=[]}
1058    
1059    Furthermore, the DEFFREG (hack) required that all floating point instruction
1060    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1061    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1062    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1063    this architecture).
1064    
1065    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1066    all the architectures. This will result in further simplification of the
1067    register allocator that must be aware of them for coalescing purposes, and
1068    will also simplify certain aspects of the machine description that provides
1069    callbacks related to parallel copies.
1070    
1071    ANNOTATION should be obvious, and now INSTR represents the honest to God
1072    machine instruction set!
1073    
1074    The <arch>/instructions/<arch>Instr.sml files define certain utility
1075    functions for making porting easier -- essentially converting upper case
1076    to lower case. All machine instructions (of type instr) are in upper case,
1077    and the lower case form generates an MLRISC instruction. For example on
1078    the alpha we have:
1079    
1080      datatype instr =
1081         LDA of {r:cell, b:cell, d:operand}
1082       | ...
1083    
1084      val lda : {r:cell, b:cell, d:operand} -> instruction
1085        ...
1086    
1087    where lda is just (INSTR o LDA), etc.
1088    
1089    ----------------------------------------------------------------------
1090    Name: Matthias Blume
1091    Date: 2001/11/22 21:40:00 EST
1092    Tag: Release_110_37
1093    Description:
1094    
1095    Release 110.37.  This time for real.
1096    
1097    ----------------------------------------------------------------------
1098    Name: Matthias Blume
1099    Date: 2001/11/21 16:35:00 EST
1100    Tag: blume-20011121-foot-in-mouth
1101    Description:
1102    
1103    Removed the "Release_110_37" tag because of a serious bug.
1104    This will be re-tagged once the bug is fixed.
1105    
1106    ----------------------------------------------------------------------
1107    Name: Matthias Blume
1108    Date: 2001/11/21 16:14:00 EST
1109    Tag: blume-20011121-forgottenfile
1110    Description:
1111    
1112    Forgot to add a file.  (Just a .tex-file -- part of
1113    the CM manual source.)
1114    
1115    ----------------------------------------------------------------------
1116    Name: Matthias Blume
1117    Date: 2001/11/21 16:10:00 EST
1118    Tag: blume-20011121-invalid_110_37
1119    Description:
1120    
1121    Note: I removed the original tag "Release_110_37" from this commit
1122          because we found a serious bug in all non-x86 backends.
1123          - Matthias
1124    
1125    1. Modifications to the SML/NJ code generator and to the runtime system
1126       so that code object name strings are directly inserted into code
1127       objects at code generation time.  The only business the runtime system
1128       has with this is now to read the name strings on occasions.
1129       (The encoding of the name string has also changed somewhat.)
1130    
1131    2. CM now implements a simple "set calculus" for specifying export lists.
1132       In particular, it is now possible to refer to the export lists of
1133       other libraries/groups/sources and form unions as well as differences.
1134       See the latest CM manual for details.
1135    
1136    3. An separate notion of "proxy" libraries has again be eliminated from
1137       CM's model.  (Proxy libraries are now simply a special case of using
1138       the export list calculus.)
1139    
1140    4. Some of the existing libraries now take advantage of the new set
1141       calculus.
1142       (Notice that not all libraries have been converted because some
1143       of the existing .cm-files are supposed to be backward compatible
1144       with 110.0.x.)
1145    
1146    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
1147       "General.exnMessage"!  The former relies on a certain hook to be
1148       initialized, and that often does not happen in the stand-alone case.)
1149    
1150    ----------------------------------------------------------------------
1151    Name: Lal George
1152    Date: 2001/11/21  13:56:18 EST
1153    Tag: george-2001121-pseudo-ops
1154    Description:
1155    
1156      Implemented a complete redesign of MLRISC pseudo-ops. Now there
1157      ought to never be any question of incompatabilities with
1158      pseudo-op syntax expected by host assemblers.
1159    
1160      For now, only modules supporting GAS syntax are implemented
1161      but more should follow, such as MASM, and vendor assembler
1162      syntax, e.g. IBM as, Sun as, etc.
1163    
1164    ----------------------------------------------------------------------
1165    Name: Matthias Blume
1166    Date: 2001/11/14 11:52:00 EST
1167    Tag: blume-20011114-srcname
1168    Description:
1169    
1170    1. Routed the name of the current source file to mlriscgen where it
1171       should be directly emitted into the code object.  (This last part
1172       is yet to be done.)
1173    
1174    2. Some cleanup of the pgraph code to make it match the proposal that
1175       I put out the other day.  (The proposal notwithstanding, things are
1176       still in flux here.)
1177    
1178    ----------------------------------------------------------------------
1179    Name: Lal George
1180    Date: 2001/11/14 09:44:04 EST
1181    Tag:
1182    Description:
1183    
1184      Fix for a backpatching bug reported by Allen.
1185    
1186      Because the boundary between short and long span-dependent
1187      instructions is +/- 128, there are an astounding number of
1188      span-dependent instructions whose size is over estimated.
1189    
1190      Allen came up with the idea of letting the size of span
1191      dependent instructions be non-monotonic, for a maxIter
1192      number of times, after which the size must be monotonically
1193      increasing.
1194    
1195      This table shows the number of span-dependent instructions
1196      whose size was over-estimated as a function of maxIter, for the
1197      file Parse/parse/ml.grm.sml:
1198    
1199         maxIter            # of instructions:
1200            10                      687
1201            20                      438
1202            30                      198
1203            40                        0
1204    
1205      In compiling the compiler, there is no significant difference in
1206      compilation speed between maxIter=10 and maxIter=40. Actually,
1207      my measurements showed that maxIter=40 was a tad faster than
1208      maxIter=10! Also 96% of the  files in the compiler reach a fix
1209      point within 13 iterations, so fixing maxIter at 40, while high,
1210      is okay.
1211    
1212    ----------------------------------------------------------------------
1213    Name: Matthias Blume
1214    Date: 2001/10/31 15:25:00 EST
1215    Tag: blume-20011031-pgraph
1216    Description:
1217    
1218    CKIT:
1219    * Changed the "Function" constructor of type Ast.ctype to carry optional
1220      argument identifiers.
1221    * Changed the return type of TypeUtil.getFunction accordingly.
1222    * Type equality ignores the argument names.
1223    * TypeUtil.composite tries to preserve argument names but gives up quickly
1224      if there is a mismatch.
1225    
1226    installation script:
1227    * attempts to use "curl" if available (unless "wget" is available as well)
1228    
1229    CM:
1230    * has an experimental implementation of "portable graphs" which I will
1231      soon propose as an implementation-independent library format
1232    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
1233    
1234    NLFFI-LIB:
1235    * some cleanup (all cosmetic)
1236    
1237    NLFFIGEN:
1238    * temporarily disabled the mechanism that suppresses ML output for
1239      C definitions whose identifiers start with an underscore character
1240    * generate val bindings for enum constants
1241    * user can request that only one style (light or heavy) is being used;
1242      default is to use both (command-line arguments: -heavy and -light)
1243    * fixed bug in handling of function types involving incomplete pointers
1244    * generate ML entry points that take record arguments (i.e., using
1245      named arguments) for C functions that have a prototype with named
1246      arguments
1247      (see changes to CKIT)
1248    
1249    ----------------------------------------------------------------------
1250    Name: Allen Leung
1251    Date: 2001/10/27 20:34:00 EDT
1252    Tag: leunga-20011027-x86-fast-fp-call
1253    Description:
1254    
1255       Fixed the bug described in blume-20010920-slowfp.
1256    
1257       The fix involves
1258          1. generating FCOPYs in FSTP in ia32-svid
1259          2. marking a CALL with the appropriate annotation
1260    
1261    ----------------------------------------------------------------------
1262    Name: Matthias Blume
1263    Date: 2001/10/16 11:32:00 EDT
1264    Tag: blume-20011016-netbsd
1265    Description:
1266    
1267    Underscore patch from Chris Richards (fixing problem with compiling
1268    runtime system under recent NetBSD).
1269    
1270    ----------------------------------------------------------------------
1271    Name: Allen Leung
1272    Date: 2001/10/12 17:18:32 EDT 2001
1273    Tag: leung-20011012-x86-printflowgraph
1274    Description:
1275    
1276    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
1277    
1278    ----------------------------------------------------------------------
1279    Name: Lal George
1280    Date: 2001/10/11 23:51:34 EDT
1281    Tag: george-20011011-too-many-instrs
1282    Description:
1283    
1284    The representation of a program point never expected to see more
1285    than 65536 instructions in a basic block!
1286    
1287    ----------------------------------------------------------------------
1288    Name: Lal George
1289    Date: 2001/10/09 09:41:37 EDT
1290    Tag: george-20011008-mlrisc-labels
1291    Description:
1292    
1293    Changed the machine description files to support printing of
1294    local and global labels in assembly code, based on host assembler
1295    conventions.
1296    
1297    ----------------------------------------------------------------------
1298    Name: Matthias Blume
1299    Date: 2001/09/25 15:25:00 EDT
1300    Tag: blume-20010925-exninfo
1301    Description:
1302    
1303    I provided a non-hook implementation of exnName (at the toplevel) and
1304    made the "dummy" implementation of exnMessage (at the toplevel) more
1305    useful: if nothing gets "hooked in", then at least you are going to
1306    see the exception name and a message indicating why you don't see more.
1307    
1308    [For the time being, programs that need exnMessage and want to use
1309    ml-build should either use General.exnMessage (strongly recommended) or
1310    refer to structure General at some other point so that CM sees a
1311    static dependency.]
1312    
1313    [Similar remarks go for "print" and "use":  If you want to use their
1314    functionality in stand-alone programs generated by ml-build, then use
1315    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
1316    
1317    ----------------------------------------------------------------------
1318    Name: Matthias Blume
1319    Date: 2001/09/20 17:28:00 EDT
1320    Tag: blume-20010920-slowfp
1321    Description:
1322    
1323    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
1324    
1325    ----------------------------------------------------------------------
1326    Name: Matthias Blume
1327    Date: 2001/09/20 17:20:00 EDT
1328    Tag: blume-20010920-canonicalpaths
1329    Description:
1330    
1331    0. Updated the BOOT file (something that I forgot to do earlier).
1332    
1333    1. Small internal change to CM so that it avoids "/../" in filenames
1334       as much as possible (but only where it is safe).
1335    
1336    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
1337       that arguments that contain delimiters are passed through correctly.
1338       This change also means that all "special" arguments of the form
1339       @SMLxxx... must come first.
1340    
1341    3. Changed install script to put relative anchor names for tool commands
1342       into pathconfig.
1343    
1344    ----------------------------------------------------------------------
1345    Name: Matthias Blume
1346    Date: 2001/09/18 15:35:00 EDT
1347    Tag: blume-20010918-readme11036
1348    Description:
1349    
1350    Added README files.
1351    
1352    ----------------------------------------------------------------------
1353    Name: Matthias Blume
1354    Date: 2001/09/18 11:45:00 EDT
1355    Tag: Release_110_36 (retag)
1356    Description:
1357    
1358    Fixed mistake in config/preloads. Retagged as 110.36.
1359    
1360    ----------------------------------------------------------------------
1361    Name: Matthias Blume
1362    Date: 2001/09/18 09:40:00 EDT
1363    Tag: Release_110_36_orig (tag changed)
1364    Description:
1365    
1366    New version (110.36).  New bootfiles.
1367    
1368    ----------------------------------------------------------------------
1369    Name: Matthias Blume
1370    Date: 2001/09/14 16:15:00 EDT
1371    Tag: blume-20010914-x86fastfp
1372    Description:
1373    
1374    John committed some changes that Allen made, in particular a (hopefully)
1375    correctly working version of the x86-fp module.
1376    
1377    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
1378    flag to "true".  Everything seems to compile to a fixpoint ok, and
1379    "mandelbrot" speeds up by about 15%.
1380    
1381    ----------------------------------------------------------------------
1382    Name: Matthias Blume
1383    Date: 2001/09/13 11:20:00 EDT
1384    Tag: blume-20010913-minimal
1385    Description:
1386    
1387    1. Stefan Monnier's patch to fix a miscompilation problem that
1388       was brought to light by John Reppy's work on Moby.
1389    
1390    2. Implemented a minimal "structure Compiler" that contains just
1391       "version" and "architecture".  The minimal version will be
1392       available when the full version is not.  This is for backward-
1393       compatibility with code that wants to test Compiler.version.
1394    
1395    ----------------------------------------------------------------------
1396    Name: Matthias Blume
1397    Date: 2001/08/28 14:03:00 EDT
1398    Tag: blume-20010828-ml-lex
1399    Description:
1400    
1401    Fix for bug 1581, received from Neophytos Michael.
1402    
1403    ----------------------------------------------------------------------
1404    Name: Matthias Blume
1405    Date: 2001/08/27 11:20:00 EDT
1406    Tag: blume-20010827-readme11035
1407    Description:
1408    
1409    Fleshed out the README file for 110.35.
1410    
1411    ----------------------------------------------------------------------
1412    Name: Matthias Blume
1413    Date: 2001/08/24 17:10:00 EDT
1414    Tag: Release_110_35
1415    Description:
1416    
1417    New version number (110.35).  New bootfiles.
1418    
1419    ----------------------------------------------------------------------
1420    Name: Lal George
1421    Date: 2001/08/24 13:47:18 EDT 2001
1422    Tag: george-20010824-MLRISC-graphs
1423    Description:
1424    
1425     removed clusters from MLRISC completely and replaced with graphs.
1426    
1427    ----------------------------------------------------------------------
1428    Name: Matthias Blume
1429    Date: 2001/08/23 17:50:00 EDT
1430    Tag: blume-20010823-toplevel
1431    Description:
1432    
1433    - some reorganization of the code that implements various kinds of
1434      environments in the compiler (static, dynamic, symbolic, combined)
1435    - re-implemented the EnvRef module so that evalStream works properly
1436      (if the stream contains references to "use", "CM.make", etc.)
1437    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1438    
1439    ----------------------------------------------------------------------
1440    Name: Matthias Blume
1441    Date: 2001/08/20 15:50 EDT
1442    Tag: blume20010820-slipup
1443    Description:
1444    
1445    I forgot to commit a few files.  Here they are...
1446    
1447    ----------------------------------------------------------------------
1448    Name: Matthias Blume
1449    Date: 2001/08/20 15:35:00 EDT
1450    Tag: blume-20010820-debugprof
1451    Description:
1452    
1453    !!!! NEW BOOTFILES !!!!
1454    
1455    This is another round of reorganizing the compiler sources.  This
1456    time the main goal was to factor out all the "instrumentation"
1457    passes (for profiling and backtracing) into their own library.
1458    The difficulty was to do it in such a way that it does not depend
1459    on elaborate.cm but only on elabdata.cm.
1460    
1461    Therefore there have been further changes to both elaborate.cm and
1462    elabdata.cm -- more "generic" things have been moved from the former
1463    to the latter.  As a result, I was forced to split the assignment
1464    of numbers indicating "primtyc"s into two portions: SML-generic and
1465    SML/NJ-specific.  Since it would have been awkward to maintain,
1466    I bit the bullet and actually _changed_ the mapping between these
1467    numbers and primtycs.  The bottom line of this is that you need
1468    a new set of bin- and bootfiles.
1469    
1470    I have built new bootfiles for all architectures, so doing a fresh
1471    checkout and config/install.sh should be all you need.
1472    
1473    The newly created library's name is
1474    
1475        $smlnj/viscomp/debugprof.cm
1476    
1477    and its sources live under
1478    
1479        src/compiler/DebugProf
1480    
1481    ----------------------------------------------------------------------
1482    Name: Matthias Blume
1483    Date: 2001/08/15 17:15:00 EDT
1484    Tag: blume-20010815-compreorg
1485    Description:
1486    
1487    This is a first cut at reorganizing the CM libraries that make up the
1488    core of the compiler.  The idea is to separate out pieces that could
1489    be used independently by tools, e.g., the parser, the typechecker, etc.
1490    
1491    The current status is a step in this direction, but it is not quite
1492    satisfactory yet.  Expect more changes in the future.
1493    
1494    Here is the current (new) organization...
1495    
1496        What used to be $smlnj/viscomp/core.cm is now divided into
1497        six CM libraries:
1498    
1499             $smlnj/viscomp/basics.cm
1500                           /parser.cm
1501                           /elabdata.cm
1502                           /elaborate.cm
1503                           /execute.cm
1504                           /core.cm
1505    
1506        The CM files for these libraries live under src/system/smlnj/viscomp.
1507        All these libraries are proxy libraries that contain precisely
1508        one CM library component.  Here are the locations of the components
1509        (all within the src/compiler tree):
1510    
1511             Basics/basics.cm
1512             Parse/parser.cm
1513             ElabData/elabdata.cm
1514             Elaborator/elaborate.cm
1515             Execution/execute.cm
1516             core.cm
1517    
1518         [This organization is the same that has been used already
1519         for a while for the architecture-specific parts of the visible
1520         compiler and for the old version of core.cm.]
1521    
1522         As you will notice, many source files have been moved from their
1523         respective original locations to a new home in one of the above
1524         subtrees.
1525    
1526         The division of labor between the new libraries is the following:
1527    
1528             basics.cm:
1529                - Simple, basic definitions that pertain to many (or all) of
1530                  the other libraries.
1531             parser.cm:
1532                - The SML parser, producing output of type Ast.dec.
1533                - The type family for Ast is also defined and exported here.
1534             elabdata.cm:
1535                - The datatypes that describe input and output of the elaborator.
1536                  This includes types, absyn, and static environments.
1537             elaborator.cm:
1538                - The SML/NJ type checker and elaborator.
1539                  This maps an Ast.dec (with a given static environment) to
1540                  an Absyn.dec (with a new static environment).
1541                - This libraries implements certain modules that used to be
1542                  structures as functors (to remove dependencies on FLINT).
1543             execute.cm:
1544                - Everything having to do with executing binary code objects.
1545                - Dynamic environments.
1546             core.cm:
1547                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1548                - Top-level modules.
1549                - FLINT (this should eventually become its own library)
1550    
1551    Notes:
1552    
1553    I am not 100% happy with the way I separated the elaborator (and its
1554    data structures) from FLINT.  Two instances of the same problem:
1555    
1556        1. Data structures contain certain fields that carry FLINT-specific
1557           information.  I hacked around this using exn and the property list
1558           module from smlnj-lib.  But the fact that there are middle-end
1559           specific fields around at all is a bit annoying.
1560    
1561        2. The elaborator calculates certain FLINT-related information.  I tried
1562           to make this as abstract as I could using functorization, but, again,
1563           the fact that the elaborator has to perform calculations on behalf
1564           of the middle-end at all is not nice.
1565    
1566        3. Having to used exn and property lists is unfortunate because it
1567           weakens type checking.  The other alternative (parameterizing
1568           nearly *everything*) is not appealing, though.
1569    
1570    I removed the "rebinding =" warning hack because due to the new organization
1571    it was awkward to maintain it.  As a result, the compiler now issues some of
1572    these warnings when compiling init.cmi during bootstrap compilation. On
1573    the plus side, you also get a warning when you do, for example:
1574       val op = = Int32.+
1575    which was not the case up to now.
1576    
1577    I placed "assign" and "deref" into the _Core structure so that the
1578    code that deals with the "lazy" keyword can find them there.  This
1579    removes the need for having access to the primitive environment
1580    during elaboration.
1581    
1582    ----------------------------------------------------------------------
1583    Name: Matthias Blume
1584    Date: 2001/08/13
1585    Tag: blume-20010813-closures
1586    Description:
1587    
1588    This fix was sent to us by Zhong Shao.  It is supposed to improve the
1589    performance of certain loops by avoiding needless closure allocation.
1590    
1591    ----------------------------------------------------------------------
1592    Name: Lal George
1593    Date: 2001/07/31 10:03:23 EDT 2001
1594    Tag: george-20010731-x86-fmalloc
1595    Description: Fixed bug in x86 calls
1596    
1597        There was a bug where call instructions would mysteriously
1598        vanish. The call instruction had to be one that returned
1599        a floating point value.
1600    
1601    ----------------------------------------------------------------------
1602    Name: Lal George
1603    Date: 2001/07/19 16:36:29 EDT 2001
1604    Tag: george-20010719-simple-cells
1605    Description:
1606    
1607    I have dramatically simplified the interface for CELLS in MLRISC.
1608    
1609    In summary, the cells interface is broken up into three parts:
1610    
1611      1. CellsBasis : CELLS_BASIS
1612    
1613            CellsBasis is a top level structure and common for all
1614            architectures.  it contains the definitions of basic datatypes
1615            and utility  functions over these types.
1616    
1617      2. functor Cells() : CELLS
1618    
1619            Cells generates an interface for CELLS that incorporates the
1620            specific resources on the target architecture, such as the
1621            presence of special register classes, their number and size,
1622            and various useful substructures.
1623    
1624      3. <ARCH>CELLS
1625    
1626            e.g. SparcCells: SPARCCELLS
1627    
1628            <ARCH>CELLS usually contains additional bindings for special
1629            registers  on the architecture, such as:
1630    
1631                    val r0 : cell           (* register zero *)
1632                    val y : cell            (* Y register *)
1633                    val psr : cell          (* processor status register *)
1634                    ...
1635    
1636            The structure returned by applying the Cells functor is opened
1637            in this interface.
1638    
1639    The main implication of all this is that the datatypes for cells is
1640    split between CellsBasis and CELLS -- a fairly simple change for user
1641    code.
1642    
1643    In the old scheme the CELLS interface had a definitional binding of
1644    the form:
1645    
1646            signature CELLS = sig
1647    
1648               structure CellsBasis = CellsBasis
1649    
1650               ...
1651    
1652            end
1653    
1654    With all the sharing constraints that goes on in MLRISC, this old
1655    design  quickly leads to errors such as:
1656    
1657            "structure definition spec inside of sharing ... "
1658    
1659    
1660    and appears to require an unacceptable amount of sharing and where
1661    constraint hackery.
1662    
1663    I think this error message (the interaction of definitional specs and
1664    sharing) requires more explanation on our web page.
1665    
1666    ----------------------------------------------------------------------
1667    Name: Matthias Blume
1668    Date: 2001/07/19 15:00:00 EDT
1669    Tag: blume-20010719-libreorg
1670    Description:
1671    
1672    This update puts together a fairly extensive but straightforward change
1673    to the way the libraries that implement the interactive system are
1674    organized:
1675    
1676       The biggest change is the elimination of structure Compiler.  As a
1677       replacement for this structure, there is now a CM library
1678       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
1679       that exports all the substructures of the original structure Compiler
1680       directly.  So instead of saying Compiler.Foo.bar one now simply
1681       says Foo.bar.  (The CM libraries actually export a collection of
1682       structures that is richer than the collection of substructures of
1683       structure Compiler.)
1684    
1685       To make the transition smooth, there is a separate library called
1686       $smlnj/compiler/compiler.cm which puts together and exports the
1687       original structure Compiler (or at least something very close to it).
1688    
1689       There are five members of the original structure Compiler
1690       that are not exported directly but which instead became members
1691       of a new structure Backend (described by signature BACKEND).  These are:
1692       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
1693       Interact (: INTERACT), structure Machine (: MACHINE), and val
1694       architecture (: string).
1695    
1696       Structure Compiler.Version has become structure CompilerVersion.
1697    
1698       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
1699       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
1700       or x86, respectively.
1701       Each of these exports the same frontend structures that
1702       $smlnj/compiler.cm exports.  But they do not have a structure Backend
1703       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
1704       Hppa, PPC, Sparc, or X86, respectively.
1705    
1706       Library $smlnj/compiler/all.cm exports the union of the exports of
1707       $smlnj/compiler/<arch>.cm
1708    
1709       There are no structures <Arch>Compiler anymore, use
1710       $smlnj/compiler/<arch>.cm instead.
1711    
1712       Library host-compiler-0.cm is gone.  Instead, the internal library
1713       that instantiates CM is now called cm0.cm.  Selection of the host
1714       compiler (backend) is no longer done here but. (Responsibility for it
1715       now lies with $smlnj/compiler/current.cm.  This seems to be more
1716       logical.)
1717    
1718       Many individual files have been moved or renamed.  Some files have
1719       been split into multiple files, and some "dead" files have been deleted.
1720    
1721    Aside from these changes to library organization, there are also changes
1722    to the way the code itself is organized:
1723    
1724       Structure Binfile has been re-implemented in such a way that it no
1725       longer needs any knowledge of the compiler.  It exclusively deals
1726       with the details of binfile layout.  It no longer invokes the
1727       compiler (for the purpose of creating new prospective binfile
1728       content), and it no longer has any knowledge of how to interpret
1729       pickles.
1730    
1731       Structure Compile (: COMPILE) has been stripped down to the bare
1732       essentials of compilation.  It no longer deals with linking/execution.
1733       The interface has been cleaned up considerably.
1734    
1735       Utility routines for dealing with linking and execution have been
1736       moved into their own substructures.
1737    
1738       (The ultimate goal of these changes is to provide a light-weight
1739       binfile loader/linker (at least for, e.g., stable libraries) that
1740       does not require CM or the compiler to be present.)
1741    
1742    CM documentation has been updated to reflect the changes to library
1743    organization.
1744    
1745    ----------------------------------------------------------------------
1746    Name: Matthias Blume
1747    Date: 2001/07/10 17:30:00 EDT
1748    Tag: Release_110_34
1749    Description:
1750    
1751    Minor tweak to 110.34 (re-tagged):
1752    
1753      - README.html file added to CVS repository
1754      - runtime compiles properly under FreeBSD 3.X and 4.X
1755    
1756    ----------------------------------------------------------------------
1757    Name: Matthias Blume
1758    Date: 2001/07/10 17:30:00 EDT
1759    Tag: Release_110_34
1760    Description:
1761    
1762    New version number (110.34). New bootfiles.
1763    
1764    ----------------------------------------------------------------------
1765    Name: Matthias Blume
1766    Date: 2001/07/09 16:00:00 EDT
1767    Tag: blume-20010709-more-varargs
1768    Description:
1769    
1770    I changed the handling of varargs in ml-nlffigen again:
1771    The ellipsis ... will now simply be ignored (with an accompanying warning).
1772    
1773    The immediate effect is that you can actually call a varargs function
1774    from ML -- but you can't actually supply any arguments beyond the ones
1775    specified explicitly.  (For example, you can call printf with its format
1776    string, but you cannot pass additional arguments.)
1777    
1778    This behavior is only marginally more useful than the one before, but
1779    it has the advantage that a function or, more importantly, a function
1780    type never gets dropped on the floor, thus avoiding follow-up problems with
1781    other types that refer to the offending one.
1782    
1783    ----------------------------------------------------------------------
1784    Name: Matthias Blume
1785    Date: 2001/07/09 11:25:00 EDT
1786    Tag: blume-20010709-varargs
1787    Description:
1788    
1789    1. ckit-lib.cm now exports structure Error
1790    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
1791       with a warning accompanied by a source location.  Moreover, it
1792       merely skips the offending function or type and proceeds with the
1793       rest of its work.u  As a result, one can safely feed C code containing
1794       "..." to ml-nlffigen.
1795    3. There are some internal improvements to CM, providing slightly
1796       more general string substitutions in the tools subsystem.
1797    
1798    ----------------------------------------------------------------------
1799    Name: Matthias Blume
1800    Date: 2001/06/27 15:10:00 EDT
1801    Tag: blume-20010627-concur
1802    Description:
1803    
1804    Fixed a small bug in CM's handling of parallel compilation.
1805    (You could observe the bug by Control-C-interrupting an ordinary
1806    CMB.make or CM.stabilize and then attaching some compile servers.
1807    The result was that all of a sudden the previously interrupted
1808    compilation would continue on its own.  This was because of
1809    an over-optimization: CM did not bother to clean out certain queues
1810    when no servers were attached "anyway", resulting in the contents
1811    of these queues to grab control when new servers did get attached.)
1812    
1813    There is also another minor update to the CM manual.
1814    
1815    ----------------------------------------------------------------------
1816    Name: Matthias Blume
1817    Date: 2001/06/26 16:15:00 EDT
1818    Tag: blume-20010626-cmdoc
1819    Description:
1820    
1821    Minor typo fixed in CM manual (syntax diagram for libraries).
1822    
1823    ----------------------------------------------------------------------
1824    Name: Matthias Blume
1825    Date: 2001/06/25 22:55:00 EDT
1826    Tag: blume-20010625-x86pc
1827    Description:
1828    
1829    Fixed a nasty bug in the X86 assembly code that caused signal
1830    handlers to fail (crash) randomly.
1831    
1832    ----------------------------------------------------------------------
1833    Name: Matthias Blume
1834    Date: 2001/06/25 12:05:00 EDT
1835    Tag: blume-20010625-nlffigen
1836    Description:
1837    
1838    This update fixes a number of minor bugs in ml-nlffigen as reported by
1839    Nick Carter <nbc@andrew.cmu.edu>.
1840    
1841      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
1842      2. Default names for generated files are now derived from the name of
1843         the C file *without its directory*.  In particular, this causes generated
1844         files to be placed locally even if the C file is in some system directory.
1845      3. Default names for generated signatures and structures are also derived
1846         from the C file name without its directory.  This avoids silly things
1847         like "structure GL/GL".
1848         (Other silly names are still possible because ml-nlffigen does not do
1849          a thorough check of whether generated names are legal ML identifiers.
1850          When in doubt, use command line arguments to force particular names.)
1851    
1852    ----------------------------------------------------------------------
1853    Name: Matthias Blume
1854    Date: 2001/06/21 12:25:00 EDT
1855    Tag: blume-20010621-eXene
1856    Description:
1857    
1858    eXene now compiles and (sort of) works again.
1859    
1860    The library name (for version > 110.33) is $/eXene.cm.
1861    
1862    I also added an new example in src/eXene/examples/nbody.  See the
1863    README file there for details.
1864    
1865    ----------------------------------------------------------------------
1866    Name: Matthias Blume
1867    Date: 2001/06/20 16:40:00 EDT
1868    Tag: blume-20010620-cml
1869    Description:
1870    
1871    CML now compiles and works again.
1872    
1873    Libraries (for version > 110.33):
1874    
1875      $cml/cml.cm            Main CML library.
1876      $cml/basis.cm          CML's version of $/basis.cm.
1877      $cml/cml-internal.cm   Internal helper library.
1878      $cml/core-cml.cm       Internal helper library.
1879      $cml-lib/trace-cml.cm  Tracing facility.
1880      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
1881    
1882    The installer (config/install.sh) has been taught how to properly
1883    install this stuff.
1884    
1885    ----------------------------------------------------------------------
1886    Name: Matthias Blume
1887    Date: 2001/06/19 17:55:00 EDT
1888    Tag: blume-20010619-instantiate
1889    Description:
1890    
1891    This un-breaks the fix for bug 1432.
1892    (The bug was originally fixed in 110.9 but I broke it again some
1893    time after that.)
1894    
1895    ----------------------------------------------------------------------
1896    Name: Matthias Blume
1897    Date: 2001/06/19 17:25:00 EDT
1898    Tag: blume-20010619-signals
1899    Description:
1900    
1901    This should (hopefully) fix the long-standing signal handling bug.
1902    (The runtime system was constructing a continuation record with an
1903    incorrect descriptor which would cause the GC to drop data on the floor...)
1904    
1905    ----------------------------------------------------------------------
1906    Name: Matthias Blume
1907    Date: 2001/06/15 15:05:00 EDT
1908    Tag: blume-20010615-moresparc
1909    Description:
1910    
1911    Here is a short late-hour update related to Sparc c-calls:
1912    
1913     -- made handling of double-word arguments a bit smarter
1914    
1915     -- instruction selection phase tries to collapse certain clumsily
1916        constructed ML-Trees; typical example:
1917    
1918            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
1919    
1920        This currently has no further impact on SML/NJ since mlriscGen does
1921        not seem to generate such patterns in the first place, and c-calls
1922        (which did generate them in the beginning) has meanwhile been fixed
1923        so as to avoid them as well.
1924    
1925    ----------------------------------------------------------------------
1926    Name: Matthias Blume
1927    Date: 2001/06/15 15:05:00 EDT
1928    Tag: blume-20010615-sparc
1929    Description:
1930    
1931    The purpose of this update is to provide an implementation of NLFFI
1932    on Sparc machines.
1933    
1934    Here are the changes in detail:
1935    
1936       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
1937       the Sparc implementation of the c-calls API.
1938       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
1939       for accessing the ML frame.  Thus, we have a real frame pointer and
1940       can freely modify %sp without need for an omit-frame-ptr phase.
1941       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
1942       this case.
1943       * ml-nlffigen has been taught to produce code for different architectures
1944       and calling conventions.
1945       * In a way similar to what was done in the x86 case, the Sparc
1946       backend uses its own specific extension to mltree.  (For example,
1947       it needs to be able to generate UNIMP instructions which are part
1948       of the calling convention.)
1949       * ml-nlffi-lib was reorganized to make it more modular (in particular,
1950       to make it easier to plug in new machine- and os-dependent parts).
1951    
1952    There are some other fairly unrelated bug fixes and cleanups as well:
1953    
1954       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
1955       that they properly share their libraries with existing SML/NJ libraries.
1956       * I fixed a minor cosmetic bug in CM, supressing certain spurious
1957       follow-up error messages.
1958       * Updates to CM/CMB documentation.
1959    
1960    TODO items:
1961    
1962       * MLRISC should use a different register as its asmTemp on the Sparc.
1963         (The current %o2 is a really bad choice because it is part of the
1964         calling conventions, so things might interfere in unexpected ways.)
1965    
1966    ----------------------------------------------------------------------
1967    Name: Matthias Blume
1968    Date: 2001/06/07
1969    Tag: blume-20010607-calls
1970    Description:
1971    
1972    A number of internal changes related to C calls and calling conventions:
1973    
1974    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
1975       number of bytes popped implicitly (by the callee).  In most cases
1976       this field is 0 but on x86/win32 it is some non-zero value.  This
1977       is information provided for the benefit of the "omit-frameptr" pass.
1978    2. The CALL instruction on the x86 carries a similar "pops" field.
1979       The instruction selection phase copies its value from the ML-Tree
1980       CALL statement.
1981    3. On all other architectures, the instruction selection phase checks
1982       whether "pops=0" and complains if not.
1983    4. The c-calls implementation for x86 now accepts two calling conventions:
1984       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
1985       up after the call and pops is set to 0.  For "stdcall", the caller
1986       does nothing, leaving the cleanup to the callee; pops is set to
1987       the number of bytes that were pushed onto the stack.
1988    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
1989       distinguish between "ccall" and "stdcall".
1990    6. The UNIMP instruction has been added to the supported Sparc instruction
1991       set. (This is needed for implementing the official C calling convention
1992       on this architecture.)
1993    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
1994       work with the latest CM.
1995    
1996    ----------------------------------------------------------------------
1997    Name: Matthias Blume
1998    Date: 2001/06/05 15:10:00 EDT
1999    Tag: blume-20010605-cm-index
2000    Description:
2001    
2002    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
2003    
2004    1. CM can now generate "index files".  These are human-readable files
2005       that list on a per-.cm-file basis each toplevel symbol defined or
2006       imported.  The location of the index file for
2007       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
2008       To enable index-file generation, set CM.Control.generate_index to true
2009       or export an environment-symbol: export CM_GENERATE_INDEX=true.
2010    
2011       The CM manual has been updated accordingly.
2012    
2013    2. I made some slight modifications to the c-calls API in MLRISC.
2014    
2015         a) There is now a callback to support saving/restoring of
2016            dedicated but caller-save registers around the actual call
2017            instruction.
2018         b) One can optionally specify a comment-annotation for the
2019            call instruction.
2020    
2021    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
2022       (For example, the comment annotation shows the C prototype of
2023        the function being called.)
2024    
2025    ----------------------------------------------------------------------
2026    Name: Matthias Blume
2027    Date: 2001/06/01 13:30:00 EDT
2028    Tag: blume-20010601-nlffi-cleanup
2029    Description:
2030    
2031    This is mostly a cleanup of MLFFI stuff:
2032    
2033       - some signature files have been put into a more exposed place
2034       - the ugly 'f type parameter is gone (simplifies types tremendously!)
2035       - ml-nlffigen changed accordingly
2036       - tutorial updated
2037    
2038    Other changes:
2039    
2040       - author's affiliation in CM manual(s) updated
2041       - some more recognized keywords added to Allen's sml.sty
2042    
2043    ----------------------------------------------------------------------
2044    Name: Matthias Blume
2045    Date: 2001/05/25 15:30:00 EDT
2046    Tag: blume-20010525-iptr
2047    Description:
2048    
2049      - put the official 110.33-README (as it appears on the ftp server) under
2050        CVS
2051      - fixed a small bug related to incomplete pointer types in
2052        ml-nlffigen
2053      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
2054        (it does not need the 'f type parameter)
2055    
2056    ----------------------------------------------------------------------
2057    Name: Matthias Blume
2058    Date: 2001/05/23 14:30:00 EDT
2059    Tag: Release_110_33
2060    Description:
2061    
2062    New version number (110.33).  New bootfiles.
2063    
2064    ----------------------------------------------------------------------
2065    Name: Matthias Blume
2066    Date: 2001/05/22 18:06:00 EDT
2067    Tag: blume-20010522-targets
2068    Description:
2069    
2070    Made install.sh use file config/targets.customized if it exists, falling
2071    back to config/targets if it doesn't.  This way one can have a customized
2072    version of the targets file without touching the "real thing", thus
2073    eliminating the constant fear of accidentally checking something bogus
2074    back into the CVS repository...  (File config/targets.customized must
2075    not be added to the repository!)
2076    
2077    ----------------------------------------------------------------------
2078    Name: Matthias Blume
2079    Date: 2001/05/22 16:30:00 EDT
2080    Tag: blume-20010522-minitut
2081    Description:
2082    
2083    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
2084       struct returns.
2085    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
2086       incomplete, preliminary documentation for NLFFI.
2087    
2088    ----------------------------------------------------------------------
2089    Name: Matthias Blume
2090    Date: 2001/05/14 11:30:00 EDT
2091    Tag: blume-20010514-script
2092    Description:
2093    
2094    Some bugs in install script fixed.
2095    
2096    In addition to that I also made a slight change to the NLFFI API:
2097    Functors generated by ml-nlffigen now take the dynamic library as a
2098    straight functor argument, not as a suspended one.  (The original
2099    functor code used to force the suspension right away anyway, so there
2100    was nothing gained by this complication of the interface.)
2101    
2102    ----------------------------------------------------------------------
2103    Name: Matthias Blume
2104    Date: 2001/05/11 14:35:00 EDT
2105    Tag: blume-20010511-ml-nlffi
2106    Description:
2107    
2108    I finally took the plunge and added my new FFI code to the main
2109    repository.  For x86-linux it is now ready for prime-time.
2110    
2111    There are two new subdirectories of "src":
2112    
2113      - ml-nlffi-lib:
2114           The utility library for programs using the FFI interface.
2115           Here is the implementation of $/c.cm and its associated low-level
2116           partners $/c-int.cm and $/memory.cm.
2117      - ml-nlffigen:
2118           A stand-alone program for generating ML glue code from C source
2119           code.
2120    
2121    Building ml-nlffigen requires $/ckit-lib.cm.
2122    
2123    The config/install.sh script has been updates to do the Right Thing
2124    (hopefully).
2125    
2126    Notice that the source tree for the C-Kit will not be put under "src"
2127    but directly under the installation root directory.  (This is the
2128    structure that currently exists on the CVS server when you check out
2129    module "sml".)  Fortunately, config/install.sh knows about this oddity.
2130    
2131    Bugs: No documentation yet.
2132    
2133    ----------------------------------------------------------------------
2134    Name: Matthias Blume
2135    Date: 2001/05/09 16:35:00 EDT
2136    Tag: blume-20010509-cpscontract
2137    Description:
2138    
2139    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
2140    wrapper/unwrapper elimination did not decrement usage counts and some
2141    dead variables got overlooked by the dead-up logic.)
2142    
2143    ----------------------------------------------------------------------
2144    Name: Lal George
2145    Date: 2001/05/08  17:26:09 EDT
2146    Tag: george-20010508-omit-frameptr
2147    Description:
2148    
2149    Changes to implement the omit-frame-pointer optimization to support
2150    raw C calls. For now, there is only support on the Intel x86, but
2151    other architectures will follow as more experience is gained with this.
2152    
2153    
2154    ----------------------------------------------------------------------
2155    Name: Matthias Blume
2156    Date: 2001/05/07 14:40:00 EDT
2157    Tag: blume-20010507-proxies
2158    Description:
2159    
2160    I made into "proxy libraries" all libraries that qualify for such a
2161    change.  (A qualifying library is a library that has another library or
2162    groups as its sole member and repeats that member's export list
2163    verbatim.  A proxy library avoids this repetition by omitting its export
2164    list, effectively inheriting the list that its (only) member exports.
2165    See the CM manual for more explanation.)
2166    The main effect is that explicit export lists for these libraries
2167    do not have to be kepts in sync, making maintenance a bit easier.
2168    
2169    I also added copyright notices to many .cm-files.
2170    
2171    Last but not least, I made a new set of bootfiles.
2172    
2173    ----------------------------------------------------------------------
2174    Name: Matthias Blume
2175    Date: 2001/05/04 17:00:00 EDT
2176    Tag: blume-20010504-cm-lsplit
2177    Description:
2178    
2179    0. John merged pending changes to $/smlnj-lib.cm
2180    
2181    1. Allen's previous change accidentally backed out of one of Lal's
2182       earlier changes.  I undid this mistake (re-introducing Lal's change).
2183    
2184    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
2185       within the compiler where applicable.  There is some code simplification
2186       because of that.
2187    
2188    3. The "split" phase (in FLINT) is now part of the default list of phases.
2189       Compiler.Control.LambdaSplitting.* can be used to globally control the
2190       lambda-splitting (cross-module-inlining) engine.  In addition to that,
2191       it can now also be controlled on a per-source basis: CM has been taught
2192       a new tool parameter applicable to ML source files.
2193    
2194       - To turn lambda-splitting off completely:
2195            local open Compiler.Control.LambdaSplitting in
2196                val _ = set Off
2197            end
2198       - To make "no lambda-splitting" the global default (but allow per-source
2199         overriding); this is the initial setting:
2200            local open Compiler.Control.LambdaSplitting in
2201                val _ = set (Default NONE)
2202            end
2203       - To make "lambda-splitting with aggressiveness a" the global default
2204         (and allow per-source overriding):
2205            local open Compiler.Control.LambdaSplitting in
2206                val _ = set (Default (SOME a))
2207            end
2208    
2209       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
2210         write (in the respective .cm-file):
2211            a.sml (lambdasplitting:off)
2212       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
2213            a.sml (lambdasplitting:on)
2214       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
2215         <a> is a decimal non-negative integer):
2216            a.sml (lambdasplitting:<a>)
2217       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
2218            a.sml (lambdasplitting:infinity)
2219       - To use the global default for a.sml:
2220            a.sml (lambdasplitting:default)
2221         or simply
2222            a.sml
2223    
2224    ----------------------------------------------------------------------
2225    Name: Allen Leung
2226    Date: 2001/05/04 01:57:00 EDT
2227    Tag: leunga-20010504-sync
2228    Description:
2229    
2230      MLRISC features.
2231    
2232      1. Fix to CMPXCHG instructions.
2233      2. Changed RA interface to allow annotations in callbacks.
2234      3. Added a new method to the stream interface to allow annotations updates.
2235    
2236    ----------------------------------------------------------------------
2237    Name: Matthias Blume
2238    Date: 2001/05/01 11:45:00 EDT
2239    Tag: blume-20010501-pcedittmp
2240    Description:
2241    
2242    Changed install.sh to use the current working directory instead of
2243    /usr/tmp for a temporary file (pcedittmp).  The previous choice
2244    of /usr/tmp caused trouble with MacOS X because of file premission
2245    problems.
2246    
2247    ----------------------------------------------------------------------
2248    Name: Matthias Blume
2249    Date: 2001/04/20 11:10:00 EDT
2250    Tag: blume-20010420-inMLflag
2251    Description:
2252    
2253     - added vp_limitPtrMask to vproc-state.h
2254       (for use by the raw-C-calls mechanism to implement proper interrupt
2255        handling)
2256     - made the ML compiler aware of various data-structure offsets so it
2257       can generate code for accessing the vp_inML flag and vp_limitPtrMask
2258     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
2259       raw C-calls
2260    
2261    ----------------------------------------------------------------------
2262    Name: Lal George
2263    Date: 2001/04/20 09:15:28 EDT
2264    Tag: george-20010420-macosX
2265    Description:
2266    
2267     - Changes to port to Mac OS X; Darwin.
2268    
2269     - In the process I found that sqrt was broken on the PPC, because the
2270       fsqrt instruction is not implemented.
2271    
2272    ----------------------------------------------------------------------
2273    Name: Matthias Blume
2274    Date: 2001/04/18 12:45:00 EDT
2275    Tag: blume-20010418-ccalls
2276    Description:
2277    
2278     - fixed two off-by-4 errors in the x86-specific c-calls implementation
2279       (this bug prevented structure arguments containing pointers from being
2280        passed correctly)
2281     - changed the raw-C-call code in mlriscGen.sml in such a way that
2282       structure arguments are represented as a pointer to the beginning
2283       of the structure (instead of having a series of synthesized arguments,
2284       one for each structure member)
2285    
2286     - made makeml script's verbosity level configurable via environment
2287       variable (MAKEML_VERBOSITY)
2288    
2289     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
2290       in rawmem-x86.sml; we are now using the real thing
2291    
2292    ----------------------------------------------------------------------
2293    Name: Matthias Blume
2294    Date: 2001/03/22 16:25:00 EST
2295    Tag: blume-20010322-bootfiles
2296    Description:
2297    
2298    Created a new set of bootfiles (for your automatic installation convenience).
2299    
2300    ----------------------------------------------------------------------
2301    Name: Matthias Blume
2302    Date: 2001/03/22 15:10:00 EST
2303    Tag: blume-20010322-rawmem-parcm
2304    Description:
2305    
2306    1. All "raw memory access" primitives for the new FFI are implemented now
2307       (at least on the x86).
2308    2. Some further cleanup of CM's parallel make mechanism.
2309    
2310    ----------------------------------------------------------------------
2311    Name: Matthias Blume
2312    Date: 2001/03/19 17:53:00 EST
2313    Tag: blume-20010319-parallel
2314    Description:
2315    
2316    Parallel make (using compile servers) now works again.
2317    
2318    To this end, CM.stabilize and CMB.make have been modified to work in
2319    two passes when compile servers are attached:
2320       1. Compile everything, do not perform stabilization; this pass
2321          uses compile servers
2322       2. Stabilize everything; this pass does not use compile servers
2323    If there are no compile servers, the two passes are combined into one
2324    (as before).  Splitting the passes increases the inherent parallelism
2325    in the dependency graph because the entire graph including all
2326    libraries is available at the same time.  This, in turn, improves
2327    server utilization.  The downside is that the master process will
2328    have to do some extra work after compilation is done (because for
2329    technical reasons it must re-read all the binfiles during stabilization).
2330    
2331    ----------------------------------------------------------------------
2332    Name: Matthias Blume
2333    Date: 2001/03/16 12:22:00 EST
2334    Tag: blume-20010316-bootfiles
2335    Description:
2336    
2337    Created a new set of bootfiles (for your automatic installation convenience).
2338    
2339    ----------------------------------------------------------------------
2340    Name: Matthias Blume
2341    Date: 2001/03/16 11:00:00 EST
2342    Tag: blume-20010316-MLTREE-fixup
2343    Description:
2344    
2345    This is a minor fixup for an (untagged) earlier commit by Allen.
2346    (A file was missing).
2347    
2348    ----------------------------------------------------------------------
2349    Name: Allen Leung
2350    Date: Mon Mar  5 18:54:57 EST 2001
2351    Tag: leunga-20010305-cut-support
2352    
2353    1. New support for alternative control-flow in MLTREE.
2354       Currently we support
2355    
2356          FLOW_TO(CALL ...., [k1,...,kn])
2357    
2358       This is needed for 'cuts to' in C-- and try/handle-like constructs
2359       in Moby
2360    
2361       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
2362    
2363    2. Register Allocator
2364    
2365       Changes in interface [from Fermin, John]
2366    
2367    3. Alpha 8-bit SLL support [Fermin]
2368    
2369    4. All architectures
2370    
2371       A new module (ClusterExpandCopies) for expanding parallel copies.
2372    
2373    ----------------------------------------------------------------------
2374    Name: Allen Leung
2375    Date: 2001/02/27 23:07:00 EST
2376    Tag: leunga-20010227-minor-stuff
2377    
2378    1. Alpha bug fix for CMOVNE
2379    2. Handle mltree COND(..,FCMP ...,...)
2380    3. Bug fix in simplifier
2381    
2382    ----------------------------------------------------------------------
2383    Name: Matthias Blume
2384    Date: 2001/01/30 17:50:00 EST
2385    Tag: blume-20010130-sync
2386    Description:
2387    
2388    This is just a minor update to sync my devel branch with the main brach.
2389    The only visible change is the addition of some README files.
2390    
2391    ----------------------------------------------------------------------
2392    Name: Matthias Blume
2393    Date: 2001/01/12 23:30:00 JST
2394    Tag: blume-20010112-bootfiles
2395    Description:
2396    
2397    Made a new set of bootfiles that goes with the current state of the
2398    repository.
2399    
2400    ----------------------------------------------------------------------
2401    Name: Matthias Blume
2402    Date: 2001/01/12 21:20:00 JST
2403    Tag: blume-20010112-sync
2404    Description:
2405    
2406    I am just flushing out some minor changes that had accumulated in
2407    my private branch in order to sync with the main tree.  (This is
2408    mainly because I had CVS trouble when trying to merge _into_ my
2409    private branch.)
2410    
2411    Most people should be completely unaffected by this.
2412    
2413    ----------------------------------------------------------------------
2414    Name: Allen Leung
2415    Date: Thu Jan 11 21:03:00 EST 2001
2416    Tag: leunga-20010111-labexp=mltree
2417    Description:
2418    
2419    1.  Removed the type LabelExp and replace it by MLTree.
2420    2.  Rewritten mltree-simplify with the pattern matcher tool.
2421    3.  There were some bugs in alpha code generator which would break
2422        64-bit code generation.
2423    4.  Redo the tools to generate code with the
2424    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
2425        are now generated by perl scripts.
2426    
2427    ----------------------------------------------------------------------
2428    Name: Matthias Blume
2429    Date: 2001/01/10 21:55:00 JST
2430    Tag: blume-20010110-rcc
2431    Description:
2432    
2433    The RCC stuff now seems to work (but only on the x86).
2434    This required hacking of the c-calls interface (and -implementation) in
2435    MLRISC.
2436    
2437    Normal compiler users should be unaffected.
2438    
2439    ----------------------------------------------------------------------
2440    Name: Matthias Blume
2441    Date: 2001/01/09 01:20:00 JST
2442    Tag: blume-20010109-rcc
2443    Description:
2444    
2445    This is a fairly big patch, flushing out a large number of pending
2446    changes that I made to my development copy over the last couple of days.
2447    
2448    Of practical relevance at this moment is a workaround for a pickling
2449    bug that Allen ran into the other day.  The cause of the bug itself is
2450    still unknown and it might be hard to fix it properly, but the
2451    workaround has some merits of its own (namely somewhat reducing pickling
2452    overhead for certain libraries).  Therefore, I think this solution should
2453    be satisfactory at this time.
2454    
2455    The rest of the changes (i.e., the vast majority) has to do with my
2456    ongoing efforts of providing direct support for C function calls from
2457    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
2458    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
2459    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
2460    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
2461    handle RCC.
2462    
2463    The last part (the changes to mlriscGen.sml) are still known to be
2464    wrong on the x86 and not implemented on all other architectures.  But
2465    the infrastructure is in place. I had to change a few functor
2466    signatures in the backend to be able to route the CCalls interface
2467    from MLRISC there, and I had to specialize the mltree type (on the
2468    x86) to include the necessary extensions. (The extensions themselves
2469    were already there and redy to go in MLRISC/x86).
2470    
2471    Everything should be very happy as soon as someone helps me with
2472    mlriscGen.sml...
2473    
2474    In any case, nothing of this should matter to anyone as long as the
2475    new primop is not being used (which is going to be the case unless you
2476    find it where I hid it :). The rest of the compiler is completely
2477    unaffected.
2478    
2479    ----------------------------------------------------------------------
2480    Name: Matthias Blume
2481    Date: 2001/01/05 00:30:00 JST
2482    Tag: blume-20010105-primops
2483    Description:
2484    
2485    Added some experimental support for work that I am doing right now.
2486    These changes mostly concern added primops, but there is also a new
2487    experimental C library in the runtime system (but currently not enabled
2488    anywhere except on Linux/X86).
2489    
2490    In the course of adding primops (and playing with them), I discovered that
2491    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
2492    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
2493    To recover, I made type information in INL_PRIM mandatory and changed
2494    prim.sml as well as built-in.sml accordingly.  The InLine structure now
2495    has complete, correct type information (i.e., no bottom types).
2496    
2497    Since all these changes mean that we need new binfiles, I also bumped the
2498    version number to 110.32.1.
2499    
2500    ----------------------------------------------------------------------
2501    Name: Matthias Blume
2502    Date: 2000/12/30 22:10:00 JST
2503    Tag: blume-20001230-various
2504    Description:
2505    
2506    Added proxy libraries for MLRISC and let MLRISC libraries refer
2507    to each other using path anchors.  (See CM manual for explanation.)
2508    
2509    Updated CM documentation.
2510    
2511    Fixed some bugs in CM.
2512    
2513    Implemented "proxy" libraries (= syntactic sugar for CM).
2514    
2515    Added "-quiet" option to makeml and changed runtime system accordingly.
2516    
2517    Added cleanup handler for exportML to reset timers and compiler stats.
2518    
2519    ----------------------------------------------------------------------
2520    Name: Lal George
2521    Date: 2000/12/22 22:22:58 EST 2000
2522    Tag: Release_110_32
2523    Description:
2524    
2525            Infinite precision used throughout MLRISC.
2526            see MLRISC/mltree/machine-int.sig
2527    
2528    ----------------------------------------------------------------------
2529    Name: Matthias Blume
2530    Date: 2000/12/22 23:16:00 JST
2531    Tag: blume-20001222-warn
2532    Description:
2533    
2534    Corrected wording and formatting of some CM warning message which I
2535    broke in my previous patch.
2536    
2537    ----------------------------------------------------------------------
2538    Name: Matthias Blume
2539    Date: 2000/12/22 21:20:00 JST
2540    Tag: blume-20001222-anchorenv
2541    Description:
2542    
2543    Fixed CM's handling of anchor environments in connection with CMB.make.
2544    
2545    ----------------------------------------------------------------------
2546    Name: Matthias Blume
2547    Date: 2000/12/22 13:15:00 JST
2548    Tag: blume-20001222-cleanup
2549    Description:
2550    
2551    Removed src/cm/ffi which does not (and did not) belong here.
2552    
2553    ----------------------------------------------------------------------
2554    Name: Matthias Blume
2555    Date: 2000/12/21 23:55:00 JST
2556    Tag: blume-20001221-exn
2557    Description:
2558    
2559    Probably most important: CM no longer silently swallows all exceptions
2560    in the compiler.
2561    Plus: some other minor CM changes.  For example, CM now reports some
2562    sizes for generated binfiles (code, data, envpickle, lambdapickle).
2563    
2564    ----------------------------------------------------------------------
2565    Name: Matthias Blume
2566    Date: 2000/12/15 00:01:05 JST
2567    Tag: blume-20001215-dirtool
2568    Description:
2569    
2570    - "dir" tool added.
2571    - improvements and cleanup to Tools structure
2572    - documentation updates
2573    
2574    ----------------------------------------------------------------------
2575    Name: Allen Leung
2576    Date: Thu Dec 14 03:45:24 EST 2000
2577    Description:
2578    Tag:  leunga-20001214-int-inf
2579    Description:
2580    
2581       In IntInf, added these standard functions, which are missing from our
2582    implementation:
2583    
2584        andb : int * int -> int
2585        xorb : int * int -> int
2586        orb  : int * int -> int
2587        notb : int -> int
2588         <<   : int * word -> int
2589        ~>>  : int * word -> int
2590    
2591       Not tested, I hope they are correct.
2592    
2593    ----------------------------------------------------------------------
2594    Name: Allen Leung
2595    Date: Fri Dec  8 19:23:26 EST 2000
2596    Description:
2597    Tag:  leunga-20001208-nowhere
2598    Description:
2599    
2600      Slight improvements to the 'nowhere' tool to handle OR-patterns,
2601    to generate better error messages etc.  Plus a brief manual.
2602    
2603    ----------------------------------------------------------------------
2604    Name: Lal George
2605    Date: 2000/12/08 09:54:02 EST 2000
2606    Tag: Release_110_31
2607    Description:
2608    
2609    - Version 110.31
2610    ----------------------------------------------------------------------
2611    Name: Allen Leung
2612    Date: Thu Dec  7 22:01:04 EST 2000
2613    Tag:  leunga-20001207-cell-monster-hack
2614    Description:
2615    
2616    Major MLRISC internal changes.  Affect all clients.
2617    Summary:
2618    
2619    1.  Type CELLS.cell = int is now replaced by a datatype.
2620        As a result, the old regmap is now gone.  Almost all interfaces
2621        in MLRISC change as a consequence.
2622    
2623    2.  A new brand version of machine description tool (v3.0) that generates
2624        modules expecting the new interface.  The old version is removed.
2625    
2626    3.  The RA interface has been further abstracted into two new functors.
2627        RISC_RA and X86RA.  These functors have much simpler interfaces.
2628        [See also directory MLRISC/demo.]
2629    
2630    4.  Some other new source->source code generation tools are available:
2631    
2632        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
2633        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
2634           I use this tool to generate the peephole optimizers---with the new
2635           cell type changes, peephole rules are becoming difficult to write
2636           without conditional pattern matching.
2637    
2638    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
2639        cover the entire MLRISC source tree so many things broke.
2640    
2641    6.  CM files have been moved to the subdirectory MLRISC/cm.
2642        They are moved because there are a lot of them and they clutter up the
2643        root dir.
2644    
2645    7.  More detailed documentation to come...
2646    
2647        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
2648        a makeml -rebuild first.  This is because of other other
2649        changes that Matthias has made (see below).
2650    
2651    
2652    ----------------------------------------------------------------------
2653    Name: Matthias Blume
2654    Date: 2000/11/30 23:12:00 JST
2655    Tag: blume-20001130-filereorg
2656    Description:
2657    
2658    Some manual updates and some file reorganizations in CM.
2659    
2660    ----------------------------------------------------------------------
2661    Name: Matthias Blume
2662    Date: 2000/11/24 17:45:00 JST
2663    Tag: blume-20001124-link
2664    Description:
2665    
2666    Drastically improved link traversal code for the case that the dynamic
2667    value was already loaded at bootstrap time.  As a result, CM and CMB
2668    now both load blazingly fast -- even on a very slow machine.  Also,
2669    memory consumption has been further reduced by this.
2670    
2671    Warning: The format of the PIDMAP file has changed.  THerefore, to
2672    bootstrap you have to do this:
2673    
2674    1. Run CMB.make
2675    2. Make a symbolic link for the boot directory:
2676         ln -s sml.boot.ARCH-OS xxx
2677    3. "Rebuild" the boot directory:
2678         ./makeml -boot xxx -rebuild sml ; rm xxx
2679    4. Boot normally:
2680          ./makeml
2681    
2682    ----------------------------------------------------------------------
2683    Name: Matthias Blume
2684    Date: 2000/11/21 21:20:00 JST
2685    Tag: blume-20001121-tools
2686    Description:
2687    
2688    Continued hacking on autoloading problem -- with success this time.
2689    Also changed tool-plugin mechanism.  See new CM manual.
2690    
2691    ----------------------------------------------------------------------
2692    Name: Matthias Blume
2693    Date: 2000/11/19 14:30:00 JST
2694    Tag:  blume-20001119-autoload
2695    Description:
2696    
2697    Some hacking to make autoloading faster.  Success for CMB, no success
2698    so far for CM.  There is a reduced structure CM' that autoloads faster.
2699    (This is a temporary, non-documented hack to be eliminated again when
2700    the general problem is solved.)
2701    
2702    ----------------------------------------------------------------------
2703    Name: Matthias Blume
2704    Date: 2000/11/17 14:10:00 JST
2705    Tag: blume-20001117-pickle-lib
2706    Description:
2707    
2708    1. Eliminated comp-lib.cm
2709    2. Made pickle-lib.cm
2710    3. Eliminated all uses of intset.sml (from comp-lib.cm)
2711    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
2712       equivalent constructs from smlnj-lib.cm (INtHashTable).
2713    5. Point 4. also goes for those uses of intmap.* in MLRISC.
2714       Duplicated intmap modules thrown out.
2715    6. Hunted down all duplicated SCC code and replaced it with
2716       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
2717    7. Rewrote Feedback module.
2718    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
2719       should be thrown out and equivalent modules from smlnj-lib.cm
2720       should be used (IntRedBlackSet, IntListSet, ...).
2721    
2722    Confirmed that compiler compiles to fixpoint.
2723    
2724    ----------------------------------------------------------------------
2725    Name: Allen Leung
2726    Date: 2000/11/10 18:00:00
2727    Tag: leunga-20001110-new-x86-fp
2728    
2729    A new x86 floating point code generator has been added.
2730    By default this is turned off.  To turn this on, do:
2731    
2732        CM.autoload "$smlnj/compiler.cm";
2733        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
2734    
2735    Changes:
2736    
2737    1.  Changed FTAN to FPTAN so that the assembly output is correct.
2738    2.  Changed the extension callback for FTANGENT to generate:
2739    
2740              fptan
2741              fstp  %st(0)
2742        instead of
2743              fptan
2744              fstpl ftempmem
2745    
2746    3.  Numerous assembly fixes for x86.
2747    
2748    5.  Cleaned up the machine code output module x86/x86MC.sml and added
2749        support for a whole bunch of instructions and addressing modes:
2750    
2751          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
2752          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
2753          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
2754          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
2755          fxch %st(n)
2756          fld %st(n)
2757          fst %st(n)
2758          fst mem
2759          fstp %st(n)
2760          fucom %st(n)
2761          fucomp %st(n)
2762    
2763        All these are now generated when the fast fp mode is turned on.
2764    
2765    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
2766    
2767    ----------------------------------------------------------------------
2768    Name: Matthias Blume
2769    Date: 2000/11/09 11:20:00 JST
2770    Tag: blume-20001109-scc
2771    Description:
2772    
2773    Eliminated some code duplication:
2774    
2775    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
2776       (Otherwise the functor is useless.)
2777    2. Used GraphSCCFn where SCCUtilFun was used previously.
2778    3. Got rid of SCCUtilFun (in comp-lib.cm).
2779    
2780    ----------------------------------------------------------------------
2781    Name: Lal George
2782    Date: 2000/11/06 09:02:21 EST 2000
2783    Tag: Release_110_30
2784    Description:
2785    
2786    - Version 110.30
2787    ----------------------------------------------------------------------
2788    Name: Matthias Blume
2789    Date: 2000/11/04 14:45:00
2790    Tag: blume-20001104-mlbuild
2791    Description:
2792    
2793    - Made ml-build faster on startup.
2794    - Documentation fixes.
2795    
2796    ----------------------------------------------------------------------
2797    Name: Matthias Blume
2798    Date: 2000/11/02 17:00:00 JST
2799    Tag: blume-20001102-condcomp
2800    Description:
2801    
2802    - Small tweaks to pickler -- new BOOTFILES!
2803    - Version bumped to 110.29.2.
2804    - Added conditional compilation facility to init.cmi (see comment there).
2805    ----------------------------------------------------------------------
2806    Name: Allen Leung
2807    Date: 2000/10/23 19:31:00
2808    Tag: leunga-20001023-demo-ra
2809    
2810    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
2811    2. Test programs for the graph library updated
2812    3. Some new MLRISC demo programs added
2813    
2814    ----------------------------------------------------------------------
2815    Name: Matthias Blume
2816    Date: 2000/08/31 22:15:00 JST
2817    Tag: blume-20001017-errmsg
2818    Description:
2819    
2820    More error message grief: Where there used to be no messages, there
2821    now were some that had bogus error regions.  Fixed.
2822    
2823    ----------------------------------------------------------------------
2824    Name: Matthias Blume
2825    Date: 2000/08/31 17:30:00 JST
2826    Tag: blume-20001017-v110p29p1
2827    Description:
2828    
2829    I made a version 110.29.1 with new bootfiles.
2830    
2831    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
2832              CM documentation changes and a small bugfix in CM's error reporting.
2833    
2834    ----------------------------------------------------------------------
2835    Name: Lal George
2836    Date: 2000/09/27 14:42:35 EDT
2837    Tag: george-20000927-nodestatus
2838    Description:
2839    
2840    Changed the type of the nodestatus, so that:
2841    
2842            SPILLED(~1)             is now SPILLED
2843            SPILLED(m) where m>=0   is now MEMREG(m)
2844            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
2845    
2846    ----------------------------------------------------------------------
2847    Name: Matthias Blume
2848    Date: 2000/09/07 14:45:00 JST
2849    Tag: blume-20000907-cmerrmsg
2850    Description:
2851    
2852    Small tweak to CM to avoid getting ML syntax error messages twice.
2853    
2854    ----------------------------------------------------------------------
2855    Name: Matthias Blume
2856    Date: 2000/08/31 18:00:00 JST
2857    Tag: blume-20000831-cvsbootfiles
2858    Description:
2859    
2860    New URL for boot files (because the 110.29 files on the BL server do
2861    now work correctly with my updated install scripts for yacc and lex).
2862    
2863  ----------------------------------------------------------------------  ----------------------------------------------------------------------
2864  Name: Matthias Blume  Name: Matthias Blume
2865  Date: 2000/08/08 12:33:00 JST  Date: 2000/08/08 12:33:00 JST
# Line 1470  Line 4319 
4319       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
4320       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
4321       Please, don't be too harsh on me for messing with this code a bit more       Please, don't be too harsh on me for messing with this code a bit more
4322       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
4323       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
4324       Dave's hands. :)       Dave's hands. :)
4325    

Legend:
Removed from v.697  
changed lines
  Added in v.1132

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