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 987, Wed Nov 21 21:14:44 2001 UTC revision 1131, Mon Mar 11 15:20:52 2002 UTC
# Line 8  Line 8 
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  Name:
11  Date:  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: Allen Leung
17    Date: 2002/03/11 10:30:00 EST
18    Tag: leunga-20020310-runtime-string0
19    Description:
20    
21       The representation of the empty string now points to a
22    legal null terminated C string instead of unit.  It is now possible
23    to convert an ML string into C string with InlineT.CharVector.getData.
24    This compiles into one single machine instruction.
25    
26    ----------------------------------------------------------------------
27    Name: Allen Leung
28    Date: 2002/03/10 23:55:00 EST
29    Tag: leunga-20020310-x86-call
30    Description:
31    
32       Added machine generation for CALL instruction (relative displacement mode)
33    
34    ----------------------------------------------------------------------
35    Name: Matthias Blume
36    Date: 2002/03/08 16:05:00
37    Tag: blume-20020308-entrypoints
38    Description:
39    
40    Version number bumped to 110.39.1.  NEW BOOTFILES!
41    
42    Entrypoints: non-zero offset into a code object where execution should begin.
43    
44    - Added the notion of an entrypoint to CodeObj.
45    - Added reading/writing of entrypoint info to Binfile.
46    - Made runtime system bootloader aware of entrypoints.
47    - Use the address of the label of the first function given to mlriscGen
48      as the entrypoint.  This address is currently always 0, but it will
49      not be 0 once we turn on block placement.
50    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
51      with entry points) from mlriscGen.
52    
53    ----------------------------------------------------------------------
54    Name: Allen Leung
55    Date: 2002/03/07 20:45:00 EST
56    Tag: leunga-20020307-x86-cmov
57    Description:
58    
59       Bug fixes for CMOVcc on x86.
60    
61       1. Added machine code generation for CMOVcc
62       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
63       3. CMOVcc cannot have an immediate operand as argument.
64    
65    ----------------------------------------------------------------------
66    Name: Matthias Blume
67    Date: 2002/03/07 16:15:00 EST
68    Tag: blume-20020307-controls
69    Description:
70    
71    This is a very large but mostly boring patch which makes (almost)
72    every tuneable compiler knob (i.e., pretty much everything under
73    Control.* plus a few other things) configurable via both the command
74    line and environment variables in the style CM did its configuration
75    until now.
76    
77    Try starting sml with '-h' (or, if you are brave, '-H')
78    
79    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
80    implements the underlying generic mechanism.
81    
82    The interface to some of the existing such facilities has changed somewhat.
83    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
84    (The getFoo interface is still there for backward-compatibility, but its
85    use is deprecated.)
86    
87    The ml-build script passes -Cxxx=yyy command-line arguments through so
88    that one can now twiddle the compiler settings when using this "batch"
89    compiler.
90    
91    TODO items:
92    
93    We should go through and throw out all controls that are no longer
94    connected to anything.  Moreover, we should go through and provide
95    meaningful (and correct!) documentation strings for those controls
96    that still are connected.
97    
98    Currently, multiple calls to Controls.new are accepted (only the first
99    has any effect).  Eventually we should make sure that every control
100    is being made (via Controls.new) exactly once.  Future access can then
101    be done using Controls.acc.
102    
103    Finally, it would probably be a good idea to use the getter-setter
104    interface to controls rather than ref cells.  For the time being, both
105    styles are provided by the Controls module, but getter-setter pairs are
106    better if thread-safety is of any concern because they can be wrapped.
107    
108    *****************************************
109    
110    One bug fix: The function blockPlacement in three of the MLRISC
111    backpatch files used to be hard-wired to one of two possibilities at
112    link time (according to the value of the placementFlag).  But (I
113    think) it should rather sense the flag every time.
114    
115    *****************************************
116    
117    Other assorted changes (by other people who did not supply a HISTORY entry):
118    
119    1. the cross-module inliner now works much better (Monnier)
120    2. representation of weights, frequencies, and probabilities in MLRISC
121       changed in preparation of using those for weighted block placement
122       (Reppy, George)
123    
124    ----------------------------------------------------------------------
125    Name: Lal George
126    Date: 2002/03/07 14:44:24 EST 2002
127    Tag: george-20020307-weighted-block-placement
128    
129    Tested the weighted block placement optimization on all architectures
130    (except the hppa) using AMPL to generate the block and edge frequencies.
131    Changes were required in the machine properties to correctly
132    categorize trap instructions. There is an MLRISC flag
133    "weighted-block-placement" that can be used to enable weighted block
134    placement, but this will be ineffective without block/edge
135    frequencies (coming soon).
136    
137    
138    ----------------------------------------------------------------------
139    Name: Lal George
140    Date: 2002/03/05 17:24:48 EST
141    Tag: george-20020305-linkage-cluster
142    
143    In order to support the block placement optimization, a new cluster
144    is generated as the very first cluster (called the linkage cluster).
145    It contains a single jump to the 'real' entry point for the compilation
146    unit. Block placement has no effect on the linkage cluster itself, but
147    all the other clusters  have full freedom in the manner in which they
148    reorder blocks or functions.
149    
150    On the x86 the typical linkage code that is generated is:
151       ----------------------
152            .align 2
153       L0:
154            addl    $L1-L0, 72(%esp)
155            jmp     L1
156    
157    
158            .align  2
159       L1:
160       ----------------------
161    
162    72(%esp) is the memory location for the stdlink register. This
163    must contain the address of the CPS function being called. In the
164    above example, it contains the address of  L0; before
165    calling L1 (the real entry point for the compilation unit), it
166    must contain the address for L1, and hence
167    
168            addl $L1-L0, 72(%esp)
169    
170    I have tested this on all architectures except the hppa.The increase
171    in code size is of course negligible
172    
173    ----------------------------------------------------------------------
174    Name: Allen Leung
175    Date: 2002/03/03 13:20:00 EST
176    Tag: leunga-20020303-mlrisc-tools
177    
178      Added #[ ... ] expressions to mlrisc tools
179    
180    ----------------------------------------------------------------------
181    Name: Matthias Blume
182    Date: 2002/02/27 12:29:00 EST
183    Tag: blume-20020227-cdebug
184    Description:
185    
186    - made types in structure C and C_Debug to be equal
187    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
188    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
189    
190    ----------------------------------------------------------------------
191    Name: Matthias Blume
192    Date: 2002/02/26 12:00:00 EST
193    Tag: blume-20020226-ffi
194    Description:
195    
196    1. Fixed a minor bug in CM's "noweb" tool:
197       If numbering is turned off, then truly don't number (i.e., do not
198       supply the -L option to noweb).  The previous behavior was to supply
199       -L'' -- which caused noweb to use the "default" line numbering scheme.
200       Thanks to Chris Richards for pointing this out (and supplying the fix).
201    
202    2. Once again, I reworked some aspects of the FFI:
203    
204       A. The incomplete/complete type business:
205    
206       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
207         gone!
208       - ML types representing an incomplete type are now *equal* to
209         ML types representing their corresponding complete types (just like
210         in C).  This is still safe because ml-nlffigen will not generate
211         RTTI for incomplete types, nor will it generate functions that
212         require access to such RTTI.   But when ML code generated from both
213         incomplete and complete versions of the C type meet, the ML types
214         are trivially interoperable.
215    
216         NOTE:  These changes restore the full generality of the translation
217         (which was previously lost when I eliminated functorization)!
218    
219       B. Enum types:
220    
221       - Structure C now has a type constructor "enum" that is similar to
222         how the "su" constructor works.  However, "enum" is not a phantom
223         type because each "T enum" has values (and is isomorphic to
224         MLRep.Signed.int).
225       - There are generic access operations for enum objects (using
226         MLRep.Signed.int).
227       - ml-nlffigen will generate a structure E_foo for each "enum foo".
228         * The structure contains the definition of type "mlrep" (the ML-side
229         representation type of the enum).  Normally, mlrep is the same
230         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
231         then mlrep will be defined as a datatype -- thus facilitating
232         pattern matching on mlrep values.
233         ("-ec" will be suppressed if there are duplicate values in an
234          enumeration.)
235         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
236         will be generated for each C enum constant xxx.
237         * Conversion functions m2i and i2m convert between mlrep and
238         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
239         * Coversion functions c and ml convert between mlrep and "tag enum".
240         * Access functions (get/set) fetch and store mlrep values.
241       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
242         enumerations are merged into one single enumeration represented by
243         structure E_'.
244    
245    ----------------------------------------------------------------------
246    Name: Allen Leung
247    Date: 2002/02/25 04:45:00 EST
248    Tag: leunga-20020225-cps-spill
249    
250    This is a new implementation of the CPS spill phase.
251    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
252    In case of problems, replace it with the old file spill.sml
253    
254    The current compiler runs into some serious performance problems when
255    constructing a large record.  This can happen when we try to compile a
256    structure with many items.  Even a very simple structure like the following
257    makes the compiler slow down.
258    
259        structure Foo = struct
260           val x_1 = 0w1 : Word32.int
261           val x_2 = 0w2 : Word32.int
262           val x_3 = 0w3 : Word32.int
263           ...
264           val x_N = 0wN : Word32.int
265        end
266    
267    The following table shows the compile time, from N=1000 to N=4000,
268    with the old compiler:
269    
270    N
271    1000   CPS 100 spill                           0.04u  0.00s  0.00g
272           MLRISC ra                               0.06u  0.00s  0.05g
273              (spills = 0 reloads = 0)
274           TOTAL                                   0.63u  0.07s  0.21g
275    
276    1100   CPS 100 spill                           8.25u  0.32s  0.64g
277           MLRISC ra                               5.68u  0.59s  3.93g
278              (spills = 0 reloads = 0)
279           TOTAL                                   14.71u  0.99s  4.81g
280    
281    1500   CPS 100 spill                           58.55u  2.34s  1.74g
282           MLRISC ra                               5.54u  0.65s  3.91g
283              (spills = 543 reloads = 1082)
284           TOTAL                                   65.40u  3.13s  6.00g
285    
286    2000   CPS 100 spill                           126.69u  4.84s  3.08g
287           MLRISC ra                               0.80u  0.10s  0.55g
288              (spills = 42 reloads = 84)
289           TOTAL                                   129.42u  5.10s  4.13g
290    
291    3000   CPS 100 spill                           675.59u  19.03s  11.64g
292           MLRISC ra                               2.69u  0.27s  1.38g
293              (spills = 62 reloads = 124)
294           TOTAL                                   682.48u  19.61s  13.99g
295    
296    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
297           MLRISC ra                               4.96u  0.27s  2.72g
298              (spills = 85 reloads = 170)
299           TOTAL                                   2375.26u  57.21s  48.00g
300    
301    As you can see the old cps spill module suffers from some serious
302    performance problem.  But since I cannot decipher the old code fully,
303    instead of patching the problems up, I'm reimplementing it
304    with a different algorithm.  The new code is more modular,
305    smaller when compiled, and substantially faster
306    (O(n log n) time and O(n) space).  Timing of the new spill module:
307    
308    4000  CPS 100 spill                           0.02u  0.00s  0.00g
309          MLRISC ra                               0.25u  0.02s  0.15g
310             (spills=1 reloads=3)
311          TOTAL                                   7.74u  0.34s  1.62g
312    
313    Implementation details:
314    
315    As far as I can tell, the purpose of the CPS spill module is to make sure the
316    number of live variables at any program point (the bandwidth)
317    does not exceed a certain limit, which is determined by the
318    size of the spill area.
319    
320    When the bandwidth is too large, we decrease the register pressure by
321    packing live variables into spill records.  How we achieve this is
322    completely different than what we did in the old code.
323    
324    First, there is something about the MLRiscGen code generator
325    that we should be aware of:
326    
327    o MLRiscGen performs code motion!
328    
329       In particular, it will move floating point computations and
330       address computations involving only the heap pointer to
331       their use sites (if there is only a single use).
332       What this means is that if we have a CPS record construction
333       statement
334    
335           RECORD(k,vl,w,e)
336    
337       we should never count the new record address w as live if w
338       has only one use (which is often the case).
339    
340       We should do something similar to floating point, but the transformation
341       there is much more complex, so I won't deal with that.
342    
343    Secondly, there are now two new cps primops at our disposal:
344    
345     1. rawrecord of record_kind option
346        This pure operator allocates some uninitialized storage from the heap.
347        There are two forms:
348    
349         rawrecord NONE [INT n]  allocates a tagless record of length n
350         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
351                                     and initializes the tag.
352    
353     2. rawupdate of cty
354          rawupdate cty (v,i,x)
355          Assigns to x to the ith component of record v.
356          The storelist is not updated.
357    
358    We use these new primops for both spilling and increment record construction.
359    
360     1. Spilling.
361    
362        This is implemented with a linear scan algorithm (but generalized
363        to trees).  The algorithm will create a single spill record at the
364        beginning of the cps function and use rawupdate to spill to it,
365        and SELECT or SELp to reload from it.  So both spills and reloads
366        are fine-grain operations.  In contrast, in the old algorithm
367        "spills" have to be bundled together in records.
368    
369        Ideally, we should sink the spill record construction to where
370        it is needed.  We can even split the spill record into multiple ones
371        at the places where they are needed.  But CPS is not a good
372        representation for global code motion, so I'll keep it simple and
373        am not attempting this.
374    
375     2. Incremental record construction (aka record splitting).
376    
377        Long records with many component values which are simulatenously live
378        (recall that single use record addresses are not considered to
379         be live) are constructed with rawrecord and rawupdate.
380        We allocate space on the heap with rawrecord first, then gradually
381        fill it in with rawupdate.  This is the technique suggested to me
382        by Matthias.
383    
384        Some restrictions on when this is applicable:
385        1. It is not a VECTOR record.  The code generator currently does not handle
386           this case. VECTOR record uses double indirection like arrays.
387        2. All the record component values are defined in the same "basic block"
388           as the record constructor.  This is to prevent speculative
389           record construction.
390    
391    ----------------------------------------------------------------------
392    Name: Allen Leung
393    Date: 2002/02/22 01:02:00 EST
394    Tag: leunga-20020222-mlrisc-tools
395    
396    Minor bug fixes in the parser and rewriter
397    
398    ----------------------------------------------------------------------
399    Name: Allen Leung
400    Date: 2002/02/21 20:20:00 EST
401    Tag: leunga-20020221-peephole
402    
403    Regenerated the peephole files.  Some contained typos in the specification
404    and some didn't compile because of pretty printing bugs in the old version
405    of 'nowhere'.
406    
407    ----------------------------------------------------------------------
408    Name: Allen Leung
409    Date: 2002/02/19 20:20:00 EST
410    Tag: leunga-20020219-mlrisc-tools
411    Description:
412    
413       Minor bug fixes to the mlrisc-tools library:
414    
415       1.  Fixed up parsing colon suffixed keywords
416       2.  Added the ability to shut the error messages up
417       3.  Reimplemented the pretty printer and fixed up/improved
418           the pretty printing of handle and -> types.
419       4.  Fixed up generation of literal symbols in the nowhere tool.
420       5.  Added some SML keywords to to sml.sty
421    
422    ----------------------------------------------------------------------
423    Name: Matthias Blume
424    Date: 2002/02/19 16:20:00 EST
425    Tag: blume-20020219-cmffi
426    Description:
427    
428    A wild mix of changes, some minor, some major:
429    
430    * All C FFI-related libraries are now anchored under $c:
431        $/c.cm      --> $c/c.cm
432        $/c-int.cm  --> $c/internals/c-int.cm
433        $/memory.cm --> $c/memory/memory.cm
434    
435    * "make" tool (in CM) now treats its argument pathname slightly
436      differently:
437        1. If the native expansion is an absolute name, then before invoking
438           the "make" command on it, CM will apply OS.Path.mkRelative
439           (with relativeTo = OS.FileSys.getDir()) to it.
440        2. The argument will be passed through to subsequent phases of CM
441           processing without "going native".  In particular, if the argument
442           was an anchored path, then "make" will not lose track of that anchor.
443    
444    * Compiler backends now "know" their respective C calling conventions
445      instead of having to be told about it by ml-nlffigen.  This relieves
446      ml-nlffigen from one of its burdens.
447    
448    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
449    
450    * Export C_DEBUG and C_Debug from $c/c.cm.
451    
452    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
453      subtyping relationship between incomplete pointers and their complete
454      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
455      with the convention of instantiating 'o with ('t, 'c) obj whenever
456      the pointer target type is complete.  In the incomplete case, 'o
457      will be instantiated with some "'c iobj" -- a type obtained by
458      using one of the functors PointerToIncompleteType or PointerToCompleteType.
459    
460      Operations that work on both incomplete and complete pointer types are
461      typed as taking an 'o ptr while operations that require the target to
462      be known are typed as taking some ('t, 'c) obj ptr.
463    
464      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
465      where void is an eqtype without any values.  This makes it possible
466      to work on voidptr values using functions meant to operate on light
467      incomplete pointers.
468    
469    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
470      been vastly simplified.
471    
472    ----------------------------------------------------------------------
473    Name: Matthias Blume
474    Date: 2002/02/19 10:48:00 EST
475    Tag: blume-20020219-pqfix
476    Description:
477    
478    Applied Chris Okasaki's bug fix for priority queues.
479    
480    ----------------------------------------------------------------------
481    Name: Matthias Blume
482    Date: 2002/02/15 17:05:00
483    Tag: Release_110_39
484    Description:
485    
486    Last-minute retagging is becoming a tradition... :-(
487    
488    This is the working release 110.39.
489    
490    ----------------------------------------------------------------------
491    Name: Matthias Blume
492    Date: 2002/02/15 16:00:00 EST
493    Tag: Release_110_39-orig
494    Description:
495    
496    Working release 110.39.  New bootfiles.
497    
498    (Update: There was a small bug in the installer so it wouldn't work
499    with all shells.  So I retagged. -Matthias)
500    
501    ----------------------------------------------------------------------
502    Name: Matthias Blume
503    Date: 2002/02/15 14:17:00 EST
504    Tag: blume-20020215-showbindings
505    Description:
506    
507    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
508    the latter can be useful for exploring what bindings are available at
509    the interactive prompt.  (The first function returns only the list
510    of symbols that are really bound, the second prints those but also the
511    ones that CM's autoloading mechanism knows about.)
512    
513    ----------------------------------------------------------------------
514    Name: Matthias Blume
515    Date: 2002/02/15 12:08:00 EST
516    Tag: blume-20020215-iptrs
517    Description:
518    
519    Two improvements to ml-nlffigen:
520    
521      1. Write files only if they do not exist or if their current contents
522         do not coincide with what's being written.  (That is, avoid messing
523         with the time stamps unless absolutely necessary.)
524    
525      2. Implement a "repository" mechanism for generated files related
526         to "incomplete pointer types".   See the README file for details.
527    
528    ----------------------------------------------------------------------
529    Name: Matthias Blume
530    Date: 2002/02/14 11:50:00 EST
531    Tag: blume-20020214-quote
532    Description:
533    
534    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
535    because of the new and improved tag generation scheme.  (Thanks to Allen
536    Leung for pointing it out.)
537    
538    ----------------------------------------------------------------------
539    Name: Lal George
540    Date: 2002/02/14 09:55:27 EST 2002
541    Tag: george-20020214-isabelle-bug
542    Description:
543    
544    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
545    of Isabelle on the x86.
546    
547    From Allen:
548    -----------
549     I've found the problem:
550    
551         in ra-core.sml, I use the counter "blocked" to keep track of the
552         true number of elements in the freeze queue.  When the counter goes
553         to zero, I skip examining the queue.  But I've messed up the
554         bookkeeping in combine():
555    
556             else ();
557             case !ucol of
558               PSEUDO => (if !cntv > 0 then
559                     (if !cntu > 0 then blocked := !blocked - 1 else ();
560                                        ^^^^^^^^^^^^^^^^^^^^^^^
561                      moveu := mergeMoveList(!movev, !moveu)
562                     )
563                  else ();
564    
565         combine() is called to coalesce two nodes u and v.
566         I think I was thinking that if the move counts of u and v are both
567         greater than zero then after they are coalesced then one node is
568         removed from the freeze queue.  Apparently I was thinking that
569         both u and v are of low degree, but that's clearly not necessarily true.
570    
571    
572    02/12/2002:
573        Here's the patch.  HOL now compiles.
574    
575        I don't know how this impact on performance (compile
576        time or runtime).  This bug caused the RA (especially on the x86)
577        to go thru the potential spill phase when there are still nodes on the
578        freeze queue.
579    
580    
581    
582    
583    ----------------------------------------------------------------------
584    Name: Matthias Blume
585    Date: 2002/02/13 22:40:00 EST
586    Tag: blume-20020213-fptr-rtti
587    Description:
588    
589    Fixed a bug in ml-nlffigen that was introduced with one of the previous
590    updates.
591    
592    ----------------------------------------------------------------------
593    Name: Matthias Blume
594    Date: 2002/02/13 16:41:00 EST
595    Tag: blume-20020213-cmlpq
596    Description:
597    
598    Added new priority queue export symbols (which have just been added to
599    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
600    not compile and the installer would choke.)
601    
602    ----------------------------------------------------------------------
603    Name: Matthias Blume
604    Date: 2002/02/13 16:15:00 EST
605    Tag: blume-20020213-various
606    Description:
607    
608    1. More tweaks to ml-nlffigen:
609    
610       - better internal datastructures (resulting in slight speedup)
611       - "-match" option requires exact match
612       - "localized" gensym counters (untagged structs/unions nested within
613         other structs/unions or within typedefs get a fresh counter; their
614         tag will be prefixed by a concatenation of their parents' tags)
615       - bug fixes (related to calculation of transitive closure of types
616         to be included in the output)
617    
618    2. Minor Basis updates:
619    
620       - added implementations for List.collate and Option.app
621    
622    ----------------------------------------------------------------------
623    Name: Matthias Blume
624    Date: 2002/02/11 15:55:00 EST
625    Tag: blume-20020211-gensym
626    Description:
627    
628    Added a "-gensym" option to command line of ml-nlffigen.  This can be
629    used to specify a "stem" -- a string that is inserted in all "gensym'd"
630    names (ML structure names that correspond to unnamed C structs, unions,
631    and enums), so that separate runs of ml-nlffigen do not clash.
632    
633    ----------------------------------------------------------------------
634    Name: Matthias Blume
635    Date: 2002/02/11 12:05:00 EST
636    Tag: blume-20020211-gensml
637    Description:
638    
639    A quick fix for a problem with GenSML (in the pgraph-util library):
640    Make generation of toplevel "local" optional.  (Strictly speaking,
641    signature definitions within "local" are not legal SML.)
642    
643    Other than that: updates to INSTALL and cm/TODO.
644    
645    ----------------------------------------------------------------------
646    Name: Matthias Blume
647    Date: 2002/02/08 15:00:00 EST
648    Tag: blume-20020208-uniquepid
649    Description:
650    
651    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
652    
653    1. The installer (config/install.sh) has gotten smarter:
654    
655         - Configuration options are a bit easier to specify now
656           (in config/targets).
657         - Bug in recognizing .tar.bz2 files fixed.
658         - Installer automatically resolves dependencies between
659           configuration options (e.g., if you ask for eXene, you will
660           also get cml -- regardless whether you asked for it or not).
661         - Installer can run in "quieter mode" by setting the environment
662           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
663           "completely silent", though.
664         - Build HashCons library as part of smlnj-lib.
665    
666    2. A new scheme for assigning persistent identifiers to compilation
667       units (and, by extension, to types etc.) has been put into place.
668       This fixes a long-standing bug where types and even dynamic values
669       can get internally confused, thereby compromising type safety
670       (abstraction) and dynamic correctness.  See
671    
672         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
673    
674       for an example of how things could go wrong until now.
675    
676       The downside of the new scheme is that pids are not quite as
677       persistent as they used to be: CM will generate a fresh pid
678       for every compilation unit that it thinks it sees for the first
679       time.  That means that if you compile starting from a clean, fresh
680       source tree at two different times, you end up with different
681       binaries.
682    
683       Cutoff recompilation, however, has not been compromised because
684       CM keeps pid information in special caches between runs.
685    
686    ----------------------------------------------------------------------
687    Name: Lal George
688    Date: 2002/02/07 15:34:13 EST 2002
689    Tag: <none>
690    Description:
691    
692    Compilers that generate assembly code may produce  global labels
693    whose value is resolved at link time. The various peephole optimization
694    modules did not take this in account.
695    
696    TODO. The Labels.addrOf function should really return an option
697    type so that clients are forced to deal with this issue, rather
698    than an exception being raised.
699    
700    ----------------------------------------------------------------------
701    Name: Lal George
702    Date: 2002/02/06 13:55:02 EST
703    Tag: george-20020206-ra-breakup
704    Description:
705    
706    1. A bug fix from Allen.
707    
708        A typo causes extra fstp %st(0)'s to be generated at compensation
709        edges, which might cause stack underflow traps at runtime.  This
710        occurs in fft where there are extraneous fstps right before the 'into'
711        trap instruction (in this case they are harmless since none of the
712        integers overflow.)
713    
714    2. Pulled out various utility modules that were embedded in the modules
715       of the register allocator. I need these modules for other purposes, but
716       they are not complete enough to put into a library (just yet).
717    ----------------------------------------------------------------------
718    Name: Matthias Blume
719    Date: 2002/01/31 16:05:00 EST
720    Tag: blume-20020131-sparc-ccalls
721    Description:
722    
723    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
724       of extra stack space by mistake.  Fixed.
725    
726    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
727    
728    ----------------------------------------------------------------------
729    Name: Allen Leung
730    Date: 2002/01/30
731    Tag: leunga-20020130-nowhere-bug-fix
732    Description:
733    
734       MLRISC bug fixes:
735       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
736       2. MachineInt.fromString was negating its value.
737    
738    ----------------------------------------------------------------------
739    Name: Matthias Blume
740    Date: 2002/01/29
741    Tag: blume-20020129-INSTALL
742    Description:
743    
744    - Added somewhat detailed installation instructions (file INSTALL).
745    - Fixed curl-detection bug in config/install.sh.
746    - It is now possible to select the URL getter using the URLGETTER
747      environment variable:
748    
749          not set / "unknown"      --> automatic detection (script tries wget,
750                                       curl, and lynx)
751          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
752                                       how to properly invoke them)
753          other                    --> use $URLGETTER directly, it must take
754                                       precisely two command-line arguments
755                                       (source URL and destination file name)
756    
757    ----------------------------------------------------------------------
758    Name: Matthias Blume
759    Date: 2002/01/28
760    Tag: blume-20020128-sparc-ccalls
761    Description:
762    
763    - Fixed problem with calculation of "used" registers in sparc-c-calls.
764    - Make use of the allocParam argument in sparc-c-calls.
765    
766    ----------------------------------------------------------------------
767    Name: Matthias Blume
768    Date: 2002/01/28
769    Tag: blume-20020128-allocParam
770    Description:
771    
772    John Reppy:  Changes c-calls API to accept client-callback for
773    allocating extra stack space.
774    me: Corresponding changes to mlriscGen (using a dummy argument that
775        does not change the current behavior).
776    
777    ----------------------------------------------------------------------
778    Name: Matthias Blume
779    Date: 2002/01/28 12:00:00
780    Tag: Release_110_38
781    Description:
782    
783    This time for real!!!
784    
785    ----------------------------------------------------------------------
786    Name: Matthias Blume
787    Date: 2002/01/28 10:56:00 EST
788    Tag: blume-20020128-retraction
789    Description:
790    
791    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
792       with blume-Release_110_38-retracted.)
793    
794    1. Fixed a problem with incorrect rounding modes in real64.sml.
795       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
796    
797    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
798       and enums fixed.  The naming of corresponding ML identifiers should
799       now be consistent again.
800    
801    ----------------------------------------------------------------------
802    Name: Allen Leung
803    Date: 2002/01/27
804    Tag: leunga-20020127-nowhere
805    Description:
806    
807       Added a target called nowhere in the configuration scripts.
808       Enabling this will build the MLRISC 'nowhere' tool (for translating
809       programs with where-clauses into legal SML code) during installation.
810    
811    ----------------------------------------------------------------------
812    Name: Matthias Blume
813    Date: 2002/01/25 21:27:00 EST
814    Tag: blume-Release_110_38-retracted
815    Description:
816    
817    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
818    
819    README will be added later.
820    
821    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
822    (Release_110_38) removed.  Reason: Last-minute bug fixes.
823    
824    ----------------------------------------------------------------------
825    Name: Matthias Blume
826    Date: 2002/01/25
827    Tag: blume-20020125-ffi
828    Description:
829    
830    A large number of tweaks and improvements to ml-nlffi-lib and
831    ml-nlffigen:
832    
833       - ML represenation types have been streamlined
834       - getter and setter functions work with concrete values, not abstract
835         ones where possible
836       - ml-nlffigen command line more flexible (see README file there)
837       - some bugs have been fixed (hopefully)
838    
839    ----------------------------------------------------------------------
840    Name: Lal George
841    Date: 2002/01/24
842    Tag: george-20020124-risc-ra-interface
843    Description:
844    
845       There is a dramatic simplification in the interface to the
846       register allocator for RISC architectures as a result of making
847       parallel copy instructions explicit.
848    
849    ----------------------------------------------------------------------
850    Name: Matthias Blume
851    Date: 2002/01/22
852    Tag: blume-20020122-x86-ccalls
853    Description:
854    
855    Bug fix for c-calls on x86 (having to do with how char- and
856    short-arguments are being handled).
857    
858    ----------------------------------------------------------------------
859    Name: Matthias Blume
860    Date: 2002/01/21
861    Tag: blume-20020121-ff
862    Description:
863    
864    Another day of fiddling with the FFI...
865    
866    1. Bug fix/workaround:  CKIT does not complain about negative array
867       dimensions, so ml-nlffigen has to guard itself against this possibility.
868       (Otherwise a negative dimension would send it into an infinite loop.)
869    
870    2. Some of the abstract types (light objects, light pointers, most "base"
871       types) in structure C are now eqtypes.
872    
873    3. Added constructors and test functions for NULL function pointers.
874    
875    ----------------------------------------------------------------------
876    Name: Matthias Blume
877    Date: 2002/01/18
878    Tag: blume-20020118-ready-for-new-release
879    Description:
880    
881    Made config/srcarchiveurl point to a new place.  (Will provide boot
882    files shortly.)
883    
884    Maybe we christen this to be 110.38?
885    
886    ----------------------------------------------------------------------
887    Name: Matthias Blume
888    Date: 2002/01/18
889    Tag: blume-20020118-more-ffifiddle
890    Description:
891    
892    Today's FFI fiddling:
893    
894      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
895        C.Set.* that use concrete (MLRep.*) arguments and results instead
896        of abstract ones.
897    
898      - Provided word-style bit operations etc. for "int" representation
899        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
900        and Long.
901    
902    ----------------------------------------------------------------------
903    Name: Matthias Blume
904    Date: 2002/01/18
905    Tag: blume-20020118-use-x86-fp
906    Description:
907    
908    Now that x86-fast-fp seems to be working, I turned it back on again
909    by default.  (Seems to work fine now, even with the FFI.)
910    
911    Other than that, I added some documentation about the FFI to
912    src/ml-nlffigen/README and updated the FFI test examples in
913    src/ml-nlffi-lib/Tests/*.
914    
915    ----------------------------------------------------------------------
916    Name: Allen Leung
917    Date: 2002/01/17
918    Tag: leunga-20020117-x86-fast-fp-call
919    Description:
920    
921       1. Fixed a problem with handling return fp values when x86's fast fp
922          mode is turned on.
923    
924       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
925          of %f32.
926    
927       3. Added a constructor INT32lit to the ast of MLRISC tools.
928    
929    ----------------------------------------------------------------------
930    Name: Matthias Blume
931    Date: 2002/01/16
932    Tag: blume-20020116-ffifiddle
933    Description:
934    
935    More fiddling with the FFI interface:
936    
937     - Make constness 'c instead of rw wherever possible.  This eliminates
938       the need for certain explicit coercions.  (However, due to ML's
939       value polymorphism, there will still be many cases where explicit
940       coercions are necessary.  Phantom types are not the whole answer
941       to modeling a subtyping relationship in ML.)
942    
943     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
944    
945     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
946       clumsy workaround for varargs problem.)
947    
948    ----------------------------------------------------------------------
949    Name: Lal George
950    Date: 2002/01/15
951    Tag: <none>
952    Description:
953    
954    1. Since COPY instructions are no longer native to the architecture,
955       a generic functor can be used to implement the expandCopies function.
956    
957    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
958       TEXT segment.
959    
960    ----------------------------------------------------------------------
961    Name: Matthias Blume
962    Date: 2002/01/15
963    Tag: blume-20020115-ffiupdates
964    Description:
965    
966    1. Fix for bug resulting in single-precision float values being returned
967       incorrectly from FFI calls.
968    
969    2. Small modifications to C FFI API:
970    
971        - memory-allocation routines return straight objects (no options)
972          and raise an exception in out-of-memory situations
973        - unsafe extensions to cast between function pointers and pointers
974          from/to ints
975        - added structure C_Debug as an alternative to structure C where
976          pointer-dereferencing (|*| and |*!) always check for null-pointers
977        - added open_lib' to DynLinkage;  open_lib' works like open_lib
978          but also takes a (possibly empty) list of existing library handles
979          that the current library depends on
980    
981    ----------------------------------------------------------------------
982    Name: Matthias Blume
983    Date: 2002/01/10
984    Tag: blume-20020110-newffigen
985    Description:
986    
987    1. Updates to portable graph code.
988    
989    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
990       more scalable now so that even huge interfaces such as the one
991       for GTK compile in finite time and space. :-)
992       See src/ml-nlffigen/README for details on what's new.
993    
994    ----------------------------------------------------------------------
995    Name: Lal George
996    Date: 2001/01/09 14:31:35 EST 2002
997    Tag: george-20011206-rm-native-copy
998    Description:
999    
1000            Removed the native COPY and FCOPY instructions
1001            from all the architectures and replaced it with the
1002            explicit COPY instruction from the previous commit.
1003    
1004            It is now possible to simplify many of the optimizations
1005            modules that manipulate copies. This has not been
1006            done in this change.
1007    
1008    ----------------------------------------------------------------------
1009    Name: Lal George
1010    Date: 2001/12/06 16:50:13 EST 2001
1011    Tag: george-20011206-mlrisc-instruction
1012    Description:
1013    
1014    Changed the representation of instructions from being fully abstract
1015    to being partially concrete. That is to say:
1016    
1017      from
1018            type instruction
1019    
1020      to
1021            type instr                              (* machine instruction *)
1022    
1023            datatype instruction =
1024                LIVE of {regs: C.cellset, spilled: C.cellset}
1025              | KILL of {regs: C.cellset, spilled: C.cellset}
1026              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1027              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1028              | INSTR of instr
1029    
1030    This makes the handling of certain special instructions that appear on
1031    all architectures easier and uniform.
1032    
1033    LIVE and KILL say that a list of registers are live or killed at the
1034    program point where they appear. No spill code is generated when an
1035    element of the 'regs' field is spilled, but the register is moved to
1036    the 'spilled' (which is present, more for debugging than anything else).
1037    
1038    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1039    We used to generate:
1040    
1041            DEFFREG f1
1042            f1 := f2 + f3
1043            trapb
1044    
1045    but now generate:
1046    
1047            f1 := f2 + f3
1048            trapb
1049            LIVE {regs=[f1,f2,f3], spilled=[]}
1050    
1051    Furthermore, the DEFFREG (hack) required that all floating point instruction
1052    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1053    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1054    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1055    this architecture).
1056    
1057    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1058    all the architectures. This will result in further simplification of the
1059    register allocator that must be aware of them for coalescing purposes, and
1060    will also simplify certain aspects of the machine description that provides
1061    callbacks related to parallel copies.
1062    
1063    ANNOTATION should be obvious, and now INSTR represents the honest to God
1064    machine instruction set!
1065    
1066    The <arch>/instructions/<arch>Instr.sml files define certain utility
1067    functions for making porting easier -- essentially converting upper case
1068    to lower case. All machine instructions (of type instr) are in upper case,
1069    and the lower case form generates an MLRISC instruction. For example on
1070    the alpha we have:
1071    
1072      datatype instr =
1073         LDA of {r:cell, b:cell, d:operand}
1074       | ...
1075    
1076      val lda : {r:cell, b:cell, d:operand} -> instruction
1077        ...
1078    
1079    where lda is just (INSTR o LDA), etc.
1080    
1081    ----------------------------------------------------------------------
1082    Name: Matthias Blume
1083    Date: 2001/11/22 21:40:00 EST
1084    Tag: Release_110_37
1085    Description:
1086    
1087    Release 110.37.  This time for real.
1088    
1089    ----------------------------------------------------------------------
1090    Name: Matthias Blume
1091    Date: 2001/11/21 16:35:00 EST
1092    Tag: blume-20011121-foot-in-mouth
1093    Description:
1094    
1095    Removed the "Release_110_37" tag because of a serious bug.
1096    This will be re-tagged once the bug is fixed.
1097    
1098    ----------------------------------------------------------------------
1099  Name: Matthias Blume  Name: Matthias Blume
1100  Date: 2001/11/21 16:14:00 EST  Date: 2001/11/21 16:14:00 EST
1101  Tag: blume-20011121-forgottenfile  Tag: blume-20011121-forgottenfile
# Line 24  Line 1107 
1107  ----------------------------------------------------------------------  ----------------------------------------------------------------------
1108  Name: Matthias Blume  Name: Matthias Blume
1109  Date: 2001/11/21 16:10:00 EST  Date: 2001/11/21 16:10:00 EST
1110  Tag: Release_110_37  Tag: blume-20011121-invalid_110_37
1111  Description:  Description:
1112    
1113    Note: I removed the original tag "Release_110_37" from this commit
1114          because we found a serious bug in all non-x86 backends.
1115          - Matthias
1116    
1117  1. Modifications to the SML/NJ code generator and to the runtime system  1. Modifications to the SML/NJ code generator and to the runtime system
1118     so that code object name strings are directly inserted into code     so that code object name strings are directly inserted into code
1119     objects at code generation time.  The only business the runtime system     objects at code generation time.  The only business the runtime system
# Line 248  Line 1335 
1335    
1336  ----------------------------------------------------------------------  ----------------------------------------------------------------------
1337  Name: Matthias Blume  Name: Matthias Blume
 >>>>>>> 1.169  
1338  Date: 2001/09/18 15:35:00 EDT  Date: 2001/09/18 15:35:00 EDT
1339  Tag: blume-20010918-readme11036  Tag: blume-20010918-readme11036
1340  Description:  Description:

Legend:
Removed from v.987  
changed lines
  Added in v.1131

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