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 1175, Mon Mar 25 03:38:44 2002 UTC revision 1190, Mon May 13 20:39:05 2002 UTC
# Line 14  Line 14 
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16  Name: Matthias Blume  Name: Matthias Blume
17    Date: 2002/05/13 16:40:00 EDT
18    Tag: blume-20020513-pp-etc
19    Description:
20    
21    A few minor bugfixes:
22    
23      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
24        (Bogus printouts for redefined bindings still occur.  Compiler
25        bug should no longer occur now.  We need to redo the prettyprinter
26        from scratch.)
27    
28      - CM pathname printer now also adds escape sequences for ( and )
29    
30      - commend and docu fixes for ml-nlffi
31    
32    ----------------------------------------------------------------------
33    Name: Matthias Blume
34    Date: 2002/05/10 16:40:00 EDT
35    Tag: blume-20020510-erg-textio
36    Description:
37    
38    Applied the following bugfix provided by Emden Gansner:
39    
40        Output is corrupted when outputSubstr is used rather than output.
41    
42        The problem occurs when a substring
43    
44            ss = (s, dataStart, dataLen)
45    
46        where dataStart > 0, fills a stream buffer with avail bytes left.
47        avail bytes of s, starting at index dataStart, are copied into the
48        buffer, the buffer is flushed, and then the remaining dataLen-avail
49        bytes of ss are copied into the beginning of the buffer. Instead of
50        starting this copy at index dataStart+avail in s, the current code
51        starts the copy at index avail.
52    
53        Fix:
54        In text-io-fn.sml, change line 695 from
55             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
56        to
57             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
58    
59    ----------------------------------------------------------------------
60    Name: Matthias Blume
61    Date: 2002/04/12 13:55:00 EDT
62    Tag: blume-20020412-assyntax
63    Description:
64    
65    1. Grabbed newer assyntax.h from the XFree86 project.
66    2. Fiddled with how to compile X86.prim.asm without warnings.
67    3. (Very) Minor cleanup in CM.
68    
69    ----------------------------------------------------------------------
70    Name: Matthias Blume
71    Date: 2002/04/01 (no joke!) 17:07:00 EST
72    Tag: blume-20020401-x86div
73    Description:
74    
75    Added full support for div/mod/rem/quot on the x86, using the machine
76    instruction's two results (without clumsily recomputing the remainder)
77    directly where appropriate.
78    
79    Some more extensive power-of-two support was added to the x86 instruction
80    selector (avoiding expensive divs, mods, and muls where they can be
81    replaced with cheaper shifts and masks).  However, this sort of thing
82    ought to be done earlier, e.g., within the CPS optimizer so that
83    all architectures benefit from it.
84    
85    The compiler compiles to a fixed point, but changes might be somewhat
86    fragile nevertheless.  Please, report any strange things that you might
87    see wrt. div/mod/quot/rem...
88    
89    ----------------------------------------------------------------------
90    Name: Matthias Blume
91    Date: 2002/03/29 17:22:00
92    Tag: blume-20020329-div
93    Description:
94    
95    Fixed my broken div/mod logic.  Unfortunately, this means that the
96    inline code for div/mod now has one more comparison than before.
97    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
98    The problem was with quotient = 0, because that alone does not tell
99    us which way the rounding went.  One then has to look at whether
100    remainder and divisor have the same sign...  :(
101    
102    Anyway, I replaced the bootfiles with fresh ones...
103    
104    ----------------------------------------------------------------------
105    Name: Matthias Blume
106    Date: 2002/03/29 14:10:00 EST
107    Tag: blume-20020329-inlprims
108    Description:
109    
110    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
111    
112    Primops have changed. This means that the bin/boot-file formats have
113    changed as well.
114    
115    To make sure that there is no confusion, I made a new version.
116    
117    
118    CHANGES:
119    
120    * removed REMT from mltree (remainder should never overflow).
121    
122    * added primops to deal with divisions of all flavors to the frontend
123    
124    * handled these primops all the way through so they map to their respective
125      MLRISC support
126    
127    * used these primops in the implementation of Int, Int32, Word, Word32
128    
129    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
130    
131    * parameterized INLMIN, INLMAX, and INLABS by a numkind
132    
133    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
134      floating point
135    
136    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
137      and Real (but Real.abs maps to a separate floating-point-only primop)
138    
139    
140    TODO items:
141    
142    * Hacked Alpha32 instruction selection, disabling the selection of REMx
143      instructions because the machine instruction encoder cannot handle
144      them.  (Hppa, PPC, and Sparc instruction selection did not handle
145      REM in the first place, and REM is supported by the x86 machine coder.)
146    
147    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
148      selection phase.  (The two can be streamlined because the hardware
149      delivers both quotient and remainder at the same time anyway.)
150    
151    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
152      (Currently the behavior is inconsistent both across architectures and
153      wrt. the draft Basis spec.)
154    
155    * Word8 should eventually be handled natively, too.
156    
157    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
158      as if there currently is no execution path that could trigger it in
159      SML/NJ.  (The assumptions underlying functions arith and promotable do not
160      hold for things like multiplication and division.)
161    
162    ----------------------------------------------------------------------
163    Name: Matthias Blume
164    Date: 2002/03/27 16:27:00 EST
165    Tag: blume-20020327-mlrisc-divisions
166    Description:
167    
168    Added support for all four division operations (ML's div, mod, quot,
169    and rem) to MLRISC.  In the course of doing so, I also rationalized
170    the naming (no more annoying switch-around of DIV and QUOT), by
171    parameterizing the operation by div_rounding_mode (which can be either
172    DIV_TO_ZERO or DIV_TO_NEGINF).
173    
174    The generic MLTreeGen functor takes care of compiling all four
175    operations down to only round-to-zero div.
176    
177    Missing pieces:
178    
179      * Doing something smarter than relying on MLTreeGen on architectures
180        like, e.g., the x86 where hardware division delivers both quotient and
181        remainder at the same time.  With this, the implementation of the
182        round-to-neginf operations could be further streamlined.
183    
184      * Remove inlining support for div/mod/rem from the frontend and replace it
185        with primops that get carried through to the backend.  Do this for all
186        int and word types.
187    
188    ----------------------------------------------------------------------
189    Name: Matthias Blume
190    Date: 2002/03/25 17:25:00 EST
191    Tag: blume-20020325-divmod
192    Description:
193    
194    I improved (hopefully without breaking them) the implementation of Int.div,
195    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
196    advantage of the following observations:
197    
198      Let  q = x quot y      r = x rem y
199           d = x div  y      m = x mod y
200    
201    where "quot" is the round-to-zero version of integer division that
202    hardware usually provides.  Then we have:
203    
204         r = x - q * y        where neither the * nor the - will overflow
205         d = if q >= 0 orelse x = q * y then q else q - 1
206                              where neither the * nor the - will overflow
207         m = if q >= 0 orelse r = 0 then r else r + y
208                              where the + will not overflow
209    
210    This results in substantial simplification of the generated code.
211    The following table shows the number of CFG nodes and edges generated
212    for
213            fun f (x, y) = x OPER y
214            (* with OPER \in div, mod, quot, rem *)
215    
216    
217        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
218        --------------------------------------------------------
219         div |         24 |         39 |         12 |         16
220         mod |         41 |         71 |         12 |         16
221        quot |          8 |         10 |          8 |         10
222         rem |         10 |         14 |          8 |         10
223    
224    
225    ----------------------------------------------------------------------
226    Name: Matthias Blume
227    Date: 2002/03/25 22:06:00 EST
228    Tag: blume-20020325-cprotobug
229    Description:
230    
231    Fixed a bug in cproto (c prototype decoder).
232    
233    ----------------------------------------------------------------------
234    Name: Matthias Blume
235    Date: 2002/03/25 16:00:00 EST
236    Tag: blume-20020325-raw-primops
237    Description:
238    
239    I did some cleanup to Allen's new primop code and
240    replaced yesterday's bootfiles with new ones.
241    (But they are stored in the same place.)
242    
243    ----------------------------------------------------------------------
244    Name: Matthias Blume
245  Date: 2002/03/24 22:40:00 EST  Date: 2002/03/24 22:40:00 EST
246  Tag: blume-20020324-bootfiles  Tag: blume-20020324-bootfiles
247  Description:  Description:

Legend:
Removed from v.1175  
changed lines
  Added in v.1190

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