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

Legend:
Removed from v.1045  
changed lines
  Added in v.1203

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