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

Legend:
Removed from v.909  
changed lines
  Added in v.1115

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