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 631, Fri Apr 28 08:30:52 2000 UTC revision 1179, Tue Mar 26 03:04:46 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: Matthias Blume
17    Date: 2002/03/25 22:06:00 EST
18    Tag: blume-20020325-cprotobug
19    Description:
20    
21    Fixed a bug in cproto (c prototype decoder).
22    
23    ----------------------------------------------------------------------
24    Name: Matthias Blume
25    Date: 2002/03/25 16:00:00 EST
26    Tag: blume-20020325-raw-primops
27    Description:
28    
29    I did some cleanup to Allen's new primop code and
30    replaced yesterday's bootfiles with new ones.
31    (But they are stored in the same place.)
32    
33    ----------------------------------------------------------------------
34    Name: Matthias Blume
35    Date: 2002/03/24 22:40:00 EST
36    Tag: blume-20020324-bootfiles
37    Description:
38    
39    Made the bootfiles that Allen asked for.
40    
41    ----------------------------------------------------------------------
42    Name: Allen Leung
43    Date: 2002/03/23 15:50:00 EST
44    Tag: leunga-20020323-flint-cps-rcc-primops
45    Description:
46    
47      1. Changes to FLINT primops:
48    
49        (* make a call to a C-function;
50         * The primop carries C function prototype information and specifies
51         * which of its (ML-) arguments are floating point. C prototype
52         * information is for use by the backend, ML information is for
53         * use by the CPS converter. *)
54      | RAW_CCALL of { c_proto: CTypes.c_proto,
55                       ml_args: ccall_type list,
56                       ml_res_opt: ccall_type option,
57                       reentrant : bool
58                     } option
59       (* Allocate uninitialized storage on the heap.
60        * The record is meant to hold short-lived C objects, i.e., they
61        * are not ML pointers.  With the tag, the representation is
62        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
63        *)
64      | RAW_RECORD of {tag:bool,sz:int}
65      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
66    
67      2.  These CPS primops are now overloaded:
68    
69           rawload of {kind:numkind}
70           rawstore of {kind:numkind}
71    
72          The one argument form is:
73    
74             rawload {kind} address
75    
76          The two argument form is:
77    
78             rawload {kind} [ml object, byte-offset]
79    
80      3. RAW_CCALL/RCC now takes two extra arguments:
81    
82         a. The first is whether the C call is reentrant, i.e., whether
83            ML state should be saved and restored.
84         b. The second argument is a string argument specifying the name of
85            library and the C function.
86    
87         These things are currently not handled in the code generator, yet.
88    
89      4. In CProto,
90    
91         An encoding type of "bool" means "ml object" and is mapped into
92         C prototype of PTR.  Note that "bool" is different than "string",
93         even though "string" is also mapped into PTR, because "bool"
94         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
95    
96      5. Pickler/unpicker
97    
98         Changed to handle RAW_RECORD and newest RAW_CCALL
99    
100      6. MLRiscGen,
101    
102         1. Changed to handle the new rawload/rawstore/rawrecord operators.
103         2. Code for handling C Calls has been moved to a new module CPSCCalls,
104            in the file CodeGen/cpscompile/cps-c-calls.sml
105    
106      7. Added the conditional move operator
107    
108             condmove of branch
109    
110         to cps.  Generation of this is still buggy so it is currently
111         disabled.
112    
113    ----------------------------------------------------------------------
114    Name: Lal George
115    Date: 2002/03/22 14:18:25 EST
116    Tag: george-20020322-cps-branch-prob
117    Description:
118    
119    Implemented the Ball-Larus branch prediction-heuristics, and
120    incorporated graphical viewers for control flow graphs.
121    
122    Ball-Larus Heuristics:
123    ---------------------
124    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
125    
126    By design it uses the Dempster-Shafer theory for combining
127    probabilities.  For example, in the function:
128    
129        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
130    
131    the ball-larus heuristics predicts that the n=0 is unlikely
132    (OH-heuristic), and the 'then' branch is unlikely because of the
133    RH-heuristic -- giving the 'then' branch an even lower combined
134    probability using the Dempster-Shafer theory.
135    
136    Finally, John Reppy's loop analysis in MLRISC, further lowers the
137    probability of the 'then' branch because of the loop in the else
138    branch.
139    
140    
141    Graphical Viewing:
142    ------------------
143    I merely plugged in Allen's graphical viewers into the compiler. The
144    additional code is not much. At the top level, saying:
145    
146            Control.MLRISC.getFlag "cfg-graphical-view" := true;
147    
148    will display the graphical view of the control flow graph just before
149    back-patching.  daVinci must be in your path for this to work. If
150    daVinci is not available, then the default viewer can be changed
151    using:
152    
153            Control.MLRISC.getString "viewer"
154    
155    which can be set to "dot" or "vcg" for the corresponding viewers. Of
156    course, these viewers must be in your path.
157    
158    The above will display the compilation unit at the level of clusters,
159    many of which are small, boring, and un-interesting. Also setting:
160    
161            Control.MLRISC.getInt "cfg-graphical-view_size"
162    
163    will display clusters that are larger than the value set by the above.
164    
165    
166    ----------------------------------------------------------------------
167    Name: Matthias Blume
168    Date: 2002/03/21 22:20:00 EST
169    Tag: blume-20020321-kmp-bugfix
170    Description:
171    
172    Changed the interface to the KMP routine in PreString and fixed
173    a minor bug in one place where it was used.
174    
175    ----------------------------------------------------------------------
176    Name: Allen Leung
177    Date: 2002/03/21 20:30:00 EST
178    Tag: leunga-20020321-cfg
179    Description:
180    
181      Fixed a potential problem in cfg edge splitting.
182    
183    ----------------------------------------------------------------------
184    Name: Allen Leung
185    Date: 2002/03/21 17:15:00 EST
186    Tag: leunga-20020321-x86-fp-cfg
187    Description:
188    
189      1. Recoded the buggy parts of x86-fp.
190    
191         a. All the block reordering code has been removed.
192            We now depend on the block placement phases to do this work.
193    
194         b. Critical edge splitting code has been simplified and moved into the
195            CFG modules, as where they belong.
196    
197         Both of these were quite buggy and complex.  The code is now much, much
198         simpler.
199    
200      2. X86 backend.
201    
202         a. Added instructions for 64-bit support.  Instruction selection for
203            64-bit has not been committed, however, since that
204            requires changes to MLTREE which haven't been approved by
205            Lal and John.
206    
207         b. Added support for FUCOMI and FUCOMIP when generating code for
208            PentiumPro and above.  We only generate these instructions in
209            the fast-fp mode.
210    
211         c. Added cases for JP and JNP in X86FreqProps.
212    
213      3. CFG
214    
215         CFG now has a bunch of methods for edge splitting and merging.
216    
217      4. Machine description.
218    
219         John's simplification of MLTREE_BASIS.fcond broke a few machine
220         description things:
221    
222         rtl-build.{sig,sml} and hppa.mdl fixed.
223    
224         NOTE: the machine description stuff in the repository is still broken.
225               Again, I can't put my fixes in because that involves
226               changes to MLTREE.
227    
228    ----------------------------------------------------------------------
229    Name: Matthias Blume
230    Date: 2002/03/20 15:55:00 EST
231    Tag: blume-20020320-kmp
232    Description:
233    
234    Implemented Knuth-Morris-Pratt string matching in PreString and used
235    it for String.isSubstring, Substring.isSubstring, and
236    Substring.position.
237    
238    (Might need some stress-testing.  Simple examples worked fine.)
239    
240    ----------------------------------------------------------------------
241    Name: Matthias Blume
242    Date: 2002/03/19 16:37:00 EST
243    Tag: blume-20020319-witnesses
244    Description:
245    
246    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
247    
248    This implements a generic mechanism for changing constness qualifiers
249    anywhere within big C types without resorting to outright "casts".
250    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
251    modify the constness at the outermost level.)
252    The implementation of "convert" is based on the idea of "witness"
253    values -- values that are not used by the operation but whose types
254    "testify" to their applicability.  On the implementation side, "convert"
255    is simply a projection (returning its second curried argument).  With
256    cross-module inlining, it should not result in any machine code being
257    generated.
258    
259    ----------------------------------------------------------------------
260    Name: Matthias Blume
261    Date: 2002/03/15 16:40:00 EST
262    Tag: blume-20020315-basis
263    Description:
264    
265    Provided (preliminary?) implementations for
266    
267      {String,Substring}.{concatWith,isSuffix,isSubstring}
268    
269    and
270    
271      Substring.full
272    
273    Those are in the Basis spec but they were missing in SML/NJ.
274    
275    ----------------------------------------------------------------------
276    Name: Matthias Blume
277    Date: 2002/03/14 21:30:00 EST
278    Tag: blume-20020314-controls
279    Description:
280    
281    Controls:
282    ---------
283    
284    1. Factored out the recently-added Controls : CONTROLS stuff and put
285       it into its own library $/controls-lib.cm.  The source tree for
286       this is under src/smlnj-lib/Controls.
287    
288    2. Changed the names of types and functions in this interface, so they
289       make a bit more "sense":
290    
291          module -> registry
292          'a registry -> 'a group
293    
294    3. The interface now deals in ref cells only.  The getter/setter interface
295       is (mostly) gone.
296    
297    4. Added a function that lets one register an already-existing ref cell.
298    
299    5. Made the corresponding modifications to the rest of the code so that
300       everything compiles again.
301    
302    6. Changed the implementation of Controls.MLRISC back to something closer
303       to the original.  In particular, this module (and therefore MLRISC)
304       does not depend on Controls.  There now is some link-time code in
305       int-sys.sml that registers the MLRISC controls with the Controls
306       module.
307    
308    CM:
309    ---
310    
311      * One can now specify the lambda-split aggressiveness in init.cmi.
312    
313    ----------------------------------------------------------------------
314    Name: Allen Leung
315    Date: 2002/03/13 17:30:00 EST
316    Tag: leunga-20020313-x86-fp-unary
317    Description:
318    
319    Bug fix for:
320    
321    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
322    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
323    > - fun f(x,(y,z)) = Real.~ y;
324    > [autoloading]
325    > [autoloading done]
326    >       fchsl   (%eax), 184(%esp)
327    > Error: MLRisc bug: X86MCEmitter.emitInstr
328    >
329    > uncaught exception Error
330    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
331    
332    The problem was that the code generator did not generate any fp registers
333    in this case, and the ra didn't know that it needed to run the X86FP phase to
334    translate the pseudo fp instruction.   This only happened with unary fp
335    operators in certain situations.
336    
337    ----------------------------------------------------------------------
338    Name: Matthias Blume
339    Date: 2002/03/13 14:00:00 EST
340    Tag: blume-20020313-overload-etc
341    Description:
342    
343    1. Added _overload as a synonym for overload for backward compatibility.
344       (Control.overloadKW must be true for either version to be accepted.)
345    
346    2. Fixed bug in install script that caused more things to be installed
347       than what was requested in config/targets.
348    
349    3. Made CM aware of the (_)overload construct so that autoloading
350       works.
351    
352    ----------------------------------------------------------------------
353    Name: Matthias Blume
354    Date: 2002/03/12 22:03:00 EST
355    Tag: blume-20020312-url
356    Description:
357    
358    Forgot to update BOOT and srcarchiveurl.
359    
360    ----------------------------------------------------------------------
361    Name: Matthias Blume
362    Date: 2002/03/12 17:30:00 EST
363    Tag: blume-20020312-version110392
364    Description:
365    
366    Yet another version number bump (because of small changes to the
367    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
368    
369    Changes:
370    
371      The new pid generation scheme described a few weeks ago was overly
372      complicated.  I implemented a new mechanism that is simpler and
373      provides a bit more "stability":  Once CM has seen a compilation
374      unit, it keeps its identity constant (as long as you do not delete
375      those crucial CM/GUID/* files).  This means that when you change
376      an interface, compile, then go back to the old interface, and
377      compile again, you arrive at the original pid.
378    
379      There now also is a mechanism that instructs CM to use the plain
380      environment hash as a module's pid (effectively making its GUID
381      the empty string).  For this, "noguid" must be specified as an
382      option to the .sml file in question within its .cm file.
383      This is most useful for code that is being generated by tools such
384      as ml-nlffigen (because during development programmers tend to
385      erase the tool's entire output directory tree including CM's cached
386      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
387      revert to the old, broken behavior of SML/NJ, but in specific cases
388      where there is no danger of interface confusion, its use is ok
389      (I think).
390    
391      ml-nlffigen by default generates "noguid" annotations.  They can be
392      turned off by specifying -guid in its command line.
393    
394    ----------------------------------------------------------------------
395    Name: Lal George
396    Date: 2002/03/12 12 14:42:36 EST
397    Tag: george-20020312-frequency-computation
398    Description:
399    
400    Integrated jump chaining and static block frequency into the
401    compiler. More details and numbers later.
402    
403    ----------------------------------------------------------------------
404    Name: Lal George
405    Date: 2002/03/11 11 22:38:53 EST
406    Tag: george-20020311-jump-chain-elim
407    Description:
408    
409    Tested the jump chain elimination on all architectures (except the
410    hppa).  This is on by default right now and is profitable for the
411    alpha and x86, however, it may not be profitable for the sparc and ppc
412    when compiling the compiler.
413    
414    The gc test will typically jump to a label at the end of the cluster,
415    where there is another jump to an external cluster containing the actual
416    code to invoke gc. This is to allow factoring of common gc invocation
417    sequences. That is to say, we generate:
418    
419            f:
420               testgc
421               ja   L1      % jump if above to L1
422    
423            L1:
424               jmp L2
425    
426    
427    After jump chain elimination the 'ja L1' instructions is converted to
428    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
429    up being implemented in their long form (if L2 is far away) using:
430    
431            jbe     L3      % jump if below or equal to L3
432            jmp     L2
433         L3:
434            ...
435    
436    
437    For large compilation units L2  may be far away.
438    
439    
440    ----------------------------------------------------------------------
441    Name: Matthias Blume
442    Date: 2002/03/11 13:30:00 EST
443    Tag: blume-20020311-mltreeeval
444    Description:
445    
446    A functor parameter was missing.
447    
448    ----------------------------------------------------------------------
449    Name: Allen Leung
450    Date: 2002/03/11 10:30:00 EST
451    Tag: leunga-20020311-runtime-string0
452    Description:
453    
454       The representation of the empty string now points to a
455    legal null terminated C string instead of unit.  It is now possible
456    to convert an ML string into C string with InlineT.CharVector.getData.
457    This compiles into one single machine instruction.
458    
459    ----------------------------------------------------------------------
460    Name: Allen Leung
461    Date: 2002/03/10 23:55:00 EST
462    Tag: leunga-20020310-x86-call
463    Description:
464    
465       Added machine generation for CALL instruction (relative displacement mode)
466    
467    ----------------------------------------------------------------------
468    Name: Matthias Blume
469    Date: 2002/03/08 16:05:00
470    Tag: blume-20020308-entrypoints
471    Description:
472    
473    Version number bumped to 110.39.1.  NEW BOOTFILES!
474    
475    Entrypoints: non-zero offset into a code object where execution should begin.
476    
477    - Added the notion of an entrypoint to CodeObj.
478    - Added reading/writing of entrypoint info to Binfile.
479    - Made runtime system bootloader aware of entrypoints.
480    - Use the address of the label of the first function given to mlriscGen
481      as the entrypoint.  This address is currently always 0, but it will
482      not be 0 once we turn on block placement.
483    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
484      with entry points) from mlriscGen.
485    
486    ----------------------------------------------------------------------
487    Name: Allen Leung
488    Date: 2002/03/07 20:45:00 EST
489    Tag: leunga-20020307-x86-cmov
490    Description:
491    
492       Bug fixes for CMOVcc on x86.
493    
494       1. Added machine code generation for CMOVcc
495       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
496       3. CMOVcc cannot have an immediate operand as argument.
497    
498    ----------------------------------------------------------------------
499    Name: Matthias Blume
500    Date: 2002/03/07 16:15:00 EST
501    Tag: blume-20020307-controls
502    Description:
503    
504    This is a very large but mostly boring patch which makes (almost)
505    every tuneable compiler knob (i.e., pretty much everything under
506    Control.* plus a few other things) configurable via both the command
507    line and environment variables in the style CM did its configuration
508    until now.
509    
510    Try starting sml with '-h' (or, if you are brave, '-H')
511    
512    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
513    implements the underlying generic mechanism.
514    
515    The interface to some of the existing such facilities has changed somewhat.
516    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
517    (The getFoo interface is still there for backward-compatibility, but its
518    use is deprecated.)
519    
520    The ml-build script passes -Cxxx=yyy command-line arguments through so
521    that one can now twiddle the compiler settings when using this "batch"
522    compiler.
523    
524    TODO items:
525    
526    We should go through and throw out all controls that are no longer
527    connected to anything.  Moreover, we should go through and provide
528    meaningful (and correct!) documentation strings for those controls
529    that still are connected.
530    
531    Currently, multiple calls to Controls.new are accepted (only the first
532    has any effect).  Eventually we should make sure that every control
533    is being made (via Controls.new) exactly once.  Future access can then
534    be done using Controls.acc.
535    
536    Finally, it would probably be a good idea to use the getter-setter
537    interface to controls rather than ref cells.  For the time being, both
538    styles are provided by the Controls module, but getter-setter pairs are
539    better if thread-safety is of any concern because they can be wrapped.
540    
541    *****************************************
542    
543    One bug fix: The function blockPlacement in three of the MLRISC
544    backpatch files used to be hard-wired to one of two possibilities at
545    link time (according to the value of the placementFlag).  But (I
546    think) it should rather sense the flag every time.
547    
548    *****************************************
549    
550    Other assorted changes (by other people who did not supply a HISTORY entry):
551    
552    1. the cross-module inliner now works much better (Monnier)
553    2. representation of weights, frequencies, and probabilities in MLRISC
554       changed in preparation of using those for weighted block placement
555       (Reppy, George)
556    
557    ----------------------------------------------------------------------
558    Name: Lal George
559    Date: 2002/03/07 14:44:24 EST 2002
560    Tag: george-20020307-weighted-block-placement
561    
562    Tested the weighted block placement optimization on all architectures
563    (except the hppa) using AMPL to generate the block and edge frequencies.
564    Changes were required in the machine properties to correctly
565    categorize trap instructions. There is an MLRISC flag
566    "weighted-block-placement" that can be used to enable weighted block
567    placement, but this will be ineffective without block/edge
568    frequencies (coming soon).
569    
570    
571    ----------------------------------------------------------------------
572    Name: Lal George
573    Date: 2002/03/05 17:24:48 EST
574    Tag: george-20020305-linkage-cluster
575    
576    In order to support the block placement optimization, a new cluster
577    is generated as the very first cluster (called the linkage cluster).
578    It contains a single jump to the 'real' entry point for the compilation
579    unit. Block placement has no effect on the linkage cluster itself, but
580    all the other clusters  have full freedom in the manner in which they
581    reorder blocks or functions.
582    
583    On the x86 the typical linkage code that is generated is:
584       ----------------------
585            .align 2
586       L0:
587            addl    $L1-L0, 72(%esp)
588            jmp     L1
589    
590    
591            .align  2
592       L1:
593       ----------------------
594    
595    72(%esp) is the memory location for the stdlink register. This
596    must contain the address of the CPS function being called. In the
597    above example, it contains the address of  L0; before
598    calling L1 (the real entry point for the compilation unit), it
599    must contain the address for L1, and hence
600    
601            addl $L1-L0, 72(%esp)
602    
603    I have tested this on all architectures except the hppa.The increase
604    in code size is of course negligible
605    
606    ----------------------------------------------------------------------
607    Name: Allen Leung
608    Date: 2002/03/03 13:20:00 EST
609    Tag: leunga-20020303-mlrisc-tools
610    
611      Added #[ ... ] expressions to mlrisc tools
612    
613    ----------------------------------------------------------------------
614    Name: Matthias Blume
615    Date: 2002/02/27 12:29:00 EST
616    Tag: blume-20020227-cdebug
617    Description:
618    
619    - made types in structure C and C_Debug to be equal
620    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
621    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
622    
623    ----------------------------------------------------------------------
624    Name: Matthias Blume
625    Date: 2002/02/26 12:00:00 EST
626    Tag: blume-20020226-ffi
627    Description:
628    
629    1. Fixed a minor bug in CM's "noweb" tool:
630       If numbering is turned off, then truly don't number (i.e., do not
631       supply the -L option to noweb).  The previous behavior was to supply
632       -L'' -- which caused noweb to use the "default" line numbering scheme.
633       Thanks to Chris Richards for pointing this out (and supplying the fix).
634    
635    2. Once again, I reworked some aspects of the FFI:
636    
637       A. The incomplete/complete type business:
638    
639       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
640         gone!
641       - ML types representing an incomplete type are now *equal* to
642         ML types representing their corresponding complete types (just like
643         in C).  This is still safe because ml-nlffigen will not generate
644         RTTI for incomplete types, nor will it generate functions that
645         require access to such RTTI.   But when ML code generated from both
646         incomplete and complete versions of the C type meet, the ML types
647         are trivially interoperable.
648    
649         NOTE:  These changes restore the full generality of the translation
650         (which was previously lost when I eliminated functorization)!
651    
652       B. Enum types:
653    
654       - Structure C now has a type constructor "enum" that is similar to
655         how the "su" constructor works.  However, "enum" is not a phantom
656         type because each "T enum" has values (and is isomorphic to
657         MLRep.Signed.int).
658       - There are generic access operations for enum objects (using
659         MLRep.Signed.int).
660       - ml-nlffigen will generate a structure E_foo for each "enum foo".
661         * The structure contains the definition of type "mlrep" (the ML-side
662         representation type of the enum).  Normally, mlrep is the same
663         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
664         then mlrep will be defined as a datatype -- thus facilitating
665         pattern matching on mlrep values.
666         ("-ec" will be suppressed if there are duplicate values in an
667          enumeration.)
668         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
669         will be generated for each C enum constant xxx.
670         * Conversion functions m2i and i2m convert between mlrep and
671         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
672         * Coversion functions c and ml convert between mlrep and "tag enum".
673         * Access functions (get/set) fetch and store mlrep values.
674       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
675         enumerations are merged into one single enumeration represented by
676         structure E_'.
677    
678    ----------------------------------------------------------------------
679    Name: Allen Leung
680    Date: 2002/02/25 04:45:00 EST
681    Tag: leunga-20020225-cps-spill
682    
683    This is a new implementation of the CPS spill phase.
684    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
685    In case of problems, replace it with the old file spill.sml
686    
687    The current compiler runs into some serious performance problems when
688    constructing a large record.  This can happen when we try to compile a
689    structure with many items.  Even a very simple structure like the following
690    makes the compiler slow down.
691    
692        structure Foo = struct
693           val x_1 = 0w1 : Word32.int
694           val x_2 = 0w2 : Word32.int
695           val x_3 = 0w3 : Word32.int
696           ...
697           val x_N = 0wN : Word32.int
698        end
699    
700    The following table shows the compile time, from N=1000 to N=4000,
701    with the old compiler:
702    
703    N
704    1000   CPS 100 spill                           0.04u  0.00s  0.00g
705           MLRISC ra                               0.06u  0.00s  0.05g
706              (spills = 0 reloads = 0)
707           TOTAL                                   0.63u  0.07s  0.21g
708    
709    1100   CPS 100 spill                           8.25u  0.32s  0.64g
710           MLRISC ra                               5.68u  0.59s  3.93g
711              (spills = 0 reloads = 0)
712           TOTAL                                   14.71u  0.99s  4.81g
713    
714    1500   CPS 100 spill                           58.55u  2.34s  1.74g
715           MLRISC ra                               5.54u  0.65s  3.91g
716              (spills = 543 reloads = 1082)
717           TOTAL                                   65.40u  3.13s  6.00g
718    
719    2000   CPS 100 spill                           126.69u  4.84s  3.08g
720           MLRISC ra                               0.80u  0.10s  0.55g
721              (spills = 42 reloads = 84)
722           TOTAL                                   129.42u  5.10s  4.13g
723    
724    3000   CPS 100 spill                           675.59u  19.03s  11.64g
725           MLRISC ra                               2.69u  0.27s  1.38g
726              (spills = 62 reloads = 124)
727           TOTAL                                   682.48u  19.61s  13.99g
728    
729    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
730           MLRISC ra                               4.96u  0.27s  2.72g
731              (spills = 85 reloads = 170)
732           TOTAL                                   2375.26u  57.21s  48.00g
733    
734    As you can see the old cps spill module suffers from some serious
735    performance problem.  But since I cannot decipher the old code fully,
736    instead of patching the problems up, I'm reimplementing it
737    with a different algorithm.  The new code is more modular,
738    smaller when compiled, and substantially faster
739    (O(n log n) time and O(n) space).  Timing of the new spill module:
740    
741    4000  CPS 100 spill                           0.02u  0.00s  0.00g
742          MLRISC ra                               0.25u  0.02s  0.15g
743             (spills=1 reloads=3)
744          TOTAL                                   7.74u  0.34s  1.62g
745    
746    Implementation details:
747    
748    As far as I can tell, the purpose of the CPS spill module is to make sure the
749    number of live variables at any program point (the bandwidth)
750    does not exceed a certain limit, which is determined by the
751    size of the spill area.
752    
753    When the bandwidth is too large, we decrease the register pressure by
754    packing live variables into spill records.  How we achieve this is
755    completely different than what we did in the old code.
756    
757    First, there is something about the MLRiscGen code generator
758    that we should be aware of:
759    
760    o MLRiscGen performs code motion!
761    
762       In particular, it will move floating point computations and
763       address computations involving only the heap pointer to
764       their use sites (if there is only a single use).
765       What this means is that if we have a CPS record construction
766       statement
767    
768           RECORD(k,vl,w,e)
769    
770       we should never count the new record address w as live if w
771       has only one use (which is often the case).
772    
773       We should do something similar to floating point, but the transformation
774       there is much more complex, so I won't deal with that.
775    
776    Secondly, there are now two new cps primops at our disposal:
777    
778     1. rawrecord of record_kind option
779        This pure operator allocates some uninitialized storage from the heap.
780        There are two forms:
781    
782         rawrecord NONE [INT n]  allocates a tagless record of length n
783         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
784                                     and initializes the tag.
785    
786     2. rawupdate of cty
787          rawupdate cty (v,i,x)
788          Assigns to x to the ith component of record v.
789          The storelist is not updated.
790    
791    We use these new primops for both spilling and increment record construction.
792    
793     1. Spilling.
794    
795        This is implemented with a linear scan algorithm (but generalized
796        to trees).  The algorithm will create a single spill record at the
797        beginning of the cps function and use rawupdate to spill to it,
798        and SELECT or SELp to reload from it.  So both spills and reloads
799        are fine-grain operations.  In contrast, in the old algorithm
800        "spills" have to be bundled together in records.
801    
802        Ideally, we should sink the spill record construction to where
803        it is needed.  We can even split the spill record into multiple ones
804        at the places where they are needed.  But CPS is not a good
805        representation for global code motion, so I'll keep it simple and
806        am not attempting this.
807    
808     2. Incremental record construction (aka record splitting).
809    
810        Long records with many component values which are simulatenously live
811        (recall that single use record addresses are not considered to
812         be live) are constructed with rawrecord and rawupdate.
813        We allocate space on the heap with rawrecord first, then gradually
814        fill it in with rawupdate.  This is the technique suggested to me
815        by Matthias.
816    
817        Some restrictions on when this is applicable:
818        1. It is not a VECTOR record.  The code generator currently does not handle
819           this case. VECTOR record uses double indirection like arrays.
820        2. All the record component values are defined in the same "basic block"
821           as the record constructor.  This is to prevent speculative
822           record construction.
823    
824    ----------------------------------------------------------------------
825    Name: Allen Leung
826    Date: 2002/02/22 01:02:00 EST
827    Tag: leunga-20020222-mlrisc-tools
828    
829    Minor bug fixes in the parser and rewriter
830    
831    ----------------------------------------------------------------------
832    Name: Allen Leung
833    Date: 2002/02/21 20:20:00 EST
834    Tag: leunga-20020221-peephole
835    
836    Regenerated the peephole files.  Some contained typos in the specification
837    and some didn't compile because of pretty printing bugs in the old version
838    of 'nowhere'.
839    
840    ----------------------------------------------------------------------
841    Name: Allen Leung
842    Date: 2002/02/19 20:20:00 EST
843    Tag: leunga-20020219-mlrisc-tools
844    Description:
845    
846       Minor bug fixes to the mlrisc-tools library:
847    
848       1.  Fixed up parsing colon suffixed keywords
849       2.  Added the ability to shut the error messages up
850       3.  Reimplemented the pretty printer and fixed up/improved
851           the pretty printing of handle and -> types.
852       4.  Fixed up generation of literal symbols in the nowhere tool.
853       5.  Added some SML keywords to to sml.sty
854    
855    ----------------------------------------------------------------------
856    Name: Matthias Blume
857    Date: 2002/02/19 16:20:00 EST
858    Tag: blume-20020219-cmffi
859    Description:
860    
861    A wild mix of changes, some minor, some major:
862    
863    * All C FFI-related libraries are now anchored under $c:
864        $/c.cm      --> $c/c.cm
865        $/c-int.cm  --> $c/internals/c-int.cm
866        $/memory.cm --> $c/memory/memory.cm
867    
868    * "make" tool (in CM) now treats its argument pathname slightly
869      differently:
870        1. If the native expansion is an absolute name, then before invoking
871           the "make" command on it, CM will apply OS.Path.mkRelative
872           (with relativeTo = OS.FileSys.getDir()) to it.
873        2. The argument will be passed through to subsequent phases of CM
874           processing without "going native".  In particular, if the argument
875           was an anchored path, then "make" will not lose track of that anchor.
876    
877    * Compiler backends now "know" their respective C calling conventions
878      instead of having to be told about it by ml-nlffigen.  This relieves
879      ml-nlffigen from one of its burdens.
880    
881    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
882    
883    * Export C_DEBUG and C_Debug from $c/c.cm.
884    
885    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
886      subtyping relationship between incomplete pointers and their complete
887      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
888      with the convention of instantiating 'o with ('t, 'c) obj whenever
889      the pointer target type is complete.  In the incomplete case, 'o
890      will be instantiated with some "'c iobj" -- a type obtained by
891      using one of the functors PointerToIncompleteType or PointerToCompleteType.
892    
893      Operations that work on both incomplete and complete pointer types are
894      typed as taking an 'o ptr while operations that require the target to
895      be known are typed as taking some ('t, 'c) obj ptr.
896    
897      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
898      where void is an eqtype without any values.  This makes it possible
899      to work on voidptr values using functions meant to operate on light
900      incomplete pointers.
901    
902    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
903      been vastly simplified.
904    
905    ----------------------------------------------------------------------
906    Name: Matthias Blume
907    Date: 2002/02/19 10:48:00 EST
908    Tag: blume-20020219-pqfix
909    Description:
910    
911    Applied Chris Okasaki's bug fix for priority queues.
912    
913    ----------------------------------------------------------------------
914    Name: Matthias Blume
915    Date: 2002/02/15 17:05:00
916    Tag: Release_110_39
917    Description:
918    
919    Last-minute retagging is becoming a tradition... :-(
920    
921    This is the working release 110.39.
922    
923    ----------------------------------------------------------------------
924    Name: Matthias Blume
925    Date: 2002/02/15 16:00:00 EST
926    Tag: Release_110_39-orig
927    Description:
928    
929    Working release 110.39.  New bootfiles.
930    
931    (Update: There was a small bug in the installer so it wouldn't work
932    with all shells.  So I retagged. -Matthias)
933    
934    ----------------------------------------------------------------------
935    Name: Matthias Blume
936    Date: 2002/02/15 14:17:00 EST
937    Tag: blume-20020215-showbindings
938    Description:
939    
940    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
941    the latter can be useful for exploring what bindings are available at
942    the interactive prompt.  (The first function returns only the list
943    of symbols that are really bound, the second prints those but also the
944    ones that CM's autoloading mechanism knows about.)
945    
946    ----------------------------------------------------------------------
947    Name: Matthias Blume
948    Date: 2002/02/15 12:08:00 EST
949    Tag: blume-20020215-iptrs
950    Description:
951    
952    Two improvements to ml-nlffigen:
953    
954      1. Write files only if they do not exist or if their current contents
955         do not coincide with what's being written.  (That is, avoid messing
956         with the time stamps unless absolutely necessary.)
957    
958      2. Implement a "repository" mechanism for generated files related
959         to "incomplete pointer types".   See the README file for details.
960    
961    ----------------------------------------------------------------------
962    Name: Matthias Blume
963    Date: 2002/02/14 11:50:00 EST
964    Tag: blume-20020214-quote
965    Description:
966    
967    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
968    because of the new and improved tag generation scheme.  (Thanks to Allen
969    Leung for pointing it out.)
970    
971    ----------------------------------------------------------------------
972    Name: Lal George
973    Date: 2002/02/14 09:55:27 EST 2002
974    Tag: george-20020214-isabelle-bug
975    Description:
976    
977    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
978    of Isabelle on the x86.
979    
980    From Allen:
981    -----------
982     I've found the problem:
983    
984         in ra-core.sml, I use the counter "blocked" to keep track of the
985         true number of elements in the freeze queue.  When the counter goes
986         to zero, I skip examining the queue.  But I've messed up the
987         bookkeeping in combine():
988    
989             else ();
990             case !ucol of
991               PSEUDO => (if !cntv > 0 then
992                     (if !cntu > 0 then blocked := !blocked - 1 else ();
993                                        ^^^^^^^^^^^^^^^^^^^^^^^
994                      moveu := mergeMoveList(!movev, !moveu)
995                     )
996                  else ();
997    
998         combine() is called to coalesce two nodes u and v.
999         I think I was thinking that if the move counts of u and v are both
1000         greater than zero then after they are coalesced then one node is
1001         removed from the freeze queue.  Apparently I was thinking that
1002         both u and v are of low degree, but that's clearly not necessarily true.
1003    
1004    
1005    02/12/2002:
1006        Here's the patch.  HOL now compiles.
1007    
1008        I don't know how this impact on performance (compile
1009        time or runtime).  This bug caused the RA (especially on the x86)
1010        to go thru the potential spill phase when there are still nodes on the
1011        freeze queue.
1012    
1013    
1014    
1015    
1016    ----------------------------------------------------------------------
1017    Name: Matthias Blume
1018    Date: 2002/02/13 22:40:00 EST
1019    Tag: blume-20020213-fptr-rtti
1020    Description:
1021    
1022    Fixed a bug in ml-nlffigen that was introduced with one of the previous
1023    updates.
1024    
1025    ----------------------------------------------------------------------
1026    Name: Matthias Blume
1027    Date: 2002/02/13 16:41:00 EST
1028    Tag: blume-20020213-cmlpq
1029    Description:
1030    
1031    Added new priority queue export symbols (which have just been added to
1032    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
1033    not compile and the installer would choke.)
1034    
1035    ----------------------------------------------------------------------
1036    Name: Matthias Blume
1037    Date: 2002/02/13 16:15:00 EST
1038    Tag: blume-20020213-various
1039    Description:
1040    
1041    1. More tweaks to ml-nlffigen:
1042    
1043       - better internal datastructures (resulting in slight speedup)
1044       - "-match" option requires exact match
1045       - "localized" gensym counters (untagged structs/unions nested within
1046         other structs/unions or within typedefs get a fresh counter; their
1047         tag will be prefixed by a concatenation of their parents' tags)
1048       - bug fixes (related to calculation of transitive closure of types
1049         to be included in the output)
1050    
1051    2. Minor Basis updates:
1052    
1053       - added implementations for List.collate and Option.app
1054    
1055    ----------------------------------------------------------------------
1056    Name: Matthias Blume
1057    Date: 2002/02/11 15:55:00 EST
1058    Tag: blume-20020211-gensym
1059    Description:
1060    
1061    Added a "-gensym" option to command line of ml-nlffigen.  This can be
1062    used to specify a "stem" -- a string that is inserted in all "gensym'd"
1063    names (ML structure names that correspond to unnamed C structs, unions,
1064    and enums), so that separate runs of ml-nlffigen do not clash.
1065    
1066    ----------------------------------------------------------------------
1067    Name: Matthias Blume
1068    Date: 2002/02/11 12:05:00 EST
1069    Tag: blume-20020211-gensml
1070    Description:
1071    
1072    A quick fix for a problem with GenSML (in the pgraph-util library):
1073    Make generation of toplevel "local" optional.  (Strictly speaking,
1074    signature definitions within "local" are not legal SML.)
1075    
1076    Other than that: updates to INSTALL and cm/TODO.
1077    
1078    ----------------------------------------------------------------------
1079    Name: Matthias Blume
1080    Date: 2002/02/08 15:00:00 EST
1081    Tag: blume-20020208-uniquepid
1082    Description:
1083    
1084    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
1085    
1086    1. The installer (config/install.sh) has gotten smarter:
1087    
1088         - Configuration options are a bit easier to specify now
1089           (in config/targets).
1090         - Bug in recognizing .tar.bz2 files fixed.
1091         - Installer automatically resolves dependencies between
1092           configuration options (e.g., if you ask for eXene, you will
1093           also get cml -- regardless whether you asked for it or not).
1094         - Installer can run in "quieter mode" by setting the environment
1095           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
1096           "completely silent", though.
1097         - Build HashCons library as part of smlnj-lib.
1098    
1099    2. A new scheme for assigning persistent identifiers to compilation
1100       units (and, by extension, to types etc.) has been put into place.
1101       This fixes a long-standing bug where types and even dynamic values
1102       can get internally confused, thereby compromising type safety
1103       (abstraction) and dynamic correctness.  See
1104    
1105         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
1106    
1107       for an example of how things could go wrong until now.
1108    
1109       The downside of the new scheme is that pids are not quite as
1110       persistent as they used to be: CM will generate a fresh pid
1111       for every compilation unit that it thinks it sees for the first
1112       time.  That means that if you compile starting from a clean, fresh
1113       source tree at two different times, you end up with different
1114       binaries.
1115    
1116       Cutoff recompilation, however, has not been compromised because
1117       CM keeps pid information in special caches between runs.
1118    
1119    ----------------------------------------------------------------------
1120    Name: Lal George
1121    Date: 2002/02/07 15:34:13 EST 2002
1122    Tag: <none>
1123    Description:
1124    
1125    Compilers that generate assembly code may produce  global labels
1126    whose value is resolved at link time. The various peephole optimization
1127    modules did not take this in account.
1128    
1129    TODO. The Labels.addrOf function should really return an option
1130    type so that clients are forced to deal with this issue, rather
1131    than an exception being raised.
1132    
1133    ----------------------------------------------------------------------
1134    Name: Lal George
1135    Date: 2002/02/06 13:55:02 EST
1136    Tag: george-20020206-ra-breakup
1137    Description:
1138    
1139    1. A bug fix from Allen.
1140    
1141        A typo causes extra fstp %st(0)'s to be generated at compensation
1142        edges, which might cause stack underflow traps at runtime.  This
1143        occurs in fft where there are extraneous fstps right before the 'into'
1144        trap instruction (in this case they are harmless since none of the
1145        integers overflow.)
1146    
1147    2. Pulled out various utility modules that were embedded in the modules
1148       of the register allocator. I need these modules for other purposes, but
1149       they are not complete enough to put into a library (just yet).
1150    ----------------------------------------------------------------------
1151    Name: Matthias Blume
1152    Date: 2002/01/31 16:05:00 EST
1153    Tag: blume-20020131-sparc-ccalls
1154    Description:
1155    
1156    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
1157       of extra stack space by mistake.  Fixed.
1158    
1159    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
1160    
1161    ----------------------------------------------------------------------
1162    Name: Allen Leung
1163    Date: 2002/01/30
1164    Tag: leunga-20020130-nowhere-bug-fix
1165    Description:
1166    
1167       MLRISC bug fixes:
1168       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
1169       2. MachineInt.fromString was negating its value.
1170    
1171    ----------------------------------------------------------------------
1172    Name: Matthias Blume
1173    Date: 2002/01/29
1174    Tag: blume-20020129-INSTALL
1175    Description:
1176    
1177    - Added somewhat detailed installation instructions (file INSTALL).
1178    - Fixed curl-detection bug in config/install.sh.
1179    - It is now possible to select the URL getter using the URLGETTER
1180      environment variable:
1181    
1182          not set / "unknown"      --> automatic detection (script tries wget,
1183                                       curl, and lynx)
1184          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
1185                                       how to properly invoke them)
1186          other                    --> use $URLGETTER directly, it must take
1187                                       precisely two command-line arguments
1188                                       (source URL and destination file name)
1189    
1190    ----------------------------------------------------------------------
1191    Name: Matthias Blume
1192    Date: 2002/01/28
1193    Tag: blume-20020128-sparc-ccalls
1194    Description:
1195    
1196    - Fixed problem with calculation of "used" registers in sparc-c-calls.
1197    - Make use of the allocParam argument in sparc-c-calls.
1198    
1199    ----------------------------------------------------------------------
1200    Name: Matthias Blume
1201    Date: 2002/01/28
1202    Tag: blume-20020128-allocParam
1203    Description:
1204    
1205    John Reppy:  Changes c-calls API to accept client-callback for
1206    allocating extra stack space.
1207    me: Corresponding changes to mlriscGen (using a dummy argument that
1208        does not change the current behavior).
1209    
1210    ----------------------------------------------------------------------
1211    Name: Matthias Blume
1212    Date: 2002/01/28 12:00:00
1213    Tag: Release_110_38
1214    Description:
1215    
1216    This time for real!!!
1217    
1218    ----------------------------------------------------------------------
1219    Name: Matthias Blume
1220    Date: 2002/01/28 10:56:00 EST
1221    Tag: blume-20020128-retraction
1222    Description:
1223    
1224    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
1225       with blume-Release_110_38-retracted.)
1226    
1227    1. Fixed a problem with incorrect rounding modes in real64.sml.
1228       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
1229    
1230    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
1231       and enums fixed.  The naming of corresponding ML identifiers should
1232       now be consistent again.
1233    
1234    ----------------------------------------------------------------------
1235    Name: Allen Leung
1236    Date: 2002/01/27
1237    Tag: leunga-20020127-nowhere
1238    Description:
1239    
1240       Added a target called nowhere in the configuration scripts.
1241       Enabling this will build the MLRISC 'nowhere' tool (for translating
1242       programs with where-clauses into legal SML code) during installation.
1243    
1244    ----------------------------------------------------------------------
1245    Name: Matthias Blume
1246    Date: 2002/01/25 21:27:00 EST
1247    Tag: blume-Release_110_38-retracted
1248    Description:
1249    
1250    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
1251    
1252    README will be added later.
1253    
1254    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
1255    (Release_110_38) removed.  Reason: Last-minute bug fixes.
1256    
1257    ----------------------------------------------------------------------
1258    Name: Matthias Blume
1259    Date: 2002/01/25
1260    Tag: blume-20020125-ffi
1261    Description:
1262    
1263    A large number of tweaks and improvements to ml-nlffi-lib and
1264    ml-nlffigen:
1265    
1266       - ML represenation types have been streamlined
1267       - getter and setter functions work with concrete values, not abstract
1268         ones where possible
1269       - ml-nlffigen command line more flexible (see README file there)
1270       - some bugs have been fixed (hopefully)
1271    
1272    ----------------------------------------------------------------------
1273    Name: Lal George
1274    Date: 2002/01/24
1275    Tag: george-20020124-risc-ra-interface
1276    Description:
1277    
1278       There is a dramatic simplification in the interface to the
1279       register allocator for RISC architectures as a result of making
1280       parallel copy instructions explicit.
1281    
1282    ----------------------------------------------------------------------
1283    Name: Matthias Blume
1284    Date: 2002/01/22
1285    Tag: blume-20020122-x86-ccalls
1286    Description:
1287    
1288    Bug fix for c-calls on x86 (having to do with how char- and
1289    short-arguments are being handled).
1290    
1291    ----------------------------------------------------------------------
1292    Name: Matthias Blume
1293    Date: 2002/01/21
1294    Tag: blume-20020121-ff
1295    Description:
1296    
1297    Another day of fiddling with the FFI...
1298    
1299    1. Bug fix/workaround:  CKIT does not complain about negative array
1300       dimensions, so ml-nlffigen has to guard itself against this possibility.
1301       (Otherwise a negative dimension would send it into an infinite loop.)
1302    
1303    2. Some of the abstract types (light objects, light pointers, most "base"
1304       types) in structure C are now eqtypes.
1305    
1306    3. Added constructors and test functions for NULL function pointers.
1307    
1308    ----------------------------------------------------------------------
1309    Name: Matthias Blume
1310    Date: 2002/01/18
1311    Tag: blume-20020118-ready-for-new-release
1312    Description:
1313    
1314    Made config/srcarchiveurl point to a new place.  (Will provide boot
1315    files shortly.)
1316    
1317    Maybe we christen this to be 110.38?
1318    
1319    ----------------------------------------------------------------------
1320    Name: Matthias Blume
1321    Date: 2002/01/18
1322    Tag: blume-20020118-more-ffifiddle
1323    Description:
1324    
1325    Today's FFI fiddling:
1326    
1327      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
1328        C.Set.* that use concrete (MLRep.*) arguments and results instead
1329        of abstract ones.
1330    
1331      - Provided word-style bit operations etc. for "int" representation
1332        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
1333        and Long.
1334    
1335    ----------------------------------------------------------------------
1336    Name: Matthias Blume
1337    Date: 2002/01/18
1338    Tag: blume-20020118-use-x86-fp
1339    Description:
1340    
1341    Now that x86-fast-fp seems to be working, I turned it back on again
1342    by default.  (Seems to work fine now, even with the FFI.)
1343    
1344    Other than that, I added some documentation about the FFI to
1345    src/ml-nlffigen/README and updated the FFI test examples in
1346    src/ml-nlffi-lib/Tests/*.
1347    
1348    ----------------------------------------------------------------------
1349    Name: Allen Leung
1350    Date: 2002/01/17
1351    Tag: leunga-20020117-x86-fast-fp-call
1352    Description:
1353    
1354       1. Fixed a problem with handling return fp values when x86's fast fp
1355          mode is turned on.
1356    
1357       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
1358          of %f32.
1359    
1360       3. Added a constructor INT32lit to the ast of MLRISC tools.
1361    
1362    ----------------------------------------------------------------------
1363    Name: Matthias Blume
1364    Date: 2002/01/16
1365    Tag: blume-20020116-ffifiddle
1366    Description:
1367    
1368    More fiddling with the FFI interface:
1369    
1370     - Make constness 'c instead of rw wherever possible.  This eliminates
1371       the need for certain explicit coercions.  (However, due to ML's
1372       value polymorphism, there will still be many cases where explicit
1373       coercions are necessary.  Phantom types are not the whole answer
1374       to modeling a subtyping relationship in ML.)
1375    
1376     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
1377    
1378     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
1379       clumsy workaround for varargs problem.)
1380    
1381    ----------------------------------------------------------------------
1382    Name: Lal George
1383    Date: 2002/01/15
1384    Tag: <none>
1385    Description:
1386    
1387    1. Since COPY instructions are no longer native to the architecture,
1388       a generic functor can be used to implement the expandCopies function.
1389    
1390    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
1391       TEXT segment.
1392    
1393    ----------------------------------------------------------------------
1394    Name: Matthias Blume
1395    Date: 2002/01/15
1396    Tag: blume-20020115-ffiupdates
1397    Description:
1398    
1399    1. Fix for bug resulting in single-precision float values being returned
1400       incorrectly from FFI calls.
1401    
1402    2. Small modifications to C FFI API:
1403    
1404        - memory-allocation routines return straight objects (no options)
1405          and raise an exception in out-of-memory situations
1406        - unsafe extensions to cast between function pointers and pointers
1407          from/to ints
1408        - added structure C_Debug as an alternative to structure C where
1409          pointer-dereferencing (|*| and |*!) always check for null-pointers
1410        - added open_lib' to DynLinkage;  open_lib' works like open_lib
1411          but also takes a (possibly empty) list of existing library handles
1412          that the current library depends on
1413    
1414    ----------------------------------------------------------------------
1415    Name: Matthias Blume
1416    Date: 2002/01/10
1417    Tag: blume-20020110-newffigen
1418    Description:
1419    
1420    1. Updates to portable graph code.
1421    
1422    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
1423       more scalable now so that even huge interfaces such as the one
1424       for GTK compile in finite time and space. :-)
1425       See src/ml-nlffigen/README for details on what's new.
1426    
1427    ----------------------------------------------------------------------
1428    Name: Lal George
1429    Date: 2001/01/09 14:31:35 EST 2002
1430    Tag: george-20011206-rm-native-copy
1431    Description:
1432    
1433            Removed the native COPY and FCOPY instructions
1434            from all the architectures and replaced it with the
1435            explicit COPY instruction from the previous commit.
1436    
1437            It is now possible to simplify many of the optimizations
1438            modules that manipulate copies. This has not been
1439            done in this change.
1440    
1441    ----------------------------------------------------------------------
1442    Name: Lal George
1443    Date: 2001/12/06 16:50:13 EST 2001
1444    Tag: george-20011206-mlrisc-instruction
1445    Description:
1446    
1447    Changed the representation of instructions from being fully abstract
1448    to being partially concrete. That is to say:
1449    
1450      from
1451            type instruction
1452    
1453      to
1454            type instr                              (* machine instruction *)
1455    
1456            datatype instruction =
1457                LIVE of {regs: C.cellset, spilled: C.cellset}
1458              | KILL of {regs: C.cellset, spilled: C.cellset}
1459              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1460              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1461              | INSTR of instr
1462    
1463    This makes the handling of certain special instructions that appear on
1464    all architectures easier and uniform.
1465    
1466    LIVE and KILL say that a list of registers are live or killed at the
1467    program point where they appear. No spill code is generated when an
1468    element of the 'regs' field is spilled, but the register is moved to
1469    the 'spilled' (which is present, more for debugging than anything else).
1470    
1471    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1472    We used to generate:
1473    
1474            DEFFREG f1
1475            f1 := f2 + f3
1476            trapb
1477    
1478    but now generate:
1479    
1480            f1 := f2 + f3
1481            trapb
1482            LIVE {regs=[f1,f2,f3], spilled=[]}
1483    
1484    Furthermore, the DEFFREG (hack) required that all floating point instruction
1485    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1486    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1487    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1488    this architecture).
1489    
1490    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1491    all the architectures. This will result in further simplification of the
1492    register allocator that must be aware of them for coalescing purposes, and
1493    will also simplify certain aspects of the machine description that provides
1494    callbacks related to parallel copies.
1495    
1496    ANNOTATION should be obvious, and now INSTR represents the honest to God
1497    machine instruction set!
1498    
1499    The <arch>/instructions/<arch>Instr.sml files define certain utility
1500    functions for making porting easier -- essentially converting upper case
1501    to lower case. All machine instructions (of type instr) are in upper case,
1502    and the lower case form generates an MLRISC instruction. For example on
1503    the alpha we have:
1504    
1505      datatype instr =
1506         LDA of {r:cell, b:cell, d:operand}
1507       | ...
1508    
1509      val lda : {r:cell, b:cell, d:operand} -> instruction
1510        ...
1511    
1512    where lda is just (INSTR o LDA), etc.
1513    
1514    ----------------------------------------------------------------------
1515    Name: Matthias Blume
1516    Date: 2001/11/22 21:40:00 EST
1517    Tag: Release_110_37
1518    Description:
1519    
1520    Release 110.37.  This time for real.
1521    
1522    ----------------------------------------------------------------------
1523    Name: Matthias Blume
1524    Date: 2001/11/21 16:35:00 EST
1525    Tag: blume-20011121-foot-in-mouth
1526    Description:
1527    
1528    Removed the "Release_110_37" tag because of a serious bug.
1529    This will be re-tagged once the bug is fixed.
1530    
1531    ----------------------------------------------------------------------
1532    Name: Matthias Blume
1533    Date: 2001/11/21 16:14:00 EST
1534    Tag: blume-20011121-forgottenfile
1535    Description:
1536    
1537    Forgot to add a file.  (Just a .tex-file -- part of
1538    the CM manual source.)
1539    
1540    ----------------------------------------------------------------------
1541    Name: Matthias Blume
1542    Date: 2001/11/21 16:10:00 EST
1543    Tag: blume-20011121-invalid_110_37
1544    Description:
1545    
1546    Note: I removed the original tag "Release_110_37" from this commit
1547          because we found a serious bug in all non-x86 backends.
1548          - Matthias
1549    
1550    1. Modifications to the SML/NJ code generator and to the runtime system
1551       so that code object name strings are directly inserted into code
1552       objects at code generation time.  The only business the runtime system
1553       has with this is now to read the name strings on occasions.
1554       (The encoding of the name string has also changed somewhat.)
1555    
1556    2. CM now implements a simple "set calculus" for specifying export lists.
1557       In particular, it is now possible to refer to the export lists of
1558       other libraries/groups/sources and form unions as well as differences.
1559       See the latest CM manual for details.
1560    
1561    3. An separate notion of "proxy" libraries has again be eliminated from
1562       CM's model.  (Proxy libraries are now simply a special case of using
1563       the export list calculus.)
1564    
1565    4. Some of the existing libraries now take advantage of the new set
1566       calculus.
1567       (Notice that not all libraries have been converted because some
1568       of the existing .cm-files are supposed to be backward compatible
1569       with 110.0.x.)
1570    
1571    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
1572       "General.exnMessage"!  The former relies on a certain hook to be
1573       initialized, and that often does not happen in the stand-alone case.)
1574    
1575    ----------------------------------------------------------------------
1576    Name: Lal George
1577    Date: 2001/11/21  13:56:18 EST
1578    Tag: george-2001121-pseudo-ops
1579    Description:
1580    
1581      Implemented a complete redesign of MLRISC pseudo-ops. Now there
1582      ought to never be any question of incompatabilities with
1583      pseudo-op syntax expected by host assemblers.
1584    
1585      For now, only modules supporting GAS syntax are implemented
1586      but more should follow, such as MASM, and vendor assembler
1587      syntax, e.g. IBM as, Sun as, etc.
1588    
1589    ----------------------------------------------------------------------
1590    Name: Matthias Blume
1591    Date: 2001/11/14 11:52:00 EST
1592    Tag: blume-20011114-srcname
1593    Description:
1594    
1595    1. Routed the name of the current source file to mlriscgen where it
1596       should be directly emitted into the code object.  (This last part
1597       is yet to be done.)
1598    
1599    2. Some cleanup of the pgraph code to make it match the proposal that
1600       I put out the other day.  (The proposal notwithstanding, things are
1601       still in flux here.)
1602    
1603    ----------------------------------------------------------------------
1604    Name: Lal George
1605    Date: 2001/11/14 09:44:04 EST
1606    Tag:
1607    Description:
1608    
1609      Fix for a backpatching bug reported by Allen.
1610    
1611      Because the boundary between short and long span-dependent
1612      instructions is +/- 128, there are an astounding number of
1613      span-dependent instructions whose size is over estimated.
1614    
1615      Allen came up with the idea of letting the size of span
1616      dependent instructions be non-monotonic, for a maxIter
1617      number of times, after which the size must be monotonically
1618      increasing.
1619    
1620      This table shows the number of span-dependent instructions
1621      whose size was over-estimated as a function of maxIter, for the
1622      file Parse/parse/ml.grm.sml:
1623    
1624         maxIter            # of instructions:
1625            10                      687
1626            20                      438
1627            30                      198
1628            40                        0
1629    
1630      In compiling the compiler, there is no significant difference in
1631      compilation speed between maxIter=10 and maxIter=40. Actually,
1632      my measurements showed that maxIter=40 was a tad faster than
1633      maxIter=10! Also 96% of the  files in the compiler reach a fix
1634      point within 13 iterations, so fixing maxIter at 40, while high,
1635      is okay.
1636    
1637    ----------------------------------------------------------------------
1638    Name: Matthias Blume
1639    Date: 2001/10/31 15:25:00 EST
1640    Tag: blume-20011031-pgraph
1641    Description:
1642    
1643    CKIT:
1644    * Changed the "Function" constructor of type Ast.ctype to carry optional
1645      argument identifiers.
1646    * Changed the return type of TypeUtil.getFunction accordingly.
1647    * Type equality ignores the argument names.
1648    * TypeUtil.composite tries to preserve argument names but gives up quickly
1649      if there is a mismatch.
1650    
1651    installation script:
1652    * attempts to use "curl" if available (unless "wget" is available as well)
1653    
1654    CM:
1655    * has an experimental implementation of "portable graphs" which I will
1656      soon propose as an implementation-independent library format
1657    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
1658    
1659    NLFFI-LIB:
1660    * some cleanup (all cosmetic)
1661    
1662    NLFFIGEN:
1663    * temporarily disabled the mechanism that suppresses ML output for
1664      C definitions whose identifiers start with an underscore character
1665    * generate val bindings for enum constants
1666    * user can request that only one style (light or heavy) is being used;
1667      default is to use both (command-line arguments: -heavy and -light)
1668    * fixed bug in handling of function types involving incomplete pointers
1669    * generate ML entry points that take record arguments (i.e., using
1670      named arguments) for C functions that have a prototype with named
1671      arguments
1672      (see changes to CKIT)
1673    
1674    ----------------------------------------------------------------------
1675    Name: Allen Leung
1676    Date: 2001/10/27 20:34:00 EDT
1677    Tag: leunga-20011027-x86-fast-fp-call
1678    Description:
1679    
1680       Fixed the bug described in blume-20010920-slowfp.
1681    
1682       The fix involves
1683          1. generating FCOPYs in FSTP in ia32-svid
1684          2. marking a CALL with the appropriate annotation
1685    
1686    ----------------------------------------------------------------------
1687    Name: Matthias Blume
1688    Date: 2001/10/16 11:32:00 EDT
1689    Tag: blume-20011016-netbsd
1690    Description:
1691    
1692    Underscore patch from Chris Richards (fixing problem with compiling
1693    runtime system under recent NetBSD).
1694    
1695    ----------------------------------------------------------------------
1696    Name: Allen Leung
1697    Date: 2001/10/12 17:18:32 EDT 2001
1698    Tag: leung-20011012-x86-printflowgraph
1699    Description:
1700    
1701    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
1702    
1703    ----------------------------------------------------------------------
1704    Name: Lal George
1705    Date: 2001/10/11 23:51:34 EDT
1706    Tag: george-20011011-too-many-instrs
1707    Description:
1708    
1709    The representation of a program point never expected to see more
1710    than 65536 instructions in a basic block!
1711    
1712    ----------------------------------------------------------------------
1713    Name: Lal George
1714    Date: 2001/10/09 09:41:37 EDT
1715    Tag: george-20011008-mlrisc-labels
1716    Description:
1717    
1718    Changed the machine description files to support printing of
1719    local and global labels in assembly code, based on host assembler
1720    conventions.
1721    
1722    ----------------------------------------------------------------------
1723    Name: Matthias Blume
1724    Date: 2001/09/25 15:25:00 EDT
1725    Tag: blume-20010925-exninfo
1726    Description:
1727    
1728    I provided a non-hook implementation of exnName (at the toplevel) and
1729    made the "dummy" implementation of exnMessage (at the toplevel) more
1730    useful: if nothing gets "hooked in", then at least you are going to
1731    see the exception name and a message indicating why you don't see more.
1732    
1733    [For the time being, programs that need exnMessage and want to use
1734    ml-build should either use General.exnMessage (strongly recommended) or
1735    refer to structure General at some other point so that CM sees a
1736    static dependency.]
1737    
1738    [Similar remarks go for "print" and "use":  If you want to use their
1739    functionality in stand-alone programs generated by ml-build, then use
1740    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
1741    
1742    ----------------------------------------------------------------------
1743    Name: Matthias Blume
1744    Date: 2001/09/20 17:28:00 EDT
1745    Tag: blume-20010920-slowfp
1746    Description:
1747    
1748    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
1749    
1750    ----------------------------------------------------------------------
1751    Name: Matthias Blume
1752    Date: 2001/09/20 17:20:00 EDT
1753    Tag: blume-20010920-canonicalpaths
1754    Description:
1755    
1756    0. Updated the BOOT file (something that I forgot to do earlier).
1757    
1758    1. Small internal change to CM so that it avoids "/../" in filenames
1759       as much as possible (but only where it is safe).
1760    
1761    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
1762       that arguments that contain delimiters are passed through correctly.
1763       This change also means that all "special" arguments of the form
1764       @SMLxxx... must come first.
1765    
1766    3. Changed install script to put relative anchor names for tool commands
1767       into pathconfig.
1768    
1769    ----------------------------------------------------------------------
1770    Name: Matthias Blume
1771    Date: 2001/09/18 15:35:00 EDT
1772    Tag: blume-20010918-readme11036
1773    Description:
1774    
1775    Added README files.
1776    
1777    ----------------------------------------------------------------------
1778    Name: Matthias Blume
1779    Date: 2001/09/18 11:45:00 EDT
1780    Tag: Release_110_36 (retag)
1781    Description:
1782    
1783    Fixed mistake in config/preloads. Retagged as 110.36.
1784    
1785    ----------------------------------------------------------------------
1786    Name: Matthias Blume
1787    Date: 2001/09/18 09:40:00 EDT
1788    Tag: Release_110_36_orig (tag changed)
1789    Description:
1790    
1791    New version (110.36).  New bootfiles.
1792    
1793    ----------------------------------------------------------------------
1794    Name: Matthias Blume
1795    Date: 2001/09/14 16:15:00 EDT
1796    Tag: blume-20010914-x86fastfp
1797    Description:
1798    
1799    John committed some changes that Allen made, in particular a (hopefully)
1800    correctly working version of the x86-fp module.
1801    
1802    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
1803    flag to "true".  Everything seems to compile to a fixpoint ok, and
1804    "mandelbrot" speeds up by about 15%.
1805    
1806    ----------------------------------------------------------------------
1807    Name: Matthias Blume
1808    Date: 2001/09/13 11:20:00 EDT
1809    Tag: blume-20010913-minimal
1810    Description:
1811    
1812    1. Stefan Monnier's patch to fix a miscompilation problem that
1813       was brought to light by John Reppy's work on Moby.
1814    
1815    2. Implemented a minimal "structure Compiler" that contains just
1816       "version" and "architecture".  The minimal version will be
1817       available when the full version is not.  This is for backward-
1818       compatibility with code that wants to test Compiler.version.
1819    
1820    ----------------------------------------------------------------------
1821    Name: Matthias Blume
1822    Date: 2001/08/28 14:03:00 EDT
1823    Tag: blume-20010828-ml-lex
1824    Description:
1825    
1826    Fix for bug 1581, received from Neophytos Michael.
1827    
1828    ----------------------------------------------------------------------
1829    Name: Matthias Blume
1830    Date: 2001/08/27 11:20:00 EDT
1831    Tag: blume-20010827-readme11035
1832    Description:
1833    
1834    Fleshed out the README file for 110.35.
1835    
1836    ----------------------------------------------------------------------
1837    Name: Matthias Blume
1838    Date: 2001/08/24 17:10:00 EDT
1839    Tag: Release_110_35
1840    Description:
1841    
1842    New version number (110.35).  New bootfiles.
1843    
1844    ----------------------------------------------------------------------
1845    Name: Lal George
1846    Date: 2001/08/24 13:47:18 EDT 2001
1847    Tag: george-20010824-MLRISC-graphs
1848    Description:
1849    
1850     removed clusters from MLRISC completely and replaced with graphs.
1851    
1852    ----------------------------------------------------------------------
1853    Name: Matthias Blume
1854    Date: 2001/08/23 17:50:00 EDT
1855    Tag: blume-20010823-toplevel
1856    Description:
1857    
1858    - some reorganization of the code that implements various kinds of
1859      environments in the compiler (static, dynamic, symbolic, combined)
1860    - re-implemented the EnvRef module so that evalStream works properly
1861      (if the stream contains references to "use", "CM.make", etc.)
1862    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1863    
1864    ----------------------------------------------------------------------
1865    Name: Matthias Blume
1866    Date: 2001/08/20 15:50 EDT
1867    Tag: blume20010820-slipup
1868    Description:
1869    
1870    I forgot to commit a few files.  Here they are...
1871    
1872    ----------------------------------------------------------------------
1873    Name: Matthias Blume
1874    Date: 2001/08/20 15:35:00 EDT
1875    Tag: blume-20010820-debugprof
1876    Description:
1877    
1878    !!!! NEW BOOTFILES !!!!
1879    
1880    This is another round of reorganizing the compiler sources.  This
1881    time the main goal was to factor out all the "instrumentation"
1882    passes (for profiling and backtracing) into their own library.
1883    The difficulty was to do it in such a way that it does not depend
1884    on elaborate.cm but only on elabdata.cm.
1885    
1886    Therefore there have been further changes to both elaborate.cm and
1887    elabdata.cm -- more "generic" things have been moved from the former
1888    to the latter.  As a result, I was forced to split the assignment
1889    of numbers indicating "primtyc"s into two portions: SML-generic and
1890    SML/NJ-specific.  Since it would have been awkward to maintain,
1891    I bit the bullet and actually _changed_ the mapping between these
1892    numbers and primtycs.  The bottom line of this is that you need
1893    a new set of bin- and bootfiles.
1894    
1895    I have built new bootfiles for all architectures, so doing a fresh
1896    checkout and config/install.sh should be all you need.
1897    
1898    The newly created library's name is
1899    
1900        $smlnj/viscomp/debugprof.cm
1901    
1902    and its sources live under
1903    
1904        src/compiler/DebugProf
1905    
1906    ----------------------------------------------------------------------
1907    Name: Matthias Blume
1908    Date: 2001/08/15 17:15:00 EDT
1909    Tag: blume-20010815-compreorg
1910    Description:
1911    
1912    This is a first cut at reorganizing the CM libraries that make up the
1913    core of the compiler.  The idea is to separate out pieces that could
1914    be used independently by tools, e.g., the parser, the typechecker, etc.
1915    
1916    The current status is a step in this direction, but it is not quite
1917    satisfactory yet.  Expect more changes in the future.
1918    
1919    Here is the current (new) organization...
1920    
1921        What used to be $smlnj/viscomp/core.cm is now divided into
1922        six CM libraries:
1923    
1924             $smlnj/viscomp/basics.cm
1925                           /parser.cm
1926                           /elabdata.cm
1927                           /elaborate.cm
1928                           /execute.cm
1929                           /core.cm
1930    
1931        The CM files for these libraries live under src/system/smlnj/viscomp.
1932        All these libraries are proxy libraries that contain precisely
1933        one CM library component.  Here are the locations of the components
1934        (all within the src/compiler tree):
1935    
1936             Basics/basics.cm
1937             Parse/parser.cm
1938             ElabData/elabdata.cm
1939             Elaborator/elaborate.cm
1940             Execution/execute.cm
1941             core.cm
1942    
1943         [This organization is the same that has been used already
1944         for a while for the architecture-specific parts of the visible
1945         compiler and for the old version of core.cm.]
1946    
1947         As you will notice, many source files have been moved from their
1948         respective original locations to a new home in one of the above
1949         subtrees.
1950    
1951         The division of labor between the new libraries is the following:
1952    
1953             basics.cm:
1954                - Simple, basic definitions that pertain to many (or all) of
1955                  the other libraries.
1956             parser.cm:
1957                - The SML parser, producing output of type Ast.dec.
1958                - The type family for Ast is also defined and exported here.
1959             elabdata.cm:
1960                - The datatypes that describe input and output of the elaborator.
1961                  This includes types, absyn, and static environments.
1962             elaborator.cm:
1963                - The SML/NJ type checker and elaborator.
1964                  This maps an Ast.dec (with a given static environment) to
1965                  an Absyn.dec (with a new static environment).
1966                - This libraries implements certain modules that used to be
1967                  structures as functors (to remove dependencies on FLINT).
1968             execute.cm:
1969                - Everything having to do with executing binary code objects.
1970                - Dynamic environments.
1971             core.cm:
1972                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1973                - Top-level modules.
1974                - FLINT (this should eventually become its own library)
1975    
1976    Notes:
1977    
1978    I am not 100% happy with the way I separated the elaborator (and its
1979    data structures) from FLINT.  Two instances of the same problem:
1980    
1981        1. Data structures contain certain fields that carry FLINT-specific
1982           information.  I hacked around this using exn and the property list
1983           module from smlnj-lib.  But the fact that there are middle-end
1984           specific fields around at all is a bit annoying.
1985    
1986        2. The elaborator calculates certain FLINT-related information.  I tried
1987           to make this as abstract as I could using functorization, but, again,
1988           the fact that the elaborator has to perform calculations on behalf
1989           of the middle-end at all is not nice.
1990    
1991        3. Having to used exn and property lists is unfortunate because it
1992           weakens type checking.  The other alternative (parameterizing
1993           nearly *everything*) is not appealing, though.
1994    
1995    I removed the "rebinding =" warning hack because due to the new organization
1996    it was awkward to maintain it.  As a result, the compiler now issues some of
1997    these warnings when compiling init.cmi during bootstrap compilation. On
1998    the plus side, you also get a warning when you do, for example:
1999       val op = = Int32.+
2000    which was not the case up to now.
2001    
2002    I placed "assign" and "deref" into the _Core structure so that the
2003    code that deals with the "lazy" keyword can find them there.  This
2004    removes the need for having access to the primitive environment
2005    during elaboration.
2006    
2007    ----------------------------------------------------------------------
2008    Name: Matthias Blume
2009    Date: 2001/08/13
2010    Tag: blume-20010813-closures
2011    Description:
2012    
2013    This fix was sent to us by Zhong Shao.  It is supposed to improve the
2014    performance of certain loops by avoiding needless closure allocation.
2015    
2016    ----------------------------------------------------------------------
2017    Name: Lal George
2018    Date: 2001/07/31 10:03:23 EDT 2001
2019    Tag: george-20010731-x86-fmalloc
2020    Description: Fixed bug in x86 calls
2021    
2022        There was a bug where call instructions would mysteriously
2023        vanish. The call instruction had to be one that returned
2024        a floating point value.
2025    
2026    ----------------------------------------------------------------------
2027    Name: Lal George
2028    Date: 2001/07/19 16:36:29 EDT 2001
2029    Tag: george-20010719-simple-cells
2030    Description:
2031    
2032    I have dramatically simplified the interface for CELLS in MLRISC.
2033    
2034    In summary, the cells interface is broken up into three parts:
2035    
2036      1. CellsBasis : CELLS_BASIS
2037    
2038            CellsBasis is a top level structure and common for all
2039            architectures.  it contains the definitions of basic datatypes
2040            and utility  functions over these types.
2041    
2042      2. functor Cells() : CELLS
2043    
2044            Cells generates an interface for CELLS that incorporates the
2045            specific resources on the target architecture, such as the
2046            presence of special register classes, their number and size,
2047            and various useful substructures.
2048    
2049      3. <ARCH>CELLS
2050    
2051            e.g. SparcCells: SPARCCELLS
2052    
2053            <ARCH>CELLS usually contains additional bindings for special
2054            registers  on the architecture, such as:
2055    
2056                    val r0 : cell           (* register zero *)
2057                    val y : cell            (* Y register *)
2058                    val psr : cell          (* processor status register *)
2059                    ...
2060    
2061            The structure returned by applying the Cells functor is opened
2062            in this interface.
2063    
2064    The main implication of all this is that the datatypes for cells is
2065    split between CellsBasis and CELLS -- a fairly simple change for user
2066    code.
2067    
2068    In the old scheme the CELLS interface had a definitional binding of
2069    the form:
2070    
2071            signature CELLS = sig
2072    
2073               structure CellsBasis = CellsBasis
2074    
2075               ...
2076    
2077            end
2078    
2079    With all the sharing constraints that goes on in MLRISC, this old
2080    design  quickly leads to errors such as:
2081    
2082            "structure definition spec inside of sharing ... "
2083    
2084    
2085    and appears to require an unacceptable amount of sharing and where
2086    constraint hackery.
2087    
2088    I think this error message (the interaction of definitional specs and
2089    sharing) requires more explanation on our web page.
2090    
2091    ----------------------------------------------------------------------
2092    Name: Matthias Blume
2093    Date: 2001/07/19 15:00:00 EDT
2094    Tag: blume-20010719-libreorg
2095    Description:
2096    
2097    This update puts together a fairly extensive but straightforward change
2098    to the way the libraries that implement the interactive system are
2099    organized:
2100    
2101       The biggest change is the elimination of structure Compiler.  As a
2102       replacement for this structure, there is now a CM library
2103       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
2104       that exports all the substructures of the original structure Compiler
2105       directly.  So instead of saying Compiler.Foo.bar one now simply
2106       says Foo.bar.  (The CM libraries actually export a collection of
2107       structures that is richer than the collection of substructures of
2108       structure Compiler.)
2109    
2110       To make the transition smooth, there is a separate library called
2111       $smlnj/compiler/compiler.cm which puts together and exports the
2112       original structure Compiler (or at least something very close to it).
2113    
2114       There are five members of the original structure Compiler
2115       that are not exported directly but which instead became members
2116       of a new structure Backend (described by signature BACKEND).  These are:
2117       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
2118       Interact (: INTERACT), structure Machine (: MACHINE), and val
2119       architecture (: string).
2120    
2121       Structure Compiler.Version has become structure CompilerVersion.
2122    
2123       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
2124       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
2125       or x86, respectively.
2126       Each of these exports the same frontend structures that
2127       $smlnj/compiler.cm exports.  But they do not have a structure Backend
2128       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
2129       Hppa, PPC, Sparc, or X86, respectively.
2130    
2131       Library $smlnj/compiler/all.cm exports the union of the exports of
2132       $smlnj/compiler/<arch>.cm
2133    
2134       There are no structures <Arch>Compiler anymore, use
2135       $smlnj/compiler/<arch>.cm instead.
2136    
2137       Library host-compiler-0.cm is gone.  Instead, the internal library
2138       that instantiates CM is now called cm0.cm.  Selection of the host
2139       compiler (backend) is no longer done here but. (Responsibility for it
2140       now lies with $smlnj/compiler/current.cm.  This seems to be more
2141       logical.)
2142    
2143       Many individual files have been moved or renamed.  Some files have
2144       been split into multiple files, and some "dead" files have been deleted.
2145    
2146    Aside from these changes to library organization, there are also changes
2147    to the way the code itself is organized:
2148    
2149       Structure Binfile has been re-implemented in such a way that it no
2150       longer needs any knowledge of the compiler.  It exclusively deals
2151       with the details of binfile layout.  It no longer invokes the
2152       compiler (for the purpose of creating new prospective binfile
2153       content), and it no longer has any knowledge of how to interpret
2154       pickles.
2155    
2156       Structure Compile (: COMPILE) has been stripped down to the bare
2157       essentials of compilation.  It no longer deals with linking/execution.
2158       The interface has been cleaned up considerably.
2159    
2160       Utility routines for dealing with linking and execution have been
2161       moved into their own substructures.
2162    
2163       (The ultimate goal of these changes is to provide a light-weight
2164       binfile loader/linker (at least for, e.g., stable libraries) that
2165       does not require CM or the compiler to be present.)
2166    
2167    CM documentation has been updated to reflect the changes to library
2168    organization.
2169    
2170    ----------------------------------------------------------------------
2171    Name: Matthias Blume
2172    Date: 2001/07/10 17:30:00 EDT
2173    Tag: Release_110_34
2174    Description:
2175    
2176    Minor tweak to 110.34 (re-tagged):
2177    
2178      - README.html file added to CVS repository
2179      - runtime compiles properly under FreeBSD 3.X and 4.X
2180    
2181    ----------------------------------------------------------------------
2182    Name: Matthias Blume
2183    Date: 2001/07/10 17:30:00 EDT
2184    Tag: Release_110_34
2185    Description:
2186    
2187    New version number (110.34). New bootfiles.
2188    
2189    ----------------------------------------------------------------------
2190    Name: Matthias Blume
2191    Date: 2001/07/09 16:00:00 EDT
2192    Tag: blume-20010709-more-varargs
2193    Description:
2194    
2195    I changed the handling of varargs in ml-nlffigen again:
2196    The ellipsis ... will now simply be ignored (with an accompanying warning).
2197    
2198    The immediate effect is that you can actually call a varargs function
2199    from ML -- but you can't actually supply any arguments beyond the ones
2200    specified explicitly.  (For example, you can call printf with its format
2201    string, but you cannot pass additional arguments.)
2202    
2203    This behavior is only marginally more useful than the one before, but
2204    it has the advantage that a function or, more importantly, a function
2205    type never gets dropped on the floor, thus avoiding follow-up problems with
2206    other types that refer to the offending one.
2207    
2208    ----------------------------------------------------------------------
2209    Name: Matthias Blume
2210    Date: 2001/07/09 11:25:00 EDT
2211    Tag: blume-20010709-varargs
2212    Description:
2213    
2214    1. ckit-lib.cm now exports structure Error
2215    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
2216       with a warning accompanied by a source location.  Moreover, it
2217       merely skips the offending function or type and proceeds with the
2218       rest of its work.u  As a result, one can safely feed C code containing
2219       "..." to ml-nlffigen.
2220    3. There are some internal improvements to CM, providing slightly
2221       more general string substitutions in the tools subsystem.
2222    
2223    ----------------------------------------------------------------------
2224    Name: Matthias Blume
2225    Date: 2001/06/27 15:10:00 EDT
2226    Tag: blume-20010627-concur
2227    Description:
2228    
2229    Fixed a small bug in CM's handling of parallel compilation.
2230    (You could observe the bug by Control-C-interrupting an ordinary
2231    CMB.make or CM.stabilize and then attaching some compile servers.
2232    The result was that all of a sudden the previously interrupted
2233    compilation would continue on its own.  This was because of
2234    an over-optimization: CM did not bother to clean out certain queues
2235    when no servers were attached "anyway", resulting in the contents
2236    of these queues to grab control when new servers did get attached.)
2237    
2238    There is also another minor update to the CM manual.
2239    
2240    ----------------------------------------------------------------------
2241    Name: Matthias Blume
2242    Date: 2001/06/26 16:15:00 EDT
2243    Tag: blume-20010626-cmdoc
2244    Description:
2245    
2246    Minor typo fixed in CM manual (syntax diagram for libraries).
2247    
2248    ----------------------------------------------------------------------
2249    Name: Matthias Blume
2250    Date: 2001/06/25 22:55:00 EDT
2251    Tag: blume-20010625-x86pc
2252    Description:
2253    
2254    Fixed a nasty bug in the X86 assembly code that caused signal
2255    handlers to fail (crash) randomly.
2256    
2257    ----------------------------------------------------------------------
2258    Name: Matthias Blume
2259    Date: 2001/06/25 12:05:00 EDT
2260    Tag: blume-20010625-nlffigen
2261    Description:
2262    
2263    This update fixes a number of minor bugs in ml-nlffigen as reported by
2264    Nick Carter <nbc@andrew.cmu.edu>.
2265    
2266      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
2267      2. Default names for generated files are now derived from the name of
2268         the C file *without its directory*.  In particular, this causes generated
2269         files to be placed locally even if the C file is in some system directory.
2270      3. Default names for generated signatures and structures are also derived
2271         from the C file name without its directory.  This avoids silly things
2272         like "structure GL/GL".
2273         (Other silly names are still possible because ml-nlffigen does not do
2274          a thorough check of whether generated names are legal ML identifiers.
2275          When in doubt, use command line arguments to force particular names.)
2276    
2277    ----------------------------------------------------------------------
2278    Name: Matthias Blume
2279    Date: 2001/06/21 12:25:00 EDT
2280    Tag: blume-20010621-eXene
2281    Description:
2282    
2283    eXene now compiles and (sort of) works again.
2284    
2285    The library name (for version > 110.33) is $/eXene.cm.
2286    
2287    I also added an new example in src/eXene/examples/nbody.  See the
2288    README file there for details.
2289    
2290    ----------------------------------------------------------------------
2291    Name: Matthias Blume
2292    Date: 2001/06/20 16:40:00 EDT
2293    Tag: blume-20010620-cml
2294    Description:
2295    
2296    CML now compiles and works again.
2297    
2298    Libraries (for version > 110.33):
2299    
2300      $cml/cml.cm            Main CML library.
2301      $cml/basis.cm          CML's version of $/basis.cm.
2302      $cml/cml-internal.cm   Internal helper library.
2303      $cml/core-cml.cm       Internal helper library.
2304      $cml-lib/trace-cml.cm  Tracing facility.
2305      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
2306    
2307    The installer (config/install.sh) has been taught how to properly
2308    install this stuff.
2309    
2310    ----------------------------------------------------------------------
2311    Name: Matthias Blume
2312    Date: 2001/06/19 17:55:00 EDT
2313    Tag: blume-20010619-instantiate
2314    Description:
2315    
2316    This un-breaks the fix for bug 1432.
2317    (The bug was originally fixed in 110.9 but I broke it again some
2318    time after that.)
2319    
2320    ----------------------------------------------------------------------
2321    Name: Matthias Blume
2322    Date: 2001/06/19 17:25:00 EDT
2323    Tag: blume-20010619-signals
2324    Description:
2325    
2326    This should (hopefully) fix the long-standing signal handling bug.
2327    (The runtime system was constructing a continuation record with an
2328    incorrect descriptor which would cause the GC to drop data on the floor...)
2329    
2330    ----------------------------------------------------------------------
2331    Name: Matthias Blume
2332    Date: 2001/06/15 15:05:00 EDT
2333    Tag: blume-20010615-moresparc
2334    Description:
2335    
2336    Here is a short late-hour update related to Sparc c-calls:
2337    
2338     -- made handling of double-word arguments a bit smarter
2339    
2340     -- instruction selection phase tries to collapse certain clumsily
2341        constructed ML-Trees; typical example:
2342    
2343            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
2344    
2345        This currently has no further impact on SML/NJ since mlriscGen does
2346        not seem to generate such patterns in the first place, and c-calls
2347        (which did generate them in the beginning) has meanwhile been fixed
2348        so as to avoid them as well.
2349    
2350    ----------------------------------------------------------------------
2351    Name: Matthias Blume
2352    Date: 2001/06/15 15:05:00 EDT
2353    Tag: blume-20010615-sparc
2354    Description:
2355    
2356    The purpose of this update is to provide an implementation of NLFFI
2357    on Sparc machines.
2358    
2359    Here are the changes in detail:
2360    
2361       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
2362       the Sparc implementation of the c-calls API.
2363       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
2364       for accessing the ML frame.  Thus, we have a real frame pointer and
2365       can freely modify %sp without need for an omit-frame-ptr phase.
2366       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
2367       this case.
2368       * ml-nlffigen has been taught to produce code for different architectures
2369       and calling conventions.
2370       * In a way similar to what was done in the x86 case, the Sparc
2371       backend uses its own specific extension to mltree.  (For example,
2372       it needs to be able to generate UNIMP instructions which are part
2373       of the calling convention.)
2374       * ml-nlffi-lib was reorganized to make it more modular (in particular,
2375       to make it easier to plug in new machine- and os-dependent parts).
2376    
2377    There are some other fairly unrelated bug fixes and cleanups as well:
2378    
2379       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
2380       that they properly share their libraries with existing SML/NJ libraries.
2381       * I fixed a minor cosmetic bug in CM, supressing certain spurious
2382       follow-up error messages.
2383       * Updates to CM/CMB documentation.
2384    
2385    TODO items:
2386    
2387       * MLRISC should use a different register as its asmTemp on the Sparc.
2388         (The current %o2 is a really bad choice because it is part of the
2389         calling conventions, so things might interfere in unexpected ways.)
2390    
2391    ----------------------------------------------------------------------
2392    Name: Matthias Blume
2393    Date: 2001/06/07
2394    Tag: blume-20010607-calls
2395    Description:
2396    
2397    A number of internal changes related to C calls and calling conventions:
2398    
2399    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
2400       number of bytes popped implicitly (by the callee).  In most cases
2401       this field is 0 but on x86/win32 it is some non-zero value.  This
2402       is information provided for the benefit of the "omit-frameptr" pass.
2403    2. The CALL instruction on the x86 carries a similar "pops" field.
2404       The instruction selection phase copies its value from the ML-Tree
2405       CALL statement.
2406    3. On all other architectures, the instruction selection phase checks
2407       whether "pops=0" and complains if not.
2408    4. The c-calls implementation for x86 now accepts two calling conventions:
2409       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
2410       up after the call and pops is set to 0.  For "stdcall", the caller
2411       does nothing, leaving the cleanup to the callee; pops is set to
2412       the number of bytes that were pushed onto the stack.
2413    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
2414       distinguish between "ccall" and "stdcall".
2415    6. The UNIMP instruction has been added to the supported Sparc instruction
2416       set. (This is needed for implementing the official C calling convention
2417       on this architecture.)
2418    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
2419       work with the latest CM.
2420    
2421    ----------------------------------------------------------------------
2422    Name: Matthias Blume
2423    Date: 2001/06/05 15:10:00 EDT
2424    Tag: blume-20010605-cm-index
2425    Description:
2426    
2427    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
2428    
2429    1. CM can now generate "index files".  These are human-readable files
2430       that list on a per-.cm-file basis each toplevel symbol defined or
2431       imported.  The location of the index file for
2432       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
2433       To enable index-file generation, set CM.Control.generate_index to true
2434       or export an environment-symbol: export CM_GENERATE_INDEX=true.
2435    
2436       The CM manual has been updated accordingly.
2437    
2438    2. I made some slight modifications to the c-calls API in MLRISC.
2439    
2440         a) There is now a callback to support saving/restoring of
2441            dedicated but caller-save registers around the actual call
2442            instruction.
2443         b) One can optionally specify a comment-annotation for the
2444            call instruction.
2445    
2446    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
2447       (For example, the comment annotation shows the C prototype of
2448        the function being called.)
2449    
2450    ----------------------------------------------------------------------
2451    Name: Matthias Blume
2452    Date: 2001/06/01 13:30:00 EDT
2453    Tag: blume-20010601-nlffi-cleanup
2454    Description:
2455    
2456    This is mostly a cleanup of MLFFI stuff:
2457    
2458       - some signature files have been put into a more exposed place
2459       - the ugly 'f type parameter is gone (simplifies types tremendously!)
2460       - ml-nlffigen changed accordingly
2461       - tutorial updated
2462    
2463    Other changes:
2464    
2465       - author's affiliation in CM manual(s) updated
2466       - some more recognized keywords added to Allen's sml.sty
2467    
2468    ----------------------------------------------------------------------
2469    Name: Matthias Blume
2470    Date: 2001/05/25 15:30:00 EDT
2471    Tag: blume-20010525-iptr
2472    Description:
2473    
2474      - put the official 110.33-README (as it appears on the ftp server) under
2475        CVS
2476      - fixed a small bug related to incomplete pointer types in
2477        ml-nlffigen
2478      - small cosmetic change to the ml-nlffi-lib's "arr" type constructor
2479        (it does not need the 'f type parameter)
2480    
2481    ----------------------------------------------------------------------
2482    Name: Matthias Blume
2483    Date: 2001/05/23 14:30:00 EDT
2484    Tag: Release_110_33
2485    Description:
2486    
2487    New version number (110.33).  New bootfiles.
2488    
2489    ----------------------------------------------------------------------
2490    Name: Matthias Blume
2491    Date: 2001/05/22 18:06:00 EDT
2492    Tag: blume-20010522-targets
2493    Description:
2494    
2495    Made install.sh use file config/targets.customized if it exists, falling
2496    back to config/targets if it doesn't.  This way one can have a customized
2497    version of the targets file without touching the "real thing", thus
2498    eliminating the constant fear of accidentally checking something bogus
2499    back into the CVS repository...  (File config/targets.customized must
2500    not be added to the repository!)
2501    
2502    ----------------------------------------------------------------------
2503    Name: Matthias Blume
2504    Date: 2001/05/22 16:30:00 EDT
2505    Tag: blume-20010522-minitut
2506    Description:
2507    
2508    1. Bug fix in ml-nlffigen; now (hopefully) correctly handling
2509       struct returns.
2510    2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt.  This is some very
2511       incomplete, preliminary documentation for NLFFI.
2512    
2513    ----------------------------------------------------------------------
2514    Name: Matthias Blume
2515    Date: 2001/05/14 11:30:00 EDT
2516    Tag: blume-20010514-script
2517    Description:
2518    
2519    Some bugs in install script fixed.
2520    
2521    In addition to that I also made a slight change to the NLFFI API:
2522    Functors generated by ml-nlffigen now take the dynamic library as a
2523    straight functor argument, not as a suspended one.  (The original
2524    functor code used to force the suspension right away anyway, so there
2525    was nothing gained by this complication of the interface.)
2526    
2527    ----------------------------------------------------------------------
2528    Name: Matthias Blume
2529    Date: 2001/05/11 14:35:00 EDT
2530    Tag: blume-20010511-ml-nlffi
2531    Description:
2532    
2533    I finally took the plunge and added my new FFI code to the main
2534    repository.  For x86-linux it is now ready for prime-time.
2535    
2536    There are two new subdirectories of "src":
2537    
2538      - ml-nlffi-lib:
2539           The utility library for programs using the FFI interface.
2540           Here is the implementation of $/c.cm and its associated low-level
2541           partners $/c-int.cm and $/memory.cm.
2542      - ml-nlffigen:
2543           A stand-alone program for generating ML glue code from C source
2544           code.
2545    
2546    Building ml-nlffigen requires $/ckit-lib.cm.
2547    
2548    The config/install.sh script has been updates to do the Right Thing
2549    (hopefully).
2550    
2551    Notice that the source tree for the C-Kit will not be put under "src"
2552    but directly under the installation root directory.  (This is the
2553    structure that currently exists on the CVS server when you check out
2554    module "sml".)  Fortunately, config/install.sh knows about this oddity.
2555    
2556    Bugs: No documentation yet.
2557    
2558    ----------------------------------------------------------------------
2559    Name: Matthias Blume
2560    Date: 2001/05/09 16:35:00 EDT
2561    Tag: blume-20010509-cpscontract
2562    Description:
2563    
2564    Fixed a bug in the accounting code in cpsopt/contract.sml.  (The
2565    wrapper/unwrapper elimination did not decrement usage counts and some
2566    dead variables got overlooked by the dead-up logic.)
2567    
2568    ----------------------------------------------------------------------
2569    Name: Lal George
2570    Date: 2001/05/08  17:26:09 EDT
2571    Tag: george-20010508-omit-frameptr
2572    Description:
2573    
2574    Changes to implement the omit-frame-pointer optimization to support
2575    raw C calls. For now, there is only support on the Intel x86, but
2576    other architectures will follow as more experience is gained with this.
2577    
2578    
2579    ----------------------------------------------------------------------
2580    Name: Matthias Blume
2581    Date: 2001/05/07 14:40:00 EDT
2582    Tag: blume-20010507-proxies
2583    Description:
2584    
2585    I made into "proxy libraries" all libraries that qualify for such a
2586    change.  (A qualifying library is a library that has another library or
2587    groups as its sole member and repeats that member's export list
2588    verbatim.  A proxy library avoids this repetition by omitting its export
2589    list, effectively inheriting the list that its (only) member exports.
2590    See the CM manual for more explanation.)
2591    The main effect is that explicit export lists for these libraries
2592    do not have to be kepts in sync, making maintenance a bit easier.
2593    
2594    I also added copyright notices to many .cm-files.
2595    
2596    Last but not least, I made a new set of bootfiles.
2597    
2598    ----------------------------------------------------------------------
2599    Name: Matthias Blume
2600    Date: 2001/05/04 17:00:00 EDT
2601    Tag: blume-20010504-cm-lsplit
2602    Description:
2603    
2604    0. John merged pending changes to $/smlnj-lib.cm
2605    
2606    1. Allen's previous change accidentally backed out of one of Lal's
2607       earlier changes.  I undid this mistake (re-introducing Lal's change).
2608    
2609    2. I used the new topOrder' function from graph-scc.sml (from $/smlnj-lib.cm)
2610       within the compiler where applicable.  There is some code simplification
2611       because of that.
2612    
2613    3. The "split" phase (in FLINT) is now part of the default list of phases.
2614       Compiler.Control.LambdaSplitting.* can be used to globally control the
2615       lambda-splitting (cross-module-inlining) engine.  In addition to that,
2616       it can now also be controlled on a per-source basis: CM has been taught
2617       a new tool parameter applicable to ML source files.
2618    
2619       - To turn lambda-splitting off completely:
2620            local open Compiler.Control.LambdaSplitting in
2621                val _ = set Off
2622            end
2623       - To make "no lambda-splitting" the global default (but allow per-source
2624         overriding); this is the initial setting:
2625            local open Compiler.Control.LambdaSplitting in
2626                val _ = set (Default NONE)
2627            end
2628       - To make "lambda-splitting with aggressiveness a" the global default
2629         (and allow per-source overriding):
2630            local open Compiler.Control.LambdaSplitting in
2631                val _ = set (Default (SOME a))
2632            end
2633    
2634       - To turn lambda-splitting off for a given ML souce file (say: a.sml)
2635         write (in the respective .cm-file):
2636            a.sml (lambdasplitting:off)
2637       - To turn lambda-splitting for a.sml on with minimal aggressiveness:
2638            a.sml (lambdasplitting:on)
2639       - To turn lambda-splitting for a.sml on with aggressiveness <a> (where
2640         <a> is a decimal non-negative integer):
2641            a.sml (lambdasplitting:<a>)
2642       - To turn lambda-splitting for a.sml on with maximal aggressiveness:
2643            a.sml (lambdasplitting:infinity)
2644       - To use the global default for a.sml:
2645            a.sml (lambdasplitting:default)
2646         or simply
2647            a.sml
2648    
2649    ----------------------------------------------------------------------
2650    Name: Allen Leung
2651    Date: 2001/05/04 01:57:00 EDT
2652    Tag: leunga-20010504-sync
2653    Description:
2654    
2655      MLRISC features.
2656    
2657      1. Fix to CMPXCHG instructions.
2658      2. Changed RA interface to allow annotations in callbacks.
2659      3. Added a new method to the stream interface to allow annotations updates.
2660    
2661    ----------------------------------------------------------------------
2662    Name: Matthias Blume
2663    Date: 2001/05/01 11:45:00 EDT
2664    Tag: blume-20010501-pcedittmp
2665    Description:
2666    
2667    Changed install.sh to use the current working directory instead of
2668    /usr/tmp for a temporary file (pcedittmp).  The previous choice
2669    of /usr/tmp caused trouble with MacOS X because of file premission
2670    problems.
2671    
2672    ----------------------------------------------------------------------
2673    Name: Matthias Blume
2674    Date: 2001/04/20 11:10:00 EDT
2675    Tag: blume-20010420-inMLflag
2676    Description:
2677    
2678     - added vp_limitPtrMask to vproc-state.h
2679       (for use by the raw-C-calls mechanism to implement proper interrupt
2680        handling)
2681     - made the ML compiler aware of various data-structure offsets so it
2682       can generate code for accessing the vp_inML flag and vp_limitPtrMask
2683     - tweaked mlriscGen.sml to have it emit interrupt-handling code for
2684       raw C-calls
2685    
2686    ----------------------------------------------------------------------
2687    Name: Lal George
2688    Date: 2001/04/20 09:15:28 EDT
2689    Tag: george-20010420-macosX
2690    Description:
2691    
2692     - Changes to port to Mac OS X; Darwin.
2693    
2694     - In the process I found that sqrt was broken on the PPC, because the
2695       fsqrt instruction is not implemented.
2696    
2697    ----------------------------------------------------------------------
2698    Name: Matthias Blume
2699    Date: 2001/04/18 12:45:00 EDT
2700    Tag: blume-20010418-ccalls
2701    Description:
2702    
2703     - fixed two off-by-4 errors in the x86-specific c-calls implementation
2704       (this bug prevented structure arguments containing pointers from being
2705        passed correctly)
2706     - changed the raw-C-call code in mlriscGen.sml in such a way that
2707       structure arguments are represented as a pointer to the beginning
2708       of the structure (instead of having a series of synthesized arguments,
2709       one for each structure member)
2710    
2711     - made makeml script's verbosity level configurable via environment
2712       variable (MAKEML_VERBOSITY)
2713    
2714     - eliminated placeholder implementations for f32l, w16s, i16s, and f32s
2715       in rawmem-x86.sml; we are now using the real thing
2716    
2717    ----------------------------------------------------------------------
2718    Name: Matthias Blume
2719    Date: 2001/03/22 16:25:00 EST
2720    Tag: blume-20010322-bootfiles
2721    Description:
2722    
2723    Created a new set of bootfiles (for your automatic installation convenience).
2724    
2725    ----------------------------------------------------------------------
2726    Name: Matthias Blume
2727    Date: 2001/03/22 15:10:00 EST
2728    Tag: blume-20010322-rawmem-parcm
2729    Description:
2730    
2731    1. All "raw memory access" primitives for the new FFI are implemented now
2732       (at least on the x86).
2733    2. Some further cleanup of CM's parallel make mechanism.
2734    
2735    ----------------------------------------------------------------------
2736    Name: Matthias Blume
2737    Date: 2001/03/19 17:53:00 EST
2738    Tag: blume-20010319-parallel
2739    Description:
2740    
2741    Parallel make (using compile servers) now works again.
2742    
2743    To this end, CM.stabilize and CMB.make have been modified to work in
2744    two passes when compile servers are attached:
2745       1. Compile everything, do not perform stabilization; this pass
2746          uses compile servers
2747       2. Stabilize everything; this pass does not use compile servers
2748    If there are no compile servers, the two passes are combined into one
2749    (as before).  Splitting the passes increases the inherent parallelism
2750    in the dependency graph because the entire graph including all
2751    libraries is available at the same time.  This, in turn, improves
2752    server utilization.  The downside is that the master process will
2753    have to do some extra work after compilation is done (because for
2754    technical reasons it must re-read all the binfiles during stabilization).
2755    
2756    ----------------------------------------------------------------------
2757    Name: Matthias Blume
2758    Date: 2001/03/16 12:22:00 EST
2759    Tag: blume-20010316-bootfiles
2760    Description:
2761    
2762    Created a new set of bootfiles (for your automatic installation convenience).
2763    
2764    ----------------------------------------------------------------------
2765    Name: Matthias Blume
2766    Date: 2001/03/16 11:00:00 EST
2767    Tag: blume-20010316-MLTREE-fixup
2768    Description:
2769    
2770    This is a minor fixup for an (untagged) earlier commit by Allen.
2771    (A file was missing).
2772    
2773    ----------------------------------------------------------------------
2774    Name: Allen Leung
2775    Date: Mon Mar  5 18:54:57 EST 2001
2776    Tag: leunga-20010305-cut-support
2777    
2778    1. New support for alternative control-flow in MLTREE.
2779       Currently we support
2780    
2781          FLOW_TO(CALL ...., [k1,...,kn])
2782    
2783       This is needed for 'cuts to' in C-- and try/handle-like constructs
2784       in Moby
2785    
2786       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
2787    
2788    2. Register Allocator
2789    
2790       Changes in interface [from Fermin, John]
2791    
2792    3. Alpha 8-bit SLL support [Fermin]
2793    
2794    4. All architectures
2795    
2796       A new module (ClusterExpandCopies) for expanding parallel copies.
2797    
2798    ----------------------------------------------------------------------
2799    Name: Allen Leung
2800    Date: 2001/02/27 23:07:00 EST
2801    Tag: leunga-20010227-minor-stuff
2802    
2803    1. Alpha bug fix for CMOVNE
2804    2. Handle mltree COND(..,FCMP ...,...)
2805    3. Bug fix in simplifier
2806    
2807    ----------------------------------------------------------------------
2808    Name: Matthias Blume
2809    Date: 2001/01/30 17:50:00 EST
2810    Tag: blume-20010130-sync
2811    Description:
2812    
2813    This is just a minor update to sync my devel branch with the main brach.
2814    The only visible change is the addition of some README files.
2815    
2816    ----------------------------------------------------------------------
2817    Name: Matthias Blume
2818    Date: 2001/01/12 23:30:00 JST
2819    Tag: blume-20010112-bootfiles
2820    Description:
2821    
2822    Made a new set of bootfiles that goes with the current state of the
2823    repository.
2824    
2825    ----------------------------------------------------------------------
2826    Name: Matthias Blume
2827    Date: 2001/01/12 21:20:00 JST
2828    Tag: blume-20010112-sync
2829    Description:
2830    
2831    I am just flushing out some minor changes that had accumulated in
2832    my private branch in order to sync with the main tree.  (This is
2833    mainly because I had CVS trouble when trying to merge _into_ my
2834    private branch.)
2835    
2836    Most people should be completely unaffected by this.
2837    
2838    ----------------------------------------------------------------------
2839    Name: Allen Leung
2840    Date: Thu Jan 11 21:03:00 EST 2001
2841    Tag: leunga-20010111-labexp=mltree
2842    Description:
2843    
2844    1.  Removed the type LabelExp and replace it by MLTree.
2845    2.  Rewritten mltree-simplify with the pattern matcher tool.
2846    3.  There were some bugs in alpha code generator which would break
2847        64-bit code generation.
2848    4.  Redo the tools to generate code with the
2849    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
2850        are now generated by perl scripts.
2851    
2852    ----------------------------------------------------------------------
2853    Name: Matthias Blume
2854    Date: 2001/01/10 21:55:00 JST
2855    Tag: blume-20010110-rcc
2856    Description:
2857    
2858    The RCC stuff now seems to work (but only on the x86).
2859    This required hacking of the c-calls interface (and -implementation) in
2860    MLRISC.
2861    
2862    Normal compiler users should be unaffected.
2863    
2864    ----------------------------------------------------------------------
2865    Name: Matthias Blume
2866    Date: 2001/01/09 01:20:00 JST
2867    Tag: blume-20010109-rcc
2868    Description:
2869    
2870    This is a fairly big patch, flushing out a large number of pending
2871    changes that I made to my development copy over the last couple of days.
2872    
2873    Of practical relevance at this moment is a workaround for a pickling
2874    bug that Allen ran into the other day.  The cause of the bug itself is
2875    still unknown and it might be hard to fix it properly, but the
2876    workaround has some merits of its own (namely somewhat reducing pickling
2877    overhead for certain libraries).  Therefore, I think this solution should
2878    be satisfactory at this time.
2879    
2880    The rest of the changes (i.e., the vast majority) has to do with my
2881    ongoing efforts of providing direct support for C function calls from
2882    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
2883    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
2884    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
2885    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
2886    handle RCC.
2887    
2888    The last part (the changes to mlriscGen.sml) are still known to be
2889    wrong on the x86 and not implemented on all other architectures.  But
2890    the infrastructure is in place. I had to change a few functor
2891    signatures in the backend to be able to route the CCalls interface
2892    from MLRISC there, and I had to specialize the mltree type (on the
2893    x86) to include the necessary extensions. (The extensions themselves
2894    were already there and redy to go in MLRISC/x86).
2895    
2896    Everything should be very happy as soon as someone helps me with
2897    mlriscGen.sml...
2898    
2899    In any case, nothing of this should matter to anyone as long as the
2900    new primop is not being used (which is going to be the case unless you
2901    find it where I hid it :). The rest of the compiler is completely
2902    unaffected.
2903    
2904    ----------------------------------------------------------------------
2905    Name: Matthias Blume
2906    Date: 2001/01/05 00:30:00 JST
2907    Tag: blume-20010105-primops
2908    Description:
2909    
2910    Added some experimental support for work that I am doing right now.
2911    These changes mostly concern added primops, but there is also a new
2912    experimental C library in the runtime system (but currently not enabled
2913    anywhere except on Linux/X86).
2914    
2915    In the course of adding primops (and playing with them), I discovered that
2916    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
2917    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
2918    To recover, I made type information in INL_PRIM mandatory and changed
2919    prim.sml as well as built-in.sml accordingly.  The InLine structure now
2920    has complete, correct type information (i.e., no bottom types).
2921    
2922    Since all these changes mean that we need new binfiles, I also bumped the
2923    version number to 110.32.1.
2924    
2925    ----------------------------------------------------------------------
2926    Name: Matthias Blume
2927    Date: 2000/12/30 22:10:00 JST
2928    Tag: blume-20001230-various
2929    Description:
2930    
2931    Added proxy libraries for MLRISC and let MLRISC libraries refer
2932    to each other using path anchors.  (See CM manual for explanation.)
2933    
2934    Updated CM documentation.
2935    
2936    Fixed some bugs in CM.
2937    
2938    Implemented "proxy" libraries (= syntactic sugar for CM).
2939    
2940    Added "-quiet" option to makeml and changed runtime system accordingly.
2941    
2942    Added cleanup handler for exportML to reset timers and compiler stats.
2943    
2944    ----------------------------------------------------------------------
2945    Name: Lal George
2946    Date: 2000/12/22 22:22:58 EST 2000
2947    Tag: Release_110_32
2948    Description:
2949    
2950            Infinite precision used throughout MLRISC.
2951            see MLRISC/mltree/machine-int.sig
2952    
2953    ----------------------------------------------------------------------
2954    Name: Matthias Blume
2955    Date: 2000/12/22 23:16:00 JST
2956    Tag: blume-20001222-warn
2957    Description:
2958    
2959    Corrected wording and formatting of some CM warning message which I
2960    broke in my previous patch.
2961    
2962    ----------------------------------------------------------------------
2963    Name: Matthias Blume
2964    Date: 2000/12/22 21:20:00 JST
2965    Tag: blume-20001222-anchorenv
2966    Description:
2967    
2968    Fixed CM's handling of anchor environments in connection with CMB.make.
2969    
2970    ----------------------------------------------------------------------
2971    Name: Matthias Blume
2972    Date: 2000/12/22 13:15:00 JST
2973    Tag: blume-20001222-cleanup
2974    Description:
2975    
2976    Removed src/cm/ffi which does not (and did not) belong here.
2977    
2978    ----------------------------------------------------------------------
2979    Name: Matthias Blume
2980    Date: 2000/12/21 23:55:00 JST
2981    Tag: blume-20001221-exn
2982    Description:
2983    
2984    Probably most important: CM no longer silently swallows all exceptions
2985    in the compiler.
2986    Plus: some other minor CM changes.  For example, CM now reports some
2987    sizes for generated binfiles (code, data, envpickle, lambdapickle).
2988    
2989    ----------------------------------------------------------------------
2990    Name: Matthias Blume
2991    Date: 2000/12/15 00:01:05 JST
2992    Tag: blume-20001215-dirtool
2993    Description:
2994    
2995    - "dir" tool added.
2996    - improvements and cleanup to Tools structure
2997    - documentation updates
2998    
2999    ----------------------------------------------------------------------
3000    Name: Allen Leung
3001    Date: Thu Dec 14 03:45:24 EST 2000
3002    Description:
3003    Tag:  leunga-20001214-int-inf
3004    Description:
3005    
3006       In IntInf, added these standard functions, which are missing from our
3007    implementation:
3008    
3009        andb : int * int -> int
3010        xorb : int * int -> int
3011        orb  : int * int -> int
3012        notb : int -> int
3013         <<   : int * word -> int
3014        ~>>  : int * word -> int
3015    
3016       Not tested, I hope they are correct.
3017    
3018    ----------------------------------------------------------------------
3019    Name: Allen Leung
3020    Date: Fri Dec  8 19:23:26 EST 2000
3021    Description:
3022    Tag:  leunga-20001208-nowhere
3023    Description:
3024    
3025      Slight improvements to the 'nowhere' tool to handle OR-patterns,
3026    to generate better error messages etc.  Plus a brief manual.
3027    
3028    ----------------------------------------------------------------------
3029    Name: Lal George
3030    Date: 2000/12/08 09:54:02 EST 2000
3031    Tag: Release_110_31
3032    Description:
3033    
3034    - Version 110.31
3035    ----------------------------------------------------------------------
3036    Name: Allen Leung
3037    Date: Thu Dec  7 22:01:04 EST 2000
3038    Tag:  leunga-20001207-cell-monster-hack
3039    Description:
3040    
3041    Major MLRISC internal changes.  Affect all clients.
3042    Summary:
3043    
3044    1.  Type CELLS.cell = int is now replaced by a datatype.
3045        As a result, the old regmap is now gone.  Almost all interfaces
3046        in MLRISC change as a consequence.
3047    
3048    2.  A new brand version of machine description tool (v3.0) that generates
3049        modules expecting the new interface.  The old version is removed.
3050    
3051    3.  The RA interface has been further abstracted into two new functors.
3052        RISC_RA and X86RA.  These functors have much simpler interfaces.
3053        [See also directory MLRISC/demo.]
3054    
3055    4.  Some other new source->source code generation tools are available:
3056    
3057        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
3058        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
3059           I use this tool to generate the peephole optimizers---with the new
3060           cell type changes, peephole rules are becoming difficult to write
3061           without conditional pattern matching.
3062    
3063    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
3064        cover the entire MLRISC source tree so many things broke.
3065    
3066    6.  CM files have been moved to the subdirectory MLRISC/cm.
3067        They are moved because there are a lot of them and they clutter up the
3068        root dir.
3069    
3070    7.  More detailed documentation to come...
3071    
3072        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
3073        a makeml -rebuild first.  This is because of other other
3074        changes that Matthias has made (see below).
3075    
3076    
3077    ----------------------------------------------------------------------
3078    Name: Matthias Blume
3079    Date: 2000/11/30 23:12:00 JST
3080    Tag: blume-20001130-filereorg
3081    Description:
3082    
3083    Some manual updates and some file reorganizations in CM.
3084    
3085    ----------------------------------------------------------------------
3086    Name: Matthias Blume
3087    Date: 2000/11/24 17:45:00 JST
3088    Tag: blume-20001124-link
3089    Description:
3090    
3091    Drastically improved link traversal code for the case that the dynamic
3092    value was already loaded at bootstrap time.  As a result, CM and CMB
3093    now both load blazingly fast -- even on a very slow machine.  Also,
3094    memory consumption has been further reduced by this.
3095    
3096    Warning: The format of the PIDMAP file has changed.  THerefore, to
3097    bootstrap you have to do this:
3098    
3099    1. Run CMB.make
3100    2. Make a symbolic link for the boot directory:
3101         ln -s sml.boot.ARCH-OS xxx
3102    3. "Rebuild" the boot directory:
3103         ./makeml -boot xxx -rebuild sml ; rm xxx
3104    4. Boot normally:
3105          ./makeml
3106    
3107    ----------------------------------------------------------------------
3108    Name: Matthias Blume
3109    Date: 2000/11/21 21:20:00 JST
3110    Tag: blume-20001121-tools
3111    Description:
3112    
3113    Continued hacking on autoloading problem -- with success this time.
3114    Also changed tool-plugin mechanism.  See new CM manual.
3115    
3116    ----------------------------------------------------------------------
3117    Name: Matthias Blume
3118    Date: 2000/11/19 14:30:00 JST
3119    Tag:  blume-20001119-autoload
3120    Description:
3121    
3122    Some hacking to make autoloading faster.  Success for CMB, no success
3123    so far for CM.  There is a reduced structure CM' that autoloads faster.
3124    (This is a temporary, non-documented hack to be eliminated again when
3125    the general problem is solved.)
3126    
3127    ----------------------------------------------------------------------
3128    Name: Matthias Blume
3129    Date: 2000/11/17 14:10:00 JST
3130    Tag: blume-20001117-pickle-lib
3131    Description:
3132    
3133    1. Eliminated comp-lib.cm
3134    2. Made pickle-lib.cm
3135    3. Eliminated all uses of intset.sml (from comp-lib.cm)
3136    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
3137       equivalent constructs from smlnj-lib.cm (INtHashTable).
3138    5. Point 4. also goes for those uses of intmap.* in MLRISC.
3139       Duplicated intmap modules thrown out.
3140    6. Hunted down all duplicated SCC code and replaced it with
3141       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
3142    7. Rewrote Feedback module.
3143    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
3144       should be thrown out and equivalent modules from smlnj-lib.cm
3145       should be used (IntRedBlackSet, IntListSet, ...).
3146    
3147    Confirmed that compiler compiles to fixpoint.
3148    
3149    ----------------------------------------------------------------------
3150    Name: Allen Leung
3151    Date: 2000/11/10 18:00:00
3152    Tag: leunga-20001110-new-x86-fp
3153    
3154    A new x86 floating point code generator has been added.
3155    By default this is turned off.  To turn this on, do:
3156    
3157        CM.autoload "$smlnj/compiler.cm";
3158        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
3159    
3160    Changes:
3161    
3162    1.  Changed FTAN to FPTAN so that the assembly output is correct.
3163    2.  Changed the extension callback for FTANGENT to generate:
3164    
3165              fptan
3166              fstp  %st(0)
3167        instead of
3168              fptan
3169              fstpl ftempmem
3170    
3171    3.  Numerous assembly fixes for x86.
3172    
3173    5.  Cleaned up the machine code output module x86/x86MC.sml and added
3174        support for a whole bunch of instructions and addressing modes:
3175    
3176          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
3177          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
3178          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
3179          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
3180          fxch %st(n)
3181          fld %st(n)
3182          fst %st(n)
3183          fst mem
3184          fstp %st(n)
3185          fucom %st(n)
3186          fucomp %st(n)
3187    
3188        All these are now generated when the fast fp mode is turned on.
3189    
3190    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
3191    
3192    ----------------------------------------------------------------------
3193    Name: Matthias Blume
3194    Date: 2000/11/09 11:20:00 JST
3195    Tag: blume-20001109-scc
3196    Description:
3197    
3198    Eliminated some code duplication:
3199    
3200    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
3201       (Otherwise the functor is useless.)
3202    2. Used GraphSCCFn where SCCUtilFun was used previously.
3203    3. Got rid of SCCUtilFun (in comp-lib.cm).
3204    
3205    ----------------------------------------------------------------------
3206    Name: Lal George
3207    Date: 2000/11/06 09:02:21 EST 2000
3208    Tag: Release_110_30
3209    Description:
3210    
3211    - Version 110.30
3212    ----------------------------------------------------------------------
3213    Name: Matthias Blume
3214    Date: 2000/11/04 14:45:00
3215    Tag: blume-20001104-mlbuild
3216    Description:
3217    
3218    - Made ml-build faster on startup.
3219    - Documentation fixes.
3220    
3221    ----------------------------------------------------------------------
3222    Name: Matthias Blume
3223    Date: 2000/11/02 17:00:00 JST
3224    Tag: blume-20001102-condcomp
3225    Description:
3226    
3227    - Small tweaks to pickler -- new BOOTFILES!
3228    - Version bumped to 110.29.2.
3229    - Added conditional compilation facility to init.cmi (see comment there).
3230    ----------------------------------------------------------------------
3231    Name: Allen Leung
3232    Date: 2000/10/23 19:31:00
3233    Tag: leunga-20001023-demo-ra
3234    
3235    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
3236    2. Test programs for the graph library updated
3237    3. Some new MLRISC demo programs added
3238    
3239    ----------------------------------------------------------------------
3240    Name: Matthias Blume
3241    Date: 2000/08/31 22:15:00 JST
3242    Tag: blume-20001017-errmsg
3243    Description:
3244    
3245    More error message grief: Where there used to be no messages, there
3246    now were some that had bogus error regions.  Fixed.
3247    
3248    ----------------------------------------------------------------------
3249    Name: Matthias Blume
3250    Date: 2000/08/31 17:30:00 JST
3251    Tag: blume-20001017-v110p29p1
3252    Description:
3253    
3254    I made a version 110.29.1 with new bootfiles.
3255    
3256    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
3257              CM documentation changes and a small bugfix in CM's error reporting.
3258    
3259    ----------------------------------------------------------------------
3260    Name: Lal George
3261    Date: 2000/09/27 14:42:35 EDT
3262    Tag: george-20000927-nodestatus
3263    Description:
3264    
3265    Changed the type of the nodestatus, so that:
3266    
3267            SPILLED(~1)             is now SPILLED
3268            SPILLED(m) where m>=0   is now MEMREG(m)
3269            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
3270    
3271    ----------------------------------------------------------------------
3272    Name: Matthias Blume
3273    Date: 2000/09/07 14:45:00 JST
3274    Tag: blume-20000907-cmerrmsg
3275    Description:
3276    
3277    Small tweak to CM to avoid getting ML syntax error messages twice.
3278    
3279    ----------------------------------------------------------------------
3280    Name: Matthias Blume
3281    Date: 2000/08/31 18:00:00 JST
3282    Tag: blume-20000831-cvsbootfiles
3283    Description:
3284    
3285    New URL for boot files (because the 110.29 files on the BL server do
3286    now work correctly with my updated install scripts for yacc and lex).
3287    
3288    ----------------------------------------------------------------------
3289    Name: Matthias Blume
3290    Date: 2000/08/08 12:33:00 JST
3291    Tag: blume-20000808-manual
3292    Description:
3293    
3294    Tiny update to CM manual.
3295    
3296    ----------------------------------------------------------------------
3297    Name: Allen Leung
3298    Date: 2000/08/7 19:31:00
3299    Tag: leunga-20000807-a-whole-bunch-of-stuff
3300    
3301      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
3302    and Mobdy.
3303    
3304    1.  x86
3305    
3306       a.  Fixes to peephole module by John and Dan.
3307       b.  Assembly fix to SETcc by Allen.
3308       c.  Fix to c-call by John.
3309       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
3310       e.  Instruction selection optimization to SETcc as suggested by John.
3311    
3312           For example,
3313    
3314            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
3315    
3316           should generate:
3317    
3318            MOVL a, x
3319            SUBL b, x
3320            SHRL 31, x
3321    
3322    2.  IR stuff
3323    
3324         A bunch of new DJ-graph related algorithms added.  These
3325         speed up SSA construction.
3326    
3327    3.  SSA + Scheduling
3328    
3329         Added code for SSA and scheduling to the repository
3330    
3331    ----------------------------------------------------------------------
3332    Name: Lal George
3333    Date: 2000/07/27 11:53:14 EDT
3334    
3335    Tag: lal-20000727-linux-ppc
3336    Description:
3337    
3338     Made changes to support Linux PPC.
3339     p.s. I have confirmation that the 110.29 boot files work fine.
3340    
3341    ----------------------------------------------------------------------
3342    Name: Matthias Blume
3343    Date: 2000/07/27 17:40:00 JST
3344    Tag: blume-20000727-scripts
3345    Description:
3346    
3347    !!!! WARNING !!!!
3348    You must recompile the runtime system!
3349    !!!! WARNING !!!!
3350    
3351    This is basically another round of script-enhancements:
3352    
3353    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
3354       and undefine CM preprocessor symbols.
3355    
3356    2. ml-build avoids generating a new heap image if it finds that the
3357       existing one is still ok.  (The condition is that no ML file had to
3358       be recompiled and all ML files are found to be older that the heap
3359       file.)
3360    
3361       To make this work smoothly, I also hacked the runtime system as
3362       well as SMLofNJ.SysInfo to get access to the heap image suffix
3363       (.sparc-solaris, ...) that is currently being used.
3364    
3365       Moreover, the signature of CM.mk_standalone has changed.  See the
3366       CM manual.
3367    
3368    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
3369       CM manual for details.)
3370    
3371    4. More CM manual updates:
3372        - all of the above has been documented.
3373        - there is now a section describing the (CM-related) command line
3374          arguments that are accepted by the "sml" command
3375    
3376    ----------------------------------------------------------------------
3377    Name: Matthias Blume
3378    Date: 2000/07/25 16:20:00 JST
3379    Tag: blume-20000725-makedepend
3380    Description:
3381    
3382    Added a script called ml-makedepend.  This can be used in makefiles
3383    for Unix' make in a way very similar to the "makedepend" command for
3384    C.
3385    
3386    The script internally uses function CM.sources.
3387    
3388    Synopsis:
3389    
3390        ml-makedepend [-f makefile] cmfile targetname
3391    
3392    The default for the makefile is "makefile" (or "Makefile" should
3393    "makefile" not exist).
3394    
3395    ml-makedepend adds a cmfile/targetname-specific section to this
3396    makefile (after removing the previous version of this section).  The
3397    section contains a single dependency specification with targetname on
3398    the LHS (targetname is an arbitrary name), and a list of files derived
3399    from the cmfile on the RHS.  Some of the files on the RHS are
3400    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
3401    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
3402    path names.  The makefile writer is responsible for making sure that
3403    these variables have correct at the time "make" is invoked.
3404    
3405    ----------------------------------------------------------------------
3406    Name: Matthias Blume
3407    Date: 2000/07/22 23:30:00 JST
3408    Tag: blume-20000722-urlupdate
3409    Description:
3410    
3411    Changed BOOT and config/srcarchiveurl to point to BL server:
3412    
3413        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
3414    
3415    ----------------------------------------------------------------------
3416    Name: Matthias Blume
3417    Date: 2000/07/18 18:00:00 JST
3418    Tag: blume-20000718-Version_110_29
3419    Description:
3420    
3421    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
3422    
3423    2. Updated config/version to 110.29
3424    
3425    3. Updated config/srcarchiveurl
3426    
3427    3. New boot files!
3428       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
3429    
3430    ----------------------------------------------------------------------
3431    Name: Matthias Blume
3432    Date: 2000/07/11 13:58:00 JST
3433    Tag: blume-20000711-doctypo
3434    Description:
3435    
3436    Fixed a few typos in CM manual.
3437    
3438    ----------------------------------------------------------------------
3439    Name: Allen Leung
3440    Date: 2000/06/15 00:38:00
3441    Tag: leunga-20000704-sparc-x86
3442    
3443    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
3444    2. fix to x86 RET bug [found by Dan Grossman]
3445    3. sparc assembly bug fix for ticc instructions [found by Fermin]
3446    
3447       Affects c-- and moby only
3448    
3449    ----------------------------------------------------------------------
3450    Name: Matthias Blume
3451    Date: 2000/07/04 15:26:00
3452    Tag: blume-20000704-trigger
3453    Description:
3454    
3455    1. Improvements to CM manual.
3456    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
3457       of getting a back-trace.  The function, when called, raises an
3458       internal exception which explicitly carries the full back-trace history,
3459       so it is unaffected by any intervening handle-raise pairs ("trivial"
3460       or not).  The interactive loop will print that history once it arrives
3461       at top level.
3462       Short of having all exceptions implicitly carry the full history, the
3463       recommended way of using this facility is:
3464         - compile your program with instrumentation "on"
3465         - run it, when it raises an exception, look at the history
3466         - if the history is "cut off" because of some handler, go and modify
3467           your program so that it explicitly calls BTrace.trigger
3468         - recompile (still instrumented), and rerun; look at the full history
3469    
3470    ----------------------------------------------------------------------
3471    Name: Matthias Blume
3472    Date: 2000/07/03 15:36:00 JST
3473    Tag: blume-20000702-manual
3474    Description:
3475    
3476    Small corrections and updates to CM manual.
3477    
3478    ----------------------------------------------------------------------
3479    Name: Matthias Blume
3480    Date: 2000/06/29 16:04:00 JST
3481    Tag: blume-20000629-yacctool
3482    Description:
3483    
3484    Changes:
3485    
3486    1. Class "mlyacc" now takes separate arguments to pass options to
3487       generated .sml- and .sig-files independently.
3488    2. Corresponding CM manual updates.
3489    3. BTrace module now also reports call sites.  (However, for loop clusters
3490       it only shows from where the cluster was entered.)  There are associated
3491       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
3492    
3493    ----------------------------------------------------------------------
3494    Name: Matthias Blume
3495    Date: 2000/06/27 16:51:00 JST
3496    Tag: blume-20000627-noweb
3497    Description:
3498    
3499    Changes:
3500    
3501     1. Implemented "subdir" and "witness" options for noweb tool.
3502        This caused some slight internal changes in CM's tool implementation.
3503     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
3504        some remaining issues from earlier path anchor changes.
3505     3. Updated CM manual accordingly.
3506    
3507     4. Changed implementation of back-tracing so that I now consider it
3508        ready for prime-time.
3509    
3510        In particular, you don't have to explicitly trigger the back-trace
3511        anymore.  Instead, if you are running BTrace-instrumented code and
3512        there is an uncaught exception (regardless of whether or not it was
3513        raised in instrumented code), the top-level evalloop will print
3514        the back-trace.
3515    
3516        Features:
3517    
3518          - Instrumented and uninstrumented code work together seemlessly.
3519            (Of course, uninstrumented code is never mentioned in actual
3520             back-traces.)
3521    
3522          - Asymptotic time- and space-complexity of instrumented code is
3523            equal to that of uninstrumented code.  (This means that
3524            tail-recursion is preserved by the instrumentation phase.)
3525    
3526          - Modules whose code has been instrumented in different sessions
3527            work together without problem.
3528    
3529          - There is no penalty whatsoever on uninstrumented code.
3530    
3531          - There is no penalty on "raise" expressions, even in
3532            instrumented code.
3533    
3534        A potential bug (or perhaps it is a feature, too):
3535    
3536          A back-trace reaches no further than the outermost instrumented
3537          non-trivial "raise".  Here, a "trivial" raise is one that is the
3538          sole RHS of a "handle" rule.  Thus, back-traces reach trough
3539    
3540               <exp> handle e => raise e
3541    
3542          and even
3543    
3544               <exp> handle Foo => raise Bar
3545    
3546          and, of course, through
3547    
3548               <exp> handle Foo => ...
3549    
3550         if the exception was not Foo.
3551    
3552         Back-traces always reach right through any un-instrumented code
3553         including any of its "handle" expressions, trivial or not.
3554    
3555       To try this out, do the following:
3556    
3557         - Erase all existing binfiles for your program.
3558           (You may keep binfiles for those modules where you think you
3559            definitely don't need back-tracing.)
3560         - Turn on back-trace instrumentation:
3561              SMLofNJ.Internals.BTrace.mode (SOME true);
3562         - Recompile your program.  (I.e., run "CM.make" or "use".)
3563         - You may now turn instrumentation off again (if you want):
3564              SMLofNJ.Internals.BTrace.mode (SOME false);
3565         - Run your program as usual.  If it raises an exception that
3566           reaches the interactive toplevel, then a back-trace will
3567           automatically be printed.  After that, the toplevel loop
3568           will print the exception history as usual.
3569    
3570    ----------------------------------------------------------------------
3571    Name: Matthias Blume
3572    Date: 2000/06/26 09:56:46 JST
3573    Tag: blume-20000626-setup
3574    Description:
3575    
3576    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
3577          ML code before and after compiling a file (e.g., to set compiler
3578          flags)
3579    
3580    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
3581              - associated changes to btrace.sml (BTrace instrumentation pass)
3582              - cleaner implementation of btimp.sml (BTrace tracing and report
3583                module)
3584    
3585    CM manual: * new path encoding documented
3586               * description of setup-parameter to "sml" added
3587    
3588    The biggest user-visible change to back-tracing is that it is no
3589    longer necessary to compile all traced modules within the same
3590    session.  (This was a real limitation.)
3591    
3592    ----------------------------------------------------------------------
3593    Name: Matthias Blume
3594    Date: 2000/06/24 12:40:00 JST
3595    Tag: blume-20000624-startup
3596    Description:
3597    
3598    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
3599    bit too often -- to put it mildly. :)
3600    
3601    ----------------------------------------------------------------------
3602    Name: Matthias Blume
3603    Date: 2000/06/23 18:20:00 JST
3604    Tag: blume-20000623-btrace
3605    Description:
3606    
3607    This updates adds a backtrace facility to aid programmers in debugging
3608    their programs.  This involves the following changes:
3609    
3610    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
3611       keeping track of the current call stack.  When programs are compiled
3612       in a special mode, the compiler will insert calls to these hooks
3613       into the user program.
3614       "Hook" means that it is possible for different implementations of
3615       back-tracing to register themselves (at different times).
3616    
3617    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
3618       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
3619       It can be turned on using this call:
3620         SMLofNJ.Internals.BTrace.mode (SOME true);
3621       Turning it off again:
3622         SMLofNJ.Internals.BTrace.mode (SOME false);