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 1067, Fri Feb 15 17:08:17 2002 UTC revision 1273, Thu Oct 10 17:13:35 2002 UTC
# Line 14  Line 14 
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16  Name: Matthias Blume  Name: Matthias Blume
17    Date: 2002/10/10 13:10:00 EDT
18    Tag: blume-20021010-ppc-divs
19    Description:
20    
21    The mltree operator DIVS must be implemented with an overflow check on
22    the PPC because the hardware indicates divide-by-zero using "overflow" as
23    well.
24    
25    ----------------------------------------------------------------------
26    Name: Matthias Blume
27    Date: 2002/07/23 11:45:00
28    Tag: blume-20020723-smlnj-home
29    Description:
30    
31    Sml now senses the SMLNJ_HOME environment variable.  If this is set,
32    then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless
33    CM_PATHCONFIG is also set), the path configuration file is assumed
34    to be in $SMLNJ_HOME/lib/pathconfig.  This way one can easily move
35    the entire tree to some other place and everything will "just work".
36    
37    (Companion commands such as ml-build and ml-makedepend also sense this
38    variable.)
39    
40    ----------------------------------------------------------------------
41    Name: Matthias Blume
42    Date: 2002/07/12 21:19:00 EDT
43    Tag: blume-20020712-liveness
44    Description:
45    
46    Exported two useful "step" functions from liveness module (MLRISC).
47    
48    ----------------------------------------------------------------------
49    Name: Matthias Blume
50    Date: 2002/07/05 16:00 EDT
51    Tag: Release_110_41
52    Description:
53    
54    New working release.  New bootfiles.
55    
56    ----------------------------------------------------------------------
57    Name: Matthias Blume
58    Date: 2002/07/05 10:25:00 EDT
59    Tag: blume-20020705-btimp
60    Description:
61    
62    Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that
63    other clients can set up backtracing support.
64    
65    ----------------------------------------------------------------------
66    Name: Matthias Blume
67    Date: 2002/06/25 17:23:00 EDT
68    Tag: blume-20020625-fpmax
69    Description:
70    
71    Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point
72    case.  (The sense of the isNaN test was reversed -- which made min and
73    max always return their first argument.)
74    
75    ----------------------------------------------------------------------
76    Name: Matthias Blume
77    Date: 2002/06/11
78    Tag: blume-20020611-unixpath
79    Description:
80    
81    Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch.
82    
83    ----------------------------------------------------------------------
84    Name: Matthias Blume
85    Date: 2002/06/10 16:35:00 EDT
86    Tag: blume-20020610-ieeereal
87    Description:
88    
89    I back-ported my implementation of IEEEReal.fromString from the
90    idlbasis-devel branch so that we can test it.
91    
92    Another small change is that ppDec tries to give more information
93    than just "<sig>" in the case of functors.  However, this code is
94    broken in some mysterious way if the functor's body's signature
95    has not been declared by ascription but gets inferred from the
96    implementation.  This needs fixing...
97    
98    ----------------------------------------------------------------------
99    Name: Matthias Blume
100    Date: 2002/05/31
101    Tag: blume-20020531-btrace-mode
102    Description:
103    
104    Resurrected SMLofNJ.Internals.BTrace.mode.  (It accidentally fell by
105    the wayside when I switched over to using Controls everywhere.)
106    
107    ----------------------------------------------------------------------
108    Name: Lal George
109    Date: 2002/05/23 12:21:40 EDT
110    Tag: george-20020523-visual-labels
111    Description:
112    
113    Labels are now displayed in the graphical output to make
114    the fall-through and target blocks obvious.
115    
116    ----------------------------------------------------------------------
117    Name: Matthias Blume
118    Date: 2002/05/22 11:03:00 EDT
119    Tag: blume-20020522-shrink
120    Description:
121    
122    John tweaked yesterday's fix for 1131 to handle an out-of-memory
123    situation that comes up when allocating huge arrays.
124    
125    ----------------------------------------------------------------------
126    Name: Matthias Blume
127    Date: 2002/05/21 16:00:00 EDT
128    Tag: Release_110_40
129    Description:
130    
131    New working release (110.40).  New bootfiles.
132    
133    [Also: John Reppy fixed GC bug 1131.]
134    
135    ----------------------------------------------------------------------
136    Name: Matthias Blume
137    Date: 2002/05/21 12:35:00 EDT
138    Tag: blume-20020521-cmdoc
139    Description:
140    
141    CM documentation update.
142    
143    ----------------------------------------------------------------------
144    Name: Matthias Blume
145    Date: 2002/05/21 10:55:00 EDT
146    Tag: blume-20020521-misc
147    Description:
148    
149    - John tweaked runtime to be silent on heap export (except when
150      GC messages are on).
151    - I added a few more things (cross-compiling versions of CMB) to
152      config/preloads (as suggestions).
153    
154    ----------------------------------------------------------------------
155    Name: Matthias Blume
156    Date: 2002/05/20 22:25:00 EDT
157    Tag: blume-20020520-controls
158    Description:
159    
160    - Added ControlUtil structure to control-lib.cm.
161    - Use it throughout.
162    - Used Controls facility to define MLRISC controls (as opposed to
163      registering MLRISC control ref cells with Controls after the fact)
164    - Fixed messed-up controls priorities.
165    
166    * Removed again all the stuff from config/preloads that one wouldn't
167      be able to preload at the time the initial heap image is built.
168      (Many libraries, e.g., CML, do not exist yet at this time.  The
169       only libraries that can be preloaded via config/preloads are those
170       that come bundled with the bootfiles.)
171    
172    ----------------------------------------------------------------------
173    Name: Matthias Blume
174    Date: 2002/05/20 10:59:00 EDT
175    Tag: blume-20020520-preloads
176    Description:
177    
178    Added a lot of commented-out suggestions for things to be included
179    in config/preloads.
180    
181    ----------------------------------------------------------------------
182    Name: Allen Leung
183    Date: 2002/05/18 14:20:00 EDT
184    Tag: leunga-20020518-mdl
185    Description:
186    
187    o Made the mdl tool stuff compile and run again.
188    o I've disabled all the stuff that depends on RTL specifications; they
189      are all badly broken anyway.
190    
191    ----------------------------------------------------------------------
192    Name: Matthias Blume
193    Date: 2002/05/17 16:49:00 EDT
194    Tag: blume-20020517-controls
195    Description:
196    
197    0. John Reppy made several modifications to the SML/NJ library.
198       In particular, there is a shiny new controls-lib.cm.
199    
200    1. Pushed new controls interface through compiler so that everything
201       compiles again.
202    
203    2. Added FormatComb and FORMAT_COMB to the CML version of the
204       SML/NJ library (so that CML compiles again).
205    
206    3. Modified init scripts because XXX_DEFAULT environment variables
207       are no longer with us.  (Boot-time initialization is now done
208       using the same environment variables that are also used for
209       startup-time initialization of controls.)
210    
211    ----------------------------------------------------------------------
212    Name: Lal George
213    Date: 2002/05/15 09:20:10 EDT
214    Tag: george-20020515-pseudo-op-decls
215    Description:
216    
217            All pseudo-ops emitted before the first segment declaration
218    such as TEXT, DATA, and BSS directives are assumed to be global
219    declarations and are emitted first in the assembly file. This is
220    useful in a number of situations where one has pseudo-ops that are not
221    specific to any segment, and also works around the constraint that one
222    cannot have client pseudo-ops in the TEXT segment.
223    
224            Because no segment is associated with these declarations it is
225    an error to allocate any space or objects before the first segment
226    directive and an exception will be raised. However, we cannot make
227    this check for client pseudo-ops.
228    
229            These top level declarations are a field in the CFG graph_info.
230    In theory you can continue to add to this field after the CFG has been
231    built -- provided you know what you are doing;-)
232    
233    ----------------------------------------------------------------------
234    Name: Matthias Blume
235    Date: 2002/05/13 16:40:00 EDT
236    Tag: blume-20020513-pp-etc
237    Description:
238    
239    A few minor bugfixes:
240    
241      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
242        (Bogus printouts for redefined bindings still occur.  Compiler
243        bug should no longer occur now.  We need to redo the prettyprinter
244        from scratch.)
245    
246      - CM pathname printer now also adds escape sequences for ( and )
247    
248      - commend and docu fixes for ml-nlffi
249    
250    ----------------------------------------------------------------------
251    Name: Matthias Blume
252    Date: 2002/05/10 16:40:00 EDT
253    Tag: blume-20020510-erg-textio
254    Description:
255    
256    Applied the following bugfix provided by Emden Gansner:
257    
258        Output is corrupted when outputSubstr is used rather than output.
259    
260        The problem occurs when a substring
261    
262            ss = (s, dataStart, dataLen)
263    
264        where dataStart > 0, fills a stream buffer with avail bytes left.
265        avail bytes of s, starting at index dataStart, are copied into the
266        buffer, the buffer is flushed, and then the remaining dataLen-avail
267        bytes of ss are copied into the beginning of the buffer. Instead of
268        starting this copy at index dataStart+avail in s, the current code
269        starts the copy at index avail.
270    
271        Fix:
272        In text-io-fn.sml, change line 695 from
273             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
274        to
275             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
276    
277    ----------------------------------------------------------------------
278    Name: Matthias Blume
279    Date: 2002/04/12 13:55:00 EDT
280    Tag: blume-20020412-assyntax
281    Description:
282    
283    1. Grabbed newer assyntax.h from the XFree86 project.
284    2. Fiddled with how to compile X86.prim.asm without warnings.
285    3. (Very) Minor cleanup in CM.
286    
287    ----------------------------------------------------------------------
288    Name: Matthias Blume
289    Date: 2002/04/01 (no joke!) 17:07:00 EST
290    Tag: blume-20020401-x86div
291    Description:
292    
293    Added full support for div/mod/rem/quot on the x86, using the machine
294    instruction's two results (without clumsily recomputing the remainder)
295    directly where appropriate.
296    
297    Some more extensive power-of-two support was added to the x86 instruction
298    selector (avoiding expensive divs, mods, and muls where they can be
299    replaced with cheaper shifts and masks).  However, this sort of thing
300    ought to be done earlier, e.g., within the CPS optimizer so that
301    all architectures benefit from it.
302    
303    The compiler compiles to a fixed point, but changes might be somewhat
304    fragile nevertheless.  Please, report any strange things that you might
305    see wrt. div/mod/quot/rem...
306    
307    ----------------------------------------------------------------------
308    Name: Matthias Blume
309    Date: 2002/03/29 17:22:00
310    Tag: blume-20020329-div
311    Description:
312    
313    Fixed my broken div/mod logic.  Unfortunately, this means that the
314    inline code for div/mod now has one more comparison than before.
315    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
316    The problem was with quotient = 0, because that alone does not tell
317    us which way the rounding went.  One then has to look at whether
318    remainder and divisor have the same sign...  :(
319    
320    Anyway, I replaced the bootfiles with fresh ones...
321    
322    ----------------------------------------------------------------------
323    Name: Matthias Blume
324    Date: 2002/03/29 14:10:00 EST
325    Tag: blume-20020329-inlprims
326    Description:
327    
328    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
329    
330    Primops have changed. This means that the bin/boot-file formats have
331    changed as well.
332    
333    To make sure that there is no confusion, I made a new version.
334    
335    
336    CHANGES:
337    
338    * removed REMT from mltree (remainder should never overflow).
339    
340    * added primops to deal with divisions of all flavors to the frontend
341    
342    * handled these primops all the way through so they map to their respective
343      MLRISC support
344    
345    * used these primops in the implementation of Int, Int32, Word, Word32
346    
347    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
348    
349    * parameterized INLMIN, INLMAX, and INLABS by a numkind
350    
351    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
352      floating point
353    
354    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
355      and Real (but Real.abs maps to a separate floating-point-only primop)
356    
357    
358    TODO items:
359    
360    * Hacked Alpha32 instruction selection, disabling the selection of REMx
361      instructions because the machine instruction encoder cannot handle
362      them.  (Hppa, PPC, and Sparc instruction selection did not handle
363      REM in the first place, and REM is supported by the x86 machine coder.)
364    
365    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
366      selection phase.  (The two can be streamlined because the hardware
367      delivers both quotient and remainder at the same time anyway.)
368    
369    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
370      (Currently the behavior is inconsistent both across architectures and
371      wrt. the draft Basis spec.)
372    
373    * Word8 should eventually be handled natively, too.
374    
375    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
376      as if there currently is no execution path that could trigger it in
377      SML/NJ.  (The assumptions underlying functions arith and promotable do not
378      hold for things like multiplication and division.)
379    
380    ----------------------------------------------------------------------
381    Name: Matthias Blume
382    Date: 2002/03/27 16:27:00 EST
383    Tag: blume-20020327-mlrisc-divisions
384    Description:
385    
386    Added support for all four division operations (ML's div, mod, quot,
387    and rem) to MLRISC.  In the course of doing so, I also rationalized
388    the naming (no more annoying switch-around of DIV and QUOT), by
389    parameterizing the operation by div_rounding_mode (which can be either
390    DIV_TO_ZERO or DIV_TO_NEGINF).
391    
392    The generic MLTreeGen functor takes care of compiling all four
393    operations down to only round-to-zero div.
394    
395    Missing pieces:
396    
397      * Doing something smarter than relying on MLTreeGen on architectures
398        like, e.g., the x86 where hardware division delivers both quotient and
399        remainder at the same time.  With this, the implementation of the
400        round-to-neginf operations could be further streamlined.
401    
402      * Remove inlining support for div/mod/rem from the frontend and replace it
403        with primops that get carried through to the backend.  Do this for all
404        int and word types.
405    
406    ----------------------------------------------------------------------
407    Name: Matthias Blume
408    Date: 2002/03/25 17:25:00 EST
409    Tag: blume-20020325-divmod
410    Description:
411    
412    I improved (hopefully without breaking them) the implementation of Int.div,
413    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
414    advantage of the following observations:
415    
416      Let  q = x quot y      r = x rem y
417           d = x div  y      m = x mod y
418    
419    where "quot" is the round-to-zero version of integer division that
420    hardware usually provides.  Then we have:
421    
422         r = x - q * y        where neither the * nor the - will overflow
423         d = if q >= 0 orelse x = q * y then q else q - 1
424                              where neither the * nor the - will overflow
425         m = if q >= 0 orelse r = 0 then r else r + y
426                              where the + will not overflow
427    
428    This results in substantial simplification of the generated code.
429    The following table shows the number of CFG nodes and edges generated
430    for
431            fun f (x, y) = x OPER y
432            (* with OPER \in div, mod, quot, rem *)
433    
434    
435        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
436        --------------------------------------------------------
437         div |         24 |         39 |         12 |         16
438         mod |         41 |         71 |         12 |         16
439        quot |          8 |         10 |          8 |         10
440         rem |         10 |         14 |          8 |         10
441    
442    
443    ----------------------------------------------------------------------
444    Name: Matthias Blume
445    Date: 2002/03/25 22:06:00 EST
446    Tag: blume-20020325-cprotobug
447    Description:
448    
449    Fixed a bug in cproto (c prototype decoder).
450    
451    ----------------------------------------------------------------------
452    Name: Matthias Blume
453    Date: 2002/03/25 16:00:00 EST
454    Tag: blume-20020325-raw-primops
455    Description:
456    
457    I did some cleanup to Allen's new primop code and
458    replaced yesterday's bootfiles with new ones.
459    (But they are stored in the same place.)
460    
461    ----------------------------------------------------------------------
462    Name: Matthias Blume
463    Date: 2002/03/24 22:40:00 EST
464    Tag: blume-20020324-bootfiles
465    Description:
466    
467    Made the bootfiles that Allen asked for.
468    
469    ----------------------------------------------------------------------
470    Name: Allen Leung
471    Date: 2002/03/23 15:50:00 EST
472    Tag: leunga-20020323-flint-cps-rcc-primops
473    Description:
474    
475      1. Changes to FLINT primops:
476    
477        (* make a call to a C-function;
478         * The primop carries C function prototype information and specifies
479         * which of its (ML-) arguments are floating point. C prototype
480         * information is for use by the backend, ML information is for
481         * use by the CPS converter. *)
482      | RAW_CCALL of { c_proto: CTypes.c_proto,
483                       ml_args: ccall_type list,
484                       ml_res_opt: ccall_type option,
485                       reentrant : bool
486                     } option
487       (* Allocate uninitialized storage on the heap.
488        * The record is meant to hold short-lived C objects, i.e., they
489        * are not ML pointers.  With the tag, the representation is
490        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
491        *)
492      | RAW_RECORD of {tag:bool,sz:int}
493      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
494    
495      2.  These CPS primops are now overloaded:
496    
497           rawload of {kind:numkind}
498           rawstore of {kind:numkind}
499    
500          The one argument form is:
501    
502             rawload {kind} address
503    
504          The two argument form is:
505    
506             rawload {kind} [ml object, byte-offset]
507    
508      3. RAW_CCALL/RCC now takes two extra arguments:
509    
510         a. The first is whether the C call is reentrant, i.e., whether
511            ML state should be saved and restored.
512         b. The second argument is a string argument specifying the name of
513            library and the C function.
514    
515         These things are currently not handled in the code generator, yet.
516    
517      4. In CProto,
518    
519         An encoding type of "bool" means "ml object" and is mapped into
520         C prototype of PTR.  Note that "bool" is different than "string",
521         even though "string" is also mapped into PTR, because "bool"
522         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
523    
524      5. Pickler/unpicker
525    
526         Changed to handle RAW_RECORD and newest RAW_CCALL
527    
528      6. MLRiscGen,
529    
530         1. Changed to handle the new rawload/rawstore/rawrecord operators.
531         2. Code for handling C Calls has been moved to a new module CPSCCalls,
532            in the file CodeGen/cpscompile/cps-c-calls.sml
533    
534      7. Added the conditional move operator
535    
536             condmove of branch
537    
538         to cps.  Generation of this is still buggy so it is currently
539         disabled.
540    
541    ----------------------------------------------------------------------
542    Name: Lal George
543    Date: 2002/03/22 14:18:25 EST
544    Tag: george-20020322-cps-branch-prob
545    Description:
546    
547    Implemented the Ball-Larus branch prediction-heuristics, and
548    incorporated graphical viewers for control flow graphs.
549    
550    Ball-Larus Heuristics:
551    ---------------------
552    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
553    
554    By design it uses the Dempster-Shafer theory for combining
555    probabilities.  For example, in the function:
556    
557        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
558    
559    the ball-larus heuristics predicts that the n=0 is unlikely
560    (OH-heuristic), and the 'then' branch is unlikely because of the
561    RH-heuristic -- giving the 'then' branch an even lower combined
562    probability using the Dempster-Shafer theory.
563    
564    Finally, John Reppy's loop analysis in MLRISC, further lowers the
565    probability of the 'then' branch because of the loop in the else
566    branch.
567    
568    
569    Graphical Viewing:
570    ------------------
571    I merely plugged in Allen's graphical viewers into the compiler. The
572    additional code is not much. At the top level, saying:
573    
574            Control.MLRISC.getFlag "cfg-graphical-view" := true;
575    
576    will display the graphical view of the control flow graph just before
577    back-patching.  daVinci must be in your path for this to work. If
578    daVinci is not available, then the default viewer can be changed
579    using:
580    
581            Control.MLRISC.getString "viewer"
582    
583    which can be set to "dot" or "vcg" for the corresponding viewers. Of
584    course, these viewers must be in your path.
585    
586    The above will display the compilation unit at the level of clusters,
587    many of which are small, boring, and un-interesting. Also setting:
588    
589            Control.MLRISC.getInt "cfg-graphical-view_size"
590    
591    will display clusters that are larger than the value set by the above.
592    
593    
594    ----------------------------------------------------------------------
595    Name: Matthias Blume
596    Date: 2002/03/21 22:20:00 EST
597    Tag: blume-20020321-kmp-bugfix
598    Description:
599    
600    Changed the interface to the KMP routine in PreString and fixed
601    a minor bug in one place where it was used.
602    
603    ----------------------------------------------------------------------
604    Name: Allen Leung
605    Date: 2002/03/21 20:30:00 EST
606    Tag: leunga-20020321-cfg
607    Description:
608    
609      Fixed a potential problem in cfg edge splitting.
610    
611    ----------------------------------------------------------------------
612    Name: Allen Leung
613    Date: 2002/03/21 17:15:00 EST
614    Tag: leunga-20020321-x86-fp-cfg
615    Description:
616    
617      1. Recoded the buggy parts of x86-fp.
618    
619         a. All the block reordering code has been removed.
620            We now depend on the block placement phases to do this work.
621    
622         b. Critical edge splitting code has been simplified and moved into the
623            CFG modules, as where they belong.
624    
625         Both of these were quite buggy and complex.  The code is now much, much
626         simpler.
627    
628      2. X86 backend.
629    
630         a. Added instructions for 64-bit support.  Instruction selection for
631            64-bit has not been committed, however, since that
632            requires changes to MLTREE which haven't been approved by
633            Lal and John.
634    
635         b. Added support for FUCOMI and FUCOMIP when generating code for
636            PentiumPro and above.  We only generate these instructions in
637            the fast-fp mode.
638    
639         c. Added cases for JP and JNP in X86FreqProps.
640    
641      3. CFG
642    
643         CFG now has a bunch of methods for edge splitting and merging.
644    
645      4. Machine description.
646    
647         John's simplification of MLTREE_BASIS.fcond broke a few machine
648         description things:
649    
650         rtl-build.{sig,sml} and hppa.mdl fixed.
651    
652         NOTE: the machine description stuff in the repository is still broken.
653               Again, I can't put my fixes in because that involves
654               changes to MLTREE.
655    
656    ----------------------------------------------------------------------
657    Name: Matthias Blume
658    Date: 2002/03/20 15:55:00 EST
659    Tag: blume-20020320-kmp
660    Description:
661    
662    Implemented Knuth-Morris-Pratt string matching in PreString and used
663    it for String.isSubstring, Substring.isSubstring, and
664    Substring.position.
665    
666    (Might need some stress-testing.  Simple examples worked fine.)
667    
668    ----------------------------------------------------------------------
669    Name: Matthias Blume
670    Date: 2002/03/19 16:37:00 EST
671    Tag: blume-20020319-witnesses
672    Description:
673    
674    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
675    
676    This implements a generic mechanism for changing constness qualifiers
677    anywhere within big C types without resorting to outright "casts".
678    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
679    modify the constness at the outermost level.)
680    The implementation of "convert" is based on the idea of "witness"
681    values -- values that are not used by the operation but whose types
682    "testify" to their applicability.  On the implementation side, "convert"
683    is simply a projection (returning its second curried argument).  With
684    cross-module inlining, it should not result in any machine code being
685    generated.
686    
687    ----------------------------------------------------------------------
688    Name: Matthias Blume
689    Date: 2002/03/15 16:40:00 EST
690    Tag: blume-20020315-basis
691    Description:
692    
693    Provided (preliminary?) implementations for
694    
695      {String,Substring}.{concatWith,isSuffix,isSubstring}
696    
697    and
698    
699      Substring.full
700    
701    Those are in the Basis spec but they were missing in SML/NJ.
702    
703    ----------------------------------------------------------------------
704    Name: Matthias Blume
705    Date: 2002/03/14 21:30:00 EST
706    Tag: blume-20020314-controls
707    Description:
708    
709    Controls:
710    ---------
711    
712    1. Factored out the recently-added Controls : CONTROLS stuff and put
713       it into its own library $/controls-lib.cm.  The source tree for
714       this is under src/smlnj-lib/Controls.
715    
716    2. Changed the names of types and functions in this interface, so they
717       make a bit more "sense":
718    
719          module -> registry
720          'a registry -> 'a group
721    
722    3. The interface now deals in ref cells only.  The getter/setter interface
723       is (mostly) gone.
724    
725    4. Added a function that lets one register an already-existing ref cell.
726    
727    5. Made the corresponding modifications to the rest of the code so that
728       everything compiles again.
729    
730    6. Changed the implementation of Controls.MLRISC back to something closer
731       to the original.  In particular, this module (and therefore MLRISC)
732       does not depend on Controls.  There now is some link-time code in
733       int-sys.sml that registers the MLRISC controls with the Controls
734       module.
735    
736    CM:
737    ---
738    
739      * One can now specify the lambda-split aggressiveness in init.cmi.
740    
741    ----------------------------------------------------------------------
742    Name: Allen Leung
743    Date: 2002/03/13 17:30:00 EST
744    Tag: leunga-20020313-x86-fp-unary
745    Description:
746    
747    Bug fix for:
748    
749    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
750    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
751    > - fun f(x,(y,z)) = Real.~ y;
752    > [autoloading]
753    > [autoloading done]
754    >       fchsl   (%eax), 184(%esp)
755    > Error: MLRisc bug: X86MCEmitter.emitInstr
756    >
757    > uncaught exception Error
758    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
759    
760    The problem was that the code generator did not generate any fp registers
761    in this case, and the ra didn't know that it needed to run the X86FP phase to
762    translate the pseudo fp instruction.   This only happened with unary fp
763    operators in certain situations.
764    
765    ----------------------------------------------------------------------
766    Name: Matthias Blume
767    Date: 2002/03/13 14:00:00 EST
768    Tag: blume-20020313-overload-etc
769    Description:
770    
771    1. Added _overload as a synonym for overload for backward compatibility.
772       (Control.overloadKW must be true for either version to be accepted.)
773    
774    2. Fixed bug in install script that caused more things to be installed
775       than what was requested in config/targets.
776    
777    3. Made CM aware of the (_)overload construct so that autoloading
778       works.
779    
780    ----------------------------------------------------------------------
781    Name: Matthias Blume
782    Date: 2002/03/12 22:03:00 EST
783    Tag: blume-20020312-url
784    Description:
785    
786    Forgot to update BOOT and srcarchiveurl.
787    
788    ----------------------------------------------------------------------
789    Name: Matthias Blume
790    Date: 2002/03/12 17:30:00 EST
791    Tag: blume-20020312-version110392
792    Description:
793    
794    Yet another version number bump (because of small changes to the
795    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
796    
797    Changes:
798    
799      The new pid generation scheme described a few weeks ago was overly
800      complicated.  I implemented a new mechanism that is simpler and
801      provides a bit more "stability":  Once CM has seen a compilation
802      unit, it keeps its identity constant (as long as you do not delete
803      those crucial CM/GUID/* files).  This means that when you change
804      an interface, compile, then go back to the old interface, and
805      compile again, you arrive at the original pid.
806    
807      There now also is a mechanism that instructs CM to use the plain
808      environment hash as a module's pid (effectively making its GUID
809      the empty string).  For this, "noguid" must be specified as an
810      option to the .sml file in question within its .cm file.
811      This is most useful for code that is being generated by tools such
812      as ml-nlffigen (because during development programmers tend to
813      erase the tool's entire output directory tree including CM's cached
814      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
815      revert to the old, broken behavior of SML/NJ, but in specific cases
816      where there is no danger of interface confusion, its use is ok
817      (I think).
818    
819      ml-nlffigen by default generates "noguid" annotations.  They can be
820      turned off by specifying -guid in its command line.
821    
822    ----------------------------------------------------------------------
823    Name: Lal George
824    Date: 2002/03/12 12 14:42:36 EST
825    Tag: george-20020312-frequency-computation
826    Description:
827    
828    Integrated jump chaining and static block frequency into the
829    compiler. More details and numbers later.
830    
831    ----------------------------------------------------------------------
832    Name: Lal George
833    Date: 2002/03/11 11 22:38:53 EST
834    Tag: george-20020311-jump-chain-elim
835    Description:
836    
837    Tested the jump chain elimination on all architectures (except the
838    hppa).  This is on by default right now and is profitable for the
839    alpha and x86, however, it may not be profitable for the sparc and ppc
840    when compiling the compiler.
841    
842    The gc test will typically jump to a label at the end of the cluster,
843    where there is another jump to an external cluster containing the actual
844    code to invoke gc. This is to allow factoring of common gc invocation
845    sequences. That is to say, we generate:
846    
847            f:
848               testgc
849               ja   L1      % jump if above to L1
850    
851            L1:
852               jmp L2
853    
854    
855    After jump chain elimination the 'ja L1' instructions is converted to
856    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
857    up being implemented in their long form (if L2 is far away) using:
858    
859            jbe     L3      % jump if below or equal to L3
860            jmp     L2
861         L3:
862            ...
863    
864    
865    For large compilation units L2  may be far away.
866    
867    
868    ----------------------------------------------------------------------
869    Name: Matthias Blume
870    Date: 2002/03/11 13:30:00 EST
871    Tag: blume-20020311-mltreeeval
872    Description:
873    
874    A functor parameter was missing.
875    
876    ----------------------------------------------------------------------
877    Name: Allen Leung
878    Date: 2002/03/11 10:30:00 EST
879    Tag: leunga-20020311-runtime-string0
880    Description:
881    
882       The representation of the empty string now points to a
883    legal null terminated C string instead of unit.  It is now possible
884    to convert an ML string into C string with InlineT.CharVector.getData.
885    This compiles into one single machine instruction.
886    
887    ----------------------------------------------------------------------
888    Name: Allen Leung
889    Date: 2002/03/10 23:55:00 EST
890    Tag: leunga-20020310-x86-call
891    Description:
892    
893       Added machine generation for CALL instruction (relative displacement mode)
894    
895    ----------------------------------------------------------------------
896    Name: Matthias Blume
897    Date: 2002/03/08 16:05:00
898    Tag: blume-20020308-entrypoints
899    Description:
900    
901    Version number bumped to 110.39.1.  NEW BOOTFILES!
902    
903    Entrypoints: non-zero offset into a code object where execution should begin.
904    
905    - Added the notion of an entrypoint to CodeObj.
906    - Added reading/writing of entrypoint info to Binfile.
907    - Made runtime system bootloader aware of entrypoints.
908    - Use the address of the label of the first function given to mlriscGen
909      as the entrypoint.  This address is currently always 0, but it will
910      not be 0 once we turn on block placement.
911    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
912      with entry points) from mlriscGen.
913    
914    ----------------------------------------------------------------------
915    Name: Allen Leung
916    Date: 2002/03/07 20:45:00 EST
917    Tag: leunga-20020307-x86-cmov
918    Description:
919    
920       Bug fixes for CMOVcc on x86.
921    
922       1. Added machine code generation for CMOVcc
923       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
924       3. CMOVcc cannot have an immediate operand as argument.
925    
926    ----------------------------------------------------------------------
927    Name: Matthias Blume
928    Date: 2002/03/07 16:15:00 EST
929    Tag: blume-20020307-controls
930    Description:
931    
932    This is a very large but mostly boring patch which makes (almost)
933    every tuneable compiler knob (i.e., pretty much everything under
934    Control.* plus a few other things) configurable via both the command
935    line and environment variables in the style CM did its configuration
936    until now.
937    
938    Try starting sml with '-h' (or, if you are brave, '-H')
939    
940    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
941    implements the underlying generic mechanism.
942    
943    The interface to some of the existing such facilities has changed somewhat.
944    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
945    (The getFoo interface is still there for backward-compatibility, but its
946    use is deprecated.)
947    
948    The ml-build script passes -Cxxx=yyy command-line arguments through so
949    that one can now twiddle the compiler settings when using this "batch"
950    compiler.
951    
952    TODO items:
953    
954    We should go through and throw out all controls that are no longer
955    connected to anything.  Moreover, we should go through and provide
956    meaningful (and correct!) documentation strings for those controls
957    that still are connected.
958    
959    Currently, multiple calls to Controls.new are accepted (only the first
960    has any effect).  Eventually we should make sure that every control
961    is being made (via Controls.new) exactly once.  Future access can then
962    be done using Controls.acc.
963    
964    Finally, it would probably be a good idea to use the getter-setter
965    interface to controls rather than ref cells.  For the time being, both
966    styles are provided by the Controls module, but getter-setter pairs are
967    better if thread-safety is of any concern because they can be wrapped.
968    
969    *****************************************
970    
971    One bug fix: The function blockPlacement in three of the MLRISC
972    backpatch files used to be hard-wired to one of two possibilities at
973    link time (according to the value of the placementFlag).  But (I
974    think) it should rather sense the flag every time.
975    
976    *****************************************
977    
978    Other assorted changes (by other people who did not supply a HISTORY entry):
979    
980    1. the cross-module inliner now works much better (Monnier)
981    2. representation of weights, frequencies, and probabilities in MLRISC
982       changed in preparation of using those for weighted block placement
983       (Reppy, George)
984    
985    ----------------------------------------------------------------------
986    Name: Lal George
987    Date: 2002/03/07 14:44:24 EST 2002
988    Tag: george-20020307-weighted-block-placement
989    
990    Tested the weighted block placement optimization on all architectures
991    (except the hppa) using AMPL to generate the block and edge frequencies.
992    Changes were required in the machine properties to correctly
993    categorize trap instructions. There is an MLRISC flag
994    "weighted-block-placement" that can be used to enable weighted block
995    placement, but this will be ineffective without block/edge
996    frequencies (coming soon).
997    
998    
999    ----------------------------------------------------------------------
1000    Name: Lal George
1001    Date: 2002/03/05 17:24:48 EST
1002    Tag: george-20020305-linkage-cluster
1003    
1004    In order to support the block placement optimization, a new cluster
1005    is generated as the very first cluster (called the linkage cluster).
1006    It contains a single jump to the 'real' entry point for the compilation
1007    unit. Block placement has no effect on the linkage cluster itself, but
1008    all the other clusters  have full freedom in the manner in which they
1009    reorder blocks or functions.
1010    
1011    On the x86 the typical linkage code that is generated is:
1012       ----------------------
1013            .align 2
1014       L0:
1015            addl    $L1-L0, 72(%esp)
1016            jmp     L1
1017    
1018    
1019            .align  2
1020       L1:
1021       ----------------------
1022    
1023    72(%esp) is the memory location for the stdlink register. This
1024    must contain the address of the CPS function being called. In the
1025    above example, it contains the address of  L0; before
1026    calling L1 (the real entry point for the compilation unit), it
1027    must contain the address for L1, and hence
1028    
1029            addl $L1-L0, 72(%esp)
1030    
1031    I have tested this on all architectures except the hppa.The increase
1032    in code size is of course negligible
1033    
1034    ----------------------------------------------------------------------
1035    Name: Allen Leung
1036    Date: 2002/03/03 13:20:00 EST
1037    Tag: leunga-20020303-mlrisc-tools
1038    
1039      Added #[ ... ] expressions to mlrisc tools
1040    
1041    ----------------------------------------------------------------------
1042    Name: Matthias Blume
1043    Date: 2002/02/27 12:29:00 EST
1044    Tag: blume-20020227-cdebug
1045    Description:
1046    
1047    - made types in structure C and C_Debug to be equal
1048    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
1049    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
1050    
1051    ----------------------------------------------------------------------
1052    Name: Matthias Blume
1053    Date: 2002/02/26 12:00:00 EST
1054    Tag: blume-20020226-ffi
1055    Description:
1056    
1057    1. Fixed a minor bug in CM's "noweb" tool:
1058       If numbering is turned off, then truly don't number (i.e., do not
1059       supply the -L option to noweb).  The previous behavior was to supply
1060       -L'' -- which caused noweb to use the "default" line numbering scheme.
1061       Thanks to Chris Richards for pointing this out (and supplying the fix).
1062    
1063    2. Once again, I reworked some aspects of the FFI:
1064    
1065       A. The incomplete/complete type business:
1066    
1067       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
1068         gone!
1069       - ML types representing an incomplete type are now *equal* to
1070         ML types representing their corresponding complete types (just like
1071         in C).  This is still safe because ml-nlffigen will not generate
1072         RTTI for incomplete types, nor will it generate functions that
1073         require access to such RTTI.   But when ML code generated from both
1074         incomplete and complete versions of the C type meet, the ML types
1075         are trivially interoperable.
1076    
1077         NOTE:  These changes restore the full generality of the translation
1078         (which was previously lost when I eliminated functorization)!
1079    
1080       B. Enum types:
1081    
1082       - Structure C now has a type constructor "enum" that is similar to
1083         how the "su" constructor works.  However, "enum" is not a phantom
1084         type because each "T enum" has values (and is isomorphic to
1085         MLRep.Signed.int).
1086       - There are generic access operations for enum objects (using
1087         MLRep.Signed.int).
1088       - ml-nlffigen will generate a structure E_foo for each "enum foo".
1089         * The structure contains the definition of type "mlrep" (the ML-side
1090         representation type of the enum).  Normally, mlrep is the same
1091         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
1092         then mlrep will be defined as a datatype -- thus facilitating
1093         pattern matching on mlrep values.
1094         ("-ec" will be suppressed if there are duplicate values in an
1095          enumeration.)
1096         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
1097         will be generated for each C enum constant xxx.
1098         * Conversion functions m2i and i2m convert between mlrep and
1099         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
1100         * Coversion functions c and ml convert between mlrep and "tag enum".
1101         * Access functions (get/set) fetch and store mlrep values.
1102       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
1103         enumerations are merged into one single enumeration represented by
1104         structure E_'.
1105    
1106    ----------------------------------------------------------------------
1107    Name: Allen Leung
1108    Date: 2002/02/25 04:45:00 EST
1109    Tag: leunga-20020225-cps-spill
1110    
1111    This is a new implementation of the CPS spill phase.
1112    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
1113    In case of problems, replace it with the old file spill.sml
1114    
1115    The current compiler runs into some serious performance problems when
1116    constructing a large record.  This can happen when we try to compile a
1117    structure with many items.  Even a very simple structure like the following
1118    makes the compiler slow down.
1119    
1120        structure Foo = struct
1121           val x_1 = 0w1 : Word32.int
1122           val x_2 = 0w2 : Word32.int
1123           val x_3 = 0w3 : Word32.int
1124           ...
1125           val x_N = 0wN : Word32.int
1126        end
1127    
1128    The following table shows the compile time, from N=1000 to N=4000,
1129    with the old compiler:
1130    
1131    N
1132    1000   CPS 100 spill                           0.04u  0.00s  0.00g
1133           MLRISC ra                               0.06u  0.00s  0.05g
1134              (spills = 0 reloads = 0)
1135           TOTAL                                   0.63u  0.07s  0.21g
1136    
1137    1100   CPS 100 spill                           8.25u  0.32s  0.64g
1138           MLRISC ra                               5.68u  0.59s  3.93g
1139              (spills = 0 reloads = 0)
1140           TOTAL                                   14.71u  0.99s  4.81g
1141    
1142    1500   CPS 100 spill                           58.55u  2.34s  1.74g
1143           MLRISC ra                               5.54u  0.65s  3.91g
1144              (spills = 543 reloads = 1082)
1145           TOTAL                                   65.40u  3.13s  6.00g
1146    
1147    2000   CPS 100 spill                           126.69u  4.84s  3.08g
1148           MLRISC ra                               0.80u  0.10s  0.55g
1149              (spills = 42 reloads = 84)
1150           TOTAL                                   129.42u  5.10s  4.13g
1151    
1152    3000   CPS 100 spill                           675.59u  19.03s  11.64g
1153           MLRISC ra                               2.69u  0.27s  1.38g
1154              (spills = 62 reloads = 124)
1155           TOTAL                                   682.48u  19.61s  13.99g
1156    
1157    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
1158           MLRISC ra                               4.96u  0.27s  2.72g
1159              (spills = 85 reloads = 170)
1160           TOTAL                                   2375.26u  57.21s  48.00g
1161    
1162    As you can see the old cps spill module suffers from some serious
1163    performance problem.  But since I cannot decipher the old code fully,
1164    instead of patching the problems up, I'm reimplementing it
1165    with a different algorithm.  The new code is more modular,
1166    smaller when compiled, and substantially faster
1167    (O(n log n) time and O(n) space).  Timing of the new spill module:
1168    
1169    4000  CPS 100 spill                           0.02u  0.00s  0.00g
1170          MLRISC ra                               0.25u  0.02s  0.15g
1171             (spills=1 reloads=3)
1172          TOTAL                                   7.74u  0.34s  1.62g
1173    
1174    Implementation details:
1175    
1176    As far as I can tell, the purpose of the CPS spill module is to make sure the
1177    number of live variables at any program point (the bandwidth)
1178    does not exceed a certain limit, which is determined by the
1179    size of the spill area.
1180    
1181    When the bandwidth is too large, we decrease the register pressure by
1182    packing live variables into spill records.  How we achieve this is
1183    completely different than what we did in the old code.
1184    
1185    First, there is something about the MLRiscGen code generator
1186    that we should be aware of:
1187    
1188    o MLRiscGen performs code motion!
1189    
1190       In particular, it will move floating point computations and
1191       address computations involving only the heap pointer to
1192       their use sites (if there is only a single use).
1193       What this means is that if we have a CPS record construction
1194       statement
1195    
1196           RECORD(k,vl,w,e)
1197    
1198       we should never count the new record address w as live if w
1199       has only one use (which is often the case).
1200    
1201       We should do something similar to floating point, but the transformation
1202       there is much more complex, so I won't deal with that.
1203    
1204    Secondly, there are now two new cps primops at our disposal:
1205    
1206     1. rawrecord of record_kind option
1207        This pure operator allocates some uninitialized storage from the heap.
1208        There are two forms:
1209    
1210         rawrecord NONE [INT n]  allocates a tagless record of length n
1211         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
1212                                     and initializes the tag.
1213    
1214     2. rawupdate of cty
1215          rawupdate cty (v,i,x)
1216          Assigns to x to the ith component of record v.
1217          The storelist is not updated.
1218    
1219    We use these new primops for both spilling and increment record construction.
1220    
1221     1. Spilling.
1222    
1223        This is implemented with a linear scan algorithm (but generalized
1224        to trees).  The algorithm will create a single spill record at the
1225        beginning of the cps function and use rawupdate to spill to it,
1226        and SELECT or SELp to reload from it.  So both spills and reloads
1227        are fine-grain operations.  In contrast, in the old algorithm
1228        "spills" have to be bundled together in records.
1229    
1230        Ideally, we should sink the spill record construction to where
1231        it is needed.  We can even split the spill record into multiple ones
1232        at the places where they are needed.  But CPS is not a good
1233        representation for global code motion, so I'll keep it simple and
1234        am not attempting this.
1235    
1236     2. Incremental record construction (aka record splitting).
1237    
1238        Long records with many component values which are simulatenously live
1239        (recall that single use record addresses are not considered to
1240         be live) are constructed with rawrecord and rawupdate.
1241        We allocate space on the heap with rawrecord first, then gradually
1242        fill it in with rawupdate.  This is the technique suggested to me
1243        by Matthias.
1244    
1245        Some restrictions on when this is applicable:
1246        1. It is not a VECTOR record.  The code generator currently does not handle
1247           this case. VECTOR record uses double indirection like arrays.
1248        2. All the record component values are defined in the same "basic block"
1249           as the record constructor.  This is to prevent speculative
1250           record construction.
1251    
1252    ----------------------------------------------------------------------
1253    Name: Allen Leung
1254    Date: 2002/02/22 01:02:00 EST
1255    Tag: leunga-20020222-mlrisc-tools
1256    
1257    Minor bug fixes in the parser and rewriter
1258    
1259    ----------------------------------------------------------------------
1260    Name: Allen Leung
1261    Date: 2002/02/21 20:20:00 EST
1262    Tag: leunga-20020221-peephole
1263    
1264    Regenerated the peephole files.  Some contained typos in the specification
1265    and some didn't compile because of pretty printing bugs in the old version
1266    of 'nowhere'.
1267    
1268    ----------------------------------------------------------------------
1269    Name: Allen Leung
1270    Date: 2002/02/19 20:20:00 EST
1271    Tag: leunga-20020219-mlrisc-tools
1272    Description:
1273    
1274       Minor bug fixes to the mlrisc-tools library:
1275    
1276       1.  Fixed up parsing colon suffixed keywords
1277       2.  Added the ability to shut the error messages up
1278       3.  Reimplemented the pretty printer and fixed up/improved
1279           the pretty printing of handle and -> types.
1280       4.  Fixed up generation of literal symbols in the nowhere tool.
1281       5.  Added some SML keywords to to sml.sty
1282    
1283    ----------------------------------------------------------------------
1284    Name: Matthias Blume
1285    Date: 2002/02/19 16:20:00 EST
1286    Tag: blume-20020219-cmffi
1287    Description:
1288    
1289    A wild mix of changes, some minor, some major:
1290    
1291    * All C FFI-related libraries are now anchored under $c:
1292        $/c.cm      --> $c/c.cm
1293        $/c-int.cm  --> $c/internals/c-int.cm
1294        $/memory.cm --> $c/memory/memory.cm
1295    
1296    * "make" tool (in CM) now treats its argument pathname slightly
1297      differently:
1298        1. If the native expansion is an absolute name, then before invoking
1299           the "make" command on it, CM will apply OS.Path.mkRelative
1300           (with relativeTo = OS.FileSys.getDir()) to it.
1301        2. The argument will be passed through to subsequent phases of CM
1302           processing without "going native".  In particular, if the argument
1303           was an anchored path, then "make" will not lose track of that anchor.
1304    
1305    * Compiler backends now "know" their respective C calling conventions
1306      instead of having to be told about it by ml-nlffigen.  This relieves
1307      ml-nlffigen from one of its burdens.
1308    
1309    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
1310    
1311    * Export C_DEBUG and C_Debug from $c/c.cm.
1312    
1313    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
1314      subtyping relationship between incomplete pointers and their complete
1315      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
1316      with the convention of instantiating 'o with ('t, 'c) obj whenever
1317      the pointer target type is complete.  In the incomplete case, 'o
1318      will be instantiated with some "'c iobj" -- a type obtained by
1319      using one of the functors PointerToIncompleteType or PointerToCompleteType.
1320    
1321      Operations that work on both incomplete and complete pointer types are
1322      typed as taking an 'o ptr while operations that require the target to
1323      be known are typed as taking some ('t, 'c) obj ptr.
1324    
1325      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
1326      where void is an eqtype without any values.  This makes it possible
1327      to work on voidptr values using functions meant to operate on light
1328      incomplete pointers.
1329    
1330    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
1331      been vastly simplified.
1332    
1333    ----------------------------------------------------------------------
1334    Name: Matthias Blume
1335    Date: 2002/02/19 10:48:00 EST
1336    Tag: blume-20020219-pqfix
1337    Description:
1338    
1339    Applied Chris Okasaki's bug fix for priority queues.
1340    
1341    ----------------------------------------------------------------------
1342    Name: Matthias Blume
1343    Date: 2002/02/15 17:05:00
1344    Tag: Release_110_39
1345    Description:
1346    
1347    Last-minute retagging is becoming a tradition... :-(
1348    
1349    This is the working release 110.39.
1350    
1351    ----------------------------------------------------------------------
1352    Name: Matthias Blume
1353    Date: 2002/02/15 16:00:00 EST
1354    Tag: Release_110_39-orig
1355    Description:
1356    
1357    Working release 110.39.  New bootfiles.
1358    
1359    (Update: There was a small bug in the installer so it wouldn't work
1360    with all shells.  So I retagged. -Matthias)
1361    
1362    ----------------------------------------------------------------------
1363    Name: Matthias Blume
1364    Date: 2002/02/15 14:17:00 EST
1365    Tag: blume-20020215-showbindings
1366    Description:
1367    
1368    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
1369    the latter can be useful for exploring what bindings are available at
1370    the interactive prompt.  (The first function returns only the list
1371    of symbols that are really bound, the second prints those but also the
1372    ones that CM's autoloading mechanism knows about.)
1373    
1374    ----------------------------------------------------------------------
1375    Name: Matthias Blume
1376  Date: 2002/02/15 12:08:00 EST  Date: 2002/02/15 12:08:00 EST
1377  Tag: blume-20020215-iptrs  Tag: blume-20020215-iptrs
1378  Description:  Description:

Legend:
Removed from v.1067  
changed lines
  Added in v.1273

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