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

Legend:
Removed from v.731  
changed lines
  Added in v.1136

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