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 928, Tue Sep 18 13:38:46 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  Name: Matthias Blume
1464  Date: 2001/09/18 09:40:00 EDT  Date: 2001/09/18 09:40:00 EDT
1465  Tag: Release_110_36  Tag: Release_110_36_orig (tag changed)
1466  Description:  Description:
1467    
1468  New version (110.36).  New bootfiles.  New version (110.36).  New bootfiles.

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

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