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