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 656, Fri Jun 9 03:39:04 2000 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
2097    Date: 2001/04/20 09:15:28 EDT
2098    Tag: george-20010420-macosX
2099    Description:
2100    
2101     - Changes to port to Mac OS X; Darwin.
2102    
2103     - In the process I found that sqrt was broken on the PPC, because the
2104       fsqrt instruction is not implemented.
2105    
2106    ----------------------------------------------------------------------
2107    Name: Matthias Blume
2108    Date: 2001/04/18 12:45:00 EDT
2109    Tag: blume-20010418-ccalls
2110    Description:
2111    
2112     - fixed two off-by-4 errors in the x86-specific c-calls implementation
2113       (this bug prevented structure arguments containing pointers from being
2114        passed correctly)
2115     - changed the raw-C-call code in mlriscGen.sml in such a way that
2116       structure arguments are represented as a pointer to the beginning
2117       of the structure (instead of having a series of synthesized arguments,
2118       one for each structure member)
2119    
2120     - made makeml script's verbosity level configurable via environment
2121       variable (MAKEML_VERBOSITY)
2122    
2123     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
2124       in rawmem-x86.sml; we are now using the real thing
2125    
2126    ----------------------------------------------------------------------
2127    Name: Matthias Blume
2128    Date: 2001/03/22 16:25:00 EST
2129    Tag: blume-20010322-bootfiles
2130    Description:
2131    
2132    Created a new set of bootfiles (for your automatic installation convenience).
2133    
2134    ----------------------------------------------------------------------
2135    Name: Matthias Blume
2136    Date: 2001/03/22 15:10:00 EST
2137    Tag: blume-20010322-rawmem-parcm
2138    Description:
2139    
2140    1. All "raw memory access" primitives for the new FFI are implemented now
2141       (at least on the x86).
2142    2. Some further cleanup of CM's parallel make mechanism.
2143    
2144    ----------------------------------------------------------------------
2145    Name: Matthias Blume
2146    Date: 2001/03/19 17:53:00 EST
2147    Tag: blume-20010319-parallel
2148    Description:
2149    
2150    Parallel make (using compile servers) now works again.
2151    
2152    To this end, CM.stabilize and CMB.make have been modified to work in
2153    two passes when compile servers are attached:
2154       1. Compile everything, do not perform stabilization; this pass
2155          uses compile servers
2156       2. Stabilize everything; this pass does not use compile servers
2157    If there are no compile servers, the two passes are combined into one
2158    (as before).  Splitting the passes increases the inherent parallelism
2159    in the dependency graph because the entire graph including all
2160    libraries is available at the same time.  This, in turn, improves
2161    server utilization.  The downside is that the master process will
2162    have to do some extra work after compilation is done (because for
2163    technical reasons it must re-read all the binfiles during stabilization).
2164    
2165    ----------------------------------------------------------------------
2166    Name: Matthias Blume
2167    Date: 2001/03/16 12:22:00 EST
2168    Tag: blume-20010316-bootfiles
2169    Description:
2170    
2171    Created a new set of bootfiles (for your automatic installation convenience).
2172    
2173    ----------------------------------------------------------------------
2174    Name: Matthias Blume
2175    Date: 2001/03/16 11:00:00 EST
2176    Tag: blume-20010316-MLTREE-fixup
2177    Description:
2178    
2179    This is a minor fixup for an (untagged) earlier commit by Allen.
2180    (A file was missing).
2181    
2182    ----------------------------------------------------------------------
2183    Name: Allen Leung
2184    Date: Mon Mar  5 18:54:57 EST 2001
2185    Tag: leunga-20010305-cut-support
2186    
2187    1. New support for alternative control-flow in MLTREE.
2188       Currently we support
2189    
2190          FLOW_TO(CALL ...., [k1,...,kn])
2191    
2192       This is needed for 'cuts to' in C-- and try/handle-like constructs
2193       in Moby
2194    
2195       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
2196    
2197    2. Register Allocator
2198    
2199       Changes in interface [from Fermin, John]
2200    
2201    3. Alpha 8-bit SLL support [Fermin]
2202    
2203    4. All architectures
2204    
2205       A new module (ClusterExpandCopies) for expanding parallel copies.
2206    
2207    ----------------------------------------------------------------------
2208    Name: Allen Leung
2209    Date: 2001/02/27 23:07:00 EST
2210    Tag: leunga-20010227-minor-stuff
2211    
2212    1. Alpha bug fix for CMOVNE
2213    2. Handle mltree COND(..,FCMP ...,...)
2214    3. Bug fix in simplifier
2215    
2216    ----------------------------------------------------------------------
2217    Name: Matthias Blume
2218    Date: 2001/01/30 17:50:00 EST
2219    Tag: blume-20010130-sync
2220    Description:
2221    
2222    This is just a minor update to sync my devel branch with the main brach.
2223    The only visible change is the addition of some README files.
2224    
2225    ----------------------------------------------------------------------
2226    Name: Matthias Blume
2227    Date: 2001/01/12 23:30:00 JST
2228    Tag: blume-20010112-bootfiles
2229    Description:
2230    
2231    Made a new set of bootfiles that goes with the current state of the
2232    repository.
2233    
2234    ----------------------------------------------------------------------
2235    Name: Matthias Blume
2236    Date: 2001/01/12 21:20:00 JST
2237    Tag: blume-20010112-sync
2238    Description:
2239    
2240    I am just flushing out some minor changes that had accumulated in
2241    my private branch in order to sync with the main tree.  (This is
2242    mainly because I had CVS trouble when trying to merge _into_ my
2243    private branch.)
2244    
2245    Most people should be completely unaffected by this.
2246    
2247    ----------------------------------------------------------------------
2248    Name: Allen Leung
2249    Date: Thu Jan 11 21:03:00 EST 2001
2250    Tag: leunga-20010111-labexp=mltree
2251    Description:
2252    
2253    1.  Removed the type LabelExp and replace it by MLTree.
2254    2.  Rewritten mltree-simplify with the pattern matcher tool.
2255    3.  There were some bugs in alpha code generator which would break
2256        64-bit code generation.
2257    4.  Redo the tools to generate code with the
2258    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
2259        are now generated by perl scripts.
2260    
2261    ----------------------------------------------------------------------
2262    Name: Matthias Blume
2263    Date: 2001/01/10 21:55:00 JST
2264    Tag: blume-20010110-rcc
2265    Description:
2266    
2267    The RCC stuff now seems to work (but only on the x86).
2268    This required hacking of the c-calls interface (and -implementation) in
2269    MLRISC.
2270    
2271    Normal compiler users should be unaffected.
2272    
2273    ----------------------------------------------------------------------
2274    Name: Matthias Blume
2275    Date: 2001/01/09 01:20:00 JST
2276    Tag: blume-20010109-rcc
2277    Description:
2278    
2279    This is a fairly big patch, flushing out a large number of pending
2280    changes that I made to my development copy over the last couple of days.
2281    
2282    Of practical relevance at this moment is a workaround for a pickling
2283    bug that Allen ran into the other day.  The cause of the bug itself is
2284    still unknown and it might be hard to fix it properly, but the
2285    workaround has some merits of its own (namely somewhat reducing pickling
2286    overhead for certain libraries).  Therefore, I think this solution should
2287    be satisfactory at this time.
2288    
2289    The rest of the changes (i.e., the vast majority) has to do with my
2290    ongoing efforts of providing direct support for C function calls from
2291    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
2292    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
2293    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
2294    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
2295    handle RCC.
2296    
2297    The last part (the changes to mlriscGen.sml) are still known to be
2298    wrong on the x86 and not implemented on all other architectures.  But
2299    the infrastructure is in place. I had to change a few functor
2300    signatures in the backend to be able to route the CCalls interface
2301    from MLRISC there, and I had to specialize the mltree type (on the
2302    x86) to include the necessary extensions. (The extensions themselves
2303    were already there and redy to go in MLRISC/x86).
2304    
2305    Everything should be very happy as soon as someone helps me with
2306    mlriscGen.sml...
2307    
2308    In any case, nothing of this should matter to anyone as long as the
2309    new primop is not being used (which is going to be the case unless you
2310    find it where I hid it :). The rest of the compiler is completely
2311    unaffected.
2312    
2313    ----------------------------------------------------------------------
2314    Name: Matthias Blume
2315    Date: 2001/01/05 00:30:00 JST
2316    Tag: blume-20010105-primops
2317    Description:
2318    
2319    Added some experimental support for work that I am doing right now.
2320    These changes mostly concern added primops, but there is also a new
2321    experimental C library in the runtime system (but currently not enabled
2322    anywhere except on Linux/X86).
2323    
2324    In the course of adding primops (and playing with them), I discovered that
2325    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
2326    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
2327    To recover, I made type information in INL_PRIM mandatory and changed
2328    prim.sml as well as built-in.sml accordingly.  The InLine structure now
2329    has complete, correct type information (i.e., no bottom types).
2330    
2331    Since all these changes mean that we need new binfiles, I also bumped the
2332    version number to 110.32.1.
2333    
2334    ----------------------------------------------------------------------
2335    Name: Matthias Blume
2336    Date: 2000/12/30 22:10:00 JST
2337    Tag: blume-20001230-various
2338    Description:
2339    
2340    Added proxy libraries for MLRISC and let MLRISC libraries refer
2341    to each other using path anchors.  (See CM manual for explanation.)
2342    
2343    Updated CM documentation.
2344    
2345    Fixed some bugs in CM.
2346    
2347    Implemented "proxy" libraries (= syntactic sugar for CM).
2348    
2349    Added "-quiet" option to makeml and changed runtime system accordingly.
2350    
2351    Added cleanup handler for exportML to reset timers and compiler stats.
2352    
2353    ----------------------------------------------------------------------
2354    Name: Lal George
2355    Date: 2000/12/22 22:22:58 EST 2000
2356    Tag: Release_110_32
2357    Description:
2358    
2359            Infinite precision used throughout MLRISC.
2360            see MLRISC/mltree/machine-int.sig
2361    
2362    ----------------------------------------------------------------------
2363    Name: Matthias Blume
2364    Date: 2000/12/22 23:16:00 JST
2365    Tag: blume-20001222-warn
2366    Description:
2367    
2368    Corrected wording and formatting of some CM warning message which I
2369    broke in my previous patch.
2370    
2371    ----------------------------------------------------------------------
2372    Name: Matthias Blume
2373    Date: 2000/12/22 21:20:00 JST
2374    Tag: blume-20001222-anchorenv
2375    Description:
2376    
2377    Fixed CM's handling of anchor environments in connection with CMB.make.
2378    
2379    ----------------------------------------------------------------------
2380    Name: Matthias Blume
2381    Date: 2000/12/22 13:15:00 JST
2382    Tag: blume-20001222-cleanup
2383    Description:
2384    
2385    Removed src/cm/ffi which does not (and did not) belong here.
2386    
2387    ----------------------------------------------------------------------
2388    Name: Matthias Blume
2389    Date: 2000/12/21 23:55:00 JST
2390    Tag: blume-20001221-exn
2391    Description:
2392    
2393    Probably most important: CM no longer silently swallows all exceptions
2394    in the compiler.
2395    Plus: some other minor CM changes.  For example, CM now reports some
2396    sizes for generated binfiles (code, data, envpickle, lambdapickle).
2397    
2398    ----------------------------------------------------------------------
2399    Name: Matthias Blume
2400    Date: 2000/12/15 00:01:05 JST
2401    Tag: blume-20001215-dirtool
2402    Description:
2403    
2404    - "dir" tool added.
2405    - improvements and cleanup to Tools structure
2406    - documentation updates
2407    
2408    ----------------------------------------------------------------------
2409    Name: Allen Leung
2410    Date: Thu Dec 14 03:45:24 EST 2000
2411    Description:
2412    Tag:  leunga-20001214-int-inf
2413    Description:
2414    
2415       In IntInf, added these standard functions, which are missing from our
2416    implementation:
2417    
2418        andb : int * int -> int
2419        xorb : int * int -> int
2420        orb  : int * int -> int
2421        notb : int -> int
2422         <<   : int * word -> int
2423        ~>>  : int * word -> int
2424    
2425       Not tested, I hope they are correct.
2426    
2427    ----------------------------------------------------------------------
2428    Name: Allen Leung
2429    Date: Fri Dec  8 19:23:26 EST 2000
2430    Description:
2431    Tag:  leunga-20001208-nowhere
2432    Description:
2433    
2434      Slight improvements to the 'nowhere' tool to handle OR-patterns,
2435    to generate better error messages etc.  Plus a brief manual.
2436    
2437    ----------------------------------------------------------------------
2438    Name: Lal George
2439    Date: 2000/12/08 09:54:02 EST 2000
2440    Tag: Release_110_31
2441    Description:
2442    
2443    - Version 110.31
2444    ----------------------------------------------------------------------
2445    Name: Allen Leung
2446    Date: Thu Dec  7 22:01:04 EST 2000
2447    Tag:  leunga-20001207-cell-monster-hack
2448    Description:
2449    
2450    Major MLRISC internal changes.  Affect all clients.
2451    Summary:
2452    
2453    1.  Type CELLS.cell = int is now replaced by a datatype.
2454        As a result, the old regmap is now gone.  Almost all interfaces
2455        in MLRISC change as a consequence.
2456    
2457    2.  A new brand version of machine description tool (v3.0) that generates
2458        modules expecting the new interface.  The old version is removed.
2459    
2460    3.  The RA interface has been further abstracted into two new functors.
2461        RISC_RA and X86RA.  These functors have much simpler interfaces.
2462        [See also directory MLRISC/demo.]
2463    
2464    4.  Some other new source->source code generation tools are available:
2465    
2466        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
2467        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
2468           I use this tool to generate the peephole optimizers---with the new
2469           cell type changes, peephole rules are becoming difficult to write
2470           without conditional pattern matching.
2471    
2472    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
2473        cover the entire MLRISC source tree so many things broke.
2474    
2475    6.  CM files have been moved to the subdirectory MLRISC/cm.
2476        They are moved because there are a lot of them and they clutter up the
2477        root dir.
2478    
2479    7.  More detailed documentation to come...
2480    
2481        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
2482        a makeml -rebuild first.  This is because of other other
2483        changes that Matthias has made (see below).
2484    
2485    
2486    ----------------------------------------------------------------------
2487    Name: Matthias Blume
2488    Date: 2000/11/30 23:12:00 JST
2489    Tag: blume-20001130-filereorg
2490    Description:
2491    
2492    Some manual updates and some file reorganizations in CM.
2493    
2494    ----------------------------------------------------------------------
2495    Name: Matthias Blume
2496    Date: 2000/11/24 17:45:00 JST
2497    Tag: blume-20001124-link
2498    Description:
2499    
2500    Drastically improved link traversal code for the case that the dynamic
2501    value was already loaded at bootstrap time.  As a result, CM and CMB
2502    now both load blazingly fast -- even on a very slow machine.  Also,
2503    memory consumption has been further reduced by this.
2504    
2505    Warning: The format of the PIDMAP file has changed.  THerefore, to
2506    bootstrap you have to do this:
2507    
2508    1. Run CMB.make
2509    2. Make a symbolic link for the boot directory:
2510         ln -s sml.boot.ARCH-OS xxx
2511    3. "Rebuild" the boot directory:
2512         ./makeml -boot xxx -rebuild sml ; rm xxx
2513    4. Boot normally:
2514          ./makeml
2515    
2516    ----------------------------------------------------------------------
2517    Name: Matthias Blume
2518    Date: 2000/11/21 21:20:00 JST
2519    Tag: blume-20001121-tools
2520    Description:
2521    
2522    Continued hacking on autoloading problem -- with success this time.
2523    Also changed tool-plugin mechanism.  See new CM manual.
2524    
2525    ----------------------------------------------------------------------
2526    Name: Matthias Blume
2527    Date: 2000/11/19 14:30:00 JST
2528    Tag:  blume-20001119-autoload
2529    Description:
2530    
2531    Some hacking to make autoloading faster.  Success for CMB, no success
2532    so far for CM.  There is a reduced structure CM' that autoloads faster.
2533    (This is a temporary, non-documented hack to be eliminated again when
2534    the general problem is solved.)
2535    
2536    ----------------------------------------------------------------------
2537    Name: Matthias Blume
2538    Date: 2000/11/17 14:10:00 JST
2539    Tag: blume-20001117-pickle-lib
2540    Description:
2541    
2542    1. Eliminated comp-lib.cm
2543    2. Made pickle-lib.cm
2544    3. Eliminated all uses of intset.sml (from comp-lib.cm)
2545    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
2546       equivalent constructs from smlnj-lib.cm (INtHashTable).
2547    5. Point 4. also goes for those uses of intmap.* in MLRISC.
2548       Duplicated intmap modules thrown out.
2549    6. Hunted down all duplicated SCC code and replaced it with
2550       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
2551    7. Rewrote Feedback module.
2552    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
2553       should be thrown out and equivalent modules from smlnj-lib.cm
2554       should be used (IntRedBlackSet, IntListSet, ...).
2555    
2556    Confirmed that compiler compiles to fixpoint.
2557    
2558    ----------------------------------------------------------------------
2559    Name: Allen Leung
2560    Date: 2000/11/10 18:00:00
2561    Tag: leunga-20001110-new-x86-fp
2562    
2563    A new x86 floating point code generator has been added.
2564    By default this is turned off.  To turn this on, do:
2565    
2566        CM.autoload "$smlnj/compiler.cm";
2567        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
2568    
2569    Changes:
2570    
2571    1.  Changed FTAN to FPTAN so that the assembly output is correct.
2572    2.  Changed the extension callback for FTANGENT to generate:
2573    
2574              fptan
2575              fstp  %st(0)
2576        instead of
2577              fptan
2578              fstpl ftempmem
2579    
2580    3.  Numerous assembly fixes for x86.
2581    
2582    5.  Cleaned up the machine code output module x86/x86MC.sml and added
2583        support for a whole bunch of instructions and addressing modes:
2584    
2585          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
2586          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
2587          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
2588          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
2589          fxch %st(n)
2590          fld %st(n)
2591          fst %st(n)
2592          fst mem
2593          fstp %st(n)
2594          fucom %st(n)
2595          fucomp %st(n)
2596    
2597        All these are now generated when the fast fp mode is turned on.
2598    
2599    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
2600    
2601    ----------------------------------------------------------------------
2602    Name: Matthias Blume
2603    Date: 2000/11/09 11:20:00 JST
2604    Tag: blume-20001109-scc
2605    Description:
2606    
2607    Eliminated some code duplication:
2608    
2609    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
2610       (Otherwise the functor is useless.)
2611    2. Used GraphSCCFn where SCCUtilFun was used previously.
2612    3. Got rid of SCCUtilFun (in comp-lib.cm).
2613    
2614    ----------------------------------------------------------------------
2615    Name: Lal George
2616    Date: 2000/11/06 09:02:21 EST 2000
2617    Tag: Release_110_30
2618    Description:
2619    
2620    - Version 110.30
2621    ----------------------------------------------------------------------
2622    Name: Matthias Blume
2623    Date: 2000/11/04 14:45:00
2624    Tag: blume-20001104-mlbuild
2625    Description:
2626    
2627    - Made ml-build faster on startup.
2628    - Documentation fixes.
2629    
2630    ----------------------------------------------------------------------
2631    Name: Matthias Blume
2632    Date: 2000/11/02 17:00:00 JST
2633    Tag: blume-20001102-condcomp
2634    Description:
2635    
2636    - Small tweaks to pickler -- new BOOTFILES!
2637    - Version bumped to 110.29.2.
2638    - Added conditional compilation facility to init.cmi (see comment there).
2639    ----------------------------------------------------------------------
2640    Name: Allen Leung
2641    Date: 2000/10/23 19:31:00
2642    Tag: leunga-20001023-demo-ra
2643    
2644    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
2645    2. Test programs for the graph library updated
2646    3. Some new MLRISC demo programs added
2647    
2648    ----------------------------------------------------------------------
2649    Name: Matthias Blume
2650    Date: 2000/08/31 22:15:00 JST
2651    Tag: blume-20001017-errmsg
2652    Description:
2653    
2654    More error message grief: Where there used to be no messages, there
2655    now were some that had bogus error regions.  Fixed.
2656    
2657    ----------------------------------------------------------------------
2658    Name: Matthias Blume
2659    Date: 2000/08/31 17:30:00 JST
2660    Tag: blume-20001017-v110p29p1
2661    Description:
2662    
2663    I made a version 110.29.1 with new bootfiles.
2664    
2665    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
2666              CM documentation changes and a small bugfix in CM's error reporting.
2667    
2668    ----------------------------------------------------------------------
2669    Name: Lal George
2670    Date: 2000/09/27 14:42:35 EDT
2671    Tag: george-20000927-nodestatus
2672    Description:
2673    
2674    Changed the type of the nodestatus, so that:
2675    
2676            SPILLED(~1)             is now SPILLED
2677            SPILLED(m) where m>=0   is now MEMREG(m)
2678            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
2679    
2680    ----------------------------------------------------------------------
2681    Name: Matthias Blume
2682    Date: 2000/09/07 14:45:00 JST
2683    Tag: blume-20000907-cmerrmsg
2684    Description:
2685    
2686    Small tweak to CM to avoid getting ML syntax error messages twice.
2687    
2688    ----------------------------------------------------------------------
2689    Name: Matthias Blume
2690    Date: 2000/08/31 18:00:00 JST
2691    Tag: blume-20000831-cvsbootfiles
2692    Description:
2693    
2694    New URL for boot files (because the 110.29 files on the BL server do
2695    now work correctly with my updated install scripts for yacc and lex).
2696    
2697    ----------------------------------------------------------------------
2698    Name: Matthias Blume
2699    Date: 2000/08/08 12:33:00 JST
2700    Tag: blume-20000808-manual
2701    Description:
2702    
2703    Tiny update to CM manual.
2704    
2705    ----------------------------------------------------------------------
2706    Name: Allen Leung
2707    Date: 2000/08/7 19:31:00
2708    Tag: leunga-20000807-a-whole-bunch-of-stuff
2709    
2710      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
2711    and Mobdy.
2712    
2713    1.  x86
2714    
2715       a.  Fixes to peephole module by John and Dan.
2716       b.  Assembly fix to SETcc by Allen.
2717       c.  Fix to c-call by John.
2718       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
2719       e.  Instruction selection optimization to SETcc as suggested by John.
2720    
2721           For example,
2722    
2723            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
2724    
2725           should generate:
2726    
2727            MOVL a, x
2728            SUBL b, x
2729            SHRL 31, x
2730    
2731    2.  IR stuff
2732    
2733         A bunch of new DJ-graph related algorithms added.  These
2734         speed up SSA construction.
2735    
2736    3.  SSA + Scheduling
2737    
2738         Added code for SSA and scheduling to the repository
2739    
2740    ----------------------------------------------------------------------
2741    Name: Lal George
2742    Date: 2000/07/27 11:53:14 EDT
2743    
2744    Tag: lal-20000727-linux-ppc
2745    Description:
2746    
2747     Made changes to support Linux PPC.
2748     p.s. I have confirmation that the 110.29 boot files work fine.
2749    
2750    ----------------------------------------------------------------------
2751    Name: Matthias Blume
2752    Date: 2000/07/27 17:40:00 JST
2753    Tag: blume-20000727-scripts
2754    Description:
2755    
2756    !!!! WARNING !!!!
2757    You must recompile the runtime system!
2758    !!!! WARNING !!!!
2759    
2760    This is basically another round of script-enhancements:
2761    
2762    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
2763       and undefine CM preprocessor symbols.
2764    
2765    2. ml-build avoids generating a new heap image if it finds that the
2766       existing one is still ok.  (The condition is that no ML file had to
2767       be recompiled and all ML files are found to be older that the heap
2768       file.)
2769    
2770       To make this work smoothly, I also hacked the runtime system as
2771       well as SMLofNJ.SysInfo to get access to the heap image suffix
2772       (.sparc-solaris, ...) that is currently being used.
2773    
2774       Moreover, the signature of CM.mk_standalone has changed.  See the
2775       CM manual.
2776    
2777    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
2778       CM manual for details.)
2779    
2780    4. More CM manual updates:
2781        - all of the above has been documented.
2782        - there is now a section describing the (CM-related) command line
2783          arguments that are accepted by the "sml" command
2784    
2785    ----------------------------------------------------------------------
2786    Name: Matthias Blume
2787    Date: 2000/07/25 16:20:00 JST
2788    Tag: blume-20000725-makedepend
2789    Description:
2790    
2791    Added a script called ml-makedepend.  This can be used in makefiles
2792    for Unix' make in a way very similar to the "makedepend" command for
2793    C.
2794    
2795    The script internally uses function CM.sources.
2796    
2797    Synopsis:
2798    
2799        ml-makedepend [-f makefile] cmfile targetname
2800    
2801    The default for the makefile is "makefile" (or "Makefile" should
2802    "makefile" not exist).
2803    
2804    ml-makedepend adds a cmfile/targetname-specific section to this
2805    makefile (after removing the previous version of this section).  The
2806    section contains a single dependency specification with targetname on
2807    the LHS (targetname is an arbitrary name), and a list of files derived
2808    from the cmfile on the RHS.  Some of the files on the RHS are
2809    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
2810    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
2811    path names.  The makefile writer is responsible for making sure that
2812    these variables have correct at the time "make" is invoked.
2813    
2814    ----------------------------------------------------------------------
2815    Name: Matthias Blume
2816    Date: 2000/07/22 23:30:00 JST
2817    Tag: blume-20000722-urlupdate
2818    Description:
2819    
2820    Changed BOOT and config/srcarchiveurl to point to BL server:
2821    
2822        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
2823    
2824    ----------------------------------------------------------------------
2825    Name: Matthias Blume
2826    Date: 2000/07/18 18:00:00 JST
2827    Tag: blume-20000718-Version_110_29
2828    Description:
2829    
2830    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
2831    
2832    2. Updated config/version to 110.29
2833    
2834    3. Updated config/srcarchiveurl
2835    
2836    3. New boot files!
2837       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
2838    
2839    ----------------------------------------------------------------------
2840    Name: Matthias Blume
2841    Date: 2000/07/11 13:58:00 JST
2842    Tag: blume-20000711-doctypo
2843    Description:
2844    
2845    Fixed a few typos in CM manual.
2846    
2847    ----------------------------------------------------------------------
2848    Name: Allen Leung
2849    Date: 2000/06/15 00:38:00
2850    Tag: leunga-20000704-sparc-x86
2851    
2852    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
2853    2. fix to x86 RET bug [found by Dan Grossman]
2854    3. sparc assembly bug fix for ticc instructions [found by Fermin]
2855    
2856       Affects c-- and moby only
2857    
2858    ----------------------------------------------------------------------
2859    Name: Matthias Blume
2860    Date: 2000/07/04 15:26:00
2861    Tag: blume-20000704-trigger
2862    Description:
2863    
2864    1. Improvements to CM manual.
2865    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
2866       of getting a back-trace.  The function, when called, raises an
2867       internal exception which explicitly carries the full back-trace history,
2868       so it is unaffected by any intervening handle-raise pairs ("trivial"
2869       or not).  The interactive loop will print that history once it arrives
2870       at top level.
2871       Short of having all exceptions implicitly carry the full history, the
2872       recommended way of using this facility is:
2873         - compile your program with instrumentation "on"
2874         - run it, when it raises an exception, look at the history
2875         - if the history is "cut off" because of some handler, go and modify
2876           your program so that it explicitly calls BTrace.trigger
2877         - recompile (still instrumented), and rerun; look at the full history
2878    
2879    ----------------------------------------------------------------------
2880    Name: Matthias Blume
2881    Date: 2000/07/03 15:36:00 JST
2882    Tag: blume-20000702-manual
2883    Description:
2884    
2885    Small corrections and updates to CM manual.
2886    
2887    ----------------------------------------------------------------------
2888    Name: Matthias Blume
2889    Date: 2000/06/29 16:04:00 JST
2890    Tag: blume-20000629-yacctool
2891    Description:
2892    
2893    Changes:
2894    
2895    1. Class "mlyacc" now takes separate arguments to pass options to
2896       generated .sml- and .sig-files independently.
2897    2. Corresponding CM manual updates.
2898    3. BTrace module now also reports call sites.  (However, for loop clusters
2899       it only shows from where the cluster was entered.)  There are associated
2900       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
2901    
2902    ----------------------------------------------------------------------
2903    Name: Matthias Blume
2904    Date: 2000/06/27 16:51:00 JST
2905    Tag: blume-20000627-noweb
2906    Description:
2907    
2908    Changes:
2909    
2910     1. Implemented "subdir" and "witness" options for noweb tool.
2911        This caused some slight internal changes in CM's tool implementation.
2912     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
2913        some remaining issues from earlier path anchor changes.
2914     3. Updated CM manual accordingly.
2915    
2916     4. Changed implementation of back-tracing so that I now consider it
2917        ready for prime-time.
2918    
2919        In particular, you don't have to explicitly trigger the back-trace
2920        anymore.  Instead, if you are running BTrace-instrumented code and
2921        there is an uncaught exception (regardless of whether or not it was
2922        raised in instrumented code), the top-level evalloop will print
2923        the back-trace.
2924    
2925        Features:
2926    
2927          - Instrumented and uninstrumented code work together seemlessly.
2928            (Of course, uninstrumented code is never mentioned in actual
2929             back-traces.)
2930    
2931          - Asymptotic time- and space-complexity of instrumented code is
2932            equal to that of uninstrumented code.  (This means that
2933            tail-recursion is preserved by the instrumentation phase.)
2934    
2935          - Modules whose code has been instrumented in different sessions
2936            work together without problem.
2937    
2938          - There is no penalty whatsoever on uninstrumented code.
2939    
2940          - There is no penalty on "raise" expressions, even in
2941            instrumented code.
2942    
2943        A potential bug (or perhaps it is a feature, too):
2944    
2945          A back-trace reaches no further than the outermost instrumented
2946          non-trivial "raise".  Here, a "trivial" raise is one that is the
2947          sole RHS of a "handle" rule.  Thus, back-traces reach trough
2948    
2949               <exp> handle e => raise e
2950    
2951          and even
2952    
2953               <exp> handle Foo => raise Bar
2954    
2955          and, of course, through
2956    
2957               <exp> handle Foo => ...
2958    
2959         if the exception was not Foo.
2960    
2961         Back-traces always reach right through any un-instrumented code
2962         including any of its "handle" expressions, trivial or not.
2963    
2964       To try this out, do the following:
2965    
2966         - Erase all existing binfiles for your program.
2967           (You may keep binfiles for those modules where you think you
2968            definitely don't need back-tracing.)
2969         - Turn on back-trace instrumentation:
2970              SMLofNJ.Internals.BTrace.mode (SOME true);
2971         - Recompile your program.  (I.e., run "CM.make" or "use".)
2972         - You may now turn instrumentation off again (if you want):
2973              SMLofNJ.Internals.BTrace.mode (SOME false);
2974         - Run your program as usual.  If it raises an exception that
2975           reaches the interactive toplevel, then a back-trace will
2976           automatically be printed.  After that, the toplevel loop
2977           will print the exception history as usual.
2978    
2979    ----------------------------------------------------------------------
2980    Name: Matthias Blume
2981    Date: 2000/06/26 09:56:46 JST
2982    Tag: blume-20000626-setup
2983    Description:
2984    
2985    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
2986          ML code before and after compiling a file (e.g., to set compiler
2987          flags)
2988    
2989    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
2990              - associated changes to btrace.sml (BTrace instrumentation pass)
2991              - cleaner implementation of btimp.sml (BTrace tracing and report
2992                module)
2993    
2994    CM manual: * new path encoding documented
2995               * description of setup-parameter to "sml" added
2996    
2997    The biggest user-visible change to back-tracing is that it is no
2998    longer necessary to compile all traced modules within the same
2999    session.  (This was a real limitation.)
3000    
3001    ----------------------------------------------------------------------
3002    Name: Matthias Blume
3003    Date: 2000/06/24 12:40:00 JST
3004    Tag: blume-20000624-startup
3005    Description:
3006    
3007    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
3008    bit too often -- to put it mildly. :)
3009    
3010    ----------------------------------------------------------------------
3011    Name: Matthias Blume
3012    Date: 2000/06/23 18:20:00 JST
3013    Tag: blume-20000623-btrace
3014    Description:
3015    
3016    This updates adds a backtrace facility to aid programmers in debugging
3017    their programs.  This involves the following changes:
3018    
3019    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
3020       keeping track of the current call stack.  When programs are compiled
3021       in a special mode, the compiler will insert calls to these hooks
3022       into the user program.
3023       "Hook" means that it is possible for different implementations of
3024       back-tracing to register themselves (at different times).
3025    
3026    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
3027       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
3028       It can be turned on using this call:
3029         SMLofNJ.Internals.BTrace.mode (SOME true);
3030       Turning it off again:
3031         SMLofNJ.Internals.BTrace.mode (SOME false);
3032       Querying the current status:
3033         SMLofNJ.Internals.BTrace.mode NONE;
3034       Annotated programs are about twice as big as normal ones, and they
3035       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
3036       where all hooks do nothing).  The slowdown with a plugin that is
3037       actually useful (such as the one supplied by default) is even greater,
3038       but in the case of the default plugin it is still only an constant
3039       factor (amortized).
3040    
3041    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
3042       with a sub-structure BTrace for controlling back-tracing.  In particular,
3043       the above-mentioned function "mode" controls whether the annotation
3044       phase is invoked by the compiler.  Another important function is
3045       "trigger": when called it aborts the current execution and causes
3046       the top-level loop to print a full back-trace.
3047    
3048    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
3049       for back-tracing.  It keeps track of the dynamic call stack and in
3050       addition to that it keeps a partial history at each "level" of that
3051       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
3052       d and b (at separate times, dynamically), then the report will show:
3053    
3054       GOTO   d
3055             /c
3056       GOTO  \b
3057       CALL   a
3058    
3059       This shows that there was an initial non-tail call of a, then a
3060       tail-call to b or c, looping behavior in a cluster of functions that
3061       consist of b and c, and then a goto from that cluster (i.e., either from
3062       b or from c) to d.
3063    
3064       Note that (depending on the user program) the amount of information
3065       that the back-trace module has to keep track of at each level is bounded
3066       by a constant.  Thus, the whole implementation has the same asymptotical
3067       complexity as the original program (both in space and in time).
3068    
3069    5. compiler/TopLevel/interact/evalloop.sml has been modified to
3070       handle the special exception SMLofNJ.Internals.BTrace.BTrace
3071       which is raised by the "trigger" function mentioned above.
3072    
3073    Notes on usage:
3074    
3075    - Annotated code works well together with unannotated code:
3076    Unannotated calls simply do not show up at all in the backtrace.
3077    
3078    - It is not a good idea to let modules that were annotated during
3079    different sessions run at the same time.  This is because the compiler
3080    chooses small integers to identify individual functions, and there
3081    will be clashes if different modules were compiled in separate sessions.
3082    (Nothing will crash, and you will even be told about the clashes, but
3083    back-trace information will in general not be useful.)
3084    
3085    - Back-tracing can be confused by callcc and capture.
3086    
3087    - The only way of getting a back-trace right now is to explicitly
3088    invoke the "trigger" function from your user program.  Eventually, we
3089    should make every exception carry back-trace information (if
3090    available).  But since this creates more overhead at "raise"-time
3091    (similar to the current exnHistory overhead), I have not yet
3092    implemented this.  (The implementation will be rather easy.)  With
3093    exceptions carrying back-trace information, this facility will be even
3094    more useful because users don't need to modify their programs...
3095    
3096    - While it is possible to compile the compiler with back-trace
3097    annotations turned on (I did it to get some confidence in
3098    correctness), you must make absolutely sure that core.sml and
3099    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
3100    be compiled with annotation because there is no core access yet, but
3101    if you compile btimp.sml with annotation, then the system will go into
3102    an infinite recursion and crash.)
3103    Since CM currently does not know about BTrace, the only way to turn
3104    annotations on and off for different modules of the compiler is to
3105    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
3106    this is awkward and clumsy.
3107    
3108    Sample sessions:
3109    
3110    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
3111    - SMLofNJ.Internals.BTrace.mode (SOME true);
3112    [autoloading]
3113    [autoloading done]
3114    val it = false : bool
3115    - structure X = struct
3116    -     fun main n = let
3117    -         fun a (x, 0) = d x
3118    -           | a (x, n) = b (x, n - 1)
3119    -         and b (x, n) = c (x, n)
3120    -         and c (x, n) = a (x, n)
3121    -         and d x = e (x, 3)
3122    -         and e (x, 0) = f x
3123    -           | e (x, n) = e (x, n - 1)
3124    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
3125    -           | f n = n * g (n - 1)
3126    -         and g n = a (n, 3)
3127    -     in
3128    -         f n
3129    -     end
3130    - end;
3131    structure X : sig val main : int -> int end
3132    - X.main 3;
3133    *** BACK-TRACE ***
3134    GOTO   stdIn:4.2-13.20: X.main[2].f
3135    GOTO-( stdIn:4.2-13.20: X.main[2].e
3136    GOTO   stdIn:4.2-13.20: X.main[2].d
3137         / stdIn:4.2-13.20: X.main[2].a
3138         | stdIn:4.2-13.20: X.main[2].b
3139    GOTO-\ stdIn:4.2-13.20: X.main[2].c
3140    CALL   stdIn:4.2-13.20: X.main[2].g
3141    GOTO   stdIn:4.2-13.20: X.main[2].f
3142    GOTO-( stdIn:4.2-13.20: X.main[2].e
3143    GOTO   stdIn:4.2-13.20: X.main[2].d
3144         / stdIn:4.2-13.20: X.main[2].a
3145         | stdIn:4.2-13.20: X.main[2].b
3146    GOTO-\ stdIn:4.2-13.20: X.main[2].c
3147    CALL   stdIn:4.2-13.20: X.main[2].g
3148    GOTO   stdIn:4.2-13.20: X.main[2].f
3149    GOTO-( stdIn:4.2-13.20: X.main[2].e
3150    GOTO   stdIn:4.2-13.20: X.main[2].d
3151         / stdIn:4.2-13.20: X.main[2].a
3152         | stdIn:4.2-13.20: X.main[2].b
3153    GOTO-\ stdIn:4.2-13.20: X.main[2].c
3154    CALL   stdIn:4.2-13.20: X.main[2].g
3155    GOTO   stdIn:4.2-13.20: X.main[2].f
3156    CALL   stdIn:2.15-17.4: X.main[2]
3157    -
3158    
3159    (Note that because of a FLINt bug the above code currently does not
3160    compile without BTrace turned on.)
3161    
3162    Here is another example, using my modified Tiger compiler:
3163    
3164    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
3165    - SMLofNJ.Internals.BTrace.mode (SOME true);
3166    [autoloading]
3167    [autoloading done]
3168    val it = false : bool
3169    - CM.make "sources.cm";
3170    [autoloading]
3171    ...
3172    [autoloading done]
3173    [scanning sources.cm]
3174    [parsing (sources.cm):parse.sml]
3175    [creating directory CM/SKEL ...]
3176    [parsing (sources.cm):tiger.lex.sml]
3177    ...
3178    [wrote CM/sparc-unix/semant.sml]
3179    [compiling (sources.cm):main.sml]
3180    [wrote CM/sparc-unix/main.sml]
3181    [New bindings added.]
3182    val it = true : bool
3183    - Main.compile ("../testcases/merge.tig", "foo.out");
3184    *** BACK-TRACE ***
3185    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
3186    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
3187    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
3188    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
3189    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
3190    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
3191    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
3192         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
3193    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
3194    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
3195    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
3196    CALL   main.sml:1.18-118.4: Main.compile[2]
3197    -
3198    
3199    ----------------------------------------------------------------------
3200    Name: Matthias Blumen
3201    Date: 2000/06/21 18:00:00 JST
3202    Tag: blume-20000621-manual
3203    Description:
3204    
3205    CM manual update: Path environments documented.
3206    
3207    ----------------------------------------------------------------------
3208    Name: Matthias Blume
3209    Date: 2000/06/19 13:40:00
3210    Tag: blume-20000619-manual
3211    Description:
3212    
3213    CM manual and system/README update.  This only covers the fact that
3214    there are no more implicit anchors.  (Path environments and the "bind"
3215    option to "cm" have yet to be documented.)
3216    
3217    ----------------------------------------------------------------------
3218    Name: Matthias Blume
3219    Date: 2000/06/19 11:05:00 JST
3220    Tag: blume-20000619-chdir-bugfix
3221    Description:
3222    
3223    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
3224    
3225    ----------------------------------------------------------------------
3226    Name: Matthias Blume
3227    Date: 2000/06/18 22:00:10 JST
3228    Tag: blume-20000618-implicit-anchors-really-gone
3229    Description:
3230    
3231    I updates the previous HISTORY entry where I forgot to mention that
3232    implicit anchors are no longer with us.
3233    
3234    The current update also gets rid of the (now useless) controller
3235    CM.Control.implicit_anchors.
3236    
3237    ----------------------------------------------------------------------
3238    Name: Matthias Blume
3239    Date: 2000/06/16 17:30:00 JST
3240    Tag: blume-20000616-anchorenv
3241    Description:
3242    
3243    This patch implements the long anticipated (just kidding :) "anchor
3244    environment" mechanism.  In the course of doing this, I also
3245    re-implemented CM's internal "SrcPath" module from scratch.  The new
3246    one should be more robust in certain boundary cases.  In any case, it
3247    is a lot cleaner than its predecessor (IMHO).
3248    
3249    This time, although there is yet another boot file format change, I
3250    kept the unpickler backward-compatible.  As a result, no new bootfiles
3251    are necessary and bootstrapping is straightforward.  (You cannot read
3252    new bootfiles into an old system, but the other way around is no
3253    problem.)
3254    
3255    Visible changes:
3256    
3257    ** 0. Implicit path anchors (without the leading $-symbol) are no
3258    longer recognized at all. This means that such path names are not
3259    illegal either.  For example, the name basis.cm simply refers to a
3260    local file called "basis.cm" (i.e, the name is an ordinary path
3261    relative to .cm-files directory).  Or, to put it differently, only
3262    names that start with $ are anchored paths.
3263    
3264    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
3265    vanished.
3266    
3267    John (Reppy) had critizised this as soon as I originally proposed and
3268    implemented it, but at that time I did not really deeply believe
3269    him. :) Now I came full-circle because I need the $<singlearc> syntax
3270    in another place where it cannot be seen as an abbreviation for
3271    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
3272    seems to mean (i.e., it "expands" into the corresponding anchor
3273    value).
3274    
3275    However, when paths are used as members in CM description files, it
3276    continues to be true that there must be at least another arc after the
3277    anchor.  This is now enforced separately during semantic analysis
3278    (i.e., from a lexical/syntactical point of view, the notation is ok.)
3279    
3280    ** 2. The "cm" class now accepts an option "bind".  The option's value
3281    is a sub-option list of precisely two items -- one labeled "anchor"
3282    and the other one labeled "value".  As you might expect, "anchor" is
3283    used to specify an anchor name to be bound, and "value" specifies what
3284    the anchor is being bound to.
3285    
3286    The value must be a directory name and can be given in either standard
3287    syntax (including the possibility that it is itself an anchored path)
3288    or native syntax.
3289    
3290    Examples:
3291    
3292       foo.cm (bind:(anchor:bar value:$mystuff/bar))
3293       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
3294    
3295    and so on.
3296    
3297    The meaning of this is that the .cm-file will be processed with an
3298    augmented anchor environment where the given anchor(s) is/are bound to
3299    the given values(s).
3300    
3301    The rationale for having this feature is this: Suppose you are trying
3302    to use two different (already stable) libraries a.cm and b.cm (that
3303    you perhaps didn't write yourself).  Further, suppose each of these
3304    two libraries internally uses its own auxiliary library $aux/lib.cm.
3305    Normally you would now have a problem because the anchor "lib" can not
3306    be bound to more than one value globally.  Therefore, the project that
3307    uses both a.cm and b.cm must locally redirect the anchor to some other
3308    place:
3309    
3310       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
3311       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
3312    
3313    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
3314    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
3315    
3316    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
3317    you when you do so at the time of CM.stabilize).  Therefore, you can
3318    also use an anchored path as the value:
3319    
3320      a.cm (bind:(anchor:lib value:$a-lib))
3321      b.cm (bind:(anchor:lib value:$b-lib))
3322    
3323    Now you can globally configure (using the usual CM.Anchor.anchor or
3324    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
3325    itself is always locally bound, setting it globally is no longer
3326    meaningful or necessary (but it does not hurt either).  In fact, "lib"
3327    can still be used as a global anchor for separate purposes.  As a
3328    matter of fact, one can locally define "lib" in terms of a global
3329    "lib":
3330    
3331      a.cm (bind:(anchor:lib value:$lib/a))
3332      b.cm (bind:(anchor:lib value:$lib/b))
3333    
3334    ** 3: The encoding of path names has changed.  This affects the way
3335    path names are shown in CM's progress report and also the internal
3336    protocol encoding used for parallel make.
3337    
3338    The encoding now uses one or more ':'-separated segments.  Each
3339    segments corresponds to a file that has been specified relative to the
3340    file given by its preceding segment.  The first segment is either
3341    relative to the CWD, absolute, or anchored.  Each segment itself is
3342    basically a Unix pathname; all segments but the first are relative.
3343    
3344    Example:
3345    
3346       $foo/bar/baz.cm:a/b/c.sml
3347    
3348    This path denotes the file bar/a/b/c.sml relative to the directory
3349    denoted by anchor "foo".  Notice that the encoding also includes
3350    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
3351    paths are resolved relative to the .cm-files directory, so baz.cm must
3352    be ignored to get the "real" pathname.
3353    
3354    To make this fact more obvious, CM puts the names of such "virtual
3355    arcs" into parentheses when they appear in progress reports. (No
3356    parentheses will appear in the internal protocol encoding.)  Thus,
3357    what you really see is:
3358    
3359      $foo/bar/(baz.cm):a/b/c.sml
3360    
3361    I find this notation to be much more informative than before.
3362    
3363    Another new feature of the encoding is that special characters
3364    including parentheses, colons, (back)slashes, and white space are
3365    written as \ddd (where ddd is the decimal encoding of the character).
3366    
3367    *** The CM manual still needs to be updated.
3368    
3369    ----------------------------------------------------------------------
3370    Name: Allen Leung
3371    Date: 2000/06/15 00:38:00
3372    Tag: leunga-20000615-x86-peephole
3373    
3374    x86 Peephole fix by Fermin.  Affects c-- and moby only.
3375    
3376    ----------------------------------------------------------------------
3377    Name: Matthias Blume
3378    Date: 2000/06/12 11:40:00
3379    Tag: blume-20000612-parmakefix
3380    Description:
3381    
3382    More cleanup after changing the file naming scheme: This time I
3383    repaired the parallel make mechanism for CMB.make which I broke earlier.
3384    
3385    ----------------------------------------------------------------------
3386    Name: Allen Leung
3387    Date: 2000/06/09 01:25:00
3388    Tag: leunga-20000609-various
3389    
3390    None of these things should affect normal SML/NJ operations
3391    
3392    1. Peephole improvements provided by Fermin (c--)
3393    2. New annotation DEFUSE for adding extra dependence (moby)
3394    3. New X86 LOCK instructions (moby)
3395    4. New machine description language for reservation tables (scheduling)
3396    5. Fixes to various optimization/analysis modules (branch chaining, dominator
3397       trees etc.)
3398    6. I've changed the CM files so that they can work with versions
3399       110.0.6, 110.25 and 110.28
3400    
3401  ----------------------------------------------------------------------  ----------------------------------------------------------------------
3402  Name: Matthias Blume  Name: Matthias Blume
3403  Date: 2000/06/09 12:40:00  Date: 2000/06/09 12:40:00
# Line 574  Line 3961 
3961    
3962  3.  Assembly  3.  Assembly
3963    
3964      When generating assemby, resolve the value of client defined constants,      When generating assembly, resolve the value of client defined constants,
3965      instead of generating symbolic values.  This is controlled by the      instead of generating symbolic values.  This is controlled by the
3966      new flag "asm-resolve-constants", which is default to true.      new flag "asm-resolve-constants", which is default to true.
3967    
# Line 597  Line 3984 
3984    
3985  To this end, I arranged that instead of "structure Core" as "structure  To this end, I arranged that instead of "structure Core" as "structure
3986  _Core" is bound in the pervasive environment.  Core access is done via  _Core" is bound in the pervasive environment.  Core access is done via
3987  _Core (which can never be accidentially rebound because _Core is not a  _Core (which can never be accidentally rebound because _Core is not a
3988  legal surface-syntax symbol).  legal surface-syntax symbol).
3989    
3990  The current solution is much cleaner because the core environment is  The current solution is much cleaner because the core environment is
# Line 607  Line 3994 
3994  with dynamic and symbolic parts of the core environment.  with dynamic and symbolic parts of the core environment.
3995    
3996  Remaining hackery (to bind the "magic" symbol _Core) is localized in the  Remaining hackery (to bind the "magic" symbol _Core) is localized in the
3997  compilation mananger's bootstrap compiler (actually: in the "init group"  compilation manager's bootstrap compiler (actually: in the "init group"
3998  handling).  See the comments in src/system/smlnj/init/init.cmi for  handling).  See the comments in src/system/smlnj/init/init.cmi for
3999  more details.  more details.
4000    
# Line 722  Line 4109 
4109     (specified in the .cm file at each instance where the tool's class is     (specified in the .cm file at each instance where the tool's class is
4110     used).     used).
4111    
4112     This was done to accomodate the new "make" and "shell" tools which     This was done to accommodate the new "make" and "shell" tools which
4113     facilitate fairly seemless hookup to portions of code managed using     facilitate fairly seamless hookup to portions of code managed using
4114     Makefiles or Shell scripts.     Makefiles or Shell scripts.
4115    
4116     There are no classes "shared" or "private" anymore.  Instead, the     There are no classes "shared" or "private" anymore.  Instead, the
# Line 735  Line 4122 
4122    
4123     All existing tools are described in the CM manual.     All existing tools are described in the CM manual.
4124    
4125     - Slightly better error handling.  (CM now surpresses many followup     - Slightly better error handling.  (CM now suppresses many followup
4126     error messages that tended to be more annoying than helpful.)     error messages that tended to be more annoying than helpful.)
4127    
4128  2. Major changes to the compiler's static environment data structures.  2. Major changes to the compiler's static environment data structures.
# Line 766  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    
# Line 869  Line 4256 
4256    
4257       I've changed andl to testl in the floating point test sequence       I've changed andl to testl in the floating point test sequence
4258       whenever appropriate.  The Intel optimization guide states that       whenever appropriate.  The Intel optimization guide states that
4259       testl is perferable to andl.       testl is preferable to andl.
4260    
4261  7. RA (x86 only)  7. RA (x86 only)
4262    
# Line 1051  Line 4438 
4438    
4439  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an
4440  additional argument called "template" which is an optional string that  additional argument called "template" which is an optional string that
4441  specifiel the layout of the tool command line.  See the CM manual for  specifies the layout of the tool command line.  See the CM manual for
4442  explanation.  explanation.
4443    
4444  2. A special-purpose tool can be "regisitered" by simply dropping the  2. A special-purpose tool can be "registered" by simply dropping the
4445  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same
4446  directory where the .cm file lives that uses this tool.  (The  directory where the .cm file lives that uses this tool.  (The
4447  behavior/misfeature until now was to look for the tool description  behavior/misfeature until now was to look for the tool description
# Line 1098  Line 4485 
4485  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for
4486  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,
4487  they might be the result of an earlier partial run of fixpt (which  they might be the result of an earlier partial run of fixpt (which
4488  perhaps got accidentially killed).  In this case, fixpt will quickly  perhaps got accidentally killed).  In this case, fixpt will quickly
4489  move through what exists before continuing where it left off earlier,  move through what exists before continuing where it left off earlier,
4490  and, thus, saves a lot of time.  and, thus, saves a lot of time.
4491    
# Line 1148  Line 4535 
4535    it from that remote directory.    it from that remote directory.
4536    This should simplify installation further:  For machines that have    This should simplify installation further:  For machines that have
4537    access to the internet, just fetch <version>-config.tgz, unpack it,    access to the internet, just fetch <version>-config.tgz, unpack it,
4538    edit config/targets, and go (run config/install.sh).  The scipt will    edit config/targets, and go (run config/install.sh).  The script will
4539    fetch everything else that it might need all by itself.    fetch everything else that it might need all by itself.
4540    
4541    For CVS users, this mechanism is not relevant for source archives, but    For CVS users, this mechanism is not relevant for source archives, but

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

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