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

Legend:
Removed from v.737  
changed lines
  Added in v.1240

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