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

Legend:
Removed from v.801  
changed lines
  Added in v.1140

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