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