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 810, Fri Apr 20 13:26:46 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
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
1256    Tag: george-20010824-MLRISC-graphs
1257    Description:
1258    
1259     removed clusters from MLRISC completely and replaced with graphs.
1260    
1261    ----------------------------------------------------------------------
1262    Name: Matthias Blume
1263    Date: 2001/08/23 17:50:00 EDT
1264    Tag: blume-20010823-toplevel
1265    Description:
1266    
1267    - some reorganization of the code that implements various kinds of
1268      environments in the compiler (static, dynamic, symbolic, combined)
1269    - re-implemented the EnvRef module so that evalStream works properly
1270      (if the stream contains references to "use", "CM.make", etc.)
1271    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1272    
1273    ----------------------------------------------------------------------
1274    Name: Matthias Blume
1275    Date: 2001/08/20 15:50 EDT
1276    Tag: blume20010820-slipup
1277    Description:
1278    
1279    I forgot to commit a few files.  Here they are...
1280    
1281    ----------------------------------------------------------------------
1282    Name: Matthias Blume
1283    Date: 2001/08/20 15:35:00 EDT
1284    Tag: blume-20010820-debugprof
1285    Description:
1286    
1287    !!!! NEW BOOTFILES !!!!
1288    
1289    This is another round of reorganizing the compiler sources.  This
1290    time the main goal was to factor out all the "instrumentation"
1291    passes (for profiling and backtracing) into their own library.
1292    The difficulty was to do it in such a way that it does not depend
1293    on elaborate.cm but only on elabdata.cm.
1294    
1295    Therefore there have been further changes to both elaborate.cm and
1296    elabdata.cm -- more "generic" things have been moved from the former
1297    to the latter.  As a result, I was forced to split the assignment
1298    of numbers indicating "primtyc"s into two portions: SML-generic and
1299    SML/NJ-specific.  Since it would have been awkward to maintain,
1300    I bit the bullet and actually _changed_ the mapping between these
1301    numbers and primtycs.  The bottom line of this is that you need
1302    a new set of bin- and bootfiles.
1303    
1304    I have built new bootfiles for all architectures, so doing a fresh
1305    checkout and config/install.sh should be all you need.
1306    
1307    The newly created library's name is
1308    
1309        $smlnj/viscomp/debugprof.cm
1310    
1311    and its sources live under
1312    
1313        src/compiler/DebugProf
1314    
1315    ----------------------------------------------------------------------
1316    Name: Matthias Blume
1317    Date: 2001/08/15 17:15:00 EDT
1318    Tag: blume-20010815-compreorg
1319    Description:
1320    
1321    This is a first cut at reorganizing the CM libraries that make up the
1322    core of the compiler.  The idea is to separate out pieces that could
1323    be used independently by tools, e.g., the parser, the typechecker, etc.
1324    
1325    The current status is a step in this direction, but it is not quite
1326    satisfactory yet.  Expect more changes in the future.
1327    
1328    Here is the current (new) organization...
1329    
1330        What used to be $smlnj/viscomp/core.cm is now divided into
1331        six CM libraries:
1332    
1333             $smlnj/viscomp/basics.cm
1334                           /parser.cm
1335                           /elabdata.cm
1336                           /elaborate.cm
1337                           /execute.cm
1338                           /core.cm
1339    
1340        The CM files for these libraries live under src/system/smlnj/viscomp.
1341        All these libraries are proxy libraries that contain precisely
1342        one CM library component.  Here are the locations of the components
1343        (all within the src/compiler tree):
1344    
1345             Basics/basics.cm
1346             Parse/parser.cm
1347             ElabData/elabdata.cm
1348             Elaborator/elaborate.cm
1349             Execution/execute.cm
1350             core.cm
1351    
1352         [This organization is the same that has been used already
1353         for a while for the architecture-specific parts of the visible
1354         compiler and for the old version of core.cm.]
1355    
1356         As you will notice, many source files have been moved from their
1357         respective original locations to a new home in one of the above
1358         subtrees.
1359    
1360         The division of labor between the new libraries is the following:
1361    
1362             basics.cm:
1363                - Simple, basic definitions that pertain to many (or all) of
1364                  the other libraries.
1365             parser.cm:
1366                - The SML parser, producing output of type Ast.dec.
1367                - The type family for Ast is also defined and exported here.
1368             elabdata.cm:
1369                - The datatypes that describe input and output of the elaborator.
1370                  This includes types, absyn, and static environments.
1371             elaborator.cm:
1372                - The SML/NJ type checker and elaborator.
1373                  This maps an Ast.dec (with a given static environment) to
1374                  an Absyn.dec (with a new static environment).
1375                - This libraries implements certain modules that used to be
1376                  structures as functors (to remove dependencies on FLINT).
1377             execute.cm:
1378                - Everything having to do with executing binary code objects.
1379                - Dynamic environments.
1380             core.cm:
1381                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1382                - Top-level modules.
1383                - FLINT (this should eventually become its own library)
1384    
1385    Notes:
1386    
1387    I am not 100% happy with the way I separated the elaborator (and its
1388    data structures) from FLINT.  Two instances of the same problem:
1389    
1390        1. Data structures contain certain fields that carry FLINT-specific
1391           information.  I hacked around this using exn and the property list
1392           module from smlnj-lib.  But the fact that there are middle-end
1393           specific fields around at all is a bit annoying.
1394    
1395        2. The elaborator calculates certain FLINT-related information.  I tried
1396           to make this as abstract as I could using functorization, but, again,
1397           the fact that the elaborator has to perform calculations on behalf
1398           of the middle-end at all is not nice.
1399    
1400        3. Having to used exn and property lists is unfortunate because it
1401           weakens type checking.  The other alternative (parameterizing
1402           nearly *everything*) is not appealing, though.
1403    
1404    I removed the "rebinding =" warning hack because due to the new organization
1405    it was awkward to maintain it.  As a result, the compiler now issues some of
1406    these warnings when compiling init.cmi during bootstrap compilation. On
1407    the plus side, you also get a warning when you do, for example:
1408       val op = = Int32.+
1409    which was not the case up to now.
1410    
1411    I placed "assign" and "deref" into the _Core structure so that the
1412    code that deals with the "lazy" keyword can find them there.  This
1413    removes the need for having access to the primitive environment
1414    during elaboration.
1415    
1416    ----------------------------------------------------------------------
1417    Name: Matthias Blume
1418    Date: 2001/08/13
1419    Tag: blume-20010813-closures
1420    Description:
1421    
1422    This fix was sent to us by Zhong Shao.  It is supposed to improve the
1423    performance of certain loops by avoiding needless closure allocation.
1424    
1425    ----------------------------------------------------------------------
1426    Name: Lal George
1427    Date: 2001/07/31 10:03:23 EDT 2001
1428    Tag: george-20010731-x86-fmalloc
1429    Description: Fixed bug in x86 calls
1430    
1431        There was a bug where call instructions would mysteriously
1432        vanish. The call instruction had to be one that returned
1433        a floating point value.
1434    
1435    ----------------------------------------------------------------------
1436    Name: Lal George
1437    Date: 2001/07/19 16:36:29 EDT 2001
1438    Tag: george-20010719-simple-cells
1439    Description:
1440    
1441    I have dramatically simplified the interface for CELLS in MLRISC.
1442    
1443    In summary, the cells interface is broken up into three parts:
1444    
1445      1. CellsBasis : CELLS_BASIS
1446    
1447            CellsBasis is a top level structure and common for all
1448            architectures.  it contains the definitions of basic datatypes
1449            and utility  functions over these types.
1450    
1451      2. functor Cells() : CELLS
1452    
1453            Cells generates an interface for CELLS that incorporates the
1454            specific resources on the target architecture, such as the
1455            presence of special register classes, their number and size,
1456            and various useful substructures.
1457    
1458      3. <ARCH>CELLS
1459    
1460            e.g. SparcCells: SPARCCELLS
1461    
1462            <ARCH>CELLS usually contains additional bindings for special
1463            registers  on the architecture, such as:
1464    
1465                    val r0 : cell           (* register zero *)
1466                    val y : cell            (* Y register *)
1467                    val psr : cell          (* processor status register *)
1468                    ...
1469    
1470            The structure returned by applying the Cells functor is opened
1471            in this interface.
1472    
1473    The main implication of all this is that the datatypes for cells is
1474    split between CellsBasis and CELLS -- a fairly simple change for user
1475    code.
1476    
1477    In the old scheme the CELLS interface had a definitional binding of
1478    the form:
1479    
1480            signature CELLS = sig
1481    
1482               structure CellsBasis = CellsBasis
1483    
1484               ...
1485    
1486            end
1487    
1488    With all the sharing constraints that goes on in MLRISC, this old
1489    design  quickly leads to errors such as:
1490    
1491            "structure definition spec inside of sharing ... "
1492    
1493    
1494    and appears to require an unacceptable amount of sharing and where
1495    constraint hackery.
1496    
1497    I think this error message (the interaction of definitional specs and
1498    sharing) requires more explanation on our web page.
1499    
1500    ----------------------------------------------------------------------
1501    Name: Matthias Blume
1502    Date: 2001/07/19 15:00:00 EDT
1503    Tag: blume-20010719-libreorg
1504    Description:
1505    
1506    This update puts together a fairly extensive but straightforward change
1507    to the way the libraries that implement the interactive system are
1508    organized:
1509    
1510       The biggest change is the elimination of structure Compiler.  As a
1511       replacement for this structure, there is now a CM library
1512       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
1513       that exports all the substructures of the original structure Compiler
1514       directly.  So instead of saying Compiler.Foo.bar one now simply
1515       says Foo.bar.  (The CM libraries actually export a collection of
1516       structures that is richer than the collection of substructures of
1517       structure Compiler.)
1518    
1519       To make the transition smooth, there is a separate library called
1520       $smlnj/compiler/compiler.cm which puts together and exports the
1521       original structure Compiler (or at least something very close to it).
1522    
1523       There are five members of the original structure Compiler
1524       that are not exported directly but which instead became members
1525       of a new structure Backend (described by signature BACKEND).  These are:
1526       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
1527       Interact (: INTERACT), structure Machine (: MACHINE), and val
1528       architecture (: string).
1529    
1530       Structure Compiler.Version has become structure CompilerVersion.
1531    
1532       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
1533       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
1534       or x86, respectively.
1535       Each of these exports the same frontend structures that
1536       $smlnj/compiler.cm exports.  But they do not have a structure Backend
1537       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
1538       Hppa, PPC, Sparc, or X86, respectively.
1539    
1540       Library $smlnj/compiler/all.cm exports the union of the exports of
1541       $smlnj/compiler/<arch>.cm
1542    
1543       There are no structures <Arch>Compiler anymore, use
1544       $smlnj/compiler/<arch>.cm instead.
1545    
1546       Library host-compiler-0.cm is gone.  Instead, the internal library
1547       that instantiates CM is now called cm0.cm.  Selection of the host
1548       compiler (backend) is no longer done here but. (Responsibility for it
1549       now lies with $smlnj/compiler/current.cm.  This seems to be more
1550       logical.)
1551    
1552       Many individual files have been moved or renamed.  Some files have
1553       been split into multiple files, and some "dead" files have been deleted.
1554    
1555    Aside from these changes to library organization, there are also changes
1556    to the way the code itself is organized:
1557    
1558       Structure Binfile has been re-implemented in such a way that it no
1559       longer needs any knowledge of the compiler.  It exclusively deals
1560       with the details of binfile layout.  It no longer invokes the
1561       compiler (for the purpose of creating new prospective binfile
1562       content), and it no longer has any knowledge of how to interpret
1563       pickles.
1564    
1565       Structure Compile (: COMPILE) has been stripped down to the bare
1566       essentials of compilation.  It no longer deals with linking/execution.
1567       The interface has been cleaned up considerably.
1568    
1569       Utility routines for dealing with linking and execution have been
1570       moved into their own substructures.
1571    
1572       (The ultimate goal of these changes is to provide a light-weight
1573       binfile loader/linker (at least for, e.g., stable libraries) that
1574       does not require CM or the compiler to be present.)
1575    
1576    CM documentation has been updated to reflect the changes to library
1577    organization.
1578    
1579    ----------------------------------------------------------------------
1580    Name: Matthias Blume
1581    Date: 2001/07/10 17:30:00 EDT
1582    Tag: Release_110_34
1583    Description:
1584    
1585    Minor tweak to 110.34 (re-tagged):
1586    
1587      - README.html file added to CVS repository
1588      - runtime compiles properly under FreeBSD 3.X and 4.X
1589    
1590    ----------------------------------------------------------------------
1591    Name: Matthias Blume
1592    Date: 2001/07/10 17:30:00 EDT
1593    Tag: Release_110_34
1594    Description:
1595    
1596    New version number (110.34). New bootfiles.
1597    
1598    ----------------------------------------------------------------------
1599    Name: Matthias Blume
1600    Date: 2001/07/09 16:00:00 EDT
1601    Tag: blume-20010709-more-varargs
1602    Description:
1603    
1604    I changed the handling of varargs in ml-nlffigen again:
1605    The ellipsis ... will now simply be ignored (with an accompanying warning).
1606    
1607    The immediate effect is that you can actually call a varargs function
1608    from ML -- but you can't actually supply any arguments beyond the ones
1609    specified explicitly.  (For example, you can call printf with its format
1610    string, but you cannot pass additional arguments.)
1611    
1612    This behavior is only marginally more useful than the one before, but
1613    it has the advantage that a function or, more importantly, a function
1614    type never gets dropped on the floor, thus avoiding follow-up problems with
1615    other types that refer to the offending one.
1616    
1617    ----------------------------------------------------------------------
1618    Name: Matthias Blume
1619    Date: 2001/07/09 11:25:00 EDT
1620    Tag: blume-20010709-varargs
1621    Description:
1622    
1623    1. ckit-lib.cm now exports structure Error
1624    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
1625       with a warning accompanied by a source location.  Moreover, it
1626       merely skips the offending function or type and proceeds with the
1627       rest of its work.u  As a result, one can safely feed C code containing
1628       "..." to ml-nlffigen.
1629    3. There are some internal improvements to CM, providing slightly
1630       more general string substitutions in the tools subsystem.
1631    
1632    ----------------------------------------------------------------------
1633    Name: Matthias Blume
1634    Date: 2001/06/27 15:10:00 EDT
1635    Tag: blume-20010627-concur
1636    Description:
1637    
1638    Fixed a small bug in CM's handling of parallel compilation.
1639    (You could observe the bug by Control-C-interrupting an ordinary
1640    CMB.make or CM.stabilize and then attaching some compile servers.
1641    The result was that all of a sudden the previously interrupted
1642    compilation would continue on its own.  This was because of
1643    an over-optimization: CM did not bother to clean out certain queues
1644    when no servers were attached "anyway", resulting in the contents
1645    of these queues to grab control when new servers did get attached.)
1646    
1647    There is also another minor update to the CM manual.
1648    
1649    ----------------------------------------------------------------------
1650    Name: Matthias Blume
1651    Date: 2001/06/26 16:15:00 EDT
1652    Tag: blume-20010626-cmdoc
1653    Description:
1654    
1655    Minor typo fixed in CM manual (syntax diagram for libraries).
1656    
1657    ----------------------------------------------------------------------
1658    Name: Matthias Blume
1659    Date: 2001/06/25 22:55:00 EDT
1660    Tag: blume-20010625-x86pc
1661    Description:
1662    
1663    Fixed a nasty bug in the X86 assembly code that caused signal
1664    handlers to fail (crash) randomly.
1665    
1666    ----------------------------------------------------------------------
1667    Name: Matthias Blume
1668    Date: 2001/06/25 12:05:00 EDT
1669    Tag: blume-20010625-nlffigen
1670    Description:
1671    
1672    This update fixes a number of minor bugs in ml-nlffigen as reported by
1673    Nick Carter <nbc@andrew.cmu.edu>.
1674    
1675      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
1676      2. Default names for generated files are now derived from the name of
1677         the C file *without its directory*.  In particular, this causes generated
1678         files to be placed locally even if the C file is in some system directory.
1679      3. Default names for generated signatures and structures are also derived
1680         from the C file name without its directory.  This avoids silly things
1681         like "structure GL/GL".
1682         (Other silly names are still possible because ml-nlffigen does not do
1683          a thorough check of whether generated names are legal ML identifiers.
1684          When in doubt, use command line arguments to force particular names.)
1685    
1686    ----------------------------------------------------------------------
1687    Name: Matthias Blume
1688    Date: 2001/06/21 12:25:00 EDT
1689    Tag: blume-20010621-eXene
1690    Description:
1691    
1692    eXene now compiles and (sort of) works again.
1693    
1694    The library name (for version > 110.33) is $/eXene.cm.
1695    
1696    I also added an new example in src/eXene/examples/nbody.  See the
1697    README file there for details.
1698    
1699    ----------------------------------------------------------------------
1700    Name: Matthias Blume
1701    Date: 2001/06/20 16:40:00 EDT
1702    Tag: blume-20010620-cml
1703    Description:
1704    
1705    CML now compiles and works again.
1706    
1707    Libraries (for version > 110.33):
1708    
1709      $cml/cml.cm            Main CML library.
1710      $cml/basis.cm          CML's version of $/basis.cm.
1711      $cml/cml-internal.cm   Internal helper library.
1712      $cml/core-cml.cm       Internal helper library.
1713      $cml-lib/trace-cml.cm  Tracing facility.
1714      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
1715    
1716    The installer (config/install.sh) has been taught how to properly
1717    install this stuff.
1718    
1719    ----------------------------------------------------------------------
1720    Name: Matthias Blume
1721    Date: 2001/06/19 17:55:00 EDT
1722    Tag: blume-20010619-instantiate
1723    Description:
1724    
1725    This un-breaks the fix for bug 1432.
1726    (The bug was originally fixed in 110.9 but I broke it again some
1727    time after that.)
1728    
1729    ----------------------------------------------------------------------
1730    Name: Matthias Blume
1731    Date: 2001/06/19 17:25:00 EDT
1732    Tag: blume-20010619-signals
1733    Description:
1734    
1735    This should (hopefully) fix the long-standing signal handling bug.
1736    (The runtime system was constructing a continuation record with an
1737    incorrect descriptor which would cause the GC to drop data on the floor...)
1738    
1739    ----------------------------------------------------------------------
1740    Name: Matthias Blume
1741    Date: 2001/06/15 15:05:00 EDT
1742    Tag: blume-20010615-moresparc
1743    Description:
1744    
1745    Here is a short late-hour update related to Sparc c-calls:
1746    
1747     -- made handling of double-word arguments a bit smarter
1748    
1749     -- instruction selection phase tries to collapse certain clumsily
1750        constructed ML-Trees; typical example:
1751    
1752            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
1753    
1754        This currently has no further impact on SML/NJ since mlriscGen does
1755        not seem to generate such patterns in the first place, and c-calls
1756        (which did generate them in the beginning) has meanwhile been fixed
1757        so as to avoid them as well.
1758    
1759    ----------------------------------------------------------------------
1760    Name: Matthias Blume
1761    Date: 2001/06/15 15:05:00 EDT
1762    Tag: blume-20010615-sparc
1763    Description:
1764    
1765    The purpose of this update is to provide an implementation of NLFFI
1766    on Sparc machines.
1767    
1768    Here are the changes in detail:
1769    
1770       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
1771       the Sparc implementation of the c-calls API.
1772       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
1773       for accessing the ML frame.  Thus, we have a real frame pointer and
1774       can freely modify %sp without need for an omit-frame-ptr phase.
1775       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
1776       this case.
1777       * ml-nlffigen has been taught to produce code for different architectures
1778       and calling conventions.
1779       * In a way similar to what was done in the x86 case, the Sparc
1780       backend uses its own specific extension to mltree.  (For example,
1781       it needs to be able to generate UNIMP instructions which are part
1782       of the calling convention.)
1783       * ml-nlffi-lib was reorganized to make it more modular (in particular,
1784       to make it easier to plug in new machine- and os-dependent parts).
1785    
1786    There are some other fairly unrelated bug fixes and cleanups as well:
1787    
1788       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
1789       that they properly share their libraries with existing SML/NJ libraries.
1790       * I fixed a minor cosmetic bug in CM, supressing certain spurious
1791       follow-up error messages.
1792       * Updates to CM/CMB documentation.
1793    
1794    TODO items:
1795    
1796       * MLRISC should use a different register as its asmTemp on the Sparc.
1797         (The current %o2 is a really bad choice because it is part of the
1798         calling conventions, so things might interfere in unexpected ways.)
1799    
1800    ----------------------------------------------------------------------
1801    Name: Matthias Blume
1802    Date: 2001/06/07
1803    Tag: blume-20010607-calls
1804    Description:
1805    
1806    A number of internal changes related to C calls and calling conventions:
1807    
1808    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
1809       number of bytes popped implicitly (by the callee).  In most cases
1810       this field is 0 but on x86/win32 it is some non-zero value.  This
1811       is information provided for the benefit of the "omit-frameptr" pass.
1812    2. The CALL instruction on the x86 carries a similar "pops" field.
1813       The instruction selection phase copies its value from the ML-Tree
1814       CALL statement.
1815    3. On all other architectures, the instruction selection phase checks
1816       whether "pops=0" and complains if not.
1817    4. The c-calls implementation for x86 now accepts two calling conventions:
1818       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
1819       up after the call and pops is set to 0.  For "stdcall", the caller
1820       does nothing, leaving the cleanup to the callee; pops is set to
1821       the number of bytes that were pushed onto the stack.
1822    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
1823       distinguish between "ccall" and "stdcall".
1824    6. The UNIMP instruction has been added to the supported Sparc instruction
1825       set. (This is needed for implementing the official C calling convention
1826       on this architecture.)
1827    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
1828       work with the latest CM.
1829    
1830    ----------------------------------------------------------------------
1831    Name: Matthias Blume
1832    Date: 2001/06/05 15:10:00 EDT
1833    Tag: blume-20010605-cm-index
1834    Description:
1835    
1836    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
1837    
1838    1. CM can now generate "index files".  These are human-readable files
1839       that list on a per-.cm-file basis each toplevel symbol defined or
1840       imported.  The location of the index file for
1841       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
1842       To enable index-file generation, set CM.Control.generate_index to true
1843       or export an environment-symbol: export CM_GENERATE_INDEX=true.
1844    
1845       The CM manual has been updated accordingly.
1846    
1847    2. I made some slight modifications to the c-calls API in MLRISC.
1848    
1849         a) There is now a callback to support saving/restoring of
1850            dedicated but caller-save registers around the actual call
1851            instruction.
1852         b) One can optionally specify a comment-annotation for the
1853            call instruction.
1854    
1855    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
1856       (For example, the comment annotation shows the C prototype of
1857        the function being called.)
1858    
1859    ----------------------------------------------------------------------
1860    Name: Matthias Blume
1861    Date: 2001/06/01 13:30:00 EDT
1862    Tag: blume-20010601-nlffi-cleanup
1863    Description:
1864    
1865    This is mostly a cleanup of MLFFI stuff:
1866    
1867       - some signature files have been put into a more exposed place
1868       - the ugly 'f type parameter is gone (simplifies types tremendously!)
1869       - ml-nlffigen changed accordingly
1870       - tutorial updated
1871    
1872    Other changes:
1873    
1874       - author's affiliation in CM manual(s) updated
1875       - some more recognized keywords added to Allen's sml.sty
1876    
1877    ----------------------------------------------------------------------
1878    Name: Matthias Blume
1879    Date: 2001/05/25 15:30:00 EDT
1880    Tag: blume-20010525-iptr
1881    Description:
1882    
1883      - put the official 110.33-README (as it appears on the ftp server) under
1884        CVS
1885      - fixed a small bug related to incomplete pointer types in
1886        ml-nlffigen
1887      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
1888        (it does not need the 'f type parameter)
1889    
1890    ----------------------------------------------------------------------
1891    Name: Matthias Blume
1892    Date: 2001/05/23 14:30:00 EDT
1893    Tag: Release_110_33
1894    Description:
1895    
1896    New version number (110.33).  New bootfiles.
1897    
1898    ----------------------------------------------------------------------
1899    Name: Matthias Blume
1900    Date: 2001/05/22 18:06:00 EDT
1901    Tag: blume-20010522-targets
1902    Description:
1903    
1904    Made install.sh use file config/targets.customized if it exists, falling
1905    back to config/targets if it doesn't.  This way one can have a customized
1906    version of the targets file without touching the "real thing", thus
1907    eliminating the constant fear of accidentally checking something bogus
1908    back into the CVS repository...  (File config/targets.customized must
1909    not be added to the repository!)
1910    
1911    ----------------------------------------------------------------------
1912    Name: Matthias Blume
1913    Date: 2001/05/22 16:30:00 EDT
1914    Tag: blume-20010522-minitut
1915    Description:
1916    
1917    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
1918       struct returns.
1919    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
1920       incomplete, preliminary documentation for NLFFI.
1921    
1922    ----------------------------------------------------------------------
1923    Name: Matthias Blume
1924    Date: 2001/05/14 11:30:00 EDT
1925    Tag: blume-20010514-script
1926    Description:
1927    
1928    Some bugs in install script fixed.
1929    
1930    In addition to that I also made a slight change to the NLFFI API:
1931    Functors generated by ml-nlffigen now take the dynamic library as a
1932    straight functor argument, not as a suspended one.  (The original
1933    functor code used to force the suspension right away anyway, so there
1934    was nothing gained by this complication of the interface.)
1935    
1936    ----------------------------------------------------------------------
1937    Name: Matthias Blume
1938    Date: 2001/05/11 14:35:00 EDT
1939    Tag: blume-20010511-ml-nlffi
1940    Description:
1941    
1942    I finally took the plunge and added my new FFI code to the main
1943    repository.  For x86-linux it is now ready for prime-time.
1944    
1945    There are two new subdirectories of "src":
1946    
1947      - ml-nlffi-lib:
1948           The utility library for programs using the FFI interface.
1949           Here is the implementation of $/c.cm and its associated low-level
1950           partners $/c-int.cm and $/memory.cm.
1951      - ml-nlffigen:
1952           A stand-alone program for generating ML glue code from C source
1953           code.
1954    
1955    Building ml-nlffigen requires $/ckit-lib.cm.
1956    
1957    The config/install.sh script has been updates to do the Right Thing
1958    (hopefully).
1959    
1960    Notice that the source tree for the C-Kit will not be put under "src"
1961    but directly under the installation root directory.  (This is the
1962    structure that currently exists on the CVS server when you check out
1963    module "sml".)  Fortunately, config/install.sh knows about this oddity.
1964    
1965    Bugs: No documentation yet.
1966    
1967    ----------------------------------------------------------------------
1968    Name: Matthias Blume
1969    Date: 2001/05/09 16:35:00 EDT
1970    Tag: blume-20010509-cpscontract
1971    Description:
1972    
1973    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
1974    wrapper/unwrapper elimination did not decrement usage counts and some
1975    dead variables got overlooked by the dead-up logic.)
1976    
1977    ----------------------------------------------------------------------
1978    Name: Lal George
1979    Date: 2001/05/08  17:26:09 EDT
1980    Tag: george-20010508-omit-frameptr
1981    Description:
1982    
1983    Changes to implement the omit-frame-pointer optimization to support
1984    raw C calls. For now, there is only support on the Intel x86, but
1985    other architectures will follow as more experience is gained with this.
1986    
1987    
1988    ----------------------------------------------------------------------
1989    Name: Matthias Blume
1990    Date: 2001/05/07 14:40:00 EDT
1991    Tag: blume-20010507-proxies
1992    Description:
1993    
1994    I made into "proxy libraries" all libraries that qualify for such a
1995    change.  (A qualifying library is a library that has another library or
1996    groups as its sole member and repeats that member's export list
1997    verbatim.  A proxy library avoids this repetition by omitting its export
1998    list, effectively inheriting the list that its (only) member exports.
1999    See the CM manual for more explanation.)
2000    The main effect is that explicit export lists for these libraries
2001    do not have to be kepts in sync, making maintenance a bit easier.
2002    
2003    I also added copyright notices to many .cm-files.
2004    
2005    Last but not least, I made a new set of bootfiles.
2006    
2007    ----------------------------------------------------------------------
2008    Name: Matthias Blume
2009    Date: 2001/05/04 17:00:00 EDT
2010    Tag: blume-20010504-cm-lsplit
2011    Description:
2012    
2013    0. John merged pending changes to $/smlnj-lib.cm
2014    
2015    1. Allen's previous change accidentally backed out of one of Lal's
2016       earlier changes.  I undid this mistake (re-introducing Lal's change).
2017    
2018    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
2019       within the compiler where applicable.  There is some code simplification
2020       because of that.
2021    
2022    3. The "split" phase (in FLINT) is now part of the default list of phases.
2023       Compiler.Control.LambdaSplitting.* can be used to globally control the
2024       lambda-splitting (cross-module-inlining) engine.  In addition to that,
2025       it can now also be controlled on a per-source basis: CM has been taught
2026       a new tool parameter applicable to ML source files.
2027    
2028       - To turn lambda-splitting off completely:
2029            local open Compiler.Control.LambdaSplitting in
2030                val _ = set Off
2031            end
2032       - To make "no lambda-splitting" the global default (but allow per-source
2033         overriding); this is the initial setting:
2034            local open Compiler.Control.LambdaSplitting in
2035                val _ = set (Default NONE)
2036            end
2037       - To make "lambda-splitting with aggressiveness a" the global default
2038         (and allow per-source overriding):
2039            local open Compiler.Control.LambdaSplitting in
2040                val _ = set (Default (SOME a))
2041            end
2042    
2043       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
2044         write (in the respective .cm-file):
2045            a.sml (lambdasplitting:off)
2046       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
2047            a.sml (lambdasplitting:on)
2048       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
2049         <a> is a decimal non-negative integer):
2050            a.sml (lambdasplitting:<a>)
2051       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
2052            a.sml (lambdasplitting:infinity)
2053       - To use the global default for a.sml:
2054            a.sml (lambdasplitting:default)
2055         or simply
2056            a.sml
2057    
2058    ----------------------------------------------------------------------
2059    Name: Allen Leung
2060    Date: 2001/05/04 01:57:00 EDT
2061    Tag: leunga-20010504-sync
2062    Description:
2063    
2064      MLRISC features.
2065    
2066      1. Fix to CMPXCHG instructions.
2067      2. Changed RA interface to allow annotations in callbacks.
2068      3. Added a new method to the stream interface to allow annotations updates.
2069    
2070    ----------------------------------------------------------------------
2071    Name: Matthias Blume
2072    Date: 2001/05/01 11:45:00 EDT
2073    Tag: blume-20010501-pcedittmp
2074    Description:
2075    
2076    Changed install.sh to use the current working directory instead of
2077    /usr/tmp for a temporary file (pcedittmp).  The previous choice
2078    of /usr/tmp caused trouble with MacOS X because of file premission
2079    problems.
2080    
2081    ----------------------------------------------------------------------
2082    Name: Matthias Blume
2083    Date: 2001/04/20 11:10:00 EDT
2084    Tag: blume-20010420-inMLflag
2085    Description:
2086    
2087     - added vp_limitPtrMask to vproc-state.h
2088       (for use by the raw-C-calls mechanism to implement proper interrupt
2089        handling)
2090     - made the ML compiler aware of various data-structure offsets so it
2091       can generate code for accessing the vp_inML flag and vp_limitPtrMask
2092     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
2093       raw C-calls
2094    
2095    ----------------------------------------------------------------------
2096  Name: Lal George  Name: Lal George
2097  Date: 2001/04/20 09:15:28 EDT  Date: 2001/04/20 09:15:28 EDT
2098  Tag: george-20010420-macosX  Tag: george-20010420-macosX
# Line 40  Line 2120 
2120   - made makeml script's verbosity level configurable via environment   - made makeml script's verbosity level configurable via environment
2121     variable (MAKEML_VERBOSITY)     variable (MAKEML_VERBOSITY)
2122    
2123   - eliminteded placeholder implementations for f32l, w16s, i16s, and f32s   - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
2124     in rawmem-x86.sml; we are now using the real thing     in rawmem-x86.sml; we are now using the real thing
2125    
2126  ----------------------------------------------------------------------  ----------------------------------------------------------------------
# Line 2073  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.810  
changed lines
  Added in v.1115

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