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 1137, Tue Mar 12 22:28:55 2002 UTC revision 1179, Tue Mar 26 03:04:46 2002 UTC
# Line 11  Line 11 
11  Date: yyyy/mm/dd  Date: yyyy/mm/dd
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14    
15    ----------------------------------------------------------------------
16    Name: Matthias Blume
17    Date: 2002/03/25 22:06:00 EST
18    Tag: blume-20020325-cprotobug
19    Description:
20    
21    Fixed a bug in cproto (c prototype decoder).
22    
23    ----------------------------------------------------------------------
24    Name: Matthias Blume
25    Date: 2002/03/25 16:00:00 EST
26    Tag: blume-20020325-raw-primops
27    Description:
28    
29    I did some cleanup to Allen's new primop code and
30    replaced yesterday's bootfiles with new ones.
31    (But they are stored in the same place.)
32    
33    ----------------------------------------------------------------------
34    Name: Matthias Blume
35    Date: 2002/03/24 22:40:00 EST
36    Tag: blume-20020324-bootfiles
37    Description:
38    
39    Made the bootfiles that Allen asked for.
40    
41    ----------------------------------------------------------------------
42    Name: Allen Leung
43    Date: 2002/03/23 15:50:00 EST
44    Tag: leunga-20020323-flint-cps-rcc-primops
45    Description:
46    
47      1. Changes to FLINT primops:
48    
49        (* make a call to a C-function;
50         * The primop carries C function prototype information and specifies
51         * which of its (ML-) arguments are floating point. C prototype
52         * information is for use by the backend, ML information is for
53         * use by the CPS converter. *)
54      | RAW_CCALL of { c_proto: CTypes.c_proto,
55                       ml_args: ccall_type list,
56                       ml_res_opt: ccall_type option,
57                       reentrant : bool
58                     } option
59       (* Allocate uninitialized storage on the heap.
60        * The record is meant to hold short-lived C objects, i.e., they
61        * are not ML pointers.  With the tag, the representation is
62        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
63        *)
64      | RAW_RECORD of {tag:bool,sz:int}
65      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
66    
67      2.  These CPS primops are now overloaded:
68    
69           rawload of {kind:numkind}
70           rawstore of {kind:numkind}
71    
72          The one argument form is:
73    
74             rawload {kind} address
75    
76          The two argument form is:
77    
78             rawload {kind} [ml object, byte-offset]
79    
80      3. RAW_CCALL/RCC now takes two extra arguments:
81    
82         a. The first is whether the C call is reentrant, i.e., whether
83            ML state should be saved and restored.
84         b. The second argument is a string argument specifying the name of
85            library and the C function.
86    
87         These things are currently not handled in the code generator, yet.
88    
89      4. In CProto,
90    
91         An encoding type of "bool" means "ml object" and is mapped into
92         C prototype of PTR.  Note that "bool" is different than "string",
93         even though "string" is also mapped into PTR, because "bool"
94         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
95    
96      5. Pickler/unpicker
97    
98         Changed to handle RAW_RECORD and newest RAW_CCALL
99    
100      6. MLRiscGen,
101    
102         1. Changed to handle the new rawload/rawstore/rawrecord operators.
103         2. Code for handling C Calls has been moved to a new module CPSCCalls,
104            in the file CodeGen/cpscompile/cps-c-calls.sml
105    
106      7. Added the conditional move operator
107    
108             condmove of branch
109    
110         to cps.  Generation of this is still buggy so it is currently
111         disabled.
112    
113    ----------------------------------------------------------------------
114    Name: Lal George
115    Date: 2002/03/22 14:18:25 EST
116    Tag: george-20020322-cps-branch-prob
117    Description:
118    
119    Implemented the Ball-Larus branch prediction-heuristics, and
120    incorporated graphical viewers for control flow graphs.
121    
122    Ball-Larus Heuristics:
123    ---------------------
124    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
125    
126    By design it uses the Dempster-Shafer theory for combining
127    probabilities.  For example, in the function:
128    
129        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
130    
131    the ball-larus heuristics predicts that the n=0 is unlikely
132    (OH-heuristic), and the 'then' branch is unlikely because of the
133    RH-heuristic -- giving the 'then' branch an even lower combined
134    probability using the Dempster-Shafer theory.
135    
136    Finally, John Reppy's loop analysis in MLRISC, further lowers the
137    probability of the 'then' branch because of the loop in the else
138    branch.
139    
140    
141    Graphical Viewing:
142    ------------------
143    I merely plugged in Allen's graphical viewers into the compiler. The
144    additional code is not much. At the top level, saying:
145    
146            Control.MLRISC.getFlag "cfg-graphical-view" := true;
147    
148    will display the graphical view of the control flow graph just before
149    back-patching.  daVinci must be in your path for this to work. If
150    daVinci is not available, then the default viewer can be changed
151    using:
152    
153            Control.MLRISC.getString "viewer"
154    
155    which can be set to "dot" or "vcg" for the corresponding viewers. Of
156    course, these viewers must be in your path.
157    
158    The above will display the compilation unit at the level of clusters,
159    many of which are small, boring, and un-interesting. Also setting:
160    
161            Control.MLRISC.getInt "cfg-graphical-view_size"
162    
163    will display clusters that are larger than the value set by the above.
164    
165    
166    ----------------------------------------------------------------------
167    Name: Matthias Blume
168    Date: 2002/03/21 22:20:00 EST
169    Tag: blume-20020321-kmp-bugfix
170    Description:
171    
172    Changed the interface to the KMP routine in PreString and fixed
173    a minor bug in one place where it was used.
174    
175    ----------------------------------------------------------------------
176    Name: Allen Leung
177    Date: 2002/03/21 20:30:00 EST
178    Tag: leunga-20020321-cfg
179    Description:
180    
181      Fixed a potential problem in cfg edge splitting.
182    
183    ----------------------------------------------------------------------
184    Name: Allen Leung
185    Date: 2002/03/21 17:15:00 EST
186    Tag: leunga-20020321-x86-fp-cfg
187    Description:
188    
189      1. Recoded the buggy parts of x86-fp.
190    
191         a. All the block reordering code has been removed.
192            We now depend on the block placement phases to do this work.
193    
194         b. Critical edge splitting code has been simplified and moved into the
195            CFG modules, as where they belong.
196    
197         Both of these were quite buggy and complex.  The code is now much, much
198         simpler.
199    
200      2. X86 backend.
201    
202         a. Added instructions for 64-bit support.  Instruction selection for
203            64-bit has not been committed, however, since that
204            requires changes to MLTREE which haven't been approved by
205            Lal and John.
206    
207         b. Added support for FUCOMI and FUCOMIP when generating code for
208            PentiumPro and above.  We only generate these instructions in
209            the fast-fp mode.
210    
211         c. Added cases for JP and JNP in X86FreqProps.
212    
213      3. CFG
214    
215         CFG now has a bunch of methods for edge splitting and merging.
216    
217      4. Machine description.
218    
219         John's simplification of MLTREE_BASIS.fcond broke a few machine
220         description things:
221    
222         rtl-build.{sig,sml} and hppa.mdl fixed.
223    
224         NOTE: the machine description stuff in the repository is still broken.
225               Again, I can't put my fixes in because that involves
226               changes to MLTREE.
227    
228    ----------------------------------------------------------------------
229    Name: Matthias Blume
230    Date: 2002/03/20 15:55:00 EST
231    Tag: blume-20020320-kmp
232    Description:
233    
234    Implemented Knuth-Morris-Pratt string matching in PreString and used
235    it for String.isSubstring, Substring.isSubstring, and
236    Substring.position.
237    
238    (Might need some stress-testing.  Simple examples worked fine.)
239    
240    ----------------------------------------------------------------------
241    Name: Matthias Blume
242    Date: 2002/03/19 16:37:00 EST
243    Tag: blume-20020319-witnesses
244    Description:
245    
246    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
247    
248    This implements a generic mechanism for changing constness qualifiers
249    anywhere within big C types without resorting to outright "casts".
250    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
251    modify the constness at the outermost level.)
252    The implementation of "convert" is based on the idea of "witness"
253    values -- values that are not used by the operation but whose types
254    "testify" to their applicability.  On the implementation side, "convert"
255    is simply a projection (returning its second curried argument).  With
256    cross-module inlining, it should not result in any machine code being
257    generated.
258    
259    ----------------------------------------------------------------------
260    Name: Matthias Blume
261    Date: 2002/03/15 16:40:00 EST
262    Tag: blume-20020315-basis
263    Description:
264    
265    Provided (preliminary?) implementations for
266    
267      {String,Substring}.{concatWith,isSuffix,isSubstring}
268    
269    and
270    
271      Substring.full
272    
273    Those are in the Basis spec but they were missing in SML/NJ.
274    
275    ----------------------------------------------------------------------
276    Name: Matthias Blume
277    Date: 2002/03/14 21:30:00 EST
278    Tag: blume-20020314-controls
279    Description:
280    
281    Controls:
282    ---------
283    
284    1. Factored out the recently-added Controls : CONTROLS stuff and put
285       it into its own library $/controls-lib.cm.  The source tree for
286       this is under src/smlnj-lib/Controls.
287    
288    2. Changed the names of types and functions in this interface, so they
289       make a bit more "sense":
290    
291          module -> registry
292          'a registry -> 'a group
293    
294    3. The interface now deals in ref cells only.  The getter/setter interface
295       is (mostly) gone.
296    
297    4. Added a function that lets one register an already-existing ref cell.
298    
299    5. Made the corresponding modifications to the rest of the code so that
300       everything compiles again.
301    
302    6. Changed the implementation of Controls.MLRISC back to something closer
303       to the original.  In particular, this module (and therefore MLRISC)
304       does not depend on Controls.  There now is some link-time code in
305       int-sys.sml that registers the MLRISC controls with the Controls
306       module.
307    
308    CM:
309    ---
310    
311      * One can now specify the lambda-split aggressiveness in init.cmi.
312    
313    ----------------------------------------------------------------------
314    Name: Allen Leung
315    Date: 2002/03/13 17:30:00 EST
316    Tag: leunga-20020313-x86-fp-unary
317    Description:
318    
319    Bug fix for:
320    
321    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
322    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
323    > - fun f(x,(y,z)) = Real.~ y;
324    > [autoloading]
325    > [autoloading done]
326    >       fchsl   (%eax), 184(%esp)
327    > Error: MLRisc bug: X86MCEmitter.emitInstr
328    >
329    > uncaught exception Error
330    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
331    
332    The problem was that the code generator did not generate any fp registers
333    in this case, and the ra didn't know that it needed to run the X86FP phase to
334    translate the pseudo fp instruction.   This only happened with unary fp
335    operators in certain situations.
336    
337    ----------------------------------------------------------------------
338    Name: Matthias Blume
339    Date: 2002/03/13 14:00:00 EST
340    Tag: blume-20020313-overload-etc
341    Description:
342    
343    1. Added _overload as a synonym for overload for backward compatibility.
344       (Control.overloadKW must be true for either version to be accepted.)
345    
346    2. Fixed bug in install script that caused more things to be installed
347       than what was requested in config/targets.
348    
349    3. Made CM aware of the (_)overload construct so that autoloading
350       works.
351    
352    ----------------------------------------------------------------------
353    Name: Matthias Blume
354    Date: 2002/03/12 22:03:00 EST
355    Tag: blume-20020312-url
356    Description:
357    
358    Forgot to update BOOT and srcarchiveurl.
359    
360  ----------------------------------------------------------------------  ----------------------------------------------------------------------
361  Name: Matthias Blume  Name: Matthias Blume
362  Date: 2002/03/12 17:30:00 EST  Date: 2002/03/12 17:30:00 EST
# Line 27  Line 373 
373    provides a bit more "stability":  Once CM has seen a compilation    provides a bit more "stability":  Once CM has seen a compilation
374    unit, it keeps its identity constant (as long as you do not delete    unit, it keeps its identity constant (as long as you do not delete
375    those crucial CM/GUID/* files).  This means that when you change    those crucial CM/GUID/* files).  This means that when you change
376    and interface, compiler, then go back to the old interface, and    an interface, compile, then go back to the old interface, and
377    compile again, you arrive at the original pid.    compile again, you arrive at the original pid.
378    
379    There now also is a mechanism that instructs CM to use the plain    There now also is a mechanism that instructs CM to use the plain
# Line 102  Line 448 
448  ----------------------------------------------------------------------  ----------------------------------------------------------------------
449  Name: Allen Leung  Name: Allen Leung
450  Date: 2002/03/11 10:30:00 EST  Date: 2002/03/11 10:30:00 EST
451  Tag: leunga-20020310-runtime-string0  Tag: leunga-20020311-runtime-string0
452  Description:  Description:
453    
454     The representation of the empty string now points to a     The representation of the empty string now points to a

Legend:
Removed from v.1137  
changed lines
  Added in v.1179

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