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

Legend:
Removed from v.841  
changed lines
  Added in v.1249

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