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 1155, Wed Mar 20 20:52:51 2002 UTC revision 1211, Tue May 21 14:54:32 2002 UTC
# Line 14  Line 14 
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16  Name: Matthias Blume  Name: Matthias Blume
17    Date: 2002/05/21 10:55:00 EDT
18    Tag: blume-20020521-misc
19    Description:
20    
21    - John tweaked runtime to be silent on heap export (except when
22      GC messages are on).
23    - I added a few more things (cross-compiling versions of CMB) to
24      config/preloads (as suggestions).
25    
26    ----------------------------------------------------------------------
27    Name: Matthias Blume
28    Date: 2002/05/20 22:25:00 EDT
29    Tag: blume-20020520-controls
30    Description:
31    
32    - Added ControlUtil structure to control-lib.cm.
33    - Use it throughout.
34    - Used Controls facility to define MLRISC controls (as opposed to
35      registering MLRISC control ref cells with Controls after the fact)
36    - Fixed messed-up controls priorities.
37    
38    * Removed again all the stuff from config/preloads that one wouldn't
39      be able to preload at the time the initial heap image is built.
40      (Many libraries, e.g., CML, do not exist yet at this time.  The
41       only libraries that can be preloaded via config/preloads are those
42       that come bundled with the bootfiles.)
43    
44    ----------------------------------------------------------------------
45    Name: Matthias Blume
46    Date: 2002/05/20 10:59:00 EDT
47    Tag: blume-20020520-preloads
48    Description:
49    
50    Added a lot of commented-out suggestions for things to be included
51    in config/preloads.
52    
53    ----------------------------------------------------------------------
54    Name: Allen Leung
55    Date: 2002/05/18 14:20:00 EDT
56    Tag: leunga-20020518-mdl
57    Description:
58    
59    o Made the mdl tool stuff compile and run again.
60    o I've disabled all the stuff that depends on RTL specifications; they
61      are all badly broken anyway.
62    
63    ----------------------------------------------------------------------
64    Name: Matthias Blume
65    Date: 2002/05/17 16:49:00 EDT
66    Tag: blume-20020517-controls
67    Description:
68    
69    0. John Reppy made several modifications to the SML/NJ library.
70       In particular, there is a shiny new controls-lib.cm.
71    
72    1. Pushed new controls interface through compiler so that everything
73       compiles again.
74    
75    2. Added FormatComb and FORMAT_COMB to the CML version of the
76       SML/NJ library (so that CML compiles again).
77    
78    3. Modified init scripts because XXX_DEFAULT environment variables
79       are no longer with us.  (Boot-time initialization is now done
80       using the same environment variables that are also used for
81       startup-time initialization of controls.)
82    
83    ----------------------------------------------------------------------
84    Name: Lal George
85    Date: 2002/05/15 09:20:10 EDT
86    Tag: george-20020515-pseudo-op-decls
87    Description:
88    
89            All pseudo-ops emitted before the first segment declaration
90    such as TEXT, DATA, and BSS directives are assumed to be global
91    declarations and are emitted first in the assembly file. This is
92    useful in a number of situations where one has pseudo-ops that are not
93    specific to any segment, and also works around the constraint that one
94    cannot have client pseudo-ops in the TEXT segment.
95    
96            Because no segment is associated with these declarations it is
97    an error to allocate any space or objects before the first segment
98    directive and an exception will be raised. However, we cannot make
99    this check for client pseudo-ops.
100    
101            These top level declarations are a field in the CFG graph_info.
102    In theory you can continue to add to this field after the CFG has been
103    built -- provided you know what you are doing;-)
104    
105    ----------------------------------------------------------------------
106    Name: Matthias Blume
107    Date: 2002/05/13 16:40:00 EDT
108    Tag: blume-20020513-pp-etc
109    Description:
110    
111    A few minor bugfixes:
112    
113      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
114        (Bogus printouts for redefined bindings still occur.  Compiler
115        bug should no longer occur now.  We need to redo the prettyprinter
116        from scratch.)
117    
118      - CM pathname printer now also adds escape sequences for ( and )
119    
120      - commend and docu fixes for ml-nlffi
121    
122    ----------------------------------------------------------------------
123    Name: Matthias Blume
124    Date: 2002/05/10 16:40:00 EDT
125    Tag: blume-20020510-erg-textio
126    Description:
127    
128    Applied the following bugfix provided by Emden Gansner:
129    
130        Output is corrupted when outputSubstr is used rather than output.
131    
132        The problem occurs when a substring
133    
134            ss = (s, dataStart, dataLen)
135    
136        where dataStart > 0, fills a stream buffer with avail bytes left.
137        avail bytes of s, starting at index dataStart, are copied into the
138        buffer, the buffer is flushed, and then the remaining dataLen-avail
139        bytes of ss are copied into the beginning of the buffer. Instead of
140        starting this copy at index dataStart+avail in s, the current code
141        starts the copy at index avail.
142    
143        Fix:
144        In text-io-fn.sml, change line 695 from
145             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
146        to
147             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
148    
149    ----------------------------------------------------------------------
150    Name: Matthias Blume
151    Date: 2002/04/12 13:55:00 EDT
152    Tag: blume-20020412-assyntax
153    Description:
154    
155    1. Grabbed newer assyntax.h from the XFree86 project.
156    2. Fiddled with how to compile X86.prim.asm without warnings.
157    3. (Very) Minor cleanup in CM.
158    
159    ----------------------------------------------------------------------
160    Name: Matthias Blume
161    Date: 2002/04/01 (no joke!) 17:07:00 EST
162    Tag: blume-20020401-x86div
163    Description:
164    
165    Added full support for div/mod/rem/quot on the x86, using the machine
166    instruction's two results (without clumsily recomputing the remainder)
167    directly where appropriate.
168    
169    Some more extensive power-of-two support was added to the x86 instruction
170    selector (avoiding expensive divs, mods, and muls where they can be
171    replaced with cheaper shifts and masks).  However, this sort of thing
172    ought to be done earlier, e.g., within the CPS optimizer so that
173    all architectures benefit from it.
174    
175    The compiler compiles to a fixed point, but changes might be somewhat
176    fragile nevertheless.  Please, report any strange things that you might
177    see wrt. div/mod/quot/rem...
178    
179    ----------------------------------------------------------------------
180    Name: Matthias Blume
181    Date: 2002/03/29 17:22:00
182    Tag: blume-20020329-div
183    Description:
184    
185    Fixed my broken div/mod logic.  Unfortunately, this means that the
186    inline code for div/mod now has one more comparison than before.
187    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
188    The problem was with quotient = 0, because that alone does not tell
189    us which way the rounding went.  One then has to look at whether
190    remainder and divisor have the same sign...  :(
191    
192    Anyway, I replaced the bootfiles with fresh ones...
193    
194    ----------------------------------------------------------------------
195    Name: Matthias Blume
196    Date: 2002/03/29 14:10:00 EST
197    Tag: blume-20020329-inlprims
198    Description:
199    
200    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
201    
202    Primops have changed. This means that the bin/boot-file formats have
203    changed as well.
204    
205    To make sure that there is no confusion, I made a new version.
206    
207    
208    CHANGES:
209    
210    * removed REMT from mltree (remainder should never overflow).
211    
212    * added primops to deal with divisions of all flavors to the frontend
213    
214    * handled these primops all the way through so they map to their respective
215      MLRISC support
216    
217    * used these primops in the implementation of Int, Int32, Word, Word32
218    
219    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
220    
221    * parameterized INLMIN, INLMAX, and INLABS by a numkind
222    
223    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
224      floating point
225    
226    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
227      and Real (but Real.abs maps to a separate floating-point-only primop)
228    
229    
230    TODO items:
231    
232    * Hacked Alpha32 instruction selection, disabling the selection of REMx
233      instructions because the machine instruction encoder cannot handle
234      them.  (Hppa, PPC, and Sparc instruction selection did not handle
235      REM in the first place, and REM is supported by the x86 machine coder.)
236    
237    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
238      selection phase.  (The two can be streamlined because the hardware
239      delivers both quotient and remainder at the same time anyway.)
240    
241    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
242      (Currently the behavior is inconsistent both across architectures and
243      wrt. the draft Basis spec.)
244    
245    * Word8 should eventually be handled natively, too.
246    
247    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
248      as if there currently is no execution path that could trigger it in
249      SML/NJ.  (The assumptions underlying functions arith and promotable do not
250      hold for things like multiplication and division.)
251    
252    ----------------------------------------------------------------------
253    Name: Matthias Blume
254    Date: 2002/03/27 16:27:00 EST
255    Tag: blume-20020327-mlrisc-divisions
256    Description:
257    
258    Added support for all four division operations (ML's div, mod, quot,
259    and rem) to MLRISC.  In the course of doing so, I also rationalized
260    the naming (no more annoying switch-around of DIV and QUOT), by
261    parameterizing the operation by div_rounding_mode (which can be either
262    DIV_TO_ZERO or DIV_TO_NEGINF).
263    
264    The generic MLTreeGen functor takes care of compiling all four
265    operations down to only round-to-zero div.
266    
267    Missing pieces:
268    
269      * Doing something smarter than relying on MLTreeGen on architectures
270        like, e.g., the x86 where hardware division delivers both quotient and
271        remainder at the same time.  With this, the implementation of the
272        round-to-neginf operations could be further streamlined.
273    
274      * Remove inlining support for div/mod/rem from the frontend and replace it
275        with primops that get carried through to the backend.  Do this for all
276        int and word types.
277    
278    ----------------------------------------------------------------------
279    Name: Matthias Blume
280    Date: 2002/03/25 17:25:00 EST
281    Tag: blume-20020325-divmod
282    Description:
283    
284    I improved (hopefully without breaking them) the implementation of Int.div,
285    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
286    advantage of the following observations:
287    
288      Let  q = x quot y      r = x rem y
289           d = x div  y      m = x mod y
290    
291    where "quot" is the round-to-zero version of integer division that
292    hardware usually provides.  Then we have:
293    
294         r = x - q * y        where neither the * nor the - will overflow
295         d = if q >= 0 orelse x = q * y then q else q - 1
296                              where neither the * nor the - will overflow
297         m = if q >= 0 orelse r = 0 then r else r + y
298                              where the + will not overflow
299    
300    This results in substantial simplification of the generated code.
301    The following table shows the number of CFG nodes and edges generated
302    for
303            fun f (x, y) = x OPER y
304            (* with OPER \in div, mod, quot, rem *)
305    
306    
307        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
308        --------------------------------------------------------
309         div |         24 |         39 |         12 |         16
310         mod |         41 |         71 |         12 |         16
311        quot |          8 |         10 |          8 |         10
312         rem |         10 |         14 |          8 |         10
313    
314    
315    ----------------------------------------------------------------------
316    Name: Matthias Blume
317    Date: 2002/03/25 22:06:00 EST
318    Tag: blume-20020325-cprotobug
319    Description:
320    
321    Fixed a bug in cproto (c prototype decoder).
322    
323    ----------------------------------------------------------------------
324    Name: Matthias Blume
325    Date: 2002/03/25 16:00:00 EST
326    Tag: blume-20020325-raw-primops
327    Description:
328    
329    I did some cleanup to Allen's new primop code and
330    replaced yesterday's bootfiles with new ones.
331    (But they are stored in the same place.)
332    
333    ----------------------------------------------------------------------
334    Name: Matthias Blume
335    Date: 2002/03/24 22:40:00 EST
336    Tag: blume-20020324-bootfiles
337    Description:
338    
339    Made the bootfiles that Allen asked for.
340    
341    ----------------------------------------------------------------------
342    Name: Allen Leung
343    Date: 2002/03/23 15:50:00 EST
344    Tag: leunga-20020323-flint-cps-rcc-primops
345    Description:
346    
347      1. Changes to FLINT primops:
348    
349        (* make a call to a C-function;
350         * The primop carries C function prototype information and specifies
351         * which of its (ML-) arguments are floating point. C prototype
352         * information is for use by the backend, ML information is for
353         * use by the CPS converter. *)
354      | RAW_CCALL of { c_proto: CTypes.c_proto,
355                       ml_args: ccall_type list,
356                       ml_res_opt: ccall_type option,
357                       reentrant : bool
358                     } option
359       (* Allocate uninitialized storage on the heap.
360        * The record is meant to hold short-lived C objects, i.e., they
361        * are not ML pointers.  With the tag, the representation is
362        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
363        *)
364      | RAW_RECORD of {tag:bool,sz:int}
365      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
366    
367      2.  These CPS primops are now overloaded:
368    
369           rawload of {kind:numkind}
370           rawstore of {kind:numkind}
371    
372          The one argument form is:
373    
374             rawload {kind} address
375    
376          The two argument form is:
377    
378             rawload {kind} [ml object, byte-offset]
379    
380      3. RAW_CCALL/RCC now takes two extra arguments:
381    
382         a. The first is whether the C call is reentrant, i.e., whether
383            ML state should be saved and restored.
384         b. The second argument is a string argument specifying the name of
385            library and the C function.
386    
387         These things are currently not handled in the code generator, yet.
388    
389      4. In CProto,
390    
391         An encoding type of "bool" means "ml object" and is mapped into
392         C prototype of PTR.  Note that "bool" is different than "string",
393         even though "string" is also mapped into PTR, because "bool"
394         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
395    
396      5. Pickler/unpicker
397    
398         Changed to handle RAW_RECORD and newest RAW_CCALL
399    
400      6. MLRiscGen,
401    
402         1. Changed to handle the new rawload/rawstore/rawrecord operators.
403         2. Code for handling C Calls has been moved to a new module CPSCCalls,
404            in the file CodeGen/cpscompile/cps-c-calls.sml
405    
406      7. Added the conditional move operator
407    
408             condmove of branch
409    
410         to cps.  Generation of this is still buggy so it is currently
411         disabled.
412    
413    ----------------------------------------------------------------------
414    Name: Lal George
415    Date: 2002/03/22 14:18:25 EST
416    Tag: george-20020322-cps-branch-prob
417    Description:
418    
419    Implemented the Ball-Larus branch prediction-heuristics, and
420    incorporated graphical viewers for control flow graphs.
421    
422    Ball-Larus Heuristics:
423    ---------------------
424    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
425    
426    By design it uses the Dempster-Shafer theory for combining
427    probabilities.  For example, in the function:
428    
429        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
430    
431    the ball-larus heuristics predicts that the n=0 is unlikely
432    (OH-heuristic), and the 'then' branch is unlikely because of the
433    RH-heuristic -- giving the 'then' branch an even lower combined
434    probability using the Dempster-Shafer theory.
435    
436    Finally, John Reppy's loop analysis in MLRISC, further lowers the
437    probability of the 'then' branch because of the loop in the else
438    branch.
439    
440    
441    Graphical Viewing:
442    ------------------
443    I merely plugged in Allen's graphical viewers into the compiler. The
444    additional code is not much. At the top level, saying:
445    
446            Control.MLRISC.getFlag "cfg-graphical-view" := true;
447    
448    will display the graphical view of the control flow graph just before
449    back-patching.  daVinci must be in your path for this to work. If
450    daVinci is not available, then the default viewer can be changed
451    using:
452    
453            Control.MLRISC.getString "viewer"
454    
455    which can be set to "dot" or "vcg" for the corresponding viewers. Of
456    course, these viewers must be in your path.
457    
458    The above will display the compilation unit at the level of clusters,
459    many of which are small, boring, and un-interesting. Also setting:
460    
461            Control.MLRISC.getInt "cfg-graphical-view_size"
462    
463    will display clusters that are larger than the value set by the above.
464    
465    
466    ----------------------------------------------------------------------
467    Name: Matthias Blume
468    Date: 2002/03/21 22:20:00 EST
469    Tag: blume-20020321-kmp-bugfix
470    Description:
471    
472    Changed the interface to the KMP routine in PreString and fixed
473    a minor bug in one place where it was used.
474    
475    ----------------------------------------------------------------------
476    Name: Allen Leung
477    Date: 2002/03/21 20:30:00 EST
478    Tag: leunga-20020321-cfg
479    Description:
480    
481      Fixed a potential problem in cfg edge splitting.
482    
483    ----------------------------------------------------------------------
484    Name: Allen Leung
485    Date: 2002/03/21 17:15:00 EST
486    Tag: leunga-20020321-x86-fp-cfg
487    Description:
488    
489      1. Recoded the buggy parts of x86-fp.
490    
491         a. All the block reordering code has been removed.
492            We now depend on the block placement phases to do this work.
493    
494         b. Critical edge splitting code has been simplified and moved into the
495            CFG modules, as where they belong.
496    
497         Both of these were quite buggy and complex.  The code is now much, much
498         simpler.
499    
500      2. X86 backend.
501    
502         a. Added instructions for 64-bit support.  Instruction selection for
503            64-bit has not been committed, however, since that
504            requires changes to MLTREE which haven't been approved by
505            Lal and John.
506    
507         b. Added support for FUCOMI and FUCOMIP when generating code for
508            PentiumPro and above.  We only generate these instructions in
509            the fast-fp mode.
510    
511         c. Added cases for JP and JNP in X86FreqProps.
512    
513      3. CFG
514    
515         CFG now has a bunch of methods for edge splitting and merging.
516    
517      4. Machine description.
518    
519         John's simplification of MLTREE_BASIS.fcond broke a few machine
520         description things:
521    
522         rtl-build.{sig,sml} and hppa.mdl fixed.
523    
524         NOTE: the machine description stuff in the repository is still broken.
525               Again, I can't put my fixes in because that involves
526               changes to MLTREE.
527    
528    ----------------------------------------------------------------------
529    Name: Matthias Blume
530  Date: 2002/03/20 15:55:00 EST  Date: 2002/03/20 15:55:00 EST
531  Tag: blume-20020320-kmp  Tag: blume-20020320-kmp
532  Description:  Description:

Legend:
Removed from v.1155  
changed lines
  Added in v.1211

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