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 837, Fri Jun 1 17:27:54 2001 UTC revision 1136, Tue Mar 12 19:44:02 2002 UTC
# Line 8  Line 8 
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  Name:
11  Date:  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    ----------------------------------------------------------------------
15    Name: Lal George
16    Date: 2002/03/12 12 14:42:36 EST
17    Tag: george-20020312-frequency-computation
18    Description:
19    
20    Integrated jump chaining and static block frequency into the
21    compiler. More details and numbers later.
22    
23    ----------------------------------------------------------------------
24    Name: Lal George
25    Date: 2002/03/11 11 22:38:53 EST
26    Tag: george-20020311-jump-chain-elim
27    Description:
28    
29    Tested the jump chain elimination on all architectures (except the
30    hppa).  This is on by default right now and is profitable for the
31    alpha and x86, however, it may not be profitable for the sparc and ppc
32    when compiling the compiler.
33    
34    The gc test will typically jump to a label at the end of the cluster,
35    where there is another jump to an external cluster containing the actual
36    code to invoke gc. This is to allow factoring of common gc invocation
37    sequences. That is to say, we generate:
38    
39            f:
40               testgc
41               ja   L1      % jump if above to L1
42    
43            L1:
44               jmp L2
45    
46    
47    After jump chain elimination the 'ja L1' instructions is converted to
48    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
49    up being implemented in their long form (if L2 is far away) using:
50    
51            jbe     L3      % jump if below or equal to L3
52            jmp     L2
53         L3:
54            ...
55    
56    
57    For large compilation units L2  may be far away.
58    
59    
60    ----------------------------------------------------------------------
61    Name: Matthias Blume
62    Date: 2002/03/11 13:30:00 EST
63    Tag: blume-20020311-mltreeeval
64    Description:
65    
66    A functor parameter was missing.
67    
68    ----------------------------------------------------------------------
69    Name: Allen Leung
70    Date: 2002/03/11 10:30:00 EST
71    Tag: leunga-20020310-runtime-string0
72    Description:
73    
74       The representation of the empty string now points to a
75    legal null terminated C string instead of unit.  It is now possible
76    to convert an ML string into C string with InlineT.CharVector.getData.
77    This compiles into one single machine instruction.
78    
79    ----------------------------------------------------------------------
80    Name: Allen Leung
81    Date: 2002/03/10 23:55:00 EST
82    Tag: leunga-20020310-x86-call
83    Description:
84    
85       Added machine generation for CALL instruction (relative displacement mode)
86    
87    ----------------------------------------------------------------------
88    Name: Matthias Blume
89    Date: 2002/03/08 16:05:00
90    Tag: blume-20020308-entrypoints
91    Description:
92    
93    Version number bumped to 110.39.1.  NEW BOOTFILES!
94    
95    Entrypoints: non-zero offset into a code object where execution should begin.
96    
97    - Added the notion of an entrypoint to CodeObj.
98    - Added reading/writing of entrypoint info to Binfile.
99    - Made runtime system bootloader aware of entrypoints.
100    - Use the address of the label of the first function given to mlriscGen
101      as the entrypoint.  This address is currently always 0, but it will
102      not be 0 once we turn on block placement.
103    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
104      with entry points) from mlriscGen.
105    
106    ----------------------------------------------------------------------
107    Name: Allen Leung
108    Date: 2002/03/07 20:45:00 EST
109    Tag: leunga-20020307-x86-cmov
110    Description:
111    
112       Bug fixes for CMOVcc on x86.
113    
114       1. Added machine code generation for CMOVcc
115       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
116       3. CMOVcc cannot have an immediate operand as argument.
117    
118    ----------------------------------------------------------------------
119    Name: Matthias Blume
120    Date: 2002/03/07 16:15:00 EST
121    Tag: blume-20020307-controls
122    Description:
123    
124    This is a very large but mostly boring patch which makes (almost)
125    every tuneable compiler knob (i.e., pretty much everything under
126    Control.* plus a few other things) configurable via both the command
127    line and environment variables in the style CM did its configuration
128    until now.
129    
130    Try starting sml with '-h' (or, if you are brave, '-H')
131    
132    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
133    implements the underlying generic mechanism.
134    
135    The interface to some of the existing such facilities has changed somewhat.
136    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
137    (The getFoo interface is still there for backward-compatibility, but its
138    use is deprecated.)
139    
140    The ml-build script passes -Cxxx=yyy command-line arguments through so
141    that one can now twiddle the compiler settings when using this "batch"
142    compiler.
143    
144    TODO items:
145    
146    We should go through and throw out all controls that are no longer
147    connected to anything.  Moreover, we should go through and provide
148    meaningful (and correct!) documentation strings for those controls
149    that still are connected.
150    
151    Currently, multiple calls to Controls.new are accepted (only the first
152    has any effect).  Eventually we should make sure that every control
153    is being made (via Controls.new) exactly once.  Future access can then
154    be done using Controls.acc.
155    
156    Finally, it would probably be a good idea to use the getter-setter
157    interface to controls rather than ref cells.  For the time being, both
158    styles are provided by the Controls module, but getter-setter pairs are
159    better if thread-safety is of any concern because they can be wrapped.
160    
161    *****************************************
162    
163    One bug fix: The function blockPlacement in three of the MLRISC
164    backpatch files used to be hard-wired to one of two possibilities at
165    link time (according to the value of the placementFlag).  But (I
166    think) it should rather sense the flag every time.
167    
168    *****************************************
169    
170    Other assorted changes (by other people who did not supply a HISTORY entry):
171    
172    1. the cross-module inliner now works much better (Monnier)
173    2. representation of weights, frequencies, and probabilities in MLRISC
174       changed in preparation of using those for weighted block placement
175       (Reppy, George)
176    
177    ----------------------------------------------------------------------
178    Name: Lal George
179    Date: 2002/03/07 14:44:24 EST 2002
180    Tag: george-20020307-weighted-block-placement
181    
182    Tested the weighted block placement optimization on all architectures
183    (except the hppa) using AMPL to generate the block and edge frequencies.
184    Changes were required in the machine properties to correctly
185    categorize trap instructions. There is an MLRISC flag
186    "weighted-block-placement" that can be used to enable weighted block
187    placement, but this will be ineffective without block/edge
188    frequencies (coming soon).
189    
190    
191    ----------------------------------------------------------------------
192    Name: Lal George
193    Date: 2002/03/05 17:24:48 EST
194    Tag: george-20020305-linkage-cluster
195    
196    In order to support the block placement optimization, a new cluster
197    is generated as the very first cluster (called the linkage cluster).
198    It contains a single jump to the 'real' entry point for the compilation
199    unit. Block placement has no effect on the linkage cluster itself, but
200    all the other clusters  have full freedom in the manner in which they
201    reorder blocks or functions.
202    
203    On the x86 the typical linkage code that is generated is:
204       ----------------------
205            .align 2
206       L0:
207            addl    $L1-L0, 72(%esp)
208            jmp     L1
209    
210    
211            .align  2
212       L1:
213       ----------------------
214    
215    72(%esp) is the memory location for the stdlink register. This
216    must contain the address of the CPS function being called. In the
217    above example, it contains the address of  L0; before
218    calling L1 (the real entry point for the compilation unit), it
219    must contain the address for L1, and hence
220    
221            addl $L1-L0, 72(%esp)
222    
223    I have tested this on all architectures except the hppa.The increase
224    in code size is of course negligible
225    
226    ----------------------------------------------------------------------
227    Name: Allen Leung
228    Date: 2002/03/03 13:20:00 EST
229    Tag: leunga-20020303-mlrisc-tools
230    
231      Added #[ ... ] expressions to mlrisc tools
232    
233    ----------------------------------------------------------------------
234    Name: Matthias Blume
235    Date: 2002/02/27 12:29:00 EST
236    Tag: blume-20020227-cdebug
237    Description:
238    
239    - made types in structure C and C_Debug to be equal
240    - got rid of code duplication (c-int.sml vs. c-int-debug.sml)
241    - there no longer is a C_Int_Debug (C_Debug is directly derived from C)
242    
243    ----------------------------------------------------------------------
244    Name: Matthias Blume
245    Date: 2002/02/26 12:00:00 EST
246    Tag: blume-20020226-ffi
247    Description:
248    
249    1. Fixed a minor bug in CM's "noweb" tool:
250       If numbering is turned off, then truly don't number (i.e., do not
251       supply the -L option to noweb).  The previous behavior was to supply
252       -L'' -- which caused noweb to use the "default" line numbering scheme.
253       Thanks to Chris Richards for pointing this out (and supplying the fix).
254    
255    2. Once again, I reworked some aspects of the FFI:
256    
257       A. The incomplete/complete type business:
258    
259       - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are
260         gone!
261       - ML types representing an incomplete type are now *equal* to
262         ML types representing their corresponding complete types (just like
263         in C).  This is still safe because ml-nlffigen will not generate
264         RTTI for incomplete types, nor will it generate functions that
265         require access to such RTTI.   But when ML code generated from both
266         incomplete and complete versions of the C type meet, the ML types
267         are trivially interoperable.
268    
269         NOTE:  These changes restore the full generality of the translation
270         (which was previously lost when I eliminated functorization)!
271    
272       B. Enum types:
273    
274       - Structure C now has a type constructor "enum" that is similar to
275         how the "su" constructor works.  However, "enum" is not a phantom
276         type because each "T enum" has values (and is isomorphic to
277         MLRep.Signed.int).
278       - There are generic access operations for enum objects (using
279         MLRep.Signed.int).
280       - ml-nlffigen will generate a structure E_foo for each "enum foo".
281         * The structure contains the definition of type "mlrep" (the ML-side
282         representation type of the enum).  Normally, mlrep is the same
283         as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec",
284         then mlrep will be defined as a datatype -- thus facilitating
285         pattern matching on mlrep values.
286         ("-ec" will be suppressed if there are duplicate values in an
287          enumeration.)
288         * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep
289         will be generated for each C enum constant xxx.
290         * Conversion functions m2i and i2m convert between mlrep and
291         MLRep.Signed.int.  (Without "-ec", these functions are identities.)
292         * Coversion functions c and ml convert between mlrep and "tag enum".
293         * Access functions (get/set) fetch and store mlrep values.
294       - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed
295         enumerations are merged into one single enumeration represented by
296         structure E_'.
297    
298    ----------------------------------------------------------------------
299    Name: Allen Leung
300    Date: 2002/02/25 04:45:00 EST
301    Tag: leunga-20020225-cps-spill
302    
303    This is a new implementation of the CPS spill phase.
304    The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml
305    In case of problems, replace it with the old file spill.sml
306    
307    The current compiler runs into some serious performance problems when
308    constructing a large record.  This can happen when we try to compile a
309    structure with many items.  Even a very simple structure like the following
310    makes the compiler slow down.
311    
312        structure Foo = struct
313           val x_1 = 0w1 : Word32.int
314           val x_2 = 0w2 : Word32.int
315           val x_3 = 0w3 : Word32.int
316           ...
317           val x_N = 0wN : Word32.int
318        end
319    
320    The following table shows the compile time, from N=1000 to N=4000,
321    with the old compiler:
322    
323    N
324    1000   CPS 100 spill                           0.04u  0.00s  0.00g
325           MLRISC ra                               0.06u  0.00s  0.05g
326              (spills = 0 reloads = 0)
327           TOTAL                                   0.63u  0.07s  0.21g
328    
329    1100   CPS 100 spill                           8.25u  0.32s  0.64g
330           MLRISC ra                               5.68u  0.59s  3.93g
331              (spills = 0 reloads = 0)
332           TOTAL                                   14.71u  0.99s  4.81g
333    
334    1500   CPS 100 spill                           58.55u  2.34s  1.74g
335           MLRISC ra                               5.54u  0.65s  3.91g
336              (spills = 543 reloads = 1082)
337           TOTAL                                   65.40u  3.13s  6.00g
338    
339    2000   CPS 100 spill                           126.69u  4.84s  3.08g
340           MLRISC ra                               0.80u  0.10s  0.55g
341              (spills = 42 reloads = 84)
342           TOTAL                                   129.42u  5.10s  4.13g
343    
344    3000   CPS 100 spill                           675.59u  19.03s  11.64g
345           MLRISC ra                               2.69u  0.27s  1.38g
346              (spills = 62 reloads = 124)
347           TOTAL                                   682.48u  19.61s  13.99g
348    
349    4000   CPS 100 spill                           2362.82u  56.28s  43.60g
350           MLRISC ra                               4.96u  0.27s  2.72g
351              (spills = 85 reloads = 170)
352           TOTAL                                   2375.26u  57.21s  48.00g
353    
354    As you can see the old cps spill module suffers from some serious
355    performance problem.  But since I cannot decipher the old code fully,
356    instead of patching the problems up, I'm reimplementing it
357    with a different algorithm.  The new code is more modular,
358    smaller when compiled, and substantially faster
359    (O(n log n) time and O(n) space).  Timing of the new spill module:
360    
361    4000  CPS 100 spill                           0.02u  0.00s  0.00g
362          MLRISC ra                               0.25u  0.02s  0.15g
363             (spills=1 reloads=3)
364          TOTAL                                   7.74u  0.34s  1.62g
365    
366    Implementation details:
367    
368    As far as I can tell, the purpose of the CPS spill module is to make sure the
369    number of live variables at any program point (the bandwidth)
370    does not exceed a certain limit, which is determined by the
371    size of the spill area.
372    
373    When the bandwidth is too large, we decrease the register pressure by
374    packing live variables into spill records.  How we achieve this is
375    completely different than what we did in the old code.
376    
377    First, there is something about the MLRiscGen code generator
378    that we should be aware of:
379    
380    o MLRiscGen performs code motion!
381    
382       In particular, it will move floating point computations and
383       address computations involving only the heap pointer to
384       their use sites (if there is only a single use).
385       What this means is that if we have a CPS record construction
386       statement
387    
388           RECORD(k,vl,w,e)
389    
390       we should never count the new record address w as live if w
391       has only one use (which is often the case).
392    
393       We should do something similar to floating point, but the transformation
394       there is much more complex, so I won't deal with that.
395    
396    Secondly, there are now two new cps primops at our disposal:
397    
398     1. rawrecord of record_kind option
399        This pure operator allocates some uninitialized storage from the heap.
400        There are two forms:
401    
402         rawrecord NONE [INT n]  allocates a tagless record of length n
403         rawrecord (SOME rk) [INT n] allocates a tagged record of length n
404                                     and initializes the tag.
405    
406     2. rawupdate of cty
407          rawupdate cty (v,i,x)
408          Assigns to x to the ith component of record v.
409          The storelist is not updated.
410    
411    We use these new primops for both spilling and increment record construction.
412    
413     1. Spilling.
414    
415        This is implemented with a linear scan algorithm (but generalized
416        to trees).  The algorithm will create a single spill record at the
417        beginning of the cps function and use rawupdate to spill to it,
418        and SELECT or SELp to reload from it.  So both spills and reloads
419        are fine-grain operations.  In contrast, in the old algorithm
420        "spills" have to be bundled together in records.
421    
422        Ideally, we should sink the spill record construction to where
423        it is needed.  We can even split the spill record into multiple ones
424        at the places where they are needed.  But CPS is not a good
425        representation for global code motion, so I'll keep it simple and
426        am not attempting this.
427    
428     2. Incremental record construction (aka record splitting).
429    
430        Long records with many component values which are simulatenously live
431        (recall that single use record addresses are not considered to
432         be live) are constructed with rawrecord and rawupdate.
433        We allocate space on the heap with rawrecord first, then gradually
434        fill it in with rawupdate.  This is the technique suggested to me
435        by Matthias.
436    
437        Some restrictions on when this is applicable:
438        1. It is not a VECTOR record.  The code generator currently does not handle
439           this case. VECTOR record uses double indirection like arrays.
440        2. All the record component values are defined in the same "basic block"
441           as the record constructor.  This is to prevent speculative
442           record construction.
443    
444    ----------------------------------------------------------------------
445    Name: Allen Leung
446    Date: 2002/02/22 01:02:00 EST
447    Tag: leunga-20020222-mlrisc-tools
448    
449    Minor bug fixes in the parser and rewriter
450    
451    ----------------------------------------------------------------------
452    Name: Allen Leung
453    Date: 2002/02/21 20:20:00 EST
454    Tag: leunga-20020221-peephole
455    
456    Regenerated the peephole files.  Some contained typos in the specification
457    and some didn't compile because of pretty printing bugs in the old version
458    of 'nowhere'.
459    
460    ----------------------------------------------------------------------
461    Name: Allen Leung
462    Date: 2002/02/19 20:20:00 EST
463    Tag: leunga-20020219-mlrisc-tools
464    Description:
465    
466       Minor bug fixes to the mlrisc-tools library:
467    
468       1.  Fixed up parsing colon suffixed keywords
469       2.  Added the ability to shut the error messages up
470       3.  Reimplemented the pretty printer and fixed up/improved
471           the pretty printing of handle and -> types.
472       4.  Fixed up generation of literal symbols in the nowhere tool.
473       5.  Added some SML keywords to to sml.sty
474    
475    ----------------------------------------------------------------------
476    Name: Matthias Blume
477    Date: 2002/02/19 16:20:00 EST
478    Tag: blume-20020219-cmffi
479    Description:
480    
481    A wild mix of changes, some minor, some major:
482    
483    * All C FFI-related libraries are now anchored under $c:
484        $/c.cm      --> $c/c.cm
485        $/c-int.cm  --> $c/internals/c-int.cm
486        $/memory.cm --> $c/memory/memory.cm
487    
488    * "make" tool (in CM) now treats its argument pathname slightly
489      differently:
490        1. If the native expansion is an absolute name, then before invoking
491           the "make" command on it, CM will apply OS.Path.mkRelative
492           (with relativeTo = OS.FileSys.getDir()) to it.
493        2. The argument will be passed through to subsequent phases of CM
494           processing without "going native".  In particular, if the argument
495           was an anchored path, then "make" will not lose track of that anchor.
496    
497    * Compiler backends now "know" their respective C calling conventions
498      instead of having to be told about it by ml-nlffigen.  This relieves
499      ml-nlffigen from one of its burdens.
500    
501    * The X86Backend has been split into X86CCallBackend and X86StdCallBackend.
502    
503    * Export C_DEBUG and C_Debug from $c/c.cm.
504    
505    * C type encoding in ml-nlffi-lib has been improved to model the conceptual
506      subtyping relationship between incomplete pointers and their complete
507      counterparts.  For this, ('t, 'c) ptr has been changed to 'o ptr --
508      with the convention of instantiating 'o with ('t, 'c) obj whenever
509      the pointer target type is complete.  In the incomplete case, 'o
510      will be instantiated with some "'c iobj" -- a type obtained by
511      using one of the functors PointerToIncompleteType or PointerToCompleteType.
512    
513      Operations that work on both incomplete and complete pointer types are
514      typed as taking an 'o ptr while operations that require the target to
515      be known are typed as taking some ('t, 'c) obj ptr.
516    
517      voidptr is now a bit "more concrete", namely "type voidptr = void ptr'"
518      where void is an eqtype without any values.  This makes it possible
519      to work on voidptr values using functions meant to operate on light
520      incomplete pointers.
521    
522    * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has
523      been vastly simplified.
524    
525    ----------------------------------------------------------------------
526    Name: Matthias Blume
527    Date: 2002/02/19 10:48:00 EST
528    Tag: blume-20020219-pqfix
529    Description:
530    
531    Applied Chris Okasaki's bug fix for priority queues.
532    
533    ----------------------------------------------------------------------
534    Name: Matthias Blume
535    Date: 2002/02/15 17:05:00
536    Tag: Release_110_39
537    Description:
538    
539    Last-minute retagging is becoming a tradition... :-(
540    
541    This is the working release 110.39.
542    
543    ----------------------------------------------------------------------
544    Name: Matthias Blume
545    Date: 2002/02/15 16:00:00 EST
546    Tag: Release_110_39-orig
547    Description:
548    
549    Working release 110.39.  New bootfiles.
550    
551    (Update: There was a small bug in the installer so it wouldn't work
552    with all shells.  So I retagged. -Matthias)
553    
554    ----------------------------------------------------------------------
555    Name: Matthias Blume
556    Date: 2002/02/15 14:17:00 EST
557    Tag: blume-20020215-showbindings
558    Description:
559    
560    Added EnvRef.listBoundSymbols and CM.State.showBindings.  Especially
561    the latter can be useful for exploring what bindings are available at
562    the interactive prompt.  (The first function returns only the list
563    of symbols that are really bound, the second prints those but also the
564    ones that CM's autoloading mechanism knows about.)
565    
566    ----------------------------------------------------------------------
567    Name: Matthias Blume
568    Date: 2002/02/15 12:08:00 EST
569    Tag: blume-20020215-iptrs
570    Description:
571    
572    Two improvements to ml-nlffigen:
573    
574      1. Write files only if they do not exist or if their current contents
575         do not coincide with what's being written.  (That is, avoid messing
576         with the time stamps unless absolutely necessary.)
577    
578      2. Implement a "repository" mechanism for generated files related
579         to "incomplete pointer types".   See the README file for details.
580    
581    ----------------------------------------------------------------------
582    Name: Matthias Blume
583    Date: 2002/02/14 11:50:00 EST
584    Tag: blume-20020214-quote
585    Description:
586    
587    Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm).  This is required
588    because of the new and improved tag generation scheme.  (Thanks to Allen
589    Leung for pointing it out.)
590    
591    ----------------------------------------------------------------------
592    Name: Lal George
593    Date: 2002/02/14 09:55:27 EST 2002
594    Tag: george-20020214-isabelle-bug
595    Description:
596    
597    Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation
598    of Isabelle on the x86.
599    
600    From Allen:
601    -----------
602     I've found the problem:
603    
604         in ra-core.sml, I use the counter "blocked" to keep track of the
605         true number of elements in the freeze queue.  When the counter goes
606         to zero, I skip examining the queue.  But I've messed up the
607         bookkeeping in combine():
608    
609             else ();
610             case !ucol of
611               PSEUDO => (if !cntv > 0 then
612                     (if !cntu > 0 then blocked := !blocked - 1 else ();
613                                        ^^^^^^^^^^^^^^^^^^^^^^^
614                      moveu := mergeMoveList(!movev, !moveu)
615                     )
616                  else ();
617    
618         combine() is called to coalesce two nodes u and v.
619         I think I was thinking that if the move counts of u and v are both
620         greater than zero then after they are coalesced then one node is
621         removed from the freeze queue.  Apparently I was thinking that
622         both u and v are of low degree, but that's clearly not necessarily true.
623    
624    
625    02/12/2002:
626        Here's the patch.  HOL now compiles.
627    
628        I don't know how this impact on performance (compile
629        time or runtime).  This bug caused the RA (especially on the x86)
630        to go thru the potential spill phase when there are still nodes on the
631        freeze queue.
632    
633    
634    
635    
636    ----------------------------------------------------------------------
637    Name: Matthias Blume
638    Date: 2002/02/13 22:40:00 EST
639    Tag: blume-20020213-fptr-rtti
640    Description:
641    
642    Fixed a bug in ml-nlffigen that was introduced with one of the previous
643    updates.
644    
645    ----------------------------------------------------------------------
646    Name: Matthias Blume
647    Date: 2002/02/13 16:41:00 EST
648    Tag: blume-20020213-cmlpq
649    Description:
650    
651    Added new priority queue export symbols (which have just been added to
652    smlnj-lib.cm) to CML's version of smlnj-lib.cm.  (Otherwise CML would
653    not compile and the installer would choke.)
654    
655    ----------------------------------------------------------------------
656    Name: Matthias Blume
657    Date: 2002/02/13 16:15:00 EST
658    Tag: blume-20020213-various
659    Description:
660    
661    1. More tweaks to ml-nlffigen:
662    
663       - better internal datastructures (resulting in slight speedup)
664       - "-match" option requires exact match
665       - "localized" gensym counters (untagged structs/unions nested within
666         other structs/unions or within typedefs get a fresh counter; their
667         tag will be prefixed by a concatenation of their parents' tags)
668       - bug fixes (related to calculation of transitive closure of types
669         to be included in the output)
670    
671    2. Minor Basis updates:
672    
673       - added implementations for List.collate and Option.app
674    
675    ----------------------------------------------------------------------
676    Name: Matthias Blume
677    Date: 2002/02/11 15:55:00 EST
678    Tag: blume-20020211-gensym
679    Description:
680    
681    Added a "-gensym" option to command line of ml-nlffigen.  This can be
682    used to specify a "stem" -- a string that is inserted in all "gensym'd"
683    names (ML structure names that correspond to unnamed C structs, unions,
684    and enums), so that separate runs of ml-nlffigen do not clash.
685    
686    ----------------------------------------------------------------------
687    Name: Matthias Blume
688    Date: 2002/02/11 12:05:00 EST
689    Tag: blume-20020211-gensml
690    Description:
691    
692    A quick fix for a problem with GenSML (in the pgraph-util library):
693    Make generation of toplevel "local" optional.  (Strictly speaking,
694    signature definitions within "local" are not legal SML.)
695    
696    Other than that: updates to INSTALL and cm/TODO.
697    
698    ----------------------------------------------------------------------
699    Name: Matthias Blume
700    Date: 2002/02/08 15:00:00 EST
701    Tag: blume-20020208-uniquepid
702    Description:
703    
704    0. Version number has been bumped to 110.38.1.  NEW BOOTFILES!!!
705    
706    1. The installer (config/install.sh) has gotten smarter:
707    
708         - Configuration options are a bit easier to specify now
709           (in config/targets).
710         - Bug in recognizing .tar.bz2 files fixed.
711         - Installer automatically resolves dependencies between
712           configuration options (e.g., if you ask for eXene, you will
713           also get cml -- regardless whether you asked for it or not).
714         - Installer can run in "quieter mode" by setting the environment
715           variable INSTALL_QUIETLY to "true".  "Quieter" does not mean
716           "completely silent", though.
717         - Build HashCons library as part of smlnj-lib.
718    
719    2. A new scheme for assigning persistent identifiers to compilation
720       units (and, by extension, to types etc.) has been put into place.
721       This fixes a long-standing bug where types and even dynamic values
722       can get internally confused, thereby compromising type safety
723       (abstraction) and dynamic correctness.  See
724    
725         http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz
726    
727       for an example of how things could go wrong until now.
728    
729       The downside of the new scheme is that pids are not quite as
730       persistent as they used to be: CM will generate a fresh pid
731       for every compilation unit that it thinks it sees for the first
732       time.  That means that if you compile starting from a clean, fresh
733       source tree at two different times, you end up with different
734       binaries.
735    
736       Cutoff recompilation, however, has not been compromised because
737       CM keeps pid information in special caches between runs.
738    
739    ----------------------------------------------------------------------
740    Name: Lal George
741    Date: 2002/02/07 15:34:13 EST 2002
742    Tag: <none>
743    Description:
744    
745    Compilers that generate assembly code may produce  global labels
746    whose value is resolved at link time. The various peephole optimization
747    modules did not take this in account.
748    
749    TODO. The Labels.addrOf function should really return an option
750    type so that clients are forced to deal with this issue, rather
751    than an exception being raised.
752    
753    ----------------------------------------------------------------------
754    Name: Lal George
755    Date: 2002/02/06 13:55:02 EST
756    Tag: george-20020206-ra-breakup
757    Description:
758    
759    1. A bug fix from Allen.
760    
761        A typo causes extra fstp %st(0)'s to be generated at compensation
762        edges, which might cause stack underflow traps at runtime.  This
763        occurs in fft where there are extraneous fstps right before the 'into'
764        trap instruction (in this case they are harmless since none of the
765        integers overflow.)
766    
767    2. Pulled out various utility modules that were embedded in the modules
768       of the register allocator. I need these modules for other purposes, but
769       they are not complete enough to put into a library (just yet).
770    ----------------------------------------------------------------------
771    Name: Matthias Blume
772    Date: 2002/01/31 16:05:00 EST
773    Tag: blume-20020131-sparc-ccalls
774    Description:
775    
776    1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes)
777       of extra stack space by mistake.  Fixed.
778    
779    2. Bug in logic of handling of command-line options in ml-nlffigen fixed.
780    
781    ----------------------------------------------------------------------
782    Name: Allen Leung
783    Date: 2002/01/30
784    Tag: leunga-20020130-nowhere-bug-fix
785    Description:
786    
787       MLRISC bug fixes:
788       1. Fixed a bindings computation bug in the 'nowhere' program generator tool.
789       2. MachineInt.fromString was negating its value.
790    
791    ----------------------------------------------------------------------
792    Name: Matthias Blume
793    Date: 2002/01/29
794    Tag: blume-20020129-INSTALL
795    Description:
796    
797    - Added somewhat detailed installation instructions (file INSTALL).
798    - Fixed curl-detection bug in config/install.sh.
799    - It is now possible to select the URL getter using the URLGETTER
800      environment variable:
801    
802          not set / "unknown"      --> automatic detection (script tries wget,
803                                       curl, and lynx)
804          "wget" / "curl" / "lynx" --> use the specified program (script "knows"
805                                       how to properly invoke them)
806          other                    --> use $URLGETTER directly, it must take
807                                       precisely two command-line arguments
808                                       (source URL and destination file name)
809    
810    ----------------------------------------------------------------------
811    Name: Matthias Blume
812    Date: 2002/01/28
813    Tag: blume-20020128-sparc-ccalls
814    Description:
815    
816    - Fixed problem with calculation of "used" registers in sparc-c-calls.
817    - Make use of the allocParam argument in sparc-c-calls.
818    
819    ----------------------------------------------------------------------
820    Name: Matthias Blume
821    Date: 2002/01/28
822    Tag: blume-20020128-allocParam
823    Description:
824    
825    John Reppy:  Changes c-calls API to accept client-callback for
826    allocating extra stack space.
827    me: Corresponding changes to mlriscGen (using a dummy argument that
828        does not change the current behavior).
829    
830    ----------------------------------------------------------------------
831    Name: Matthias Blume
832    Date: 2002/01/28 12:00:00
833    Tag: Release_110_38
834    Description:
835    
836    This time for real!!!
837    
838    ----------------------------------------------------------------------
839    Name: Matthias Blume
840    Date: 2002/01/28 10:56:00 EST
841    Tag: blume-20020128-retraction
842    Description:
843    
844    0. Retracted earlier 110.38.  (The Release_110_38 tag has been replaced
845       with blume-Release_110_38-retracted.)
846    
847    1. Fixed a problem with incorrect rounding modes in real64.sml.
848       (Thanks to Andrew Mccreight <andrew.mccreight@yale.edu>.)
849    
850    2. A bug in ml-nlffigen related to the handling of unnamed structs, unions,
851       and enums fixed.  The naming of corresponding ML identifiers should
852       now be consistent again.
853    
854    ----------------------------------------------------------------------
855    Name: Allen Leung
856    Date: 2002/01/27
857    Tag: leunga-20020127-nowhere
858    Description:
859    
860       Added a target called nowhere in the configuration scripts.
861       Enabling this will build the MLRISC 'nowhere' tool (for translating
862       programs with where-clauses into legal SML code) during installation.
863    
864    ----------------------------------------------------------------------
865    Name: Matthias Blume
866    Date: 2002/01/25 21:27:00 EST
867    Tag: blume-Release_110_38-retracted
868    Description:
869    
870    Call it a (working) release!  Version is 110.38. Bootfiles are ready.
871    
872    README will be added later.
873    
874    !!! NOTE:  Re-tagged as blume-Release_110_38-retracted. Original tag
875    (Release_110_38) removed.  Reason: Last-minute bug fixes.
876    
877    ----------------------------------------------------------------------
878    Name: Matthias Blume
879    Date: 2002/01/25
880    Tag: blume-20020125-ffi
881    Description:
882    
883    A large number of tweaks and improvements to ml-nlffi-lib and
884    ml-nlffigen:
885    
886       - ML represenation types have been streamlined
887       - getter and setter functions work with concrete values, not abstract
888         ones where possible
889       - ml-nlffigen command line more flexible (see README file there)
890       - some bugs have been fixed (hopefully)
891    
892    ----------------------------------------------------------------------
893    Name: Lal George
894    Date: 2002/01/24
895    Tag: george-20020124-risc-ra-interface
896    Description:
897    
898       There is a dramatic simplification in the interface to the
899       register allocator for RISC architectures as a result of making
900       parallel copy instructions explicit.
901    
902    ----------------------------------------------------------------------
903    Name: Matthias Blume
904    Date: 2002/01/22
905    Tag: blume-20020122-x86-ccalls
906    Description:
907    
908    Bug fix for c-calls on x86 (having to do with how char- and
909    short-arguments are being handled).
910    
911    ----------------------------------------------------------------------
912    Name: Matthias Blume
913    Date: 2002/01/21
914    Tag: blume-20020121-ff
915    Description:
916    
917    Another day of fiddling with the FFI...
918    
919    1. Bug fix/workaround:  CKIT does not complain about negative array
920       dimensions, so ml-nlffigen has to guard itself against this possibility.
921       (Otherwise a negative dimension would send it into an infinite loop.)
922    
923    2. Some of the abstract types (light objects, light pointers, most "base"
924       types) in structure C are now eqtypes.
925    
926    3. Added constructors and test functions for NULL function pointers.
927    
928    ----------------------------------------------------------------------
929    Name: Matthias Blume
930    Date: 2002/01/18
931    Tag: blume-20020118-ready-for-new-release
932    Description:
933    
934    Made config/srcarchiveurl point to a new place.  (Will provide boot
935    files shortly.)
936    
937    Maybe we christen this to be 110.38?
938    
939    ----------------------------------------------------------------------
940    Name: Matthias Blume
941    Date: 2002/01/18
942    Tag: blume-20020118-more-ffifiddle
943    Description:
944    
945    Today's FFI fiddling:
946    
947      - Provided a structure CGetSet with "convenient" versions of C.Get.* and
948        C.Set.* that use concrete (MLRep.*) arguments and results instead
949        of abstract ones.
950    
951      - Provided word-style bit operations etc. for "int" representation
952        types in MLRep.S<Foo>Bitops where <Foo> ranges over Char, Int, Short,
953        and Long.
954    
955    ----------------------------------------------------------------------
956    Name: Matthias Blume
957    Date: 2002/01/18
958    Tag: blume-20020118-use-x86-fp
959    Description:
960    
961    Now that x86-fast-fp seems to be working, I turned it back on again
962    by default.  (Seems to work fine now, even with the FFI.)
963    
964    Other than that, I added some documentation about the FFI to
965    src/ml-nlffigen/README and updated the FFI test examples in
966    src/ml-nlffi-lib/Tests/*.
967    
968    ----------------------------------------------------------------------
969    Name: Allen Leung
970    Date: 2002/01/17
971    Tag: leunga-20020117-x86-fast-fp-call
972    Description:
973    
974       1. Fixed a problem with handling return fp values when x86's fast fp
975          mode is turned on.
976    
977       2. Minor pretty printing fix for cellset.  Print %st(0) as %st(0) instead
978          of %f32.
979    
980       3. Added a constructor INT32lit to the ast of MLRISC tools.
981    
982    ----------------------------------------------------------------------
983    Name: Matthias Blume
984    Date: 2002/01/16
985    Tag: blume-20020116-ffifiddle
986    Description:
987    
988    More fiddling with the FFI interface:
989    
990     - Make constness 'c instead of rw wherever possible.  This eliminates
991       the need for certain explicit coercions.  (However, due to ML's
992       value polymorphism, there will still be many cases where explicit
993       coercions are necessary.  Phantom types are not the whole answer
994       to modeling a subtyping relationship in ML.)
995    
996     - ro/rw coersions for pointers added.  (Avoids the detour through */&.)
997    
998     - "printf" test example added to src/ml-nlffi-lib/Tests.  (Demonstrates
999       clumsy workaround for varargs problem.)
1000    
1001    ----------------------------------------------------------------------
1002    Name: Lal George
1003    Date: 2002/01/15
1004    Tag: <none>
1005    Description:
1006    
1007    1. Since COPY instructions are no longer native to the architecture,
1008       a generic functor can be used to implement the expandCopies function.
1009    
1010    2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a
1011       TEXT segment.
1012    
1013    ----------------------------------------------------------------------
1014    Name: Matthias Blume
1015    Date: 2002/01/15
1016    Tag: blume-20020115-ffiupdates
1017    Description:
1018    
1019    1. Fix for bug resulting in single-precision float values being returned
1020       incorrectly from FFI calls.
1021    
1022    2. Small modifications to C FFI API:
1023    
1024        - memory-allocation routines return straight objects (no options)
1025          and raise an exception in out-of-memory situations
1026        - unsafe extensions to cast between function pointers and pointers
1027          from/to ints
1028        - added structure C_Debug as an alternative to structure C where
1029          pointer-dereferencing (|*| and |*!) always check for null-pointers
1030        - added open_lib' to DynLinkage;  open_lib' works like open_lib
1031          but also takes a (possibly empty) list of existing library handles
1032          that the current library depends on
1033    
1034    ----------------------------------------------------------------------
1035    Name: Matthias Blume
1036    Date: 2002/01/10
1037    Tag: blume-20020110-newffigen
1038    Description:
1039    
1040    1. Updates to portable graph code.
1041    
1042    2. Major update to ml-nlffigen and ml-nlffi-lib.  Things are much
1043       more scalable now so that even huge interfaces such as the one
1044       for GTK compile in finite time and space. :-)
1045       See src/ml-nlffigen/README for details on what's new.
1046    
1047    ----------------------------------------------------------------------
1048    Name: Lal George
1049    Date: 2001/01/09 14:31:35 EST 2002
1050    Tag: george-20011206-rm-native-copy
1051    Description:
1052    
1053            Removed the native COPY and FCOPY instructions
1054            from all the architectures and replaced it with the
1055            explicit COPY instruction from the previous commit.
1056    
1057            It is now possible to simplify many of the optimizations
1058            modules that manipulate copies. This has not been
1059            done in this change.
1060    
1061    ----------------------------------------------------------------------
1062    Name: Lal George
1063    Date: 2001/12/06 16:50:13 EST 2001
1064    Tag: george-20011206-mlrisc-instruction
1065    Description:
1066    
1067    Changed the representation of instructions from being fully abstract
1068    to being partially concrete. That is to say:
1069    
1070      from
1071            type instruction
1072    
1073      to
1074            type instr                              (* machine instruction *)
1075    
1076            datatype instruction =
1077                LIVE of {regs: C.cellset, spilled: C.cellset}
1078              | KILL of {regs: C.cellset, spilled: C.cellset}
1079              | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list}
1080              | ANNOTATION of {i: instruction, a: Annotations.annotation}
1081              | INSTR of instr
1082    
1083    This makes the handling of certain special instructions that appear on
1084    all architectures easier and uniform.
1085    
1086    LIVE and KILL say that a list of registers are live or killed at the
1087    program point where they appear. No spill code is generated when an
1088    element of the 'regs' field is spilled, but the register is moved to
1089    the 'spilled' (which is present, more for debugging than anything else).
1090    
1091    LIVE replaces the (now deprecated) DEFFREG instruction on the alpha.
1092    We used to generate:
1093    
1094            DEFFREG f1
1095            f1 := f2 + f3
1096            trapb
1097    
1098    but now generate:
1099    
1100            f1 := f2 + f3
1101            trapb
1102            LIVE {regs=[f1,f2,f3], spilled=[]}
1103    
1104    Furthermore, the DEFFREG (hack) required that all floating point instruction
1105    use all registers mentioned in the instruction. Therefore f1 := f2 + f3,
1106    defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting
1107    in a cleaner alpha implementation. (Hopefully, intel will not get rid of
1108    this architecture).
1109    
1110    COPYXXX is intended to replace the parallel COPY and FCOPY  available on
1111    all the architectures. This will result in further simplification of the
1112    register allocator that must be aware of them for coalescing purposes, and
1113    will also simplify certain aspects of the machine description that provides
1114    callbacks related to parallel copies.
1115    
1116    ANNOTATION should be obvious, and now INSTR represents the honest to God
1117    machine instruction set!
1118    
1119    The <arch>/instructions/<arch>Instr.sml files define certain utility
1120    functions for making porting easier -- essentially converting upper case
1121    to lower case. All machine instructions (of type instr) are in upper case,
1122    and the lower case form generates an MLRISC instruction. For example on
1123    the alpha we have:
1124    
1125      datatype instr =
1126         LDA of {r:cell, b:cell, d:operand}
1127       | ...
1128    
1129      val lda : {r:cell, b:cell, d:operand} -> instruction
1130        ...
1131    
1132    where lda is just (INSTR o LDA), etc.
1133    
1134    ----------------------------------------------------------------------
1135    Name: Matthias Blume
1136    Date: 2001/11/22 21:40:00 EST
1137    Tag: Release_110_37
1138    Description:
1139    
1140    Release 110.37.  This time for real.
1141    
1142    ----------------------------------------------------------------------
1143    Name: Matthias Blume
1144    Date: 2001/11/21 16:35:00 EST
1145    Tag: blume-20011121-foot-in-mouth
1146    Description:
1147    
1148    Removed the "Release_110_37" tag because of a serious bug.
1149    This will be re-tagged once the bug is fixed.
1150    
1151    ----------------------------------------------------------------------
1152    Name: Matthias Blume
1153    Date: 2001/11/21 16:14:00 EST
1154    Tag: blume-20011121-forgottenfile
1155    Description:
1156    
1157    Forgot to add a file.  (Just a .tex-file -- part of
1158    the CM manual source.)
1159    
1160    ----------------------------------------------------------------------
1161    Name: Matthias Blume
1162    Date: 2001/11/21 16:10:00 EST
1163    Tag: blume-20011121-invalid_110_37
1164    Description:
1165    
1166    Note: I removed the original tag "Release_110_37" from this commit
1167          because we found a serious bug in all non-x86 backends.
1168          - Matthias
1169    
1170    1. Modifications to the SML/NJ code generator and to the runtime system
1171       so that code object name strings are directly inserted into code
1172       objects at code generation time.  The only business the runtime system
1173       has with this is now to read the name strings on occasions.
1174       (The encoding of the name string has also changed somewhat.)
1175    
1176    2. CM now implements a simple "set calculus" for specifying export lists.
1177       In particular, it is now possible to refer to the export lists of
1178       other libraries/groups/sources and form unions as well as differences.
1179       See the latest CM manual for details.
1180    
1181    3. An separate notion of "proxy" libraries has again be eliminated from
1182       CM's model.  (Proxy libraries are now simply a special case of using
1183       the export list calculus.)
1184    
1185    4. Some of the existing libraries now take advantage of the new set
1186       calculus.
1187       (Notice that not all libraries have been converted because some
1188       of the existing .cm-files are supposed to be backward compatible
1189       with 110.0.x.)
1190    
1191    5. Some cleanup in stand-alone programs.  (Don't use "exnMessage" -- use
1192       "General.exnMessage"!  The former relies on a certain hook to be
1193       initialized, and that often does not happen in the stand-alone case.)
1194    
1195    ----------------------------------------------------------------------
1196    Name: Lal George
1197    Date: 2001/11/21  13:56:18 EST
1198    Tag: george-2001121-pseudo-ops
1199    Description:
1200    
1201      Implemented a complete redesign of MLRISC pseudo-ops. Now there
1202      ought to never be any question of incompatabilities with
1203      pseudo-op syntax expected by host assemblers.
1204    
1205      For now, only modules supporting GAS syntax are implemented
1206      but more should follow, such as MASM, and vendor assembler
1207      syntax, e.g. IBM as, Sun as, etc.
1208    
1209    ----------------------------------------------------------------------
1210    Name: Matthias Blume
1211    Date: 2001/11/14 11:52:00 EST
1212    Tag: blume-20011114-srcname
1213    Description:
1214    
1215    1. Routed the name of the current source file to mlriscgen where it
1216       should be directly emitted into the code object.  (This last part
1217       is yet to be done.)
1218    
1219    2. Some cleanup of the pgraph code to make it match the proposal that
1220       I put out the other day.  (The proposal notwithstanding, things are
1221       still in flux here.)
1222    
1223    ----------------------------------------------------------------------
1224    Name: Lal George
1225    Date: 2001/11/14 09:44:04 EST
1226    Tag:
1227    Description:
1228    
1229      Fix for a backpatching bug reported by Allen.
1230    
1231      Because the boundary between short and long span-dependent
1232      instructions is +/- 128, there are an astounding number of
1233      span-dependent instructions whose size is over estimated.
1234    
1235      Allen came up with the idea of letting the size of span
1236      dependent instructions be non-monotonic, for a maxIter
1237      number of times, after which the size must be monotonically
1238      increasing.
1239    
1240      This table shows the number of span-dependent instructions
1241      whose size was over-estimated as a function of maxIter, for the
1242      file Parse/parse/ml.grm.sml:
1243    
1244         maxIter            # of instructions:
1245            10                      687
1246            20                      438
1247            30                      198
1248            40                        0
1249    
1250      In compiling the compiler, there is no significant difference in
1251      compilation speed between maxIter=10 and maxIter=40. Actually,
1252      my measurements showed that maxIter=40 was a tad faster than
1253      maxIter=10! Also 96% of the  files in the compiler reach a fix
1254      point within 13 iterations, so fixing maxIter at 40, while high,
1255      is okay.
1256    
1257    ----------------------------------------------------------------------
1258    Name: Matthias Blume
1259    Date: 2001/10/31 15:25:00 EST
1260    Tag: blume-20011031-pgraph
1261    Description:
1262    
1263    CKIT:
1264    * Changed the "Function" constructor of type Ast.ctype to carry optional
1265      argument identifiers.
1266    * Changed the return type of TypeUtil.getFunction accordingly.
1267    * Type equality ignores the argument names.
1268    * TypeUtil.composite tries to preserve argument names but gives up quickly
1269      if there is a mismatch.
1270    
1271    installation script:
1272    * attempts to use "curl" if available (unless "wget" is available as well)
1273    
1274    CM:
1275    * has an experimental implementation of "portable graphs" which I will
1276      soon propose as an implementation-independent library format
1277    * there are also new libraries $/pgraph.cm and $/pgraph-util.cm
1278    
1279    NLFFI-LIB:
1280    * some cleanup (all cosmetic)
1281    
1282    NLFFIGEN:
1283    * temporarily disabled the mechanism that suppresses ML output for
1284      C definitions whose identifiers start with an underscore character
1285    * generate val bindings for enum constants
1286    * user can request that only one style (light or heavy) is being used;
1287      default is to use both (command-line arguments: -heavy and -light)
1288    * fixed bug in handling of function types involving incomplete pointers
1289    * generate ML entry points that take record arguments (i.e., using
1290      named arguments) for C functions that have a prototype with named
1291      arguments
1292      (see changes to CKIT)
1293    
1294    ----------------------------------------------------------------------
1295    Name: Allen Leung
1296    Date: 2001/10/27 20:34:00 EDT
1297    Tag: leunga-20011027-x86-fast-fp-call
1298    Description:
1299    
1300       Fixed the bug described in blume-20010920-slowfp.
1301    
1302       The fix involves
1303          1. generating FCOPYs in FSTP in ia32-svid
1304          2. marking a CALL with the appropriate annotation
1305    
1306    ----------------------------------------------------------------------
1307    Name: Matthias Blume
1308    Date: 2001/10/16 11:32:00 EDT
1309    Tag: blume-20011016-netbsd
1310    Description:
1311    
1312    Underscore patch from Chris Richards (fixing problem with compiling
1313    runtime system under recent NetBSD).
1314    
1315    ----------------------------------------------------------------------
1316    Name: Allen Leung
1317    Date: 2001/10/12 17:18:32 EDT 2001
1318    Tag: leung-20011012-x86-printflowgraph
1319    Description:
1320    
1321    X86RA now uses a valid (instead of dummy) PrintFlowgraph module.
1322    
1323    ----------------------------------------------------------------------
1324    Name: Lal George
1325    Date: 2001/10/11 23:51:34 EDT
1326    Tag: george-20011011-too-many-instrs
1327    Description:
1328    
1329    The representation of a program point never expected to see more
1330    than 65536 instructions in a basic block!
1331    
1332    ----------------------------------------------------------------------
1333    Name: Lal George
1334    Date: 2001/10/09 09:41:37 EDT
1335    Tag: george-20011008-mlrisc-labels
1336    Description:
1337    
1338    Changed the machine description files to support printing of
1339    local and global labels in assembly code, based on host assembler
1340    conventions.
1341    
1342    ----------------------------------------------------------------------
1343    Name: Matthias Blume
1344    Date: 2001/09/25 15:25:00 EDT
1345    Tag: blume-20010925-exninfo
1346    Description:
1347    
1348    I provided a non-hook implementation of exnName (at the toplevel) and
1349    made the "dummy" implementation of exnMessage (at the toplevel) more
1350    useful: if nothing gets "hooked in", then at least you are going to
1351    see the exception name and a message indicating why you don't see more.
1352    
1353    [For the time being, programs that need exnMessage and want to use
1354    ml-build should either use General.exnMessage (strongly recommended) or
1355    refer to structure General at some other point so that CM sees a
1356    static dependency.]
1357    
1358    [Similar remarks go for "print" and "use":  If you want to use their
1359    functionality in stand-alone programs generated by ml-build, then use
1360    TextIO.output and Backend.Interact.useFile (from $smlnj/compiler.cm).]
1361    
1362    ----------------------------------------------------------------------
1363    Name: Matthias Blume
1364    Date: 2001/09/20 17:28:00 EDT
1365    Tag: blume-20010920-slowfp
1366    Description:
1367    
1368    Allen says that x86-fast-fp is not safe yet, so I turned it off again...
1369    
1370    ----------------------------------------------------------------------
1371    Name: Matthias Blume
1372    Date: 2001/09/20 17:20:00 EDT
1373    Tag: blume-20010920-canonicalpaths
1374    Description:
1375    
1376    0. Updated the BOOT file (something that I forgot to do earlier).
1377    
1378    1. Small internal change to CM so that it avoids "/../" in filenames
1379       as much as possible (but only where it is safe).
1380    
1381    2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so
1382       that arguments that contain delimiters are passed through correctly.
1383       This change also means that all "special" arguments of the form
1384       @SMLxxx... must come first.
1385    
1386    3. Changed install script to put relative anchor names for tool commands
1387       into pathconfig.
1388    
1389    ----------------------------------------------------------------------
1390    Name: Matthias Blume
1391    Date: 2001/09/18 15:35:00 EDT
1392    Tag: blume-20010918-readme11036
1393    Description:
1394    
1395    Added README files.
1396    
1397    ----------------------------------------------------------------------
1398    Name: Matthias Blume
1399    Date: 2001/09/18 11:45:00 EDT
1400    Tag: Release_110_36 (retag)
1401    Description:
1402    
1403    Fixed mistake in config/preloads. Retagged as 110.36.
1404    
1405    ----------------------------------------------------------------------
1406    Name: Matthias Blume
1407    Date: 2001/09/18 09:40:00 EDT
1408    Tag: Release_110_36_orig (tag changed)
1409    Description:
1410    
1411    New version (110.36).  New bootfiles.
1412    
1413    ----------------------------------------------------------------------
1414    Name: Matthias Blume
1415    Date: 2001/09/14 16:15:00 EDT
1416    Tag: blume-20010914-x86fastfp
1417    Description:
1418    
1419    John committed some changes that Allen made, in particular a (hopefully)
1420    correctly working version of the x86-fp module.
1421    
1422    I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp"
1423    flag to "true".  Everything seems to compile to a fixpoint ok, and
1424    "mandelbrot" speeds up by about 15%.
1425    
1426    ----------------------------------------------------------------------
1427    Name: Matthias Blume
1428    Date: 2001/09/13 11:20:00 EDT
1429    Tag: blume-20010913-minimal
1430    Description:
1431    
1432    1. Stefan Monnier's patch to fix a miscompilation problem that
1433       was brought to light by John Reppy's work on Moby.
1434    
1435    2. Implemented a minimal "structure Compiler" that contains just
1436       "version" and "architecture".  The minimal version will be
1437       available when the full version is not.  This is for backward-
1438       compatibility with code that wants to test Compiler.version.
1439    
1440    ----------------------------------------------------------------------
1441    Name: Matthias Blume
1442    Date: 2001/08/28 14:03:00 EDT
1443    Tag: blume-20010828-ml-lex
1444    Description:
1445    
1446    Fix for bug 1581, received from Neophytos Michael.
1447    
1448    ----------------------------------------------------------------------
1449    Name: Matthias Blume
1450    Date: 2001/08/27 11:20:00 EDT
1451    Tag: blume-20010827-readme11035
1452    Description:
1453    
1454    Fleshed out the README file for 110.35.
1455    
1456    ----------------------------------------------------------------------
1457    Name: Matthias Blume
1458    Date: 2001/08/24 17:10:00 EDT
1459    Tag: Release_110_35
1460    Description:
1461    
1462    New version number (110.35).  New bootfiles.
1463    
1464    ----------------------------------------------------------------------
1465    Name: Lal George
1466    Date: 2001/08/24 13:47:18 EDT 2001
1467    Tag: george-20010824-MLRISC-graphs
1468    Description:
1469    
1470     removed clusters from MLRISC completely and replaced with graphs.
1471    
1472    ----------------------------------------------------------------------
1473    Name: Matthias Blume
1474    Date: 2001/08/23 17:50:00 EDT
1475    Tag: blume-20010823-toplevel
1476    Description:
1477    
1478    - some reorganization of the code that implements various kinds of
1479      environments in the compiler (static, dynamic, symbolic, combined)
1480    - re-implemented the EnvRef module so that evalStream works properly
1481      (if the stream contains references to "use", "CM.make", etc.)
1482    - cleaned up evalloop.sml and interact.sml (but they need more cleaning)
1483    
1484    ----------------------------------------------------------------------
1485    Name: Matthias Blume
1486    Date: 2001/08/20 15:50 EDT
1487    Tag: blume20010820-slipup
1488    Description:
1489    
1490    I forgot to commit a few files.  Here they are...
1491    
1492    ----------------------------------------------------------------------
1493    Name: Matthias Blume
1494    Date: 2001/08/20 15:35:00 EDT
1495    Tag: blume-20010820-debugprof
1496    Description:
1497    
1498    !!!! NEW BOOTFILES !!!!
1499    
1500    This is another round of reorganizing the compiler sources.  This
1501    time the main goal was to factor out all the "instrumentation"
1502    passes (for profiling and backtracing) into their own library.
1503    The difficulty was to do it in such a way that it does not depend
1504    on elaborate.cm but only on elabdata.cm.
1505    
1506    Therefore there have been further changes to both elaborate.cm and
1507    elabdata.cm -- more "generic" things have been moved from the former
1508    to the latter.  As a result, I was forced to split the assignment
1509    of numbers indicating "primtyc"s into two portions: SML-generic and
1510    SML/NJ-specific.  Since it would have been awkward to maintain,
1511    I bit the bullet and actually _changed_ the mapping between these
1512    numbers and primtycs.  The bottom line of this is that you need
1513    a new set of bin- and bootfiles.
1514    
1515    I have built new bootfiles for all architectures, so doing a fresh
1516    checkout and config/install.sh should be all you need.
1517    
1518    The newly created library's name is
1519    
1520        $smlnj/viscomp/debugprof.cm
1521    
1522    and its sources live under
1523    
1524        src/compiler/DebugProf
1525    
1526    ----------------------------------------------------------------------
1527    Name: Matthias Blume
1528    Date: 2001/08/15 17:15:00 EDT
1529    Tag: blume-20010815-compreorg
1530    Description:
1531    
1532    This is a first cut at reorganizing the CM libraries that make up the
1533    core of the compiler.  The idea is to separate out pieces that could
1534    be used independently by tools, e.g., the parser, the typechecker, etc.
1535    
1536    The current status is a step in this direction, but it is not quite
1537    satisfactory yet.  Expect more changes in the future.
1538    
1539    Here is the current (new) organization...
1540    
1541        What used to be $smlnj/viscomp/core.cm is now divided into
1542        six CM libraries:
1543    
1544             $smlnj/viscomp/basics.cm
1545                           /parser.cm
1546                           /elabdata.cm
1547                           /elaborate.cm
1548                           /execute.cm
1549                           /core.cm
1550    
1551        The CM files for these libraries live under src/system/smlnj/viscomp.
1552        All these libraries are proxy libraries that contain precisely
1553        one CM library component.  Here are the locations of the components
1554        (all within the src/compiler tree):
1555    
1556             Basics/basics.cm
1557             Parse/parser.cm
1558             ElabData/elabdata.cm
1559             Elaborator/elaborate.cm
1560             Execution/execute.cm
1561             core.cm
1562    
1563         [This organization is the same that has been used already
1564         for a while for the architecture-specific parts of the visible
1565         compiler and for the old version of core.cm.]
1566    
1567         As you will notice, many source files have been moved from their
1568         respective original locations to a new home in one of the above
1569         subtrees.
1570    
1571         The division of labor between the new libraries is the following:
1572    
1573             basics.cm:
1574                - Simple, basic definitions that pertain to many (or all) of
1575                  the other libraries.
1576             parser.cm:
1577                - The SML parser, producing output of type Ast.dec.
1578                - The type family for Ast is also defined and exported here.
1579             elabdata.cm:
1580                - The datatypes that describe input and output of the elaborator.
1581                  This includes types, absyn, and static environments.
1582             elaborator.cm:
1583                - The SML/NJ type checker and elaborator.
1584                  This maps an Ast.dec (with a given static environment) to
1585                  an Absyn.dec (with a new static environment).
1586                - This libraries implements certain modules that used to be
1587                  structures as functors (to remove dependencies on FLINT).
1588             execute.cm:
1589                - Everything having to do with executing binary code objects.
1590                - Dynamic environments.
1591             core.cm:
1592                - SML/NJ-specific instantiations of the elaborator and MLRISC.
1593                - Top-level modules.
1594                - FLINT (this should eventually become its own library)
1595    
1596    Notes:
1597    
1598    I am not 100% happy with the way I separated the elaborator (and its
1599    data structures) from FLINT.  Two instances of the same problem:
1600    
1601        1. Data structures contain certain fields that carry FLINT-specific
1602           information.  I hacked around this using exn and the property list
1603           module from smlnj-lib.  But the fact that there are middle-end
1604           specific fields around at all is a bit annoying.
1605    
1606        2. The elaborator calculates certain FLINT-related information.  I tried
1607           to make this as abstract as I could using functorization, but, again,
1608           the fact that the elaborator has to perform calculations on behalf
1609           of the middle-end at all is not nice.
1610    
1611        3. Having to used exn and property lists is unfortunate because it
1612           weakens type checking.  The other alternative (parameterizing
1613           nearly *everything*) is not appealing, though.
1614    
1615    I removed the "rebinding =" warning hack because due to the new organization
1616    it was awkward to maintain it.  As a result, the compiler now issues some of
1617    these warnings when compiling init.cmi during bootstrap compilation. On
1618    the plus side, you also get a warning when you do, for example:
1619       val op = = Int32.+
1620    which was not the case up to now.
1621    
1622    I placed "assign" and "deref" into the _Core structure so that the
1623    code that deals with the "lazy" keyword can find them there.  This
1624    removes the need for having access to the primitive environment
1625    during elaboration.
1626    
1627    ----------------------------------------------------------------------
1628    Name: Matthias Blume
1629    Date: 2001/08/13
1630    Tag: blume-20010813-closures
1631    Description:
1632    
1633    This fix was sent to us by Zhong Shao.  It is supposed to improve the
1634    performance of certain loops by avoiding needless closure allocation.
1635    
1636    ----------------------------------------------------------------------
1637    Name: Lal George
1638    Date: 2001/07/31 10:03:23 EDT 2001
1639    Tag: george-20010731-x86-fmalloc
1640    Description: Fixed bug in x86 calls
1641    
1642        There was a bug where call instructions would mysteriously
1643        vanish. The call instruction had to be one that returned
1644        a floating point value.
1645    
1646    ----------------------------------------------------------------------
1647    Name: Lal George
1648    Date: 2001/07/19 16:36:29 EDT 2001
1649    Tag: george-20010719-simple-cells
1650    Description:
1651    
1652    I have dramatically simplified the interface for CELLS in MLRISC.
1653    
1654    In summary, the cells interface is broken up into three parts:
1655    
1656      1. CellsBasis : CELLS_BASIS
1657    
1658            CellsBasis is a top level structure and common for all
1659            architectures.  it contains the definitions of basic datatypes
1660            and utility  functions over these types.
1661    
1662      2. functor Cells() : CELLS
1663    
1664            Cells generates an interface for CELLS that incorporates the
1665            specific resources on the target architecture, such as the
1666            presence of special register classes, their number and size,
1667            and various useful substructures.
1668    
1669      3. <ARCH>CELLS
1670    
1671            e.g. SparcCells: SPARCCELLS
1672    
1673            <ARCH>CELLS usually contains additional bindings for special
1674            registers  on the architecture, such as:
1675    
1676                    val r0 : cell           (* register zero *)
1677                    val y : cell            (* Y register *)
1678                    val psr : cell          (* processor status register *)
1679                    ...
1680    
1681            The structure returned by applying the Cells functor is opened
1682            in this interface.
1683    
1684    The main implication of all this is that the datatypes for cells is
1685    split between CellsBasis and CELLS -- a fairly simple change for user
1686    code.
1687    
1688    In the old scheme the CELLS interface had a definitional binding of
1689    the form:
1690    
1691            signature CELLS = sig
1692    
1693               structure CellsBasis = CellsBasis
1694    
1695               ...
1696    
1697            end
1698    
1699    With all the sharing constraints that goes on in MLRISC, this old
1700    design  quickly leads to errors such as:
1701    
1702            "structure definition spec inside of sharing ... "
1703    
1704    
1705    and appears to require an unacceptable amount of sharing and where
1706    constraint hackery.
1707    
1708    I think this error message (the interaction of definitional specs and
1709    sharing) requires more explanation on our web page.
1710    
1711    ----------------------------------------------------------------------
1712    Name: Matthias Blume
1713    Date: 2001/07/19 15:00:00 EDT
1714    Tag: blume-20010719-libreorg
1715    Description:
1716    
1717    This update puts together a fairly extensive but straightforward change
1718    to the way the libraries that implement the interactive system are
1719    organized:
1720    
1721       The biggest change is the elimination of structure Compiler.  As a
1722       replacement for this structure, there is now a CM library
1723       (known as $smlnj/compiler.cm or $smlnj/compiler/current.cm)
1724       that exports all the substructures of the original structure Compiler
1725       directly.  So instead of saying Compiler.Foo.bar one now simply
1726       says Foo.bar.  (The CM libraries actually export a collection of
1727       structures that is richer than the collection of substructures of
1728       structure Compiler.)
1729    
1730       To make the transition smooth, there is a separate library called
1731       $smlnj/compiler/compiler.cm which puts together and exports the
1732       original structure Compiler (or at least something very close to it).
1733    
1734       There are five members of the original structure Compiler
1735       that are not exported directly but which instead became members
1736       of a new structure Backend (described by signature BACKEND).  These are:
1737       structure Profile (: PROFILE), structure Compile (: COMPILE), structure
1738       Interact (: INTERACT), structure Machine (: MACHINE), and val
1739       architecture (: string).
1740    
1741       Structure Compiler.Version has become structure CompilerVersion.
1742    
1743       Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided
1744       by $smlnj/compiler/<arch>.cm where <arch> is alpha32, hppa, ppc, sparc,
1745       or x86, respectively.
1746       Each of these exports the same frontend structures that
1747       $smlnj/compiler.cm exports.  But they do not have a structure Backend
1748       and instead export some structure <Arch>Backend where <Arch> is Alpha32,
1749       Hppa, PPC, Sparc, or X86, respectively.
1750    
1751       Library $smlnj/compiler/all.cm exports the union of the exports of
1752       $smlnj/compiler/<arch>.cm
1753    
1754       There are no structures <Arch>Compiler anymore, use
1755       $smlnj/compiler/<arch>.cm instead.
1756    
1757       Library host-compiler-0.cm is gone.  Instead, the internal library
1758       that instantiates CM is now called cm0.cm.  Selection of the host
1759       compiler (backend) is no longer done here but. (Responsibility for it
1760       now lies with $smlnj/compiler/current.cm.  This seems to be more
1761       logical.)
1762    
1763       Many individual files have been moved or renamed.  Some files have
1764       been split into multiple files, and some "dead" files have been deleted.
1765    
1766    Aside from these changes to library organization, there are also changes
1767    to the way the code itself is organized:
1768    
1769       Structure Binfile has been re-implemented in such a way that it no
1770       longer needs any knowledge of the compiler.  It exclusively deals
1771       with the details of binfile layout.  It no longer invokes the
1772       compiler (for the purpose of creating new prospective binfile
1773       content), and it no longer has any knowledge of how to interpret
1774       pickles.
1775    
1776       Structure Compile (: COMPILE) has been stripped down to the bare
1777       essentials of compilation.  It no longer deals with linking/execution.
1778       The interface has been cleaned up considerably.
1779    
1780       Utility routines for dealing with linking and execution have been
1781       moved into their own substructures.
1782    
1783       (The ultimate goal of these changes is to provide a light-weight
1784       binfile loader/linker (at least for, e.g., stable libraries) that
1785       does not require CM or the compiler to be present.)
1786    
1787    CM documentation has been updated to reflect the changes to library
1788    organization.
1789    
1790    ----------------------------------------------------------------------
1791    Name: Matthias Blume
1792    Date: 2001/07/10 17:30:00 EDT
1793    Tag: Release_110_34
1794    Description:
1795    
1796    Minor tweak to 110.34 (re-tagged):
1797    
1798      - README.html file added to CVS repository
1799      - runtime compiles properly under FreeBSD 3.X and 4.X
1800    
1801    ----------------------------------------------------------------------
1802    Name: Matthias Blume
1803    Date: 2001/07/10 17:30:00 EDT
1804    Tag: Release_110_34
1805    Description:
1806    
1807    New version number (110.34). New bootfiles.
1808    
1809    ----------------------------------------------------------------------
1810    Name: Matthias Blume
1811    Date: 2001/07/09 16:00:00 EDT
1812    Tag: blume-20010709-more-varargs
1813    Description:
1814    
1815    I changed the handling of varargs in ml-nlffigen again:
1816    The ellipsis ... will now simply be ignored (with an accompanying warning).
1817    
1818    The immediate effect is that you can actually call a varargs function
1819    from ML -- but you can't actually supply any arguments beyond the ones
1820    specified explicitly.  (For example, you can call printf with its format
1821    string, but you cannot pass additional arguments.)
1822    
1823    This behavior is only marginally more useful than the one before, but
1824    it has the advantage that a function or, more importantly, a function
1825    type never gets dropped on the floor, thus avoiding follow-up problems with
1826    other types that refer to the offending one.
1827    
1828    ----------------------------------------------------------------------
1829    Name: Matthias Blume
1830    Date: 2001/07/09 11:25:00 EDT
1831    Tag: blume-20010709-varargs
1832    Description:
1833    
1834    1. ckit-lib.cm now exports structure Error
1835    2. ml-nlffigen reports occurences of "..." (i.e., varargs function types)
1836       with a warning accompanied by a source location.  Moreover, it
1837       merely skips the offending function or type and proceeds with the
1838       rest of its work.u  As a result, one can safely feed C code containing
1839       "..." to ml-nlffigen.
1840    3. There are some internal improvements to CM, providing slightly
1841       more general string substitutions in the tools subsystem.
1842    
1843    ----------------------------------------------------------------------
1844    Name: Matthias Blume
1845    Date: 2001/06/27 15:10:00 EDT
1846    Tag: blume-20010627-concur
1847    Description:
1848    
1849    Fixed a small bug in CM's handling of parallel compilation.
1850    (You could observe the bug by Control-C-interrupting an ordinary
1851    CMB.make or CM.stabilize and then attaching some compile servers.
1852    The result was that all of a sudden the previously interrupted
1853    compilation would continue on its own.  This was because of
1854    an over-optimization: CM did not bother to clean out certain queues
1855    when no servers were attached "anyway", resulting in the contents
1856    of these queues to grab control when new servers did get attached.)
1857    
1858    There is also another minor update to the CM manual.
1859    
1860    ----------------------------------------------------------------------
1861    Name: Matthias Blume
1862    Date: 2001/06/26 16:15:00 EDT
1863    Tag: blume-20010626-cmdoc
1864    Description:
1865    
1866    Minor typo fixed in CM manual (syntax diagram for libraries).
1867    
1868    ----------------------------------------------------------------------
1869    Name: Matthias Blume
1870    Date: 2001/06/25 22:55:00 EDT
1871    Tag: blume-20010625-x86pc
1872    Description:
1873    
1874    Fixed a nasty bug in the X86 assembly code that caused signal
1875    handlers to fail (crash) randomly.
1876    
1877    ----------------------------------------------------------------------
1878    Name: Matthias Blume
1879    Date: 2001/06/25 12:05:00 EDT
1880    Tag: blume-20010625-nlffigen
1881    Description:
1882    
1883    This update fixes a number of minor bugs in ml-nlffigen as reported by
1884    Nick Carter <nbc@andrew.cmu.edu>.
1885    
1886      1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted.
1887      2. Default names for generated files are now derived from the name of
1888         the C file *without its directory*.  In particular, this causes generated
1889         files to be placed locally even if the C file is in some system directory.
1890      3. Default names for generated signatures and structures are also derived
1891         from the C file name without its directory.  This avoids silly things
1892         like "structure GL/GL".
1893         (Other silly names are still possible because ml-nlffigen does not do
1894          a thorough check of whether generated names are legal ML identifiers.
1895          When in doubt, use command line arguments to force particular names.)
1896    
1897    ----------------------------------------------------------------------
1898    Name: Matthias Blume
1899    Date: 2001/06/21 12:25:00 EDT
1900    Tag: blume-20010621-eXene
1901    Description:
1902    
1903    eXene now compiles and (sort of) works again.
1904    
1905    The library name (for version > 110.33) is $/eXene.cm.
1906    
1907    I also added an new example in src/eXene/examples/nbody.  See the
1908    README file there for details.
1909    
1910    ----------------------------------------------------------------------
1911    Name: Matthias Blume
1912    Date: 2001/06/20 16:40:00 EDT
1913    Tag: blume-20010620-cml
1914    Description:
1915    
1916    CML now compiles and works again.
1917    
1918    Libraries (for version > 110.33):
1919    
1920      $cml/cml.cm            Main CML library.
1921      $cml/basis.cm          CML's version of $/basis.cm.
1922      $cml/cml-internal.cm   Internal helper library.
1923      $cml/core-cml.cm       Internal helper library.
1924      $cml-lib/trace-cml.cm  Tracing facility.
1925      $cml-lib/smlnj-lib.cm  CML's version of $/smlnj-lib.cm
1926    
1927    The installer (config/install.sh) has been taught how to properly
1928    install this stuff.
1929    
1930    ----------------------------------------------------------------------
1931    Name: Matthias Blume
1932    Date: 2001/06/19 17:55:00 EDT
1933    Tag: blume-20010619-instantiate
1934    Description:
1935    
1936    This un-breaks the fix for bug 1432.
1937    (The bug was originally fixed in 110.9 but I broke it again some
1938    time after that.)
1939    
1940    ----------------------------------------------------------------------
1941    Name: Matthias Blume
1942    Date: 2001/06/19 17:25:00 EDT
1943    Tag: blume-20010619-signals
1944    Description:
1945    
1946    This should (hopefully) fix the long-standing signal handling bug.
1947    (The runtime system was constructing a continuation record with an
1948    incorrect descriptor which would cause the GC to drop data on the floor...)
1949    
1950    ----------------------------------------------------------------------
1951    Name: Matthias Blume
1952    Date: 2001/06/15 15:05:00 EDT
1953    Tag: blume-20010615-moresparc
1954    Description:
1955    
1956    Here is a short late-hour update related to Sparc c-calls:
1957    
1958     -- made handling of double-word arguments a bit smarter
1959    
1960     -- instruction selection phase tries to collapse certain clumsily
1961        constructed ML-Trees; typical example:
1962    
1963            ADD(ty,ADD(_,e,LI d1),LI d2)  ->  ADD(ty,e,LI(d1+d2))
1964    
1965        This currently has no further impact on SML/NJ since mlriscGen does
1966        not seem to generate such patterns in the first place, and c-calls
1967        (which did generate them in the beginning) has meanwhile been fixed
1968        so as to avoid them as well.
1969    
1970    ----------------------------------------------------------------------
1971    Name: Matthias Blume
1972    Date: 2001/06/15 15:05:00 EDT
1973    Tag: blume-20010615-sparc
1974    Description:
1975    
1976    The purpose of this update is to provide an implementation of NLFFI
1977    on Sparc machines.
1978    
1979    Here are the changes in detail:
1980    
1981       * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing
1982       the Sparc implementation of the c-calls API.
1983       * The Sparc backend of SML/NJ has been modified to uniformely use %fp
1984       for accessing the ML frame.  Thus, we have a real frame pointer and
1985       can freely modify %sp without need for an omit-frame-ptr phase.
1986       The vfp logic in src/compiler/CodeGen/* has been changed to accomodate
1987       this case.
1988       * ml-nlffigen has been taught to produce code for different architectures
1989       and calling conventions.
1990       * In a way similar to what was done in the x86 case, the Sparc
1991       backend uses its own specific extension to mltree.  (For example,
1992       it needs to be able to generate UNIMP instructions which are part
1993       of the calling convention.)
1994       * ml-nlffi-lib was reorganized to make it more modular (in particular,
1995       to make it easier to plug in new machine- and os-dependent parts).
1996    
1997    There are some other fairly unrelated bug fixes and cleanups as well:
1998    
1999       * I further hacked the .cm files for MLRISC tools (like MDLGen) so
2000       that they properly share their libraries with existing SML/NJ libraries.
2001       * I fixed a minor cosmetic bug in CM, supressing certain spurious
2002       follow-up error messages.
2003       * Updates to CM/CMB documentation.
2004    
2005    TODO items:
2006    
2007       * MLRISC should use a different register as its asmTemp on the Sparc.
2008         (The current %o2 is a really bad choice because it is part of the
2009         calling conventions, so things might interfere in unexpected ways.)
2010    
2011    ----------------------------------------------------------------------
2012    Name: Matthias Blume
2013    Date: 2001/06/07
2014    Tag: blume-20010607-calls
2015    Description:
2016    
2017    A number of internal changes related to C calls and calling conventions:
2018    
2019    1. ML-Tree CALL statements now carry a "pops" field.  It indicates the
2020       number of bytes popped implicitly (by the callee).  In most cases
2021       this field is 0 but on x86/win32 it is some non-zero value.  This
2022       is information provided for the benefit of the "omit-frameptr" pass.
2023    2. The CALL instruction on the x86 carries a similar "pops" field.
2024       The instruction selection phase copies its value from the ML-Tree
2025       CALL statement.
2026    3. On all other architectures, the instruction selection phase checks
2027       whether "pops=0" and complains if not.
2028    4. The c-calls implementation for x86 now accepts two calling conventions:
2029       "ccall" and "stdcall".  When "ccall" is selected, the caller cleans
2030       up after the call and pops is set to 0.  For "stdcall", the caller
2031       does nothing, leaving the cleanup to the callee; pops is set to
2032       the number of bytes that were pushed onto the stack.
2033    5. The cproto decoder (compiler/Semant/types/cproto.sml) now can
2034       distinguish between "ccall" and "stdcall".
2035    6. The UNIMP instruction has been added to the supported Sparc instruction
2036       set. (This is needed for implementing the official C calling convention
2037       on this architecture.)
2038    7. I fixed some of the .cm files under src/MLRISC/Tools to make them
2039       work with the latest CM.
2040    
2041    ----------------------------------------------------------------------
2042    Name: Matthias Blume
2043    Date: 2001/06/05 15:10:00 EDT
2044    Tag: blume-20010605-cm-index
2045    Description:
2046    
2047    0. The "lambdasplit" parameter for class "sml" in CM has been documented.
2048    
2049    1. CM can now generate "index files".  These are human-readable files
2050       that list on a per-.cm-file basis each toplevel symbol defined or
2051       imported.  The location of the index file for
2052       <p>/<d>.cm is <p>/CM/INDEX/<d>.cm.
2053       To enable index-file generation, set CM.Control.generate_index to true
2054       or export an environment-symbol: export CM_GENERATE_INDEX=true.
2055    
2056       The CM manual has been updated accordingly.
2057    
2058    2. I made some slight modifications to the c-calls API in MLRISC.
2059    
2060         a) There is now a callback to support saving/restoring of
2061            dedicated but caller-save registers around the actual call
2062            instruction.
2063         b) One can optionally specify a comment-annotation for the
2064            call instruction.
2065    
2066    3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop.
2067       (For example, the comment annotation shows the C prototype of
2068        the function being called.)
2069    
2070  ----------------------------------------------------------------------  ----------------------------------------------------------------------
2071  Name: Matthias Blume  Name: Matthias Blume
# Line 2309  Line 4364 
4364       elaborator). There were a lot of changes during my "linkpath" trials       elaborator). There were a lot of changes during my "linkpath" trials
4365       that could have been reverted to their original state but weren't.       that could have been reverted to their original state but weren't.
4366       Please, don't be too harsh on me for messing with this code a bit more       Please, don't be too harsh on me for messing with this code a bit more
4367       than what was strictly necessary...  (I _did_ resist the tempation       than what was strictly necessary...  (I _did_ resist the temptation
4368       of doing any "global reformatting" to avoid an untimely death at       of doing any "global reformatting" to avoid an untimely death at
4369       Dave's hands. :)       Dave's hands. :)
4370    

Legend:
Removed from v.837  
changed lines
  Added in v.1136

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