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 572, Thu Mar 9 02:43:06 2000 UTC revision 806, Thu Mar 22 21:22:21 2001 UTC
# Line 14  Line 14 
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16  Name: Matthias Blume  Name: Matthias Blume
17    Date: 2001/03/22 16:25:00 EST
18    Tag: blume-20010322-bootfiles
19    Description:
20    
21    Created a new set of bootfiles (for your automatic installation convenience).
22    
23    ----------------------------------------------------------------------
24    Name: Matthias Blume
25    Date: 2001/03/22 15:10:00 EST
26    Tag: blume-20010322-rawmem-parcm
27    Description:
28    
29    1. All "raw memory access" primitives for the new FFI are implemented now
30       (at least on the x86).
31    2. Some further cleanup of CM's parallel make mechanism.
32    
33    ----------------------------------------------------------------------
34    Name: Matthias Blume
35    Date: 2001/03/19 17:53:00 EST
36    Tag: blume-20010319-parallel
37    Description:
38    
39    Parallel make (using compile servers) now works again.
40    
41    To this end, CM.stabilize and CMB.make have been modified to work in
42    two passes when compile servers are attached:
43       1. Compile everything, do not perform stabilization; this pass
44          uses compile servers
45       2. Stabilize everything; this pass does not use compile servers
46    If there are no compile servers, the two passes are combined into one
47    (as before).  Splitting the passes increases the inherent parallelism
48    in the dependency graph because the entire graph including all
49    libraries is available at the same time.  This, in turn, improves
50    server utilization.  The downside is that the master process will
51    have to do some extra work after compilation is done (because for
52    technical reasons it must re-read all the binfiles during stabilization).
53    
54    ----------------------------------------------------------------------
55    Name: Matthias Blume
56    Date: 2001/03/16 12:22:00 EST
57    Tag: blume-20010316-bootfiles
58    Description:
59    
60    Created a new set of bootfiles (for your automatic installation convenience).
61    
62    ----------------------------------------------------------------------
63    Name: Matthias Blume
64    Date: 2001/03/16 11:00:00 EST
65    Tag: blume-20010316-MLTREE-fixup
66    Description:
67    
68    This is a minor fixup for an (untagged) earlier commit by Allen.
69    (A file was missing).
70    
71    ----------------------------------------------------------------------
72    Name: Allen Leung
73    Date: Mon Mar  5 18:54:57 EST 2001
74    Tag: leunga-20010305-cut-support
75    
76    1. New support for alternative control-flow in MLTREE.
77       Currently we support
78    
79          FLOW_TO(CALL ...., [k1,...,kn])
80    
81       This is needed for 'cuts to' in C-- and try/handle-like constructs
82       in Moby
83    
84       New assembler flag "asm-show-cutsto" to turn on control-flow debugging.
85    
86    2. Register Allocator
87    
88       Changes in interface [from Fermin, John]
89    
90    3. Alpha 8-bit SLL support [Fermin]
91    
92    4. All architectures
93    
94       A new module (ClusterExpandCopies) for expanding parallel copies.
95    
96    ----------------------------------------------------------------------
97    Name: Allen Leung
98    Date: 2001/02/27 23:07:00 EST
99    Tag: leunga-20010227-minor-stuff
100    
101    1. Alpha bug fix for CMOVNE
102    2. Handle mltree COND(..,FCMP ...,...)
103    3. Bug fix in simplifier
104    
105    ----------------------------------------------------------------------
106    Name: Matthias Blume
107    Date: 2001/01/30 17:50:00 EST
108    Tag: blume-20010130-sync
109    Description:
110    
111    This is just a minor update to sync my devel branch with the main brach.
112    The only visible change is the addition of some README files.
113    
114    ----------------------------------------------------------------------
115    Name: Matthias Blume
116    Date: 2001/01/12 23:30:00 JST
117    Tag: blume-20010112-bootfiles
118    Description:
119    
120    Made a new set of bootfiles that goes with the current state of the
121    repository.
122    
123    ----------------------------------------------------------------------
124    Name: Matthias Blume
125    Date: 2001/01/12 21:20:00 JST
126    Tag: blume-20010112-sync
127    Description:
128    
129    I am just flushing out some minor changes that had accumulated in
130    my private branch in order to sync with the main tree.  (This is
131    mainly because I had CVS trouble when trying to merge _into_ my
132    private branch.)
133    
134    Most people should be completely unaffected by this.
135    
136    ----------------------------------------------------------------------
137    Name: Allen Leung
138    Date: Thu Jan 11 21:03:00 EST 2001
139    Tag: leunga-20010111-labexp=mltree
140    Description:
141    
142    1.  Removed the type LabelExp and replace it by MLTree.
143    2.  Rewritten mltree-simplify with the pattern matcher tool.
144    3.  There were some bugs in alpha code generator which would break
145        64-bit code generation.
146    4.  Redo the tools to generate code with the
147    5.  The CM files in MLRISC (and in src/system/smlnj/MLRISC)
148        are now generated by perl scripts.
149    
150    ----------------------------------------------------------------------
151    Name: Matthias Blume
152    Date: 2001/01/10 21:55:00 JST
153    Tag: blume-20010110-rcc
154    Description:
155    
156    The RCC stuff now seems to work (but only on the x86).
157    This required hacking of the c-calls interface (and -implementation) in
158    MLRISC.
159    
160    Normal compiler users should be unaffected.
161    
162    ----------------------------------------------------------------------
163    Name: Matthias Blume
164    Date: 2001/01/09 01:20:00 JST
165    Tag: blume-20010109-rcc
166    Description:
167    
168    This is a fairly big patch, flushing out a large number of pending
169    changes that I made to my development copy over the last couple of days.
170    
171    Of practical relevance at this moment is a workaround for a pickling
172    bug that Allen ran into the other day.  The cause of the bug itself is
173    still unknown and it might be hard to fix it properly, but the
174    workaround has some merits of its own (namely somewhat reducing pickling
175    overhead for certain libraries).  Therefore, I think this solution should
176    be satisfactory at this time.
177    
178    The rest of the changes (i.e., the vast majority) has to do with my
179    ongoing efforts of providing direct support for C function calls from
180    ML.  At the moment there is a new primop "RAW_CCALL", typing magic
181    in types/cproto.sml (invoked from FLINT/trans/translate.sml), a new
182    case in the FLINT CPS datatype (RCC), changes to cps/convert.sml to
183    translate uses of RAW_CCALL into RCC, and changes to mlriscGen.sml to
184    handle RCC.
185    
186    The last part (the changes to mlriscGen.sml) are still known to be
187    wrong on the x86 and not implemented on all other architectures.  But
188    the infrastructure is in place. I had to change a few functor
189    signatures in the backend to be able to route the CCalls interface
190    from MLRISC there, and I had to specialize the mltree type (on the
191    x86) to include the necessary extensions. (The extensions themselves
192    were already there and redy to go in MLRISC/x86).
193    
194    Everything should be very happy as soon as someone helps me with
195    mlriscGen.sml...
196    
197    In any case, nothing of this should matter to anyone as long as the
198    new primop is not being used (which is going to be the case unless you
199    find it where I hid it :). The rest of the compiler is completely
200    unaffected.
201    
202    ----------------------------------------------------------------------
203    Name: Matthias Blume
204    Date: 2001/01/05 00:30:00 JST
205    Tag: blume-20010105-primops
206    Description:
207    
208    Added some experimental support for work that I am doing right now.
209    These changes mostly concern added primops, but there is also a new
210    experimental C library in the runtime system (but currently not enabled
211    anywhere except on Linux/X86).
212    
213    In the course of adding primops (and playing with them), I discovered that
214    Zhong's INL_PRIM hack (no type info for certain primops) was, in fact, badly
215    broken.  (Zhong was very right he labeled this stuff as "major gross hack".)
216    To recover, I made type information in INL_PRIM mandatory and changed
217    prim.sml as well as built-in.sml accordingly.  The InLine structure now
218    has complete, correct type information (i.e., no bottom types).
219    
220    Since all these changes mean that we need new binfiles, I also bumped the
221    version number to 110.32.1.
222    
223    ----------------------------------------------------------------------
224    Name: Matthias Blume
225    Date: 2000/12/30 22:10:00 JST
226    Tag: blume-20001230-various
227    Description:
228    
229    Added proxy libraries for MLRISC and let MLRISC libraries refer
230    to each other using path anchors.  (See CM manual for explanation.)
231    
232    Updated CM documentation.
233    
234    Fixed some bugs in CM.
235    
236    Implemented "proxy" libraries (= syntactic sugar for CM).
237    
238    Added "-quiet" option to makeml and changed runtime system accordingly.
239    
240    Added cleanup handler for exportML to reset timers and compiler stats.
241    
242    ----------------------------------------------------------------------
243    Name: Lal George
244    Date: 2000/12/22 22:22:58 EST 2000
245    Tag: Release_110_32
246    Description:
247    
248            Infinite precision used throughout MLRISC.
249            see MLRISC/mltree/machine-int.sig
250    
251    ----------------------------------------------------------------------
252    Name: Matthias Blume
253    Date: 2000/12/22 23:16:00 JST
254    Tag: blume-20001222-warn
255    Description:
256    
257    Corrected wording and formatting of some CM warning message which I
258    broke in my previous patch.
259    
260    ----------------------------------------------------------------------
261    Name: Matthias Blume
262    Date: 2000/12/22 21:20:00 JST
263    Tag: blume-20001222-anchorenv
264    Description:
265    
266    Fixed CM's handling of anchor environments in connection with CMB.make.
267    
268    ----------------------------------------------------------------------
269    Name: Matthias Blume
270    Date: 2000/12/22 13:15:00 JST
271    Tag: blume-20001222-cleanup
272    Description:
273    
274    Removed src/cm/ffi which does not (and did not) belong here.
275    
276    ----------------------------------------------------------------------
277    Name: Matthias Blume
278    Date: 2000/12/21 23:55:00 JST
279    Tag: blume-20001221-exn
280    Description:
281    
282    Probably most important: CM no longer silently swallows all exceptions
283    in the compiler.
284    Plus: some other minor CM changes.  For example, CM now reports some
285    sizes for generated binfiles (code, data, envpickle, lambdapickle).
286    
287    ----------------------------------------------------------------------
288    Name: Matthias Blume
289    Date: 2000/12/15 00:01:05 JST
290    Tag: blume-20001215-dirtool
291    Description:
292    
293    - "dir" tool added.
294    - improvements and cleanup to Tools structure
295    - documentation updates
296    
297    ----------------------------------------------------------------------
298    Name: Allen Leung
299    Date: Thu Dec 14 03:45:24 EST 2000
300    Description:
301    Tag:  leunga-20001214-int-inf
302    Description:
303    
304       In IntInf, added these standard functions, which are missing from our
305    implementation:
306    
307        andb : int * int -> int
308        xorb : int * int -> int
309        orb  : int * int -> int
310        notb : int -> int
311         <<   : int * word -> int
312        ~>>  : int * word -> int
313    
314       Not tested, I hope they are correct.
315    
316    ----------------------------------------------------------------------
317    Name: Allen Leung
318    Date: Fri Dec  8 19:23:26 EST 2000
319    Description:
320    Tag:  leunga-20001208-nowhere
321    Description:
322    
323      Slight improvements to the 'nowhere' tool to handle OR-patterns,
324    to generate better error messages etc.  Plus a brief manual.
325    
326    ----------------------------------------------------------------------
327    Name: Lal George
328    Date: 2000/12/08 09:54:02 EST 2000
329    Tag: Release_110_31
330    Description:
331    
332    - Version 110.31
333    ----------------------------------------------------------------------
334    Name: Allen Leung
335    Date: Thu Dec  7 22:01:04 EST 2000
336    Tag:  leunga-20001207-cell-monster-hack
337    Description:
338    
339    Major MLRISC internal changes.  Affect all clients.
340    Summary:
341    
342    1.  Type CELLS.cell = int is now replaced by a datatype.
343        As a result, the old regmap is now gone.  Almost all interfaces
344        in MLRISC change as a consequence.
345    
346    2.  A new brand version of machine description tool (v3.0) that generates
347        modules expecting the new interface.  The old version is removed.
348    
349    3.  The RA interface has been further abstracted into two new functors.
350        RISC_RA and X86RA.  These functors have much simpler interfaces.
351        [See also directory MLRISC/demo.]
352    
353    4.  Some other new source->source code generation tools are available:
354    
355        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
356        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
357           I use this tool to generate the peephole optimizers---with the new
358           cell type changes, peephole rules are becoming difficult to write
359           without conditional pattern matching.
360    
361    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
362        cover the entire MLRISC source tree so many things broke.
363    
364    6.  CM files have been moved to the subdirectory MLRISC/cm.
365        They are moved because there are a lot of them and they clutter up the
366        root dir.
367    
368    7.  More detailed documentation to come...
369    
370        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
371        a makeml -rebuild first.  This is because of other other
372        changes that Matthias has made (see below).
373    
374    
375    ----------------------------------------------------------------------
376    Name: Matthias Blume
377    Date: 2000/11/30 23:12:00 JST
378    Tag: blume-20001130-filereorg
379    Description:
380    
381    Some manual updates and some file reorganizations in CM.
382    
383    ----------------------------------------------------------------------
384    Name: Matthias Blume
385    Date: 2000/11/24 17:45:00 JST
386    Tag: blume-20001124-link
387    Description:
388    
389    Drastically improved link traversal code for the case that the dynamic
390    value was already loaded at bootstrap time.  As a result, CM and CMB
391    now both load blazingly fast -- even on a very slow machine.  Also,
392    memory consumption has been further reduced by this.
393    
394    Warning: The format of the PIDMAP file has changed.  THerefore, to
395    bootstrap you have to do this:
396    
397    1. Run CMB.make
398    2. Make a symbolic link for the boot directory:
399         ln -s sml.boot.ARCH-OS xxx
400    3. "Rebuild" the boot directory:
401         ./makeml -boot xxx -rebuild sml ; rm xxx
402    4. Boot normally:
403          ./makeml
404    
405    ----------------------------------------------------------------------
406    Name: Matthias Blume
407    Date: 2000/11/21 21:20:00 JST
408    Tag: blume-20001121-tools
409    Description:
410    
411    Continued hacking on autoloading problem -- with success this time.
412    Also changed tool-plugin mechanism.  See new CM manual.
413    
414    ----------------------------------------------------------------------
415    Name: Matthias Blume
416    Date: 2000/11/19 14:30:00 JST
417    Tag:  blume-20001119-autoload
418    Description:
419    
420    Some hacking to make autoloading faster.  Success for CMB, no success
421    so far for CM.  There is a reduced structure CM' that autoloads faster.
422    (This is a temporary, non-documented hack to be eliminated again when
423    the general problem is solved.)
424    
425    ----------------------------------------------------------------------
426    Name: Matthias Blume
427    Date: 2000/11/17 14:10:00 JST
428    Tag: blume-20001117-pickle-lib
429    Description:
430    
431    1. Eliminated comp-lib.cm
432    2. Made pickle-lib.cm
433    3. Eliminated all uses of intset.sml (from comp-lib.cm)
434    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
435       equivalent constructs from smlnj-lib.cm (INtHashTable).
436    5. Point 4. also goes for those uses of intmap.* in MLRISC.
437       Duplicated intmap modules thrown out.
438    6. Hunted down all duplicated SCC code and replaced it with
439       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
440    7. Rewrote Feedback module.
441    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
442       should be thrown out and equivalent modules from smlnj-lib.cm
443       should be used (IntRedBlackSet, IntListSet, ...).
444    
445    Confirmed that compiler compiles to fixpoint.
446    
447    ----------------------------------------------------------------------
448    Name: Allen Leung
449    Date: 2000/11/10 18:00:00
450    Tag: leunga-20001110-new-x86-fp
451    
452    A new x86 floating point code generator has been added.
453    By default this is turned off.  To turn this on, do:
454    
455        CM.autoload "$smlnj/compiler.cm";
456        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
457    
458    Changes:
459    
460    1.  Changed FTAN to FPTAN so that the assembly output is correct.
461    2.  Changed the extension callback for FTANGENT to generate:
462    
463              fptan
464              fstp  %st(0)
465        instead of
466              fptan
467              fstpl ftempmem
468    
469    3.  Numerous assembly fixes for x86.
470    
471    5.  Cleaned up the machine code output module x86/x86MC.sml and added
472        support for a whole bunch of instructions and addressing modes:
473    
474          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
475          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
476          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
477          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
478          fxch %st(n)
479          fld %st(n)
480          fst %st(n)
481          fst mem
482          fstp %st(n)
483          fucom %st(n)
484          fucomp %st(n)
485    
486        All these are now generated when the fast fp mode is turned on.
487    
488    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
489    
490    ----------------------------------------------------------------------
491    Name: Matthias Blume
492    Date: 2000/11/09 11:20:00 JST
493    Tag: blume-20001109-scc
494    Description:
495    
496    Eliminated some code duplication:
497    
498    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
499       (Otherwise the functor is useless.)
500    2. Used GraphSCCFn where SCCUtilFun was used previously.
501    3. Got rid of SCCUtilFun (in comp-lib.cm).
502    
503    ----------------------------------------------------------------------
504    Name: Lal George
505    Date: 2000/11/06 09:02:21 EST 2000
506    Tag: Release_110_30
507    Description:
508    
509    - Version 110.30
510    ----------------------------------------------------------------------
511    Name: Matthias Blume
512    Date: 2000/11/04 14:45:00
513    Tag: blume-20001104-mlbuild
514    Description:
515    
516    - Made ml-build faster on startup.
517    - Documentation fixes.
518    
519    ----------------------------------------------------------------------
520    Name: Matthias Blume
521    Date: 2000/11/02 17:00:00 JST
522    Tag: blume-20001102-condcomp
523    Description:
524    
525    - Small tweaks to pickler -- new BOOTFILES!
526    - Version bumped to 110.29.2.
527    - Added conditional compilation facility to init.cmi (see comment there).
528    ----------------------------------------------------------------------
529    Name: Allen Leung
530    Date: 2000/10/23 19:31:00
531    Tag: leunga-20001023-demo-ra
532    
533    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
534    2. Test programs for the graph library updated
535    3. Some new MLRISC demo programs added
536    
537    ----------------------------------------------------------------------
538    Name: Matthias Blume
539    Date: 2000/08/31 22:15:00 JST
540    Tag: blume-20001017-errmsg
541    Description:
542    
543    More error message grief: Where there used to be no messages, there
544    now were some that had bogus error regions.  Fixed.
545    
546    ----------------------------------------------------------------------
547    Name: Matthias Blume
548    Date: 2000/08/31 17:30:00 JST
549    Tag: blume-20001017-v110p29p1
550    Description:
551    
552    I made a version 110.29.1 with new bootfiles.
553    
554    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
555              CM documentation changes and a small bugfix in CM's error reporting.
556    
557    ----------------------------------------------------------------------
558    Name: Lal George
559    Date: 2000/09/27 14:42:35 EDT
560    Tag: george-20000927-nodestatus
561    Description:
562    
563    Changed the type of the nodestatus, so that:
564    
565            SPILLED(~1)             is now SPILLED
566            SPILLED(m) where m>=0   is now MEMREG(m)
567            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
568    
569    ----------------------------------------------------------------------
570    Name: Matthias Blume
571    Date: 2000/09/07 14:45:00 JST
572    Tag: blume-20000907-cmerrmsg
573    Description:
574    
575    Small tweak to CM to avoid getting ML syntax error messages twice.
576    
577    ----------------------------------------------------------------------
578    Name: Matthias Blume
579    Date: 2000/08/31 18:00:00 JST
580    Tag: blume-20000831-cvsbootfiles
581    Description:
582    
583    New URL for boot files (because the 110.29 files on the BL server do
584    now work correctly with my updated install scripts for yacc and lex).
585    
586    ----------------------------------------------------------------------
587    Name: Matthias Blume
588    Date: 2000/08/08 12:33:00 JST
589    Tag: blume-20000808-manual
590    Description:
591    
592    Tiny update to CM manual.
593    
594    ----------------------------------------------------------------------
595    Name: Allen Leung
596    Date: 2000/08/7 19:31:00
597    Tag: leunga-20000807-a-whole-bunch-of-stuff
598    
599      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
600    and Mobdy.
601    
602    1.  x86
603    
604       a.  Fixes to peephole module by John and Dan.
605       b.  Assembly fix to SETcc by Allen.
606       c.  Fix to c-call by John.
607       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
608       e.  Instruction selection optimization to SETcc as suggested by John.
609    
610           For example,
611    
612            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
613    
614           should generate:
615    
616            MOVL a, x
617            SUBL b, x
618            SHRL 31, x
619    
620    2.  IR stuff
621    
622         A bunch of new DJ-graph related algorithms added.  These
623         speed up SSA construction.
624    
625    3.  SSA + Scheduling
626    
627         Added code for SSA and scheduling to the repository
628    
629    ----------------------------------------------------------------------
630    Name: Lal George
631    Date: 2000/07/27 11:53:14 EDT
632    
633    Tag: lal-20000727-linux-ppc
634    Description:
635    
636     Made changes to support Linux PPC.
637     p.s. I have confirmation that the 110.29 boot files work fine.
638    
639    ----------------------------------------------------------------------
640    Name: Matthias Blume
641    Date: 2000/07/27 17:40:00 JST
642    Tag: blume-20000727-scripts
643    Description:
644    
645    !!!! WARNING !!!!
646    You must recompile the runtime system!
647    !!!! WARNING !!!!
648    
649    This is basically another round of script-enhancements:
650    
651    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
652       and undefine CM preprocessor symbols.
653    
654    2. ml-build avoids generating a new heap image if it finds that the
655       existing one is still ok.  (The condition is that no ML file had to
656       be recompiled and all ML files are found to be older that the heap
657       file.)
658    
659       To make this work smoothly, I also hacked the runtime system as
660       well as SMLofNJ.SysInfo to get access to the heap image suffix
661       (.sparc-solaris, ...) that is currently being used.
662    
663       Moreover, the signature of CM.mk_standalone has changed.  See the
664       CM manual.
665    
666    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
667       CM manual for details.)
668    
669    4. More CM manual updates:
670        - all of the above has been documented.
671        - there is now a section describing the (CM-related) command line
672          arguments that are accepted by the "sml" command
673    
674    ----------------------------------------------------------------------
675    Name: Matthias Blume
676    Date: 2000/07/25 16:20:00 JST
677    Tag: blume-20000725-makedepend
678    Description:
679    
680    Added a script called ml-makedepend.  This can be used in makefiles
681    for Unix' make in a way very similar to the "makedepend" command for
682    C.
683    
684    The script internally uses function CM.sources.
685    
686    Synopsis:
687    
688        ml-makedepend [-f makefile] cmfile targetname
689    
690    The default for the makefile is "makefile" (or "Makefile" should
691    "makefile" not exist).
692    
693    ml-makedepend adds a cmfile/targetname-specific section to this
694    makefile (after removing the previous version of this section).  The
695    section contains a single dependency specification with targetname on
696    the LHS (targetname is an arbitrary name), and a list of files derived
697    from the cmfile on the RHS.  Some of the files on the RHS are
698    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
699    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
700    path names.  The makefile writer is responsible for making sure that
701    these variables have correct at the time "make" is invoked.
702    
703    ----------------------------------------------------------------------
704    Name: Matthias Blume
705    Date: 2000/07/22 23:30:00 JST
706    Tag: blume-20000722-urlupdate
707    Description:
708    
709    Changed BOOT and config/srcarchiveurl to point to BL server:
710    
711        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
712    
713    ----------------------------------------------------------------------
714    Name: Matthias Blume
715    Date: 2000/07/18 18:00:00 JST
716    Tag: blume-20000718-Version_110_29
717    Description:
718    
719    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
720    
721    2. Updated config/version to 110.29
722    
723    3. Updated config/srcarchiveurl
724    
725    3. New boot files!
726       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
727    
728    ----------------------------------------------------------------------
729    Name: Matthias Blume
730    Date: 2000/07/11 13:58:00 JST
731    Tag: blume-20000711-doctypo
732    Description:
733    
734    Fixed a few typos in CM manual.
735    
736    ----------------------------------------------------------------------
737    Name: Allen Leung
738    Date: 2000/06/15 00:38:00
739    Tag: leunga-20000704-sparc-x86
740    
741    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
742    2. fix to x86 RET bug [found by Dan Grossman]
743    3. sparc assembly bug fix for ticc instructions [found by Fermin]
744    
745       Affects c-- and moby only
746    
747    ----------------------------------------------------------------------
748    Name: Matthias Blume
749    Date: 2000/07/04 15:26:00
750    Tag: blume-20000704-trigger
751    Description:
752    
753    1. Improvements to CM manual.
754    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
755       of getting a back-trace.  The function, when called, raises an
756       internal exception which explicitly carries the full back-trace history,
757       so it is unaffected by any intervening handle-raise pairs ("trivial"
758       or not).  The interactive loop will print that history once it arrives
759       at top level.
760       Short of having all exceptions implicitly carry the full history, the
761       recommended way of using this facility is:
762         - compile your program with instrumentation "on"
763         - run it, when it raises an exception, look at the history
764         - if the history is "cut off" because of some handler, go and modify
765           your program so that it explicitly calls BTrace.trigger
766         - recompile (still instrumented), and rerun; look at the full history
767    
768    ----------------------------------------------------------------------
769    Name: Matthias Blume
770    Date: 2000/07/03 15:36:00 JST
771    Tag: blume-20000702-manual
772    Description:
773    
774    Small corrections and updates to CM manual.
775    
776    ----------------------------------------------------------------------
777    Name: Matthias Blume
778    Date: 2000/06/29 16:04:00 JST
779    Tag: blume-20000629-yacctool
780    Description:
781    
782    Changes:
783    
784    1. Class "mlyacc" now takes separate arguments to pass options to
785       generated .sml- and .sig-files independently.
786    2. Corresponding CM manual updates.
787    3. BTrace module now also reports call sites.  (However, for loop clusters
788       it only shows from where the cluster was entered.)  There are associated
789       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
790    
791    ----------------------------------------------------------------------
792    Name: Matthias Blume
793    Date: 2000/06/27 16:51:00 JST
794    Tag: blume-20000627-noweb
795    Description:
796    
797    Changes:
798    
799     1. Implemented "subdir" and "witness" options for noweb tool.
800        This caused some slight internal changes in CM's tool implementation.
801     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
802        some remaining issues from earlier path anchor changes.
803     3. Updated CM manual accordingly.
804    
805     4. Changed implementation of back-tracing so that I now consider it
806        ready for prime-time.
807    
808        In particular, you don't have to explicitly trigger the back-trace
809        anymore.  Instead, if you are running BTrace-instrumented code and
810        there is an uncaught exception (regardless of whether or not it was
811        raised in instrumented code), the top-level evalloop will print
812        the back-trace.
813    
814        Features:
815    
816          - Instrumented and uninstrumented code work together seemlessly.
817            (Of course, uninstrumented code is never mentioned in actual
818             back-traces.)
819    
820          - Asymptotic time- and space-complexity of instrumented code is
821            equal to that of uninstrumented code.  (This means that
822            tail-recursion is preserved by the instrumentation phase.)
823    
824          - Modules whose code has been instrumented in different sessions
825            work together without problem.
826    
827          - There is no penalty whatsoever on uninstrumented code.
828    
829          - There is no penalty on "raise" expressions, even in
830            instrumented code.
831    
832        A potential bug (or perhaps it is a feature, too):
833    
834          A back-trace reaches no further than the outermost instrumented
835          non-trivial "raise".  Here, a "trivial" raise is one that is the
836          sole RHS of a "handle" rule.  Thus, back-traces reach trough
837    
838               <exp> handle e => raise e
839    
840          and even
841    
842               <exp> handle Foo => raise Bar
843    
844          and, of course, through
845    
846               <exp> handle Foo => ...
847    
848         if the exception was not Foo.
849    
850         Back-traces always reach right through any un-instrumented code
851         including any of its "handle" expressions, trivial or not.
852    
853       To try this out, do the following:
854    
855         - Erase all existing binfiles for your program.
856           (You may keep binfiles for those modules where you think you
857            definitely don't need back-tracing.)
858         - Turn on back-trace instrumentation:
859              SMLofNJ.Internals.BTrace.mode (SOME true);
860         - Recompile your program.  (I.e., run "CM.make" or "use".)
861         - You may now turn instrumentation off again (if you want):
862              SMLofNJ.Internals.BTrace.mode (SOME false);
863         - Run your program as usual.  If it raises an exception that
864           reaches the interactive toplevel, then a back-trace will
865           automatically be printed.  After that, the toplevel loop
866           will print the exception history as usual.
867    
868    ----------------------------------------------------------------------
869    Name: Matthias Blume
870    Date: 2000/06/26 09:56:46 JST
871    Tag: blume-20000626-setup
872    Description:
873    
874    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
875          ML code before and after compiling a file (e.g., to set compiler
876          flags)
877    
878    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
879              - associated changes to btrace.sml (BTrace instrumentation pass)
880              - cleaner implementation of btimp.sml (BTrace tracing and report
881                module)
882    
883    CM manual: * new path encoding documented
884               * description of setup-parameter to "sml" added
885    
886    The biggest user-visible change to back-tracing is that it is no
887    longer necessary to compile all traced modules within the same
888    session.  (This was a real limitation.)
889    
890    ----------------------------------------------------------------------
891    Name: Matthias Blume
892    Date: 2000/06/24 12:40:00 JST
893    Tag: blume-20000624-startup
894    Description:
895    
896    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
897    bit too often -- to put it mildly. :)
898    
899    ----------------------------------------------------------------------
900    Name: Matthias Blume
901    Date: 2000/06/23 18:20:00 JST
902    Tag: blume-20000623-btrace
903    Description:
904    
905    This updates adds a backtrace facility to aid programmers in debugging
906    their programs.  This involves the following changes:
907    
908    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
909       keeping track of the current call stack.  When programs are compiled
910       in a special mode, the compiler will insert calls to these hooks
911       into the user program.
912       "Hook" means that it is possible for different implementations of
913       back-tracing to register themselves (at different times).
914    
915    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
916       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
917       It can be turned on using this call:
918         SMLofNJ.Internals.BTrace.mode (SOME true);
919       Turning it off again:
920         SMLofNJ.Internals.BTrace.mode (SOME false);
921       Querying the current status:
922         SMLofNJ.Internals.BTrace.mode NONE;
923       Annotated programs are about twice as big as normal ones, and they
924       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
925       where all hooks do nothing).  The slowdown with a plugin that is
926       actually useful (such as the one supplied by default) is even greater,
927       but in the case of the default plugin it is still only an constant
928       factor (amortized).
929    
930    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
931       with a sub-structure BTrace for controlling back-tracing.  In particular,
932       the above-mentioned function "mode" controls whether the annotation
933       phase is invoked by the compiler.  Another important function is
934       "trigger": when called it aborts the current execution and causes
935       the top-level loop to print a full back-trace.
936    
937    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
938       for back-tracing.  It keeps track of the dynamic call stack and in
939       addition to that it keeps a partial history at each "level" of that
940       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
941       d and b (at separate times, dynamically), then the report will show:
942    
943       GOTO   d
944             /c
945       GOTO  \b
946       CALL   a
947    
948       This shows that there was an initial non-tail call of a, then a
949       tail-call to b or c, looping behavior in a cluster of functions that
950       consist of b and c, and then a goto from that cluster (i.e., either from
951       b or from c) to d.
952    
953       Note that (depending on the user program) the amount of information
954       that the back-trace module has to keep track of at each level is bounded
955       by a constant.  Thus, the whole implementation has the same asymptotical
956       complexity as the original program (both in space and in time).
957    
958    5. compiler/TopLevel/interact/evalloop.sml has been modified to
959       handle the special exception SMLofNJ.Internals.BTrace.BTrace
960       which is raised by the "trigger" function mentioned above.
961    
962    Notes on usage:
963    
964    - Annotated code works well together with unannotated code:
965    Unannotated calls simply do not show up at all in the backtrace.
966    
967    - It is not a good idea to let modules that were annotated during
968    different sessions run at the same time.  This is because the compiler
969    chooses small integers to identify individual functions, and there
970    will be clashes if different modules were compiled in separate sessions.
971    (Nothing will crash, and you will even be told about the clashes, but
972    back-trace information will in general not be useful.)
973    
974    - Back-tracing can be confused by callcc and capture.
975    
976    - The only way of getting a back-trace right now is to explicitly
977    invoke the "trigger" function from your user program.  Eventually, we
978    should make every exception carry back-trace information (if
979    available).  But since this creates more overhead at "raise"-time
980    (similar to the current exnHistory overhead), I have not yet
981    implemented this.  (The implementation will be rather easy.)  With
982    exceptions carrying back-trace information, this facility will be even
983    more useful because users don't need to modify their programs...
984    
985    - While it is possible to compile the compiler with back-trace
986    annotations turned on (I did it to get some confidence in
987    correctness), you must make absolutely sure that core.sml and
988    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
989    be compiled with annotation because there is no core access yet, but
990    if you compile btimp.sml with annotation, then the system will go into
991    an infinite recursion and crash.)
992    Since CM currently does not know about BTrace, the only way to turn
993    annotations on and off for different modules of the compiler is to
994    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
995    this is awkward and clumsy.
996    
997    Sample sessions:
998    
999    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
1000    - SMLofNJ.Internals.BTrace.mode (SOME true);
1001    [autoloading]
1002    [autoloading done]
1003    val it = false : bool
1004    - structure X = struct
1005    -     fun main n = let
1006    -         fun a (x, 0) = d x
1007    -           | a (x, n) = b (x, n - 1)
1008    -         and b (x, n) = c (x, n)
1009    -         and c (x, n) = a (x, n)
1010    -         and d x = e (x, 3)
1011    -         and e (x, 0) = f x
1012    -           | e (x, n) = e (x, n - 1)
1013    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
1014    -           | f n = n * g (n - 1)
1015    -         and g n = a (n, 3)
1016    -     in
1017    -         f n
1018    -     end
1019    - end;
1020    structure X : sig val main : int -> int end
1021    - X.main 3;
1022    *** BACK-TRACE ***
1023    GOTO   stdIn:4.2-13.20: X.main[2].f
1024    GOTO-( stdIn:4.2-13.20: X.main[2].e
1025    GOTO   stdIn:4.2-13.20: X.main[2].d
1026         / stdIn:4.2-13.20: X.main[2].a
1027         | stdIn:4.2-13.20: X.main[2].b
1028    GOTO-\ stdIn:4.2-13.20: X.main[2].c
1029    CALL   stdIn:4.2-13.20: X.main[2].g
1030    GOTO   stdIn:4.2-13.20: X.main[2].f
1031    GOTO-( stdIn:4.2-13.20: X.main[2].e
1032    GOTO   stdIn:4.2-13.20: X.main[2].d
1033         / stdIn:4.2-13.20: X.main[2].a
1034         | stdIn:4.2-13.20: X.main[2].b
1035    GOTO-\ stdIn:4.2-13.20: X.main[2].c
1036    CALL   stdIn:4.2-13.20: X.main[2].g
1037    GOTO   stdIn:4.2-13.20: X.main[2].f
1038    GOTO-( stdIn:4.2-13.20: X.main[2].e
1039    GOTO   stdIn:4.2-13.20: X.main[2].d
1040         / stdIn:4.2-13.20: X.main[2].a
1041         | stdIn:4.2-13.20: X.main[2].b
1042    GOTO-\ stdIn:4.2-13.20: X.main[2].c
1043    CALL   stdIn:4.2-13.20: X.main[2].g
1044    GOTO   stdIn:4.2-13.20: X.main[2].f
1045    CALL   stdIn:2.15-17.4: X.main[2]
1046    -
1047    
1048    (Note that because of a FLINt bug the above code currently does not
1049    compile without BTrace turned on.)
1050    
1051    Here is another example, using my modified Tiger compiler:
1052    
1053    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
1054    - SMLofNJ.Internals.BTrace.mode (SOME true);
1055    [autoloading]
1056    [autoloading done]
1057    val it = false : bool
1058    - CM.make "sources.cm";
1059    [autoloading]
1060    ...
1061    [autoloading done]
1062    [scanning sources.cm]
1063    [parsing (sources.cm):parse.sml]
1064    [creating directory CM/SKEL ...]
1065    [parsing (sources.cm):tiger.lex.sml]
1066    ...
1067    [wrote CM/sparc-unix/semant.sml]
1068    [compiling (sources.cm):main.sml]
1069    [wrote CM/sparc-unix/main.sml]
1070    [New bindings added.]
1071    val it = true : bool
1072    - Main.compile ("../testcases/merge.tig", "foo.out");
1073    *** BACK-TRACE ***
1074    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
1075    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
1076    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
1077    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
1078    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
1079    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
1080    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
1081         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
1082    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
1083    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
1084    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
1085    CALL   main.sml:1.18-118.4: Main.compile[2]
1086    -
1087    
1088    ----------------------------------------------------------------------
1089    Name: Matthias Blumen
1090    Date: 2000/06/21 18:00:00 JST
1091    Tag: blume-20000621-manual
1092    Description:
1093    
1094    CM manual update: Path environments documented.
1095    
1096    ----------------------------------------------------------------------
1097    Name: Matthias Blume
1098    Date: 2000/06/19 13:40:00
1099    Tag: blume-20000619-manual
1100    Description:
1101    
1102    CM manual and system/README update.  This only covers the fact that
1103    there are no more implicit anchors.  (Path environments and the "bind"
1104    option to "cm" have yet to be documented.)
1105    
1106    ----------------------------------------------------------------------
1107    Name: Matthias Blume
1108    Date: 2000/06/19 11:05:00 JST
1109    Tag: blume-20000619-chdir-bugfix
1110    Description:
1111    
1112    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
1113    
1114    ----------------------------------------------------------------------
1115    Name: Matthias Blume
1116    Date: 2000/06/18 22:00:10 JST
1117    Tag: blume-20000618-implicit-anchors-really-gone
1118    Description:
1119    
1120    I updates the previous HISTORY entry where I forgot to mention that
1121    implicit anchors are no longer with us.
1122    
1123    The current update also gets rid of the (now useless) controller
1124    CM.Control.implicit_anchors.
1125    
1126    ----------------------------------------------------------------------
1127    Name: Matthias Blume
1128    Date: 2000/06/16 17:30:00 JST
1129    Tag: blume-20000616-anchorenv
1130    Description:
1131    
1132    This patch implements the long anticipated (just kidding :) "anchor
1133    environment" mechanism.  In the course of doing this, I also
1134    re-implemented CM's internal "SrcPath" module from scratch.  The new
1135    one should be more robust in certain boundary cases.  In any case, it
1136    is a lot cleaner than its predecessor (IMHO).
1137    
1138    This time, although there is yet another boot file format change, I
1139    kept the unpickler backward-compatible.  As a result, no new bootfiles
1140    are necessary and bootstrapping is straightforward.  (You cannot read
1141    new bootfiles into an old system, but the other way around is no
1142    problem.)
1143    
1144    Visible changes:
1145    
1146    ** 0. Implicit path anchors (without the leading $-symbol) are no
1147    longer recognized at all. This means that such path names are not
1148    illegal either.  For example, the name basis.cm simply refers to a
1149    local file called "basis.cm" (i.e, the name is an ordinary path
1150    relative to .cm-files directory).  Or, to put it differently, only
1151    names that start with $ are anchored paths.
1152    
1153    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
1154    vanished.
1155    
1156    John (Reppy) had critizised this as soon as I originally proposed and
1157    implemented it, but at that time I did not really deeply believe
1158    him. :) Now I came full-circle because I need the $<singlearc> syntax
1159    in another place where it cannot be seen as an abbreviation for
1160    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
1161    seems to mean (i.e., it "expands" into the corresponding anchor
1162    value).
1163    
1164    However, when paths are used as members in CM description files, it
1165    continues to be true that there must be at least another arc after the
1166    anchor.  This is now enforced separately during semantic analysis
1167    (i.e., from a lexical/syntactical point of view, the notation is ok.)
1168    
1169    ** 2. The "cm" class now accepts an option "bind".  The option's value
1170    is a sub-option list of precisely two items -- one labeled "anchor"
1171    and the other one labeled "value".  As you might expect, "anchor" is
1172    used to specify an anchor name to be bound, and "value" specifies what
1173    the anchor is being bound to.
1174    
1175    The value must be a directory name and can be given in either standard
1176    syntax (including the possibility that it is itself an anchored path)
1177    or native syntax.
1178    
1179    Examples:
1180    
1181       foo.cm (bind:(anchor:bar value:$mystuff/bar))
1182       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
1183    
1184    and so on.
1185    
1186    The meaning of this is that the .cm-file will be processed with an
1187    augmented anchor environment where the given anchor(s) is/are bound to
1188    the given values(s).
1189    
1190    The rationale for having this feature is this: Suppose you are trying
1191    to use two different (already stable) libraries a.cm and b.cm (that
1192    you perhaps didn't write yourself).  Further, suppose each of these
1193    two libraries internally uses its own auxiliary library $aux/lib.cm.
1194    Normally you would now have a problem because the anchor "lib" can not
1195    be bound to more than one value globally.  Therefore, the project that
1196    uses both a.cm and b.cm must locally redirect the anchor to some other
1197    place:
1198    
1199       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
1200       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
1201    
1202    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
1203    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
1204    
1205    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
1206    you when you do so at the time of CM.stabilize).  Therefore, you can
1207    also use an anchored path as the value:
1208    
1209      a.cm (bind:(anchor:lib value:$a-lib))
1210      b.cm (bind:(anchor:lib value:$b-lib))
1211    
1212    Now you can globally configure (using the usual CM.Anchor.anchor or
1213    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
1214    itself is always locally bound, setting it globally is no longer
1215    meaningful or necessary (but it does not hurt either).  In fact, "lib"
1216    can still be used as a global anchor for separate purposes.  As a
1217    matter of fact, one can locally define "lib" in terms of a global
1218    "lib":
1219    
1220      a.cm (bind:(anchor:lib value:$lib/a))
1221      b.cm (bind:(anchor:lib value:$lib/b))
1222    
1223    ** 3: The encoding of path names has changed.  This affects the way
1224    path names are shown in CM's progress report and also the internal
1225    protocol encoding used for parallel make.
1226    
1227    The encoding now uses one or more ':'-separated segments.  Each
1228    segments corresponds to a file that has been specified relative to the
1229    file given by its preceding segment.  The first segment is either
1230    relative to the CWD, absolute, or anchored.  Each segment itself is
1231    basically a Unix pathname; all segments but the first are relative.
1232    
1233    Example:
1234    
1235       $foo/bar/baz.cm:a/b/c.sml
1236    
1237    This path denotes the file bar/a/b/c.sml relative to the directory
1238    denoted by anchor "foo".  Notice that the encoding also includes
1239    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
1240    paths are resolved relative to the .cm-files directory, so baz.cm must
1241    be ignored to get the "real" pathname.
1242    
1243    To make this fact more obvious, CM puts the names of such "virtual
1244    arcs" into parentheses when they appear in progress reports. (No
1245    parentheses will appear in the internal protocol encoding.)  Thus,
1246    what you really see is:
1247    
1248      $foo/bar/(baz.cm):a/b/c.sml
1249    
1250    I find this notation to be much more informative than before.
1251    
1252    Another new feature of the encoding is that special characters
1253    including parentheses, colons, (back)slashes, and white space are
1254    written as \ddd (where ddd is the decimal encoding of the character).
1255    
1256    *** The CM manual still needs to be updated.
1257    
1258    ----------------------------------------------------------------------
1259    Name: Allen Leung
1260    Date: 2000/06/15 00:38:00
1261    Tag: leunga-20000615-x86-peephole
1262    
1263    x86 Peephole fix by Fermin.  Affects c-- and moby only.
1264    
1265    ----------------------------------------------------------------------
1266    Name: Matthias Blume
1267    Date: 2000/06/12 11:40:00
1268    Tag: blume-20000612-parmakefix
1269    Description:
1270    
1271    More cleanup after changing the file naming scheme: This time I
1272    repaired the parallel make mechanism for CMB.make which I broke earlier.
1273    
1274    ----------------------------------------------------------------------
1275    Name: Allen Leung
1276    Date: 2000/06/09 01:25:00
1277    Tag: leunga-20000609-various
1278    
1279    None of these things should affect normal SML/NJ operations
1280    
1281    1. Peephole improvements provided by Fermin (c--)
1282    2. New annotation DEFUSE for adding extra dependence (moby)
1283    3. New X86 LOCK instructions (moby)
1284    4. New machine description language for reservation tables (scheduling)
1285    5. Fixes to various optimization/analysis modules (branch chaining, dominator
1286       trees etc.)
1287    6. I've changed the CM files so that they can work with versions
1288       110.0.6, 110.25 and 110.28
1289    
1290    ----------------------------------------------------------------------
1291    Name: Matthias Blume
1292    Date: 2000/06/09 12:40:00
1293    Tag: blume-20000609-log
1294    Description:
1295    
1296    - Removed all(?) remaining RCS Log entries from sources.
1297    
1298    - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for
1299      anchored paths).
1300    
1301    ----------------------------------------------------------------------
1302    Name: Matthias Blume
1303    Date: 2000/06/07 17:00:00 JST
1304    Tag: blume-20000607-no-implicit-anchors
1305    Description:
1306    
1307    1. This update changes the default setting for
1308    CM.Control.implicit_anchors from true to false.  This means that
1309    implicit anchors are no longer permitted by default.  I also tried to
1310    make sure that nothing else still relies on implicit anchors.
1311    (This is the next step on the schedule towards a CM that does not even
1312    have the notion of implicit anchors anymore.)
1313    
1314    2. More CM manual updates.
1315    
1316    3. I managed to track down and fix the pickling bug I mentioned last
1317    time.  Because of the previously existing workaround, this entails no
1318    immediate practical changes.
1319    
1320    ----------------------------------------------------------------------
1321    Name: Matthias Blume
1322    Date: 2000/06/06 11:15:00 JST
1323    Tag: blume-20000606-lazierpickle
1324    Description:
1325    
1326    !!!! NEW BOOT FILES !!!!
1327    
1328    * The main purpose of this update is to make library pickles lazier in
1329    order to reduce the initial space penalty for autoloading a library.
1330    As a result, it is now possible to have $smlnj/compiler.cm
1331    pre-registered.  This should take care of the many complaints or
1332    inquiries about missing structure Compiler.  This required changes to
1333    CM's internal data structures and small tweaks to some algorithms.
1334    
1335    As a neat additional effect, it is no longer necessary (for the sake
1336    of lean heap image files) to distinguish between a "minimal" CM and a
1337    "full" CM.  Now, there is only one CM (i.e., the "full" version:
1338    $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the
1339    interactive top level. ($smlnj/cm/minimal.cm is gone.)
1340    
1341    To make the life of compiler-hackers easier, "makeml" now also
1342    pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm).  In other
1343    words, after you bootstrap a new sml for the first time, you will not
1344    have to autoload $smlnj/cmb.cm again afterwards.  (The first time
1345    around you will still have to do it, though.)
1346    
1347    * A second change consists of major updates to the CM manual.  There
1348    are now several appendices with summary information and also a full
1349    specification of the CM description file syntax.
1350    
1351    * In directory src/system I added the script "allcross".  This script
1352    invokes sml and cross-compiles the compiler for all supported
1353    architectures.  (Useful when providing a new set of boot files.)
1354    
1355    * There seems to be a latent bug in my "lazy pickles" mechanism.  I
1356    added a small tweak to pickle-util.sml to work around this problem,
1357    but it is not a proper fix yet.  I will investigate further.  (The
1358    effect of the bug was an inflation of library pickle size.)
1359    
1360    * Version number increased to 110.28.1 (to avoid compatibility problems).
1361    
1362    ----------------------------------------------------------------------
1363    Name: Allen Leung
1364    Date: 2000/05/25 17:28 EDT
1365    Tag: leunga-20000525-ra
1366    Description:
1367    
1368      Fixed a bug in freezing phase of the register allocator.
1369    
1370    ----------------------------------------------------------------------
1371    Name: Allen Leung
1372    Date: 2000/05/15 22:53 EDT
1373    Tag: leunga-20000515-alpha-x86-ra
1374    Description:
1375    
1376      1. Alpha
1377    
1378          Slight cleanup.  Removed the instruction SGNXL
1379    
1380      2. X86
1381    
1382          Added the following instructions to the instruction set:
1383    
1384            ROLx, RORx,
1385            BTx, BTSx, BTLx, BTRx,
1386            XCHGx, and variants with the LOCK prefix
1387    
1388      3. Register Allocation
1389    
1390          The module ra-rewrite-with-renaming has been improved.
1391    
1392      These have no effect on SML/NJ.
1393    
1394    ----------------------------------------------------------------------
1395    Name: Matthias Blume
1396    Date: 2000/05/15 16:20:00 JST
1397    Tag: blume-20000515-lightrebuild
1398    Description:
1399    
1400    1. I added an alternative to "-rebuild" to "makeml".  The difference is
1401       that prior to calling CMB.make' the CM-variable "LIGHT" will be
1402       defined.  In effect, the command will not build any cross-compiler
1403       backends and therefore finish more quickly.
1404    
1405       The "fixpt" script also takes a "-light" switch to be able to use
1406       this new facility while compiling for a fixpoint.
1407    
1408    2. I replaced all mentions of anchored paths in group owner specifications
1409       with simple relative paths (usually starting with "..").
1410       The rationale is that a library's internal workings should not be
1411       compromised by the lack of some anchor.  (An anchor is necessary
1412       for someone who wants to refer to the library by an anchored path,
1413       but it should not be necessary to build the same library in the first
1414       place.)
1415    
1416    3. I changed the way CM's tool mechanism determines the shell command
1417       string used for things like ml-yacc etc. so that it does not break
1418       when CM.Control.implicit_anchors is turned off.
1419    
1420    ----------------------------------------------------------------------
1421    Name: Matthias Blume
1422    Date: 2000/05/12 18:20:00 JST
1423    Tag: blume-20000512-ml-build
1424    Description:
1425    
1426    Fixed a bug in config/_ml-build that prevented ml-yacc and ml-lex from
1427    getting installed properly (by config/install.sh).
1428    
1429    ----------------------------------------------------------------------
1430    Name: Matthias Blume
1431    Date: 2000/05/12 17:30:00 JST
1432    Tag: blume-20000512-anchors
1433    Description:
1434    
1435    !!! NEW BOOT FILES !!!
1436    
1437    This change is in preparation of fading out support for "implicitly
1438    anchored path names".  I went through all sources and used the
1439    explicit (and relatively new) $-notation.  See system/README and the
1440    CM manual for more info on this.
1441    
1442    I also modified the anchoring scheme for some things such as "smlnj",
1443    "MLRISC", "cm", etc. to take advantage of the fact that explicit
1444    anchors are more expressive: anchor name and first arc do not have to
1445    coincide.  This entails the following user-visible change:
1446    
1447    You have to write $smlnj/foo/bar instead of smlnj/foo/bar.  In
1448    particular, when you fire up sml with a command-line argument, say,
1449    e.g.:
1450    
1451       sml '$smlnj/cmb.cm'
1452    
1453    At the ML toplevel prompt:
1454    
1455       CM.autoload "$smlnj/cmb.cm";
1456    
1457    There is also a new controller in CM.Control that can be used to turn
1458    off all remaining support for implicit anchors by saying:
1459    
1460        CM.autoload "$smlnj/
1461        #set CM.Control.implicit_anchors false;
1462    
1463    This causes CM to reject implicitly anchored paths.  This is (for the
1464    time being) less permissive than the "final" version where there will
1465    be no more such implicit anchors and relative paths will be just that:
1466    relative.
1467    
1468    The next step (version after next version?) will be to make the
1469    default for CM.Control.implicit_anchors false.  After the dust has
1470    settled, I can then produce the "final" version of this...
1471    
1472    Note: Since bootstrapping is a bit tricky, I provided new boot files.
1473    
1474    ----------------------------------------------------------------------
1475    Name: Matthias Blume
1476    Date: 2000/05/11 16:30:00 JST
1477    Tag: blume-20000511-sources
1478    Description:
1479    
1480    The main change is that I added function CM.sources as a generalized
1481    version of the earlier CM.makedepend.  This entails the following
1482    additional changes:
1483    
1484      - CM.makedepend has been dropped.
1485    
1486      - CM manual has been updated.
1487    
1488      - TOOLS signature and API have been changed.
1489    
1490    ----------------------------------------------------------------------
1491    Name: Allen Leung
1492    Date: 2000/05/10 21:17 EDT
1493    Tag: leunga-20000510-moby-c--ssa
1494    Description:
1495    
1496      Various bug fixes and new features for C--, Moby and MLRISC optimizations.
1497    None of these affect SML/NJ.
1498    
1499    1. Register Allocation
1500    
1501        a. A new ra spilling module (ra/ra-spill-with-renaming) is implemented.
1502           This module tries to remove local (i.e. basic block level) redundancies
1503           during spilling.
1504    
1505        b. A new framework for performing region based register allocation.
1506           Not yet entirely functional.
1507    
1508    2. X86
1509    
1510       a. DefUse for POP was missing the stack pointer [found by Lal]
1511       b. Reload for CALL was incorrect in X86Spill [found by John]
1512       c. Various fixes in X86Spill so that it can be used correctly for
1513          the new spilling module.
1514    
1515    3. SSA/IR
1516    
1517       a. New module ir/dj-dataflow.sml implements elimination based
1518          data flow analysis.
1519    
1520    4. MLRiscGen
1521    
1522       a. Fix for gc type annotation
1523    
1524    5. MDGen
1525    
1526       Various fixes for machine description -> ml code translation.  For ssa
1527       only.
1528    
1529    ----------------------------------------------------------------------
1530    Name: Allen Leung
1531    Date: 2000/05/08 22:17 EDT
1532    Tag: leunga-20000508-labexp
1533    Description:
1534    
1535      Fermin has found a few assembly problems with constant expressions
1536      generated in LabelExp.  Mostly, the problems involve extra parentheses,
1537      which choke on dumb assemblers.  This is his fix.
1538    
1539    ----------------------------------------------------------------------
1540    Name: Dave MacQueen
1541    Date: 2000/04/09 14:00 EDT
1542    Tag: dbm-20000502-Version_110_28
1543    Description:
1544    
1545    1. Updated src/compiler/TopLevel/main/version.sml to version 110.28
1546    
1547    2. Updated config/version to 110.28
1548    
1549    3. Updated config/srcarchiveurl
1550    
1551    3. New boot files!
1552       ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.28/
1553    
1554    ----------------------------------------------------------------------
1555    Name: Matthias Blume
1556    Date: 2000/05/01 19:05:00 JST
1557    Tag: blume-20000501-noweb
1558    Description:
1559    
1560    A new noweb tool has been added.  The existing system is entirely
1561    unaffected by this, but some CM users have asked for renewed noweb
1562    support.  Everything is documented in the CM manual.
1563    
1564    New (plugin) libraries:
1565    
1566       noweb-tool.cm
1567       nw-ext.cm
1568    
1569    ----------------------------------------------------------------------
1570    Name: Dave MacQueen
1571    Date: 2000/04/30 12:40PM EDT
1572    Tag: dbm-20000430-bug_fixes
1573    Description:
1574    
1575    1. Fix for bug 1498
1576       smlnj/src/system/Basis/Implementation/Unsafe/object.sig
1577       smlnj/src/system/Basis/Implementation/Unsafe/object.sml
1578         added toRealArray function
1579       smlnj/src/compiler/MiscUtil/print/ppobj.sml
1580         added check for tag Obj.RealArray to array printing case in ppObj
1581    
1582    2. Fix for bug 1510
1583       smlnj/src/compiler/Semant/types/typesutil.sml
1584         fixed definition of dummyargs (used by equalTycon) so that
1585         dummy args are distinct types
1586    
1587    ----------------------------------------------------------------------
1588    Name: Matthias Blume
1589    Date: 2000/04/30 01:00:00 JST
1590    Tag: blume-20000430-versions
1591    Description:
1592    
1593    1. CM version numbering added.  This is an implementation of Lal's
1594       proposal for adding version numbers and version checking to .cm
1595       files.  Lal said that his proposal was just that -- a proposal.
1596       For the time being I went ahead and implemented it so that people
1597       can comment on it.  Everything is completely backward-compatible
1598       (except for the stable library format, i.e., new bootfiles!).
1599    
1600       As usual, see the CM manual for details.
1601    
1602    2. An alternative syntax for anchored paths has been implemented.
1603       Dave has recently voiced the same concerns that I had when I did
1604       this, so there should be some support.  My take is that eventually
1605       I will let support for the current syntax (where anchors are
1606       "implicit") fade out in favor of the new, explicit syntax.
1607       In order to be backward-compatible, both old and new syntax are
1608       currently supported.
1609    
1610       Again, see the CM manual for details.
1611    
1612    3. Parallel make is trying to be slightly smarter:  When the master
1613       process finds a "bottleneck", i.e., when there is only one
1614       compilation unit that can be compiled and everybody else is
1615       waiting on it, then it will simply compile it directly instead
1616       of clumsily telling one of the slaves to do it.
1617    
1618    4. Support for "unsharing" added.  This is necessary in order to be
1619       able to have two different versions of the same library running
1620       at the same time (e.g., for trying out a new MLRISC while still
1621       having the old MLRISC linked into the current compiler, etc.)
1622       See the CM manual.
1623    
1624    5. Simple "makedepend" functionality added for generating Makefile
1625       dependency information.  (This is rather crude at the moment.
1626       Expect some changes here in the future.)
1627    
1628    6. ".fun" added as a recognized suffix for ML files. Also documented
1629       explicitly in the manual that the fallback behavior (unknown suffix
1630       -> ML file) is not an official feature!
1631    
1632    7. Small changes to the pickler for stable libraries.
1633    
1634    8. Several internal changes to CM (for cleanup/improvement).
1635    
1636    
1637    !!!! NEW BINFILES !!!!
1638    
1639    ----------------------------------------------------------------------
1640    Name: Matthias Blume
1641    Date: 2000/04/28 17:30:00 JST
1642    Tag: blume-20000428-pathconfig
1643    Description:
1644    
1645    1. I changed config/install.sh to remove duplicate entries from the
1646       lib/pathconfig file at the end.  Moreover, the final version of
1647       lib/pathconfig is sorted alphabetically.  The same (sorting) is done
1648       in src/system/installml.
1649    
1650    2. The config/install.sh script now consistently uses relative
1651       pathnames in lib/pathconfig whenever the anchor is in the lib
1652       directory.  (So far this was true for the libraries that come
1653       pre-compiled and bundled as part of the bootfiles but not for
1654       libraries that are compiled by the script itself.)
1655    
1656    ----------------------------------------------------------------------
1657    Name: Matthias Blume
1658    Date: 2000/04/26 13:10:00 JST
1659    Tag: blume-20000426-fun_suffix
1660    Description:
1661    
1662    Added ".fun" as a recognized file name suffix (for ML code).
1663    
1664    ----------------------------------------------------------------------
1665    Name: Allen Leung
1666    Date: 2000/04/25 17:00:00 EST
1667    Tag: leunga-20000425-alpha-ra
1668    Description:
1669    
1670    1. Alpha
1671    
1672        PSEUDOARITH was missing in AlphaRewrite.  This causes an endless loop
1673    in C--.
1674    
1675    2. RA
1676    
1677       Added a flag "ra-dump-size" to print out the size of the flowgraph
1678       and the interference graph.
1679    
1680    ----------------------------------------------------------------------
1681    Name: Dave MacQueen
1682    Date: 2000/04/25/
1683    Tag: dbm-20000425-mlyacc_doc_examples
1684    Description:
1685      Updated mlyacc.tex sections 5 and 7 for SML '97 and CM.
1686      Updated all three examples in src/ml-yacc/examples to run
1687      under 110.* using CM.make.
1688    
1689    ----------------------------------------------------------------------
1690    Name: Allen Leung
1691    Date: 2000/04/20 23:04:00 EST
1692    Tag: leunga-20000420-ssa-c---stuff
1693    Description:
1694    
1695      This update synchronizes my repository with Yale's.  Most of these
1696    changes, however, do not affect SML/NJ at all (the RA is an exception).
1697    
1698    1. Register Allocator
1699    
1700       a. An improvement in the interference graph construction:
1701          Given a copy
1702    
1703                s <- t
1704    
1705          no interference edge between s and t is added for this definition of s.
1706    
1707       b. I've added two new spill heuristic modules that Fermin and I developed
1708          (in the new library RA.cm). These are unused in SML/NJ but maybe
1709          useful for others (Moby?)
1710    
1711    2. X86
1712    
1713       a. Various fixes in the backend provided by Fermin [C--] and Lal.
1714    
1715    3. Alpha
1716    
1717       a. Added the BSR instruction and code generation that goes with it [C--]
1718       b. Other fixes too numerous to recount provided by Fermin [C--]
1719    
1720    4. Regmaps
1721    
1722       a. The regmaps are not initialized with the identity physical bindings
1723          at creation time.  This is unneeded.
1724    
1725    5. MLRISC Optimizations
1726    
1727       a. The DJ-Graph module can now compute the iterated dominance frontiers
1728          intersects with liveness incrementally in linear time! Woohoo!
1729          This is now used in my new SSA construction algorithm.
1730    
1731       b. THe branch reorganization module is now smarter about linear chains of
1732          basic blocks.
1733    
1734    
1735    ----------------------------------------------------------------------
1736    Name: Matthias Blume
1737    Date: 2000/04/12 13:52:00 JST
1738    Tag: blume_main_v110p27_1
1739    Description:
1740    
1741    Changed install.sh script to handle archive files without version number
1742    and to use "boot.<arch>-<os>" instead of "sml.boot.<arch>-<os>" for the
1743    name of the boot file archive.
1744    
1745    ----------------------------------------------------------------------
1746    Name: Dave MacQueen
1747    Date: 2000/04/09 14:00 EDT
1748    Tag: dbm-20000410-Version_110_27
1749    Description:
1750    
1751    1. Updated src/compiler/TopLevel/main/version.sml to version 110.27
1752    
1753    2. Updated src/config/version to 110.27
1754    
1755    3. New boot files!
1756    
1757    ----------------------------------------------------------------------
1758    Name: Allen Leung
1759    Date: 2000/04/09 19:09:00 EST
1760    Tag: leunga-20000409-misc
1761    Description:
1762    
1763    1.  Yet another fix for x86 assembly for idivl, imull, mull and friends.
1764    
1765    2.  Miscellaneous improvements to MLRISC (unused in sml/nj)
1766    
1767    ----------------------------------------------------------------------
1768    Name: Stefan
1769    Date: 2000/04/07 10:00:00 EDT
1770    Tag: monnier-20000406-branch-handling
1771    Description:
1772    
1773    Improved handling of branches (mostly those generated from
1774    polymorphic equality), removed switchoff and changed the
1775    default optimization settings (more cpsopt and less flintopt).
1776    
1777    ----------------------------------------------------------------------
1778    Name: Allen Leung
1779    Date: 2000/04/06 01:30:00 EST
1780    Tag: leunga-20000406-peephole-x86-SSA-2
1781    Description:
1782    
1783       Forgot a few files.
1784    
1785    ----------------------------------------------------------------------
1786    Name: Allen Leung
1787    Date: 2000/04/06 00:36:00 EST
1788    Tag: leunga-20000406-peephole-x86-SSA
1789    Description:
1790    
1791    1.  New Peephole code
1792    
1793    2.  Minor improvement to X86 instruction selection
1794    
1795    3.  Various fixes to SSA and machine description -> code translator
1796    
1797    ----------------------------------------------------------------------
1798    Name: Matthias Blume
1799    Date: 2000/04/05 12:30:00 JST
1800    Tag: blume_main_v110p26p2_3
1801    Description:
1802    
1803    This update just merges three minor cosmetic updates to CM's sources
1804    to get ready for the 110.27 code freeze on Friday.  No functionality
1805    has changed.
1806    
1807    ----------------------------------------------------------------------
1808    Name: Allen Leung
1809    Date: 2000/04/04 19:39:00 EST
1810    Tag: leunga-20000404-x86-asm
1811    Description:
1812    
1813    1.  Fixed a problem in X86 assembly.
1814    
1815        Things like
1816    
1817           jmp %eax
1818           jmp (%eax)
1819    
1820        should be output as
1821    
1822           jmp *%eax
1823           jmp *(%eax)
1824    
1825    2.  Assembly output
1826    
1827          Added a new flag
1828    
1829              "asm-indent-copies" (default to false)
1830    
1831          When this flag is on, parallel copies will be indented an extra level.
1832    
1833    ----------------------------------------------------------------------
1834    Name: Allen Leung
1835    Date: 2000/04/04 03:18:00 EST
1836    Tag: leunga-20000404-C--Moby
1837    Description:
1838    
1839        All of these fixes are related to C--, Moby, and my own optimization
1840        stuff; so they shouldn't affect SML/NJ.
1841    
1842    1.  X86
1843    
1844        Various fixes related floating point, and extensions.
1845    
1846    2.  Alpha
1847    
1848        Some extra patterns related to loads with signed/zero extension
1849        provided by Fermin.
1850    
1851    3.  Assembly
1852    
1853        When generating assembly, resolve the value of client defined constants,
1854        instead of generating symbolic values.  This is controlled by the
1855        new flag "asm-resolve-constants", which is default to true.
1856    
1857    4.  Machine Descriptions
1858    
1859        a. The precedence parser was slightly broken when parsing infixr symbols.
1860        b. The type generalizing code had the bound variables reversed, resulting
1861           in a problem during arity raising.
1862        c. Various fixes in machine descriptions.
1863    
1864    ----------------------------------------------------------------------
1865    Name: Matthias Blume
1866    Date: 2000/04/03 16:05:00 JST
1867    Tag: blume_main_v110p26p2_2
1868    Description:
1869    
1870    I eliminated coreEnv from compInfo.  Access to the "Core" structure is
1871    now done via the ordinary static environment that is context to each
1872    compilation unit.
1873    
1874    To this end, I arranged that instead of "structure Core" as "structure
1875    _Core" is bound in the pervasive environment.  Core access is done via
1876    _Core (which can never be accidentally rebound because _Core is not a
1877    legal surface-syntax symbol).
1878    
1879    The current solution is much cleaner because the core environment is
1880    now simply part of the pervasive environment which is part of every
1881    compilation unit's context anyway.  In particular, this eliminates all
1882    special-case handling that was necessary until now in order to deal
1883    with dynamic and symbolic parts of the core environment.
1884    
1885    Remaining hackery (to bind the "magic" symbol _Core) is localized in the
1886    compilation manager's bootstrap compiler (actually: in the "init group"
1887    handling).  See the comments in src/system/smlnj/init/init.cmi for
1888    more details.
1889    
1890    I also tried to track down all mentions of "Core" (as string argument
1891    to Symbol.strSymbol) in the compiler and replaced them with a
1892    reference to the new CoreSym.coreSym.  Seems cleaner since the actual
1893    name appears in one place only.
1894    
1895    Binfile and bootfile format have not changed, but the switchover from
1896    the old "init.cmi" to the new one is a bit tricky, so I supplied new
1897    bootfiles anyway.
1898    
1899    ----------------------------------------------------------------------
1900    Name: Allen Leung
1901    Date: 2000/04/02 21:17:00 EST
1902    Tag: leunga-20000402-mltree
1903    Description:
1904    
1905       1. Renamed the constructor CALL in MLTREE by popular demand.
1906       2. Added a bunch of files from my repository.  These are currently
1907          used by other non-SMLNJ backends.
1908    
1909    ----------------------------------------------------------------------
1910    Name: Allen Leung
1911    Date: 2000/03/31 21:15:00 EST
1912    Tag: leunga-20000331-aliasing
1913    Description:
1914    
1915    This update contains a rewritten (and hopefully more correct) module
1916    for extracting aliasing information from CPS.
1917    
1918       To turn on this feature:
1919    
1920            Compiler.Control.CG.memDisambiguate := true
1921    
1922       To pretty print the region information with assembly
1923    
1924           Compiler.Control.MLRISC.getFlag "asm-show-region" := true;
1925    
1926       To control how many levels of aliasing information are printed, use:
1927    
1928           Compiler.Control.MLRISC.getInt "points-to-show-level" := n
1929    
1930       The default of n is 3.
1931    
1932    ----------------------------------------------------------------------
1933    Name: David MacQueen
1934    Date: 2000/03/31 11:15:00 EST
1935    Tag: dbm-20000331-runtime_fix
1936    Description:
1937    
1938    This update contains:
1939    
1940    1. runtime/c-lib/c-libraries.c
1941       includes added in revision 1.2 caused compilation errors on hppa-hpux
1942    
1943    2. fix for bug 1556
1944       system/Basis/Implementation/NJ/internal-signals.sml
1945    
1946    ----------------------------------------------------------------------
1947    Name: Matthias Blume
1948    Date: 2000/03/31 18:00:00 JST
1949    Tag: blume_main_v110p26p2_1
1950    Description:
1951    
1952    This update contains:
1953    
1954    1. A small change to CM's handling of stable libraries:
1955       CM now maintains one "global" modmap that is used for all stable
1956       libraries.  The use of such a global modmap maximizes sharing and
1957       minimizes the need for re-traversing parts of environments during
1958       modmap construction.  (However, this has minor impact since modmap
1959       construction seems to account for just one percent or less of total
1960       compile time.)
1961    
1962    2. I added a "genmap" phase to the statistics.  This is where I got the
1963       "one percent" number (see above).
1964    
1965    3. CM's new tool parameter mechanism just became _even_ better. :)
1966       - The parser understands named parameters and recursive options.
1967       - The "make" and "shell" tools use these new features.
1968         (This makes it a lot easier to cascade these tools.)
1969       - There is a small syntax change: named parameters use a
1970    
1971           <name> : ( <option> ... )            or
1972           <name> : <string>
1973    
1974         syntax.  Previously, named parameters were implemented in an
1975         ad-hoc fashion by each tool individually (by parsing strings)
1976         and had the form
1977    
1978           <name>=<string>
1979    
1980       See the CM manual for a full description of these issues.
1981    
1982    ----------------------------------------------------------------------
1983    Name: Matthias Blume
1984    Date: 2000/03/30 18:00:00 JST
1985    Tag: blume_main_v110p26p2_0
1986    Description:
1987    
1988    !!!!! WARNING !!!!!!
1989    !!  New binfiles  !!
1990    !!!!!!!!!!!!!!!!!!!!
1991    
1992    This update contains:
1993    
1994    1. Moderate changes to CM:
1995    
1996       - Changes to CM's tools mechanism.  In particular, it is now possible
1997       to have tools that accept additional "command line" parameters
1998       (specified in the .cm file at each instance where the tool's class is
1999       used).
2000    
2001       This was done to accommodate the new "make" and "shell" tools which
2002       facilitate fairly seamless hookup to portions of code managed using
2003       Makefiles or Shell scripts.
2004    
2005       There are no classes "shared" or "private" anymore.  Instead, the
2006       sharing annotation is now a parameter to the "sml" class.
2007    
2008       There is a bit of generic machinery for implementing one's own
2009       tools that accept command-line parameters.  However, I am not yet fully
2010       satisfied with that part, so expect changes here in the future.
2011    
2012       All existing tools are described in the CM manual.
2013    
2014       - Slightly better error handling.  (CM now suppresses many followup
2015       error messages that tended to be more annoying than helpful.)
2016    
2017    2. Major changes to the compiler's static environment data structures.
2018    
2019       - no CMStaticEnv anymore.
2020            - no CMEnv, no "BareEnvironment" (actually, _only_ BareEnvironment,
2021              but it is called Environment), no conversions between different
2022              kinds of static environments
2023    
2024       - There is still a notion of a "modmap", but such modmaps are generated
2025         on demand at the time when they are needed.  This sounds slow, but I
2026         sped up the code that generates modmaps enough for this not to lead to
2027         a slowdown of the compiler (at least I didn't detect any).
2028    
2029       - To facilitate rapid modmap generation, static environments now
2030         contain an (optional) "modtree" structure.  Modtree annotations are
2031         constructed by the unpickler during unpickling.  (This means that
2032         the elaborator does not have to worry about modtrees at all.)
2033         Modtrees have the advantage that they are compositional in the same
2034         way as the environment data structure itself is compositional.
2035         As a result, modtrees never hang on to parts of an environment that
2036         has already been rendered "stale" by filtering or rebinding.
2037    
2038       - I went through many, many trials and errors before arriving at the
2039         current solution.  (The initial idea of "linkpaths" did not work.)
2040         But the result of all this is that I have touched a lot of files that
2041         depend on the "modules" and "types" data structures (most of the
2042         elaborator). There were a lot of changes during my "linkpath" trials
2043         that could have been reverted to their original state but weren't.
2044         Please, don't be too harsh on me for messing with this code a bit more
2045         than what was strictly necessary...  (I _did_ resist the tempation
2046         of doing any "global reformatting" to avoid an untimely death at
2047         Dave's hands. :)
2048    
2049       - One positive aspect of the previous point:  At least I made sure that
2050         all files that I touched now compile without warnings (other than
2051         "polyEqual").
2052    
2053       - compiler now tends to run "leaner" (i.e., ties up less memory in
2054         redundant modmaps)
2055    
2056    ----------------------------------------------------------------------
2057    Name: Allen Leung
2058    Date: 2000/03/29 18:00:00
2059    Tag: leunga-20000327-mlriscGen_hppa_alpha_x86
2060    Boot files (optional): ftp://react-ilp.cs.nyu.edu/leunga/110.26.1-sml.boot.x86-unix-20000330.tar.gz
2061    Description:
2062    
2063       This update contains *MAJOR* changes to the way code is generated from CPS
2064    in the module mlriscGen, and in various backend modules.
2065    
2066    CHANGES
2067    =======
2068    
2069    1. MLRiscGen: forward propagation fix.
2070    
2071       There was a bug in forward propagation introduced at about the same time
2072       as the MLRISC x86 backend, which prohibits coalescing to be
2073       performed effectively in loops.
2074    
2075       Effect: speed up of loops in RISC architectures.
2076               By itself, this actually slowed down certain benchmarks on the x86.
2077    
2078    2. MLRiscGen:  forward propagating addresses from consing.
2079    
2080       I've changed the way consing code is generated.  Basically I separated
2081       out the initialization part:
2082    
2083            store tag,   offset(allocptr)
2084            store elem1, offset+4(allocptr)
2085            store elem2, offset+8(allocptr)
2086            ...
2087            store elemn, offset+4n(allocptr)
2088    
2089       and the address computation part:
2090    
2091            celladdr <- offset+4+alloctpr
2092    
2093       and move the address computation part
2094    
2095       Effect:  register pressure is generally lower as a result.  This
2096                makes compilation of certain expressions much faster, such as
2097                long lists with non-trivial elements.
2098    
2099                 [(0,0), (0,0), .... (0,0)]
2100    
2101    3. MLRiscGen: base pointer elimination.
2102    
2103        As part of the linkage mechanism, we generate the sequence:
2104    
2105         L:  ...  <- start of the code fragment
2106    
2107         L1:
2108             base pointer <- linkreg - L1 + L
2109    
2110         The base pointer was then used for computing relocatable addresses
2111       in the code fragment.  Frequently (such as in lots of continuations)
2112       this is not needed.  We now eliminate this sequence whenever possible.
2113    
2114         For compile time efficiency, I'm using a very stupid local heuristic.
2115       But in general, this should be done as a control flow analysis.
2116    
2117       Effect:  Smaller code size.  Speed up of most programs.
2118    
2119    4. Hppa back end
2120    
2121         Long jumps in span dependence resolution used to depend on the existence
2122      of the base pointer.
2123    
2124         A jump to a long label L was expanded into the following sequence:
2125    
2126          LDIL %hi(L-8192), %r29
2127          LDO  %lo(L-8192)(%r29), %r29
2128          ADD  %r29, baseptr, %r29
2129          BV,n %r0(%r29)
2130    
2131         In the presence of change (3) above, this will not work.  I've changed
2132       it so that the following sequence of instructions are generated, which
2133       doesn't mention the base pointer at all:
2134    
2135             BL,n  L', %r29           /* branch and link, L' + 4 -> %r29 */
2136        L':  ADDIL L-(L'+4), %r29     /* Compute address of L */
2137             BV,n  %r0(%r29)          /* Jump */
2138    
2139    5. Alpha back end
2140    
2141          New alpha instructions LDB/LDW have been added, as per Fermin's
2142       suggestions.   This is unrelated to all other changes.
2143    
2144    6. X86 back end
2145    
2146         I've changed andl to testl in the floating point test sequence
2147         whenever appropriate.  The Intel optimization guide states that
2148         testl is preferable to andl.
2149    
2150    7. RA (x86 only)
2151    
2152         I've improved the spill propagation algorithm, using an approximation
2153       of maximal weighted independent sets.   This seems to be necessary to
2154       alleviate the negative effect in light of the slow down in (1).
2155    
2156         I'll write down the algorithm one of these days.
2157    
2158    8. MLRiscGen: frequencies
2159    
2160         I've added an annotation that states that all call gc blocks have zero
2161       execution frequencies.  This improves register allocation on the x86.
2162    
2163    BENCHMARKS
2164    ==========
2165    
2166       I've only perform the comparison on 110.25.
2167    
2168       The platforms are:
2169    
2170        HPPA  A four processor HP machine (E9000) with 5G of memory.
2171        X86   A 300Hhz Pentium II with 128M of memory, and
2172        SPARC An Ultra sparc 2 with 512M of memory.
2173    
2174       I used the following parameters for the SML benchmarks:
2175    
2176                 @SMLalloc
2177         HPPA    256k
2178         SPARC   512k
2179         X86     256k
2180    
2181    COMPILATION TIME
2182    ----------------
2183       Here are the numbers comparing the compilation times of the compilers.
2184       I've only compared 110.25 compiling the new sources versus
2185       a fixpoint version of the new compiler compiling the same.
2186    
2187                     110.25                                  New
2188               Total  Time in RA  Spill+Reload   Total  Time In RA Spill+Reload
2189         HPPA   627s    116s        2684+3584     599s    95s       1003+1879
2190         SPARC  892s    173s        2891+3870     708s    116s      1004+1880
2191         X86    999s    315s       94006+130691   987s    296s    108877+141957
2192    
2193                   110.25         New
2194                Code Size      Code Size
2195         HPPA   8596736         8561421
2196         SPARC  8974299         8785143
2197         X86    9029180         8716783
2198    
2199       So in summary, things are at least as good as before.   Dramatic
2200       reduction in compilation is obtained on the Sparc; I can't explain it,
2201       but it is reproducible.  Perhaps someone should try to reproduce this
2202       on their own machines.
2203    
2204    SML BENCHMARKS
2205    --------------
2206    
2207        On the average, all benchmarks perform at least as well as before.
2208    
2209          HPPA         Compilation Time     Spill+Reload      Run Time
2210                     110.25  New            110.25    New   110.25  New
2211    
2212          barnesHut  3.158  3.015  4.75%    1+1       0+0   2.980  2.922   2.00%
2213              boyer  6.152  5.708  7.77%    0+0       0+0   0.218  0.213   2.34%
2214       count-graphs  1.168  1.120  4.32%    0+0       0+0  22.705 23.073  -1.60%
2215                fft  0.877  0.792 10.74%    1+3       1+3   0.602  0.587   2.56%
2216        knuthBendix  3.180  2.857 11.32%    0+0       0+0   0.675  0.662   2.02%
2217             lexgen  6.190  5.290 17.01%    0+0       0+0   0.913  0.788  15.86%
2218               life  0.803  0.703 14.22%   25+25      0+0   0.153  0.140   9.52%
2219              logic  2.048  2.007  2.08%    6+6       1+1   4.133  4.008   3.12%
2220         mandelbrot  0.077  0.080 -4.17%    0+0       0+0   0.765  0.712   7.49%
2221             mlyacc 22.932 20.937  9.53%  154+181    32+57  0.468  0.430   8.91%
2222            nucleic  5.183  5.060  2.44%    2+2       0+0   0.125  0.120   4.17%
2223      ratio-regions  3.357  3.142  6.84%    0+0       0+0  116.225 113.173 2.70%
2224                ray  1.283  1.290 -0.52%    0+0       0+0   2.887  2.855   1.11%
2225             simple  6.307  6.032  4.56%   28+30      5+7   3.705  3.658   1.28%
2226                tsp  0.888  0.862  3.09%    0+0       0+0   7.040  6.893   2.13%
2227               vliw 24.378 23.455  3.94%  106+127    25+45  2.758  2.707   1.91%
2228      --------------------------------------------------------------------------
2229       Average                     6.12%                                   4.09%
2230    
2231          SPARC        Compilation Time     Spill+Reload      Run Time
2232                     110.25  New            110.25    New   110.25  New
2233    
2234          barnesHut  3.778  3.592  5.20%    2+2       0+0   3.648  3.453    5.65%
2235              boyer  6.632  6.110  8.54%    0+0       0+0   0.258  0.242    6.90%
2236       count-graphs  1.435  1.325  8.30%    0+0       0+0  33.672 34.737   -3.07%
2237                fft  0.980  0.940  4.26%    3+9       2+6   0.838  0.827    1.41%
2238        knuthBendix  3.590  3.138 14.39%    0+0       0+0   0.962  0.967   -0.52%
2239             lexgen  6.593  6.072  8.59%    1+1       0+0   1.077  1.078   -0.15%
2240               life  0.972  0.868 11.90%   26+26      0+0   0.143  0.140    2.38%
2241              logic  2.525  2.387  5.80%    7+7       1+1   5.625  5.158    9.05%
2242         mandelbrot  0.090  0.093 -3.57%    0+0       0+0   0.855  0.728   17.39%
2243             mlyacc 26.732 23.827 12.19%  162+189    32+57  0.550  0.560   -1.79%
2244            nucleic  6.233  6.197  0.59%    3+3       0+0   0.163  0.173   -5.77%
2245      ratio-regions  3.780  3.507  7.79%    0+0       0+0 133.993 131.035   2.26%
2246                ray  1.595  1.550  2.90%    1+1       0+0   3.440  3.418    0.63%
2247             simple  6.972  6.487  7.48%   29+32      5+7   3.523  3.525   -0.05%
2248                tsp  1.115  1.063  4.86%    0+0       0+0   7.393  7.265    1.77%
2249               vliw 27.765 24.818 11.87%  110+135    25+45  2.265  2.135    6.09%
2250      ----------------------------------------------------------------------------
2251       Average                     6.94%                                    2.64%
2252    
2253          X86          Compilation Time     Spill+Reload      Run Time
2254                     110.25  New            110.25    New   110.25  New
2255    
2256          barnesHut  5.530  5.420  2.03%  593+893   597+915   3.532  3.440   2.66%
2257              boyer  8.768  7.747 13.19%  493+199   301+289   0.327  0.297  10.11%
2258       count-graphs  2.040  2.010  1.49%  298+394   315+457  26.578 28.660  -7.26%
2259                fft  1.327  1.302  1.92%  112+209   115+210   1.055  0.962   9.71%
2260        knuthBendix  5.218  5.475 -4.69%  451+598   510+650   0.928  0.932  -0.36%
2261             lexgen  9.970  9.623  3.60% 1014+841  1157+885   0.947  0.928   1.97%
2262               life  1.183  1.183  0.00%  162+182   145+148   0.127  0.103  22.58%
2263              logic  3.285  3.512 -6.45%  514+684   591+836   5.682  5.577   1.88%
2264         mandelbrot  0.147  0.143  2.33%   38+41     33+54    0.703  0.690   1.93%
2265             mlyacc 35.457 32.763  8.22% 3496+4564 3611+4860  0.552  0.550   0.30%
2266            nucleic  7.100  6.888  3.07%  239+168   201+158   0.175  0.173   0.96%
2267      ratio-regions  6.388  6.843 -6.65% 1182+257   981+300  120.142 120.345 -0.17%
2268                ray  2.332  2.338 -0.29%  346+398   402+494   3.593  3.540   1.51%
2269             simple  9.912  9.903  0.08% 1475+941  1579+1168  3.057  3.178  -3.83%
2270                tsp  1.623  1.532  5.98%  266+200   250+211   8.045  7.878   2.12%
2271               vliw 33.947 35.470 -4.29% 2629+2774 2877+3171  2.072  1.890   9.61%
2272      ----------------------------------------------------------------------------
2273       Average                     1.22%                                     3.36%
2274    
2275    ----------------------------------------------------------------------
2276    Name: Allen Leung
2277    Date: 2000/03/23 16:25:00
2278    Tag: leunga-20000323-fix_x86_alpha
2279    Description:
2280    
2281    1. X86 fixes/changes
2282    
2283       a.  The old code generated for SETcc was completely wrong.
2284           The Intel optimization guide is VERY misleading.
2285    
2286    2. ALPHA fixes/changes
2287    
2288       a.  Added the instructions LDBU, LDWU, STB, STW as per Fermin's suggestion.
2289       b.  Added a new mode byteWordLoadStores to the functor parameter to Alpha()
2290       c.  Added reassociation code for address computation.
2291    
2292    ----------------------------------------------------------------------
2293    Name: Allen Leung
2294    Date: 2000/03/22 01:23:00
2295    Tag: leunga-20000322-fix_x86_hppa_ra
2296    Description:
2297    
2298    1. X86 fixes/changes
2299    
2300       a.  x86Rewrite bug with MUL3 (found by Lal)
2301       b.  Added the instructions FSTS, FSTL
2302    
2303    2. PA-RISC fixes/changes
2304    
2305       a.  B label should not be a delay slot candidate!  Why did this work?
2306       b.  ADDT(32, REG(32, r), LI n) now generates one instruction instead of two,
2307           as it should be.
2308       c.  The assembly syntax for fstds and fstdd was wrong.
2309       d.  Added the composite instruction COMICLR/LDO, which is the immediate
2310           operand variant of COMCLR/LDO.
2311    
2312    3. Generic MLRISC
2313    
2314       a.  shuffle.sml rewritten to be slightly more efficient
2315       b.  DIV bug in mltree-simplify fixed (found by Fermin)
2316    
2317    4. Register Allocator
2318    
2319       a.  I now release the interference graph earlier during spilling.
2320           May improve memory usage.
2321    
2322    ----------------------------------------------------------------------
2323    Name: Matthias Blume
2324    Date: 2000/03/14 14:15:32
2325    Tag: blume_main_v110p26p1_2
2326    Description:
2327    
2328    1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an
2329    additional argument called "template" which is an optional string that
2330    specifies the layout of the tool command line.  See the CM manual for
2331    explanation.
2332    
2333    2. A special-purpose tool can be "registered" by simply dropping the
2334    corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same
2335    directory where the .cm file lives that uses this tool.  (The
2336    behavior/misfeature until now was to look for the tool description
2337    files in the current working directory.)  As before, tool description
2338    files could also be anchored -- in which case they can live anywhere
2339    they like.  Following the recent e-mail discussion, this change should
2340    make it easier to have special-purpose tools that are shipped together
2341    with the sources of the program that uses them.
2342    
2343    ----------------------------------------------------------------------
2344    Name: Matthias Blume
2345    Date: 2000/03/10 07:48:34
2346    Tag: blume_main_v110p26p1_1
2347    Description:
2348    
2349    I added a re-written version of Dave's fixpt script to src/system.
2350    Changes relative to the original version:
2351      - sh-ified (not everybody has ksh)
2352      - automatically figures out which architecture it runs on
2353      - uses ./makeml a bit more cleverly
2354      - never invokes ./installml (and, thus, does not clobber your
2355        good and working installation of sml in case something goes wrong)
2356      - accepts max iteration count using option "-iter <n>"
2357      - accepts a "base" name using option "-base <base>"
2358    
2359    It does not build any extraneous heap images but directly rebuilds
2360    bin- and boot-hierarchies using makeml's "-rebuild" switch. Finally,
2361    it can incorporate existing bin- and boot- hierarchies.  For example,
2362    suppose the base is set to "sml" (which is the default).  Then it
2363    successively builds
2364    
2365            sml.bin.<arch>-unix and sml.boot.<arch>-unix
2366    then    sml1.bin.<arch>-unix and sml1.boot.<arch>-unix
2367    then    sml2.bin.<arch>-unix and sml2.boot.<arch>-unix
2368    ...
2369    then    sml<n>.bin.<arch>-unix and sml<n>.boot.<arch>-unix
2370    
2371    and so on.  If any of these already exist, it will just use what's
2372    there.  In particular, many people will have the initial set of bin
2373    and boot files around, so this saves time for at least one full
2374    rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for
2375    <k>=1,2,... is normally not a good idea when invoking fixpt.  However,
2376    they might be the result of an earlier partial run of fixpt (which
2377    perhaps got accidentally killed).  In this case, fixpt will quickly
2378    move through what exists before continuing where it left off earlier,
2379    and, thus, saves a lot of time.
2380    
2381    ----------------------------------------------------------------------
2382    Name: Allen Leung
2383    Date: 00/03/10 02:20:00
2384    Tag: leunga-20000310-fix_x86_asm_ra
2385    Description:
2386    
2387    More assembly output problems involving the indexed addressing mode
2388    on the x86 have been found and corrected. Thanks to Fermin Reig for the
2389    fix.
2390    
2391    The interface and implementation of the register allocator have been changed
2392    slightly to accommodate the possibility to skip the register allocation
2393    phases completely and go directly to memory allocation.  This is needed
2394    for C-- use.
2395    
2396    ----------------------------------------------------------------------
2397    Name: Matthias Blume
2398    Date: 00/03/09 10:23:53
2399    Tag: blume_main_v110p26p1_0
2400    Description:
2401    
2402    * Complete re-organization of library names.  Many libraries have been
2403    consolidated so that they share the same path anchor.  For example,
2404    all MLRISC-related libraries are anchored at MLRISC, most libraries that
2405    are SML/NJ-specific are under "smlnj".  Notice that names like
2406    host-cmb.cm or host-compiler.cm no longer exist.  See system/README
2407    for a complete description of the new naming scheme.  Quick reference:
2408    
2409       host-cmb.cm        -> smlnj/cmb.cm
2410       host-compiler.cm   -> smlnj/compiler.cm
2411       full-cm.cm         -> smlnj/cm.cm
2412       <arch>-<os>.cm     -> smlnj/cmb/<arch>-<os>.cm
2413       <arch>-compiler.cm -> smlnj/compiler/<arch>.cm
2414    
2415    * Bug fixes in CM.
2416        - exceptions in user code are being passed through (i.e., reach top level)
2417        - more bugs in paranoia mode fixed
2418        - bug related to checking group owners fixed
2419    
2420    * New install.sh script that automagically fetches archive files:
2421      The new file config/srcarchiveurl must contain the URL of the
2422      (remote) directory that contains bin files (or other source archives).
2423      If install.sh does not find the archive locally, it tries to get
2424      it from that remote directory.
2425      This should simplify installation further:  For machines that have
2426      access to the internet, just fetch <version>-config.tgz, unpack it,
2427      edit config/targets, and go (run config/install.sh).  The script will
2428      fetch everything else that it might need all by itself.
2429    
2430      For CVS users, this mechanism is not relevant for source archives, but
2431      it is convenient for getting new sets of binfiles.
2432    
2433      Archives should be tar files compressed with either gzip, compress, or
2434      bzip2.  The script recognizes .tgz, .tar, tar.gz, tz, .tar.Z, and .tar.bz2.
2435    
2436    ----------------------------------------------------------------------
2437    Name: Matthias Blume
2438  Date: 2000/03/07 04:01:04  Date: 2000/03/07 04:01:04
2439  Tag: blume_main_v110_26_2  Tag: blume_main_v110_26_2
2440  Description:  Description:

Legend:
Removed from v.572  
changed lines
  Added in v.806

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