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

Legend:
Removed from v.583  
changed lines
  Added in v.805

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