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 1124, Thu Mar 7 19:49:22 2002 UTC revision 1156, Thu Mar 21 22:01:11 2002 UTC
# Line 13  Line 13 
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: Allen Leung
17    Date: 2002/03/21 17:15:00 EST
18    Tag: leunga-20020321-x86-fp-cfg
19    Description:
20    
21      1. Recoded the buggy parts of x86-fp.
22    
23         a. All the block reordering code has been removed.
24            We now depend on the block placement phases to do this work.
25    
26         b. Critical edge splitting code has been simplified and moved into the
27            CFG modules, as where they belong.
28    
29         Both of these were quite buggy and complex.  The code is now much, much
30         simpler.
31    
32      2. X86 backend.
33    
34         a. Added instructions for 64-bit support.  Instruction selection for
35            64-bit has not been committed, however, since that
36            requires changes to MLTREE which haven't been approved by
37            Lal and John.
38    
39         b. Added support for FUCOMI and FUCOMIP when generating code for
40            PentiumPro and above.  We only generate these instructions in
41            the fast-fp mode.
42    
43         c. Added cases for JP and JNP in X86FreqProps.
44    
45      3. CFG
46    
47         CFG now has a bunch of methods for edge splitting and merging.
48    
49      4. Machine description.
50    
51         John's simplification of MLTREE_BASIS.fcond broke a few machine
52         description things:
53    
54         rtl-build.{sig,sml} and hppa.mdl fixed.
55    
56         NOTE: the machine description stuff in the repository is still broken.
57               Again, I can't put my fixes in because that involves
58               changes to MLTREE.
59    
60    ----------------------------------------------------------------------
61    Name: Matthias Blume
62    Date: 2002/03/20 15:55:00 EST
63    Tag: blume-20020320-kmp
64    Description:
65    
66    Implemented Knuth-Morris-Pratt string matching in PreString and used
67    it for String.isSubstring, Substring.isSubstring, and
68    Substring.position.
69    
70    (Might need some stress-testing.  Simple examples worked fine.)
71    
72    ----------------------------------------------------------------------
73    Name: Matthias Blume
74    Date: 2002/03/19 16:37:00 EST
75    Tag: blume-20020319-witnesses
76    Description:
77    
78    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
79    
80    This implements a generic mechanism for changing constness qualifiers
81    anywhere within big C types without resorting to outright "casts".
82    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
83    modify the constness at the outermost level.)
84    The implementation of "convert" is based on the idea of "witness"
85    values -- values that are not used by the operation but whose types
86    "testify" to their applicability.  On the implementation side, "convert"
87    is simply a projection (returning its second curried argument).  With
88    cross-module inlining, it should not result in any machine code being
89    generated.
90    
91    ----------------------------------------------------------------------
92    Name: Matthias Blume
93    Date: 2002/03/15 16:40:00 EST
94    Tag: blume-20020315-basis
95    Description:
96    
97    Provided (preliminary?) implementations for
98    
99      {String,Substring}.{concatWith,isSuffix,isSubstring}
100    
101    and
102    
103      Substring.full
104    
105    Those are in the Basis spec but they were missing in SML/NJ.
106    
107    ----------------------------------------------------------------------
108    Name: Matthias Blume
109    Date: 2002/03/14 21:30:00 EST
110    Tag: blume-20020314-controls
111    Description:
112    
113    Controls:
114    ---------
115    
116    1. Factored out the recently-added Controls : CONTROLS stuff and put
117       it into its own library $/controls-lib.cm.  The source tree for
118       this is under src/smlnj-lib/Controls.
119    
120    2. Changed the names of types and functions in this interface, so they
121       make a bit more "sense":
122    
123          module -> registry
124          'a registry -> 'a group
125    
126    3. The interface now deals in ref cells only.  The getter/setter interface
127       is (mostly) gone.
128    
129    4. Added a function that lets one register an already-existing ref cell.
130    
131    5. Made the corresponding modifications to the rest of the code so that
132       everything compiles again.
133    
134    6. Changed the implementation of Controls.MLRISC back to something closer
135       to the original.  In particular, this module (and therefore MLRISC)
136       does not depend on Controls.  There now is some link-time code in
137       int-sys.sml that registers the MLRISC controls with the Controls
138       module.
139    
140    CM:
141    ---
142    
143      * One can now specify the lambda-split aggressiveness in init.cmi.
144    
145    ----------------------------------------------------------------------
146    Name: Allen Leung
147    Date: 2002/03/13 17:30:00 EST
148    Tag: leunga-20020313-x86-fp-unary
149    Description:
150    
151    Bug fix for:
152    
153    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
154    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
155    > - fun f(x,(y,z)) = Real.~ y;
156    > [autoloading]
157    > [autoloading done]
158    >       fchsl   (%eax), 184(%esp)
159    > Error: MLRisc bug: X86MCEmitter.emitInstr
160    >
161    > uncaught exception Error
162    >   raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19
163    
164    The problem was that the code generator did not generate any fp registers
165    in this case, and the ra didn't know that it needed to run the X86FP phase to
166    translate the pseudo fp instruction.   This only happened with unary fp
167    operators in certain situations.
168    
169    ----------------------------------------------------------------------
170    Name: Matthias Blume
171    Date: 2002/03/13 14:00:00 EST
172    Tag: blume-20020313-overload-etc
173    Description:
174    
175    1. Added _overload as a synonym for overload for backward compatibility.
176       (Control.overloadKW must be true for either version to be accepted.)
177    
178    2. Fixed bug in install script that caused more things to be installed
179       than what was requested in config/targets.
180    
181    3. Made CM aware of the (_)overload construct so that autoloading
182       works.
183    
184    ----------------------------------------------------------------------
185    Name: Matthias Blume
186    Date: 2002/03/12 22:03:00 EST
187    Tag: blume-20020312-url
188    Description:
189    
190    Forgot to update BOOT and srcarchiveurl.
191    
192    ----------------------------------------------------------------------
193    Name: Matthias Blume
194    Date: 2002/03/12 17:30:00 EST
195    Tag: blume-20020312-version110392
196    Description:
197    
198    Yet another version number bump (because of small changes to the
199    binfile format).  Version number is now 110.39.2.  NEW BOOTFILES!
200    
201    Changes:
202    
203      The new pid generation scheme described a few weeks ago was overly
204      complicated.  I implemented a new mechanism that is simpler and
205      provides a bit more "stability":  Once CM has seen a compilation
206      unit, it keeps its identity constant (as long as you do not delete
207      those crucial CM/GUID/* files).  This means that when you change
208      an interface, compile, then go back to the old interface, and
209      compile again, you arrive at the original pid.
210    
211      There now also is a mechanism that instructs CM to use the plain
212      environment hash as a module's pid (effectively making its GUID
213      the empty string).  For this, "noguid" must be specified as an
214      option to the .sml file in question within its .cm file.
215      This is most useful for code that is being generated by tools such
216      as ml-nlffigen (because during development programmers tend to
217      erase the tool's entire output directory tree including CM's cached
218      GUIDs).  "noguid" is somewhat dangerous (since it can be used to locally
219      revert to the old, broken behavior of SML/NJ, but in specific cases
220      where there is no danger of interface confusion, its use is ok
221      (I think).
222    
223      ml-nlffigen by default generates "noguid" annotations.  They can be
224      turned off by specifying -guid in its command line.
225    
226    ----------------------------------------------------------------------
227    Name: Lal George
228    Date: 2002/03/12 12 14:42:36 EST
229    Tag: george-20020312-frequency-computation
230    Description:
231    
232    Integrated jump chaining and static block frequency into the
233    compiler. More details and numbers later.
234    
235    ----------------------------------------------------------------------
236    Name: Lal George
237    Date: 2002/03/11 11 22:38:53 EST
238    Tag: george-20020311-jump-chain-elim
239    Description:
240    
241    Tested the jump chain elimination on all architectures (except the
242    hppa).  This is on by default right now and is profitable for the
243    alpha and x86, however, it may not be profitable for the sparc and ppc
244    when compiling the compiler.
245    
246    The gc test will typically jump to a label at the end of the cluster,
247    where there is another jump to an external cluster containing the actual
248    code to invoke gc. This is to allow factoring of common gc invocation
249    sequences. That is to say, we generate:
250    
251            f:
252               testgc
253               ja   L1      % jump if above to L1
254    
255            L1:
256               jmp L2
257    
258    
259    After jump chain elimination the 'ja L1' instructions is converted to
260    'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end
261    up being implemented in their long form (if L2 is far away) using:
262    
263            jbe     L3      % jump if below or equal to L3
264            jmp     L2
265         L3:
266            ...
267    
268    
269    For large compilation units L2  may be far away.
270    
271    
272    ----------------------------------------------------------------------
273    Name: Matthias Blume
274    Date: 2002/03/11 13:30:00 EST
275    Tag: blume-20020311-mltreeeval
276    Description:
277    
278    A functor parameter was missing.
279    
280    ----------------------------------------------------------------------
281    Name: Allen Leung
282    Date: 2002/03/11 10:30:00 EST
283    Tag: leunga-20020311-runtime-string0
284    Description:
285    
286       The representation of the empty string now points to a
287    legal null terminated C string instead of unit.  It is now possible
288    to convert an ML string into C string with InlineT.CharVector.getData.
289    This compiles into one single machine instruction.
290    
291    ----------------------------------------------------------------------
292    Name: Allen Leung
293    Date: 2002/03/10 23:55:00 EST
294    Tag: leunga-20020310-x86-call
295    Description:
296    
297       Added machine generation for CALL instruction (relative displacement mode)
298    
299    ----------------------------------------------------------------------
300    Name: Matthias Blume
301    Date: 2002/03/08 16:05:00
302    Tag: blume-20020308-entrypoints
303    Description:
304    
305    Version number bumped to 110.39.1.  NEW BOOTFILES!
306    
307    Entrypoints: non-zero offset into a code object where execution should begin.
308    
309    - Added the notion of an entrypoint to CodeObj.
310    - Added reading/writing of entrypoint info to Binfile.
311    - Made runtime system bootloader aware of entrypoints.
312    - Use the address of the label of the first function given to mlriscGen
313      as the entrypoint.  This address is currently always 0, but it will
314      not be 0 once we turn on block placement.
315    - Removed the linkage cluster code (which was The Other Way(tm) of dealing
316      with entry points) from mlriscGen.
317    
318    ----------------------------------------------------------------------
319    Name: Allen Leung
320    Date: 2002/03/07 20:45:00 EST
321    Tag: leunga-20020307-x86-cmov
322    Description:
323    
324       Bug fixes for CMOVcc on x86.
325    
326       1. Added machine code generation for CMOVcc
327       2. CMOVcc is now generated in preference over SETcc on PentiumPro or above.
328       3. CMOVcc cannot have an immediate operand as argument.
329    
330    ----------------------------------------------------------------------
331    Name: Matthias Blume
332    Date: 2002/03/07 16:15:00 EST
333    Tag: blume-20020307-controls
334    Description:
335    
336    This is a very large but mostly boring patch which makes (almost)
337    every tuneable compiler knob (i.e., pretty much everything under
338    Control.* plus a few other things) configurable via both the command
339    line and environment variables in the style CM did its configuration
340    until now.
341    
342    Try starting sml with '-h' (or, if you are brave, '-H')
343    
344    To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which
345    implements the underlying generic mechanism.
346    
347    The interface to some of the existing such facilities has changed somewhat.
348    For example, the MLRiscControl module now provides mkFoo instead of getFoo.
349    (The getFoo interface is still there for backward-compatibility, but its
350    use is deprecated.)
351    
352    The ml-build script passes -Cxxx=yyy command-line arguments through so
353    that one can now twiddle the compiler settings when using this "batch"
354    compiler.
355    
356    TODO items:
357    
358    We should go through and throw out all controls that are no longer
359    connected to anything.  Moreover, we should go through and provide
360    meaningful (and correct!) documentation strings for those controls
361    that still are connected.
362    
363    Currently, multiple calls to Controls.new are accepted (only the first
364    has any effect).  Eventually we should make sure that every control
365    is being made (via Controls.new) exactly once.  Future access can then
366    be done using Controls.acc.
367    
368    Finally, it would probably be a good idea to use the getter-setter
369    interface to controls rather than ref cells.  For the time being, both
370    styles are provided by the Controls module, but getter-setter pairs are
371    better if thread-safety is of any concern because they can be wrapped.
372    
373    *****************************************
374    
375    One bug fix: The function blockPlacement in three of the MLRISC
376    backpatch files used to be hard-wired to one of two possibilities at
377    link time (according to the value of the placementFlag).  But (I
378    think) it should rather sense the flag every time.
379    
380    *****************************************
381    
382    Other assorted changes (by other people who did not supply a HISTORY entry):
383    
384    1. the cross-module inliner now works much better (Monnier)
385    2. representation of weights, frequencies, and probabilities in MLRISC
386       changed in preparation of using those for weighted block placement
387       (Reppy, George)
388    
389    ----------------------------------------------------------------------
390  Name: Lal George  Name: Lal George
391  Date: 2002/03/07 14:44:24 EST 2002  Date: 2002/03/07 14:44:24 EST 2002
392  Tag: george-20020307-weighted-block-placement  Tag: george-20020307-weighted-block-placement

Legend:
Removed from v.1124  
changed lines
  Added in v.1156

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