pragma noinduction broke memcpy on mcs51 large model. Moved it into z80 code.
[fw/sdcc] / doc / SDCCBugsFixed.html
1 <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
2 <html>
3 <head>
4    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5    <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 i686) [Netscape]">
6 </head>
7 <body>
8 <b><font size=+2>Enhancements and Bug fixes.</font></b>
9 <br>&nbsp;
10 <blockquote>
11 <hr WIDTH="100%">
12 <br><b>Release 2.1.9G</b>
13 <ul>
14 <li>
15 <font color="#CC0000">Applied several patches provided by&nbsp; "Anton
16 Voloshin" &lt;vav@isv.ru> mainly to SDCCglue.c, SDCCmain.c &amp; sdcdb/cmd.c</font></li>
17
18 <li>
19 <font color="#CC0000">First parameter of struct member function pointer
20 not passed in register.</font></li>
21
22 <li>
23 <font color="#CC0000">Parameter passing problem if first parameter of a
24 routine passed as second parm of another routine, vice versa. This bug
25 would caused some of the library routines to fail.</font></li>
26
27 <li>
28 <font color="#CC0000">Address of structure member passed as parameter caused
29 problems.</font></li>
30
31 <li>
32 <font color="#CC0000">#pragma callee-saves did not always work.</font></li>
33
34 <li>
35 <font color="#CC0000">Furthur bug fix for live range computation within
36 loops.</font></li>
37
38 <li>
39 <font color="#CC0000">Register 'b' could be clobbered when there was '*',
40 '/' or '%' operation for generic pointers.</font></li>
41
42 <li>
43 <font color="#CC0000">initialisation for pointers to structure elements
44 in code space generated errors.</font></li>
45
46 <li>
47 <font color="#CC0000">Debugger info lost when multiple files were linked
48 .</font></li>
49
50 <li>
51 <font color="#CC0000">Fixed buf in printf_large.c(vsprintf called with wrong parms)
52 .</font></li>
53
54 <li>
55 <font color="#CC0000">"extern" variables when spilt did not allocate spill locations
56 . i.e. "sloc" undefined error.
57 .</font></li>
58
59 <li>
60 <font color="#CC0000">Added optimization for PUSH. "xdata" variables do not need to be
61 assigned to temps to be pushed.
62 .</font></li>
63
64 <li>
65 <font color="#CC0000">Fixed aliasing problem where some pointer sub expressions
66 were carried across basic blocks .</font></li>
67
68 <li>
69 <font color="#CC0000">Upgraded to version 0.2.36 of ucsim .</font></li>
70
71 <li>
72 <font color="#CC0000">Added new optimization within basic blocks pointer
73 set values will replace get pointer values within a basic block. (across
74 basic blocks is a little bit complex will have to think about it some more).</font></li>
75
76 <br><font color="#CC0000">which in plain english means.</font>
77 <br><font color="#CC0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a->b
78 = 10;</font>
79 <br><font color="#CC0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putchar(a->b);</font>
80 <br><font color="#CC0000">will come..</font>
81 <br><font color="#CC0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a->b
82 = 10;</font>
83 <br><font color="#CC0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
84 putchar(10);</font></ul>
85 </blockquote>
86
87 <blockquote>
88 <hr WIDTH="100%">
89 <br><b>Release 2.1.9F</b>
90 <ul>
91 <li>
92 <font color="#CC0000">pointers passed to functions as parameters are removed
93 from cse list.</font></li>
94
95 <li>
96 <font color="#CC0000">live range computation for variables inside loops
97 improved.</font></li>
98
99 <li>
100 <font color="#CC0000">upgraded ucsim to latest release 0.2.31</font></li>
101
102 <li>
103 <font color="#CC0000">loop invariant bug fix for (global variables assigned
104 constant values inside a loop)</font></li>
105
106 <li>
107 <font color="#CC0000">Applied patch provided by&nbsp; "Anton Voloshin"
108 &lt;vav@isv.ru> rel files put into separate lines in the .lnk file.</font></li>
109
110 <li>
111 <font color="#CC0000">union of structures caused compiler to generate incorrect
112 code for member access.</font></li>
113
114 <li>
115 <font color="#CC0000">added patch to vprintf.c to null terminate output
116 string. BESSIERE_Jerome@stna.dgac.fr (BESSIERE Jerome)</font></li>
117
118 <li>
119 <font color="#CC0000">Debugger had problem with structures/unions on stack</font></li>
120
121 <li>
122 <font color="#CC0000">Debugger will now stop when simulator stops even
123 when break point not hit.</font></li>
124
125 <li>
126 <font color="#CC0000">Debugger will display simulators "startup message",
127 this makes it a clearer to the user that the debugger is actually piggy
128 backing on top of the simulator.</font></li>
129
130 <li>
131 <font color="#CC0000">Applied patch to assembler/linker some names were
132 getting truncated @ 8 characters . patch by&nbsp; "Anton Voloshin" &lt;vav@isv.ru></font></li>
133
134 <li>
135 <font color="#CC0000">_gptrput.c was leaving a byte on stack if unknown
136 storage class.</font></li>
137
138 <li>
139 <font color="#CC0000">parameter passing was incorrect for reentrant functions
140 when prototype declared without parameter name.</font></li>
141 </ul>
142 </blockquote>
143
144 <blockquote>
145 <hr WIDTH="100%">
146 <br><b><font size=+1>Release 2.1.9E</font></b>
147 <ul>
148 <li>
149 <font color="#CC0000">"remat " was not being cleared for global variables.</font></li>
150
151 <li>
152 <font color="#CC0000">stack offset of a variable computed incorrectly in
153 some situations.</font></li>
154
155 <li>
156 <font color="#CC0000">Applied patch for floating point routine provided
157 by<font size=+1> </font>Wojciech Zabolotny &lt;wzab@ise.pw.edu.pl></font></li>
158
159 <li>
160 <font color="#CC0000">Force allocation of local variable if address taken
161 (even if not initialised)</font></li>
162
163 <li>
164 <font color="#CC0000">Fixed loop reversal bug .</font></li>
165
166 <li>
167 <font color="#CC0000">Fixed another bug in register allocator , long variables
168 can be printfed now.</font></li>
169
170 <li>
171 <font color="#CC0000">DEBUGGER can now print values on stack and aggregates.</font></li>
172
173 <li>
174 <font color="#CC0000">Upgraded to 0.2.26 of ucsim.</font></li>
175 </ul>
176 </blockquote>
177
178 <blockquote>
179 <hr WIDTH="100%">
180 <br><b><font size=+1>Release 2.1.9D</font></b>
181 <ul>
182 <li>
183 <font color="#CC0000">Fixed loop optimization bug was treating variables
184 defined twice as loop induction.</font></li>
185
186 <li>
187 <font color="#CC0000">Fixed loop optimization constrained induction variable
188 detection.</font></li>
189
190 <li>
191 <font color="#CC0000">Fixed bug in some floating point routines (fix provided
192 by Wojciech Zabolotny &lt;wzab@ise.pw.edu.pl>)</font></li>
193
194 <li>
195 <font color="#CC0000">Fixed code generation bug for return literal floating
196 point.</font></li>
197
198 <li>
199 <font color="#CC0000">Fixed register packing was not moving return value
200 under certain conditions.</font></li>
201
202 <li>
203 <font color="#CC0000">Improved error recovery for undefined symbols.</font></li>
204 </ul>
205 </blockquote>
206
207 <blockquote>
208 <hr WIDTH="100%">
209 <br><b><font size=+2>Release 2.1.9C</font></b>
210 <ul>
211 <li>
212 <font color="#CC0000">Fixed bug with register allocation, effected mostly
213 large routines compiled using the --model-large option.</font></li>
214
215 <li>
216 <font color="#CC0000">Fixed bug in array of structures dereferncing.</font></li>
217
218 <li>
219 <font color="#CC0000">Simplified the intermediate code generattion , removed
220 some tree nodes. The parser will not generate nodes with structure derefs,
221 and the operators +=,-= ..etc will be changed at parse time, this creates
222 a simplififed parse tree.</font></li>
223
224 <li>
225 <font color="#CC0000">Upgraded to latest version of "gc", compile problems
226 on Redhat 6.0 should be fixed.</font></li>
227
228 <li>
229 <font color="#CC0000">Fixed passing simulator parameters from the debugger
230 command line.</font></li>
231
232 <li>
233 <font color="#CC0000">Fixed problem with the floating point routines.</font></li>
234 </ul>
235 </blockquote>
236
237 <blockquote>
238 <hr WIDTH="100%">
239 <br><b><font size=+1>Release 2.1.9B</font></b>
240 <ul>
241 <li>
242 <font color="#CC0000"><font size=+1>Fixed pointer access and array reference
243 bug introduced in the previous version.</font></font></li>
244
245 <li>
246 <font color="#CC0000"><font size=+1>integrated ucsim.0.2.25</font></font></li>
247
248 <li>
249 <font color="#CC0000"><font size=+1>Fixed bug for code not generated for
250 global pointers assigned to address of array element.</font></font></li>
251
252 <li>
253 <font color="#CC0000"><font size=+1>Fixed one more bug in live range computation.</font></font></li>
254
255 <li>
256 <font color="#CC0000"><font size=+1>Fixed bug in register allocator , it
257 was overwriting computed liverange values.</font></font></li>
258 </ul>
259
260 <hr WIDTH="100%">
261 <br><b><font size=+1>Release 2.1.9A</font></b>
262 <ul>
263 <li>
264 <font color="#CC0000"><font size=+1>Fixed bug in common subexpression elimination,
265 problem was found when a local variable was assigned values more than once
266 in a basic block.</font></font></li>
267
268 <li>
269 <font color="#CC0000"><font size=+1>Added warning when a "void" object
270 is cast to a non-void object.</font></font></li>
271
272 <li>
273 <font color="#CC0000"><font size=+1>Added warning when a non-pointer type
274 is cast to a _generic pointer.</font></font></li>
275
276 <li>
277 <font color="#CC0000"><font size=+1>Added a&nbsp; peephole optimization
278 rule to remove some moves.</font></font></li>
279
280 <li>
281 <font color="#CC0000"><font size=+1>Fixed problem in register packing ,
282 registers assigned to parameters were not being saved on the stack.</font></font></li>
283
284 <li>
285 <font color="#CC0000"><font size=+1>Bug in loop inductions, the induction
286 variable detection was not correctly replacing all references.</font></font></li>
287
288 <li>
289 <font color="#CC0000"><font size=+1>Merged bug fixes provided by <i>Wojciech
290 Stryjewski &lt;wstryj1@tiger.lsu.edu to></i> SDCCgen51.c</font></font></li>
291
292 <li>
293 <font color="#CC0000"><font size=+1>Local variable treated as invariant
294 even when address is taken.</font></font></li>
295
296 <li>
297 <font color="#CC0000"><font size=+1>Fixed Parameter problem for functions
298 with empty bodies.</font></font></li>
299
300 <li>
301 <font color="#CC0000"><font size=+1>Fixed problem with array dereferncing
302 when array of pointers.</font></font></li>
303
304 <br>
305 <hr WIDTH="100%"></ul>
306 </blockquote>
307
308 <blockquote><b><font size=+1>Release 2.1.9</font></b>
309 <ul>
310 <li>
311 <font color="#CC0000"><font size=+1>Integrated new simulator from Daniel
312 "ucsim-0.20.xx"</font></font></li>
313
314 <li>
315 <font color="#CC0000"><font size=+1>.cdb file will be created always, and
316 will contain global variables &amp; function entry/extis information always.
317 This will facilitate debuggers especially NoICE.</font></font></li>
318
319 <li>
320 <font color="#CC0000"><font size=+1>Fixed bug when using typedefed types
321 in a structure.</font></font></li>
322
323 <li>
324 <font color="#CC0000"><font size=+1>Fixed aliasing bug in the loop optimizer,
325 when a global array is used in a loop it should not be treated as an invariant
326 if there are function calls in the loop.</font></font></li>
327
328 <li>
329 <font color="#CC0000"><font size=+1>Fixed problem with register allocation,
330 this was causing some of the "long" routines to fail.</font></font></li>
331
332 <li>
333 <font color="#CC0000"><font size=+1>Fixed problem of clobbering value of
334 _bp.</font></font></li>
335
336 <li>
337 <font color="#CC0000"><font size=+1>Fixed problem of clobbering acc when
338 a long variable is the first argument to a reentrant function.</font></font></li>
339
340 <li>
341 <font color="#CC0000"><font size=+1>Fixed a peephole optimizer problem,
342 when it was changing the ljmp to a sjmp in a jump-table.</font></font></li>
343
344 <li>
345 <font color="#CC0000"><font size=+1>Enhanced the initialization routines
346 to support initialization with '&amp;' operations.</font></font></li>
347 </ul>
348 </blockquote>
349
350 <blockquote>
351 <hr WIDTH="100%">
352 <br><b><font size=+1>Release 2.1.8</font></b>
353 <ul>
354 <li>
355 <font color="#CC0000"><font size=+1>Void function returning value check
356 was not working properly.(fixed)</font></font></li>
357
358 <li>
359 <font color="#CC0000"><font size=+1>Assigning 'void' values to variables
360 will generate warning.</font></font></li>
361
362 <li>
363 <font color="#CC0000"><font size=+1>Improved register allocation to use
364 "acc" , this will improve code generation , but for this register color
365 is severely restricted, will gradually work on improving this. This reduces
366 the redundant register moved drastically (once totally implemented)</font></font></li>
367
368 <li>
369 <font color="#CC0000"><font size=+1>Added some peephole rules eliminate
370 jump to jumps.</font></font></li>
371
372 <li>
373 <font color="#CC0000"><font size=+1>Bug in SDCCgen51.c when using a bit
374 variable (locally defined) in an if statement.</font></font></li>
375
376 <li>
377 <font color="#CC0000"><font size=+1>Literal values being cast to pointers
378 was not working.</font></font></li>
379
380 <li>
381 <font color="#CC0000"><font size=+1>'volatile' arrtibute for structure/union
382 elements were bieng ignored. Now we can selectively declare structure elements
383 to be volatile.</font></font></li>
384
385 <li>
386 <font color="#CC0000"><font size=+1>Did some profiling to improve performance,
387 changed peephole optimizer a little with profiler feedback.</font></font></li>
388
389 <li>
390 <font color="#CC0000"><font size=+1>Was generating incorrect "cjne" code
391 under some situations.</font></font></li>
392
393 <li>
394 <font color="#CC0000"><font size=+1>Improved data flow computation.</font></font></li>
395
396 <li>
397 <font color="#CC0000"><font size=+1>Fixed bug in geniCodeCast for floating
398 point conversions.</font></font></li>
399
400 <li>
401 <font color="#CC0000"><font size=+1>Fixed bug in modulong routine found
402 by B&eacute;la T&ouml;r&ouml;k &lt;aseht@ms1.kssg.ch></font></font></li>
403
404 <li>
405 <font color="#CC0000"><font size=+1>Fixed bug for long shift left found
406 by B&eacute;la T&ouml;r&ouml;k &lt;aseht@ms1.kssg.ch></font></font></li>
407
408 <li>
409 <font color="#CC0000"><font size=+1>Fixed bug with register allocator ,
410 was marking variables as rematerializable too aggresively.</font></font></li>
411
412 <li>
413 <font color="#CC0000"><font size=+1>Added --version option.</font></font></li>
414
415 <li>
416 <font color="#CC0000"><font size=+1>Fixed problem of compiling source files
417 not in current directory.</font></font></li>
418
419 <li>
420 <font color="#CC0000"><font size=+1>Fixed a bug in a bitvector routine
421 (bitVectResize)</font></font></li>
422
423 <li>
424 <font color="#CC0000"><font size=+1>Added error message when "continue/break"
425 are out of context.</font></font></li>
426
427 <li>
428 <font color="#CC0000"><font size=+1>Fixed bug in error checking for uninitialised
429 local variables.</font></font></li>
430
431 <li>
432 <font color="#CC0000"><font size=+1>Fixed bug in code generation for not
433 (!) operation.</font></font></li>
434
435 <li>
436 <font color="#CC0000"><font size=+1>Fixed bug in live range computation
437 when intervenening unreachable block is present.</font></font></li>
438
439 <li>
440 <font color="#CC0000"><font size=+1>Changed register saving scheme, bank
441 will be saved only when called from a interrupt service routine.</font></font></li>
442
443 <li>
444 <font color="#CC0000"><font size=+1>Fixed bug with >> and &lt;&lt; with
445 unknown shift count.</font></font></li>
446
447 <li>
448 <font color="#CC0000"><font size=+1>The fix to the bit vector exposed some
449 problem with the register allocation, fixed now.</font></font></li>
450
451 <li>
452 <font color="#CC0000"><font size=+1>Added an extra heuristic for register
453 spilling, now the spilling will a lot lower than before.</font></font></li>
454
455 <li>
456 <font color="#CC0000"><font size=+1>Added some more optimizations for register
457 packing.</font></font></li>
458
459 <li>
460 <font color="#CC0000"><font size=+1>Added a bunch of preprocessor options
461 see command line options in the documentation for details.</font></font></li>
462
463 <li>
464 <font color="#CC0000"><font size=+1>Some cosmetics like timestamp in .asm
465 in addition to Version Number.</font></font></li>
466
467 <li>
468 <font color="#CC0000"><font size=+1>fixed another bug with live range computation.</font></font></li>
469
470 <li>
471 <font color="#CC0000"><font size=+1>Automatic static variables will not
472 be assigned to registers.</font></font></li>
473
474 <li>
475 <font color="#CC0000"><font size=+1>The parameter name mangling a little
476 so that it gives the warnings/errors with the correct name, also required
477 for debugger.</font></font></li>
478
479 <li>
480 <font color="#CC0000"><font size=+1>Jean Louis fixed some bugs with shifting
481 "long" variables.</font></font></li>
482
483 <li>
484 <font color="#CC0000"><font size=+1>Fixed bug of access of local bit variables
485 when compiling with --model-large</font></font></li>
486
487 <li>
488 <font color="#CC0000"><font size=+1>Fixed two bugs in Register allocator.</font></font></li>
489
490 <li>
491 <font color="#CC0000"><font size=+1>Added fix to peephole optimizer rule
492 matching , fixed provided by Frieder.</font></font></li>
493
494 <li>
495 <font color="#CC0000"><font size=+1>"Mark O'Farrell" &lt;ofarrell@haq.com.au>
496 added segment type to the segment definition.</font></font></li>
497
498 <li>
499 <font color="#CC0000"><font size=+1>"Mark O'Farrell" &lt;ofarrell@haq.com.au>
500 added option to start stack after the data segment --stack-after-data (see
501 documentation)</font></font></li>
502
503 <li>
504 <font color="#CC0000"><font size=+1>Changed the computation for default
505 stack location, now if all four banks are used the stack will be placed
506 after the data segment (--stack-after-data), so as not to clobber the bit
507 segment (this should make Daniel Drotos happy:).</font></font></li>
508
509 <li>
510 <font color="#CC0000"><font size=+1>Compiler will no longer crash when
511 an uninitialised local variable is detected.</font></font></li>
512
513 <li>
514 <font color="#CC0000"><font size=+1>Fixed bug for bad code generation for
515 anl,xor &amp; or when operand is on stack .</font></font></li>
516
517 <li>
518 <font color="#CC0000"><font size=+1>Fixed bug for side effecting parameters
519 when calling a reentrant function.</font></font></li>
520
521 <li>
522 <font color="#CC0000"><font size=+1>Improved optimization for ++ &amp;
523 -- operation when operand is on stack.</font></font></li>
524
525 <li>
526 <font color="#CC0000"><font size=+1>Was STILL saving entire register bank
527 when calling function with different register bank from non ISR function.</font></font></li>
528
529 <li>
530 <font color="#CC0000"><font size=+1>Changed register saveing for ISR functions
531 not using register bank (see documentation [Interrupt Service Routines])</font></font></li>
532
533 <li>
534 <font color="#CC0000"><font size=+1>Josef Wolf &lt;jw@raven.inka.de> provided
535 a set of serial routines which do not use the external ram (ser_ir.c),
536 included these as libraries.</font></font></li>
537
538 <li>
539 <font color="#CC0000"><font size=+1>PSW was not being saved for ISRs with
540 no register bank specification.</font></font></li>
541
542 <li>
543 <font color="#CC0000"><font size=+1>Integrated Daniel's simulator with
544 the compiler source distribution.</font></font></li>
545
546 <li>
547 <font color="#CC0000"><font size=+1>Added reduced "printf" routine it works
548 but is very resource intensive.</font></font></li>
549
550 <li>
551 <font color="#CC0000"><font size=+1>Certain complex pointer declarations
552 were not being handled correctly.</font></font></li>
553
554 <li>
555 <font color="#CC0000"><font size=+1>switch statements with empty bodies
556 were causing the compiler to crash.</font></font></li>
557
558 <li>
559 <font color="#CC0000"><font size=+1>sizeof union object computed incorrectly.</font></font></li>
560
561 <li>
562 <font color="#CC0000"><font size=+1>union element when passed as parameter
563 to a function generated incorrect code.</font></font></li>
564
565 <li>
566 <font color="#CC0000"><font size=+1>Martijn van Balen &lt;balen@natlab.research.philips.com>
567 provided a complete set of printf routines including sprintf.</font></font></li>
568
569 <li>
570 <font color="#CC0000"><font size=+1>Fixed bug when union member is a pointer
571 and is used on the right side of an assignment.</font></font></li>
572
573 <li>
574 <font color="#CC0000"><font size=+1>Improved register allocation&nbsp;
575 for arrays, structure &amp; union members in data space will no longer
576 be spilt.</font></font></li>
577
578 <li>
579 <font color="#CC0000"><font size=+1>Some optimizations for pointer access
580 had got clobbered put them back.</font></font></li>
581
582 <li>
583 <font color="#CC0000"><font size=+1>Fixed bug for right shifting signed
584 quantity by zero.</font></font></li>
585
586 <li>
587 <font color="#CC0000"><font size=+1>Constant propagation had problem when
588 long variables were used in division.</font></font></li>
589
590 <li>
591 <font color="#CC0000"><font size=+1>Fixed bug in register allocator on
592 rare situations it saved wrong live ranges.</font></font></li>
593
594 <li>
595 <font color="#CC0000"><font size=+1>Fixed Bug with Backend (gen51.c) incorrect
596 code was generated when far space variable assigned o variable in far space.</font></font></li>
597
598 <li>
599 <font color="#CC0000"><font size=+1>Fixed problem with loop invariant processing,
600 was not taking into consideration when address or pointer was passed as
601 parameter to a function.</font></font></li>
602
603 <li>
604 <font color="#CC0000"><font size=+1>Added --help &amp; -h option.</font></font></li>
605
606 <li>
607 <font color="#CC0000"><font size=+1>Added the peephole optimization rules
608 provided by Frieder&nbsp;&nbsp; &lt;fe@lake.iup.uni-heidelberg.de></font></font></li>
609
610 <li>
611 <font color="#CC0000"><font size=+1>Function prototypes without parameter
612 names were occasionally causing problems.</font></font></li>
613
614 <li>
615 <font color="#CC0000"><font size=+1>Fixed problem with _spx inc/dec when
616 using xternal stack.</font></font></li>
617
618 <li>
619 <font color="#CC0000"><font size=+1>Register allocation bug</font></font></li>
620
621 <li>
622 <font color="#CC0000"><font size=+1>Addition of constant to generic pointer
623 was causing problems sometimes.</font></font></li>
624
625 <li>
626 <font color="#CC0000"><font size=+1>Improved register allocation some more.</font></font></li>
627
628 <li>
629 <font color="#CC0000"><font size=+1>Fixed bug in live range analysis (for
630 some complex contro flow situations.</font></font></li>
631
632 <li>
633 <font color="#CC0000"><font size=+1>Fixed bug of 'b' getting clobbered
634 in some left &amp; right shift operations.</font></font></li>
635
636 <li>
637 <font color="#CC0000"><font size=+1>Added --callee-saves (documentation
638 updated)</font></font></li>
639
640 <li>
641 <font color="#CC0000"><font size=+1>Fixed bug in hTabDeleteItem() in SDCChasht.c
642 (exposed during debugger development)</font></font></li>
643
644 <li>
645 <font color="#CC0000"><font size=+1>Fixed bug in grammar .. to allow absolute
646 address for local "bit" variables.</font></font></li>
647
648 <li>
649 <font color="#CC0000"><font size=+1>Added #pragma CALLEE-SAVES (same effect
650 as --calle-saves)</font></font></li>
651
652 <li>
653 <font color="#CC0000"><font size=+1>Added #pragma EXCLUDE (see docs)</font></font></li>
654
655 <li>
656 <font color="#CC0000"><font size=+1>Fixed problem xrl generating incorrect
657 code.</font></font></li>
658
659 <li>
660 <font color="#CC0000"><font size=+1>Yet another problem in register allocator
661 fixed.</font></font></li>
662
663 <li>
664 <font color="#CC0000"><font size=+1>Fixed a bug with dataflow computation,
665 was computing pointer kills incorrectly.</font></font></li>
666
667 <li>
668 <font color="#CC0000"><font size=+1>Added loop reversal.</font></font></li>
669
670 <li>
671 <font color="#CC0000"><font size=+1>Fixed bug in structure declaration</font></font></li>
672
673 <li>
674 <font color="#CC0000"><font size=+1>Fixed floating point routines</font></font></li>
675
676 <li>
677 <font color="#CC0000"><font size=+1>Fixed parsing problem for LONG hex
678 constants</font></font></li>
679
680 <li>
681 <font color="#CC0000"><font size=+1>Fixed bug to allow local variables
682 to be declared in 'code' space.</font></font></li>
683
684 <li>
685 <font color="#CC0000"><font size=+1>Fixed bug in code generation for floating
686 point .</font></font></li>
687
688 <li>
689 <font color="#CC0000"><font size=+1>Parameters access was incorrect when
690 callee-saves &amp;&amp; reentrant.</font></font></li>
691
692 <li>
693 <font color="#CC0000"><font size=+1>Fixed bug in hashTable routine.</font></font></li>
694
695 <li>
696 <font color="#CC0000"><font size=+1>Fixed bug when string initialisers
697 are used for char arrays with bounds.</font></font></li>
698
699 <li>
700 <font color="#CC0000"><font size=+1>Was generating incorrect code when
701 options --model-large &amp;&amp; --stack-auto were used together</font></font></li>
702
703 <li>
704 <font color="#CC0000"><font size=+1>Replaced 32bit multiplication routine
705 with JeanLouis VERN's much better routine.</font></font></li>
706
707 <li>
708 <font color="#CC0000"><font size=+1>Fixed problem with loop-reversing</font></font></li>
709
710 <li>
711 <font color="#CC0000"><font size=+1>Introduced parameter passing using
712 registers.</font></font></li>
713
714 <li>
715 <font color="#CC0000"><font size=+1>Applied improvements/cleanups supplied
716 by Larry Dolittle.</font></font></li>
717
718 <li>
719 <font color="#CC0000"><font size=+1>Moved the variable substitution by
720 register equivalent to earlier phase , this generates much more optimized
721 code.</font></font></li>
722
723 <li>
724 <font color="#CC0000"><font size=+1>Compiler crashed when first parameter
725 was declared "const"</font></font></li>
726
727 <li>
728 <font color="#CC0000"><font size=+1>Assembler generated bad opcode for
729 "djnz" when the "." operator was used.</font></font></li>
730 </ul>
731 </blockquote>
732
733 <blockquote>
734 <hr WIDTH="100%">
735 <br><b><font size=+1>Release 2.1.7</font></b>
736 <ul>
737 <li>
738 <font color="#CC0000"><font size=+1>Fixed a bug in the DEF-USE chaining
739 algorithm , was keeping some dead DEFs alive in the DEF bit vector of a
740 symbol.</font></font></li>
741
742 <li>
743 <font color="#CC0000"><font size=+1>Fixed bug with "(null)" operand generated
744 in rare situations.</font></font></li>
745
746 <li>
747 <font color="#CC0000"><font size=+1>&nbsp;Trefor &lt;Trefor@magera.freeserve.co.uk>
748 did some more clean up.</font></font></li>
749
750 <li>
751 <font color="#CC0000"><font size=+1>Fixed bug that was introduced with
752 '&amp;' with a literal.</font></font></li>
753
754 <li>
755 <font color="#CC0000"><font size=+1>Added alternate serial package provided
756 by "Wolfgang Esslinger "&lt;wolfgang@WiredMinds.com> in ./sdcc51lib/_ser.c
757 (documentation updated)</font></font></li>
758
759 <li>
760 <font color="#CC0000"><font size=+1>Added Header file&nbsp; sab80515.h
761 provided by B&eacute;la T&ouml;r&ouml;k &lt;aseht@ms1.kssg.ch></font></font></li>
762
763 <li>
764 <font color="#CC0000"><font size=+1>Had made flow computation for global
765 variables too restrictive, now constant propagation will be allowed with
766 global variables.</font></font></li>
767 </ul>
768 </blockquote>
769
770 <blockquote>
771 <hr WIDTH="100%">
772 <br><b><font size=+1>Release 2.1.6</font></b>
773 <br>&nbsp;
774 <blockquote>
775 <li>
776 <font color="#CC0000"><font size=+1>Fixed bug in the routines <b>_*2fs.c
777 </b>the
778 variable 'sign' should be declared as 'long'.</font></font></li>
779
780 <li>
781 <font color="#CC0000"><font size=+1>Included _char2fs in libfloat.lib</font></font></li>
782
783 <li>
784 <font color="#CC0000"><font size=+1>Fixed register allocator&nbsp; bug
785 for allocating pointers (found by "Dr. Ed Croson" &lt;soarebc@internetcds.com>).</font></font></li>
786
787 <li>
788 <font color="#CC0000"><font size=+1>Furthur loop induction variable detection
789 improvement.</font></font></li>
790
791 <li>
792 <font color="#CC0000"><font size=+1>Changed loop induction detection so
793 that it does not treat global variables as induction any more, this saves
794 some code, since assignments to global variables cannot be easily eliminated.</font></font></li>
795
796 <li>
797 <font color="#CC0000"><font size=+1>Fixed problem of __sdcc_program_startup
798 being out of range when large amount of initialization code is present.</font></font></li>
799
800 <li>
801 <font color="#CC0000"><font size=+1>Fixed bug with function returning pointers.</font></font></li>
802
803 <li>
804 <font color="#CC0000"><font size=+1>Changed register allocation to aggressively
805 allocate local variables to registers, users will see a vast improvement
806 in the generated code, not only in terms&nbsp; of speed but also in terms
807 of data space utilization. Previously if there were multiple definitions
808 for a local variable flowing into a basic block the compiler would allocate
809 space for the variable, now it will allocate space only if it runs out
810 of registers.</font></font></li>
811
812 <li>
813 <font color="#CC0000"><font size=+1>Jean-Louis VERN (jlvern@&lt;writeme.com>)
814 has done some more enhancements to the code generator ..... his comments.</font></font></li>
815
816 <blockquote>
817 <li>
818 <font color="#CC0000"><font size=+1>I did some light improvement s:</font></font></li>
819
820 <br><font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
821 - increment 16&amp;32bits</font></font>
822 <br><font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
823 - decrement 16&amp;32bits</font></font>
824 <br><font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
825 - assignment with literal</font></font>
826 <br><font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
827 - return with literal</font></font>
828 <br><font color="#CC0000"><font size=+1>and some cosmetics before optimizing
829 mult and div...*</font></font></blockquote>
830
831 <li>
832 <font color="#CC0000"><font size=+1>&nbsp;"BESSIERE Jerome" &lt;BESSIERE_Jerome@stna.dgac.fr>
833 made a lot of improvements to the support routines, these include reducing
834 some memory leaks.. here are his comments.</font></font></li>
835
836 <blockquote>
837 <li>
838 <font color="#CC0000"><font size=+1>//* Incorrect call of werror(E_OUT_OF_MEM,...);</font></font></li>
839
840 <br><font color="#CC0000"><font size=+1>//* 1-a In file SDCCBBlock.c /
841 function iCodeBreakDown (...)</font></font>
842 <br><font color="#CC0000"><font size=+1>//* 1-b In file SDCChasht.c / function
843 newHashTable(...)</font></font>
844 <br><font color="#CC0000"><font size=+1>//* 1-c In file SDCCmain.c / function
845 parseCmdLine(...)</font></font>
846 <li>
847 <font color="#CC0000"><font size=+1>//* Sometime the compiler crash due
848 to compilation error</font></font></li>
849
850 <br><font color="#CC0000"><font size=+1>//* In file SDCCast.c / function
851 createFunction(...)</font></font>
852 <li>
853 <font color="#CC0000"><font size=+1>//* Sometime SDCC access not allocated
854 memory</font></font></li>
855
856 <br><font color="#CC0000"><font size=+1>//* In file SDCChasht.c / function
857 hTabSearch(...)</font></font>
858 <li>
859 <font color="#CC0000"><font size=+1>/* Many and many memory leak when not
860 using CYGWIN32</font></font></li>
861
862 <br><font color="#CC0000"><font size=+1>//* and&nbsp; garblage collector
863 (I'm using MS VC++ 6.0 and WIN32)</font></font>
864 <br><font color="#CC0000"><font size=+1>//* specially in peepHole function
865 consuming Mo and Mo</font></font>
866 <br><font color="#CC0000"><font size=+1>//* even on compiling small function</font></font>
867 <br><font color="#CC0000"><font size=+1>//* I created a new function in
868 file SDCChasht.c for deleting an hTab</font></font>
869 <br><font color="#CC0000"><font size=+1>//* It Reduces memory leaks</font></font></blockquote>
870
871 <li>
872 <font color="#CC0000"><font size=+1>"Salvador Eduardo Tropea \(SET\)" &lt;salvador@inti.gov.ar>
873 provided patches required to compile the system using DJGPP, the executables
874 produced can run on plain DOS. He has also created a <b>readme.dj</b> file
875 for those who want to compile using DJGPP.</font></font></li>
876
877 <li>
878 <font color="#CC0000"><font size=+1>Added code to issue warnings if something
879 is compared to / assigned a literal value which is greater than what the
880 variable can hold.</font></font></li>
881
882 <li>
883 <font color="#CC0000"><font size=+1>Changed the data/space extended message
884 to <b>info </b>, since this not really a warning message.</font></font></li>
885
886 <li>
887 <font color="#CC0000"><font size=+1>Added routine auto baud, for automatic
888 baud rate detection , adapted from Paul Stoffregen's&nbsp; &lt;paul@ece.orst.edu>
889 autobaud.asm</font></font></li>
890
891 <li>
892 <font color="#CC0000"><font size=+1>Was not doing check for constants in
893 case for ++/--, i.e. a variable declared as const could be incremented
894 or decremented</font></font></li>
895
896 <li>
897 <font color="#CC0000"><font size=+1>Fixed bug when setting &amp; fetching
898 data from far space .</font></font></li>
899
900 <li>
901 <font color="#CC0000"><font size=+1>Added bunch of peephole optimization
902 rules.</font></font></li>
903
904 <li>
905 <font color="#CC0000"><font size=+1>Trefor@magera.freeserve.co.uk. Updated
906 the build script to give a choice to compile the libraries as large model
907 or small model.</font></font></li>
908
909 <li>
910 <font color="#CC0000"><font size=+1>Trefor also got rid of those annoying
911 warnings when compiling with egcs ( braces about ambiguous 'else')</font></font></li>
912
913 <li>
914 <font color="#CC0000"><font size=+1>Added some heuristics in constant folding
915 routine , to prevent pointer live ranges from becoming too long, this was
916 causing some avoidable spill code to be generated.</font></font></li>
917
918 <li>
919 <font color="#CC0000"><font size=+1>Added support for ANSI routines <b>setjmp</b>
920 and <b>longjmp. </b>Documentation updated.</font></font></li>
921
922 <li>
923 <font color="#CC0000"><font size=+1>Was generating code for unreachable
924 basic blocks ... now will not generate code for unreachable code... will
925 issue a warning.</font></font></li>
926
927 <li>
928 <font color="#CC0000"><font size=+1>Was generating incorrect code when
929 adding values to generic pointers (some times).</font></font></li>
930
931 <li>
932 <font color="#CC0000"><font size=+1>Improved bitwise '&amp;' operation
933 a little bit to improve code generation.</font></font></li>
934 </blockquote>
935
936 <hr WIDTH="100%">
937 <br><b><font size=+1>Release 2.1.5</font></b>
938 <p><font size=+1>Mostly a bug fix release</font>
939 <br>&nbsp;
940 <blockquote>
941 <li>
942 <font color="#CC0000"><font size=+1>Fixed post &amp; pre increment / Decrement
943 problem and inefficiency</font></font></li>
944
945 <li>
946 <font color="#CC0000"><font size=+1>Structures/Unions. Three things were
947 done this structure declarations.</font></font></li>
948
949 <blockquote>
950 <li>
951 <font color="#CC0000"><font size=+1>The long standing union problem has
952 been fixed, a very rudimentary solution right now , will some up with a
953 better solution shortly.</font></font></li>
954
955 <li>
956 <font color="#CC0000"><font size=+1>Structures declared inside function
957 scopes were not being properly cleaned up, came across this problem while
958 generating debug information fixed now.</font></font></li>
959
960 <li>
961 <font color="#CC0000"><font size=+1>pointers declared inside structures
962 were broken after the pointer fix in Version 2.1.3, now fixed.</font></font></li>
963 </blockquote>
964
965 <li>
966 <font color="#CC0000"><font size=+1>Fixed some library routines , for --model-large
967 .</font></font></li>
968
969 <li>
970 <font color="#CC0000"><font size=+1>Added whole lot of stuff for debug
971 information generation (DO NOT use --debug option might cause unpredictable
972 results).</font></font></li>
973 </blockquote>
974
975 <hr WIDTH="100%">
976 <br><b><font size=+1>Release 2.1.4</font></b>
977 <br>&nbsp;
978 <ul>
979 <li>
980 <font color="#CC0000"><font size=+1>Problem with parameter overlay : when
981 two functions with overlaid parameters were nested, the parameters of the
982 outer function was clobbered. This has been fixed, now the inner function
983 call will be lifted out and evaluated before parameters for the outer call
984 are assigned values.</font></font></li>
985
986 <li>
987 <font color="#CC0000"><font size=+1>New optimization added (suggested by
988 Jean Louis VERN &lt;jlvern@writeme.com> to prevent global variables in
989 near space from being assigned to registers.</font></font></li>
990
991 <li>
992 <font color="#CC0000"><font size=+1>Improved loop optimization, now will
993 keep induction variables alive after loops even if loops have more that
994 one exit. This makes me happy, it takes care of almost all the common loop
995 constructs. So unless the user is doing something really weird the induction
996 variables&nbsp; will be carried outside the loop. This also lays down the
997 ground work for value based optimizations, i.e. when the loop count is
998 known, then value of the induction variables will also be known at certain
999 exit points.</font></font></li>
1000
1001 <li>
1002 <font color="#CC0000"><font size=+1>Fixed bug in genPlus, genAnd,genXor,genOr
1003 routines , was generating incorrect code for Far Space variable with Literal.</font></font></li>
1004
1005 <li>
1006 <font color="#CC0000"><font size=+1>Fixed bugs in SDCCglue.c, was generating
1007 -ve size for variables of size 32768 or greater.</font></font></li>
1008
1009 <li>
1010 <font color="#CC0000"><font size=+1>Changed register allocator to try &amp;
1011 keep all local variables in 'registers' regardless of they are declared
1012 with the register storage class or not, this will reduce the amount of
1013 data space required by the compiler generated code.</font></font></li>
1014
1015 <li>
1016 <font color="#CC0000"><font size=+1>Fixed bug in SDCCmain.c , was unlinking
1017 file preOutName before reading it (okay with POSIX , not okay with DOS).</font></font></li>
1018
1019 <li>
1020 <font color="#CC0000"><font size=+1>David Bonnel &lt;dbonnell@ozemail.com.au>.
1021 fixed the following bugs</font></font></li>
1022
1023 <ul>
1024 <li>
1025 <font color="#CC0000"><font size=+1>In SDCCicode.c at line# 1314 should
1026 be calling valMod not valDiv.</font></font></li>
1027
1028 <li>
1029 <font color="#CC0000"><font size=+1>In line# 2728 missing a break statement
1030 after the division case .</font></font></li>
1031 </ul>
1032
1033 <li>
1034 <font color="#CC0000"><font size=+1>David Bonnell &lt;dbonnell@ozemail.com.au>.
1035 also added a new option <b>--iram-size &lt;value> .&nbsp;&nbsp;&nbsp;</b>
1036 His description of it .....&nbsp; (Dave speaking)</font></font></li>
1037
1038 <ul>
1039 <li>
1040 <font color="#CC0000"><font size=+1>I added the command '-a [iram-size]'
1041 to the linker. iram-size defaults to&nbsp;&nbsp; 128 (0x80) if it is omitted
1042 (which is the amount of internal RAM I have on&nbsp; my DS5000T chip :-)</font></font></li>
1043 </ul>
1044 <font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1045 Anyway, if this command is given, the (new) function iramcheck() is called
1046 after linking to check that the OSEG, ISEG, and DSEG's do not extend&nbsp;
1047 past the end of internal RAM.&nbsp; (Internal RAM is from&nbsp; 0..iram_size-1).&nbsp;
1048 It spits out a warning such as:</font></font>
1049 <p><font color="#CC0000"><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1050 WARNING! Segment DSEG extends past the end of internal RAM.&nbsp; Check
1051 map file.</font></font>
1052 <p><font color="#CC0000"><font size=+1>&nbsp;&nbsp; when such a problem
1053 is detected.</font></font>
1054 <p><font color="#CC0000"><font size=+1>&nbsp;&nbsp; Then I added a new
1055 command-line option to SDCC, '--iram-size iram-size'. When this command
1056 is given the linker command shown above is added to the linker command
1057 file so that it will do the checking for internal RAM overflow.</font></font>
1058 <br>&nbsp;
1059 <li>
1060 <font color="#CC0000"><font size=+1>&nbsp;BESSIERE Jerome &lt;BESSIERE_Jerome@stna.dgac.fr>
1061 fixed the following bugs.</font></font></li>
1062
1063 <ul>
1064 <li>
1065 <font color="#CC0000"><font size=+1>File sdccicod.c / function operandOperation(...)</font></font></li>
1066
1067 <li>
1068 <font color="#CC0000"><font size=+1>File sdccval.c / function valDiv(...)</font></font></li>
1069
1070 <li>
1071 <font color="#CC0000"><font size=+1>File sdccbitv.c / function bitVectBitValue(...)</font></font></li>
1072
1073 <li>
1074 <font color="#CC0000"><font size=+1>File sdccbitv.c / function bitVectUnSetBit(...)</font></font></li>
1075 </ul>
1076 </ul>
1077
1078 <hr WIDTH="100%">
1079 <br><b><font size=+1>Release 2.1.3</font></b>
1080 <br>&nbsp;
1081 <ul>
1082 <li>
1083 <font color="#CC0000"><font size=+1>Fixed bug in assembler&nbsp; <b>i51mch.c</b>&nbsp;
1084 ; <b>dot</b> operator when used in branch instructions was generating incorrect
1085 opcode.</font></font></li>
1086
1087 <li>
1088 <font color="#CC0000"><font size=+1>Enhanced Dead Code elimination, (it
1089 was missing some ).</font></font></li>
1090
1091 <li>
1092 <font color="#CC0000"><font size=+1>Added new rules to SDCCpeeph.def&nbsp;
1093 provided by Frieder &lt;fe@lake.iup.uni-heidelberg.de></font></font></li>
1094
1095 <li>
1096 <font color="#CC0000"><font size=+1>Fixed pointer return bug found by David
1097 Bonnel &lt;dbonnell@ozemail.com.au>.</font></font></li>
1098
1099 <li>
1100 <font color="#CC0000"><font size=+1>Fixed the POINTER fiasco, I had misinterpreted
1101 the grammar.</font></font></li>
1102
1103 <ul>
1104 <li>
1105 <font color="#CC0000"><font size=+1>data char *p;&nbsp; was interpreted
1106 as [generic pointer to char, with p in data space]. now interpreted as
1107 pointer to character in data space with the pointer residing in unknown
1108 space.</font></font></li>
1109
1110 <li>
1111 <font color="#CC0000"><font size=+1>Updated the documentation for this.</font></font></li>
1112 </ul>
1113
1114 <li>
1115 <font color="#CC0000"><font size=+1>Updated documentation to include comments
1116 about Parameter Overlaying.</font></font></li>
1117
1118 <li>
1119 <font color="#CC0000"><font size=+1>Improved type checking to generate
1120 error message when a void type is casted to some other type</font></font></li>
1121
1122 <li>
1123 <font color="#CC0000"><font size=+1>Jean-Louis VERN (instead of sleeping
1124 at night) has made some GREAT!! improvements to the back end for frequently
1125 used expressions like</font></font></li>
1126
1127 <ul>
1128 <li>
1129 <font color="#CC0000"><font size=+1>if ( x &amp; literal) ...</font></font></li>
1130
1131 <li>
1132 <font color="#CC0000"><font size=+1>if ( x ^ literal) ...</font></font></li>
1133
1134 <li>
1135 <font color="#CC0000"><font size=+1>if ( x |&nbsp; literal) ...</font></font></li>
1136
1137 <li>
1138 <font color="#CC0000"><font size=+1>if ( bit &amp; x) ...</font></font></li>
1139
1140 <li>
1141 <font color="#CC0000"><font size=+1>if ( bit | x ) ...</font></font></li>
1142
1143 <li>
1144 <font color="#CC0000"><font size=+1>if (bit ^ x) ....</font></font></li>
1145 </ul>
1146
1147 <li>
1148 <font color="#CC0000"><font size=+1>Jean-Louis VERN rewrote the _decdptr.c
1149 routine to improve it.</font></font></li>
1150 </ul>
1151
1152 <hr WIDTH="100%">
1153 <br><b><font size=+1>Release 2.1.2</font></b>
1154 <br>&nbsp;
1155 <ul>
1156 <li>
1157 <font color="#CC0000"><font size=+1>Bug in genAnd (SDCCgen51.c) caused
1158 the compiler to issue error message for some bit wise and operations.</font></font></li>
1159
1160 <li>
1161 <font color="#CC0000"><font size=+1>File _spx.c missing from source bundle.</font></font></li>
1162
1163 <li>
1164 <font color="#CC0000"><font size=+1>Invalid code generated when interrupt
1165 service routine used with external stack option.</font></font></li>
1166
1167 <li>
1168 <font color="#CC0000"><font size=+1>Added --no-peep option to disable peep
1169 hole optimization.</font></font></li>
1170
1171 <li>
1172 <font color="#CC0000"><font size=+1>Added --peep-asm option to optionally
1173 pass inline assembler code through the peephole optimizer.</font></font></li>
1174
1175 <li>
1176 <font color="#CC0000"><font size=+1>Fixed bug in _strcpy.c David Bonnell
1177 &lt;dbonnell@ozemail.com.au>.</font></font></li>
1178 </ul>
1179
1180 <ul>
1181 <li>
1182 </li>
1183 </ul>
1184
1185 <hr WIDTH="100%">
1186 <br><b><font size=+1>Release 2.1.1</font></b>
1187 <br>&nbsp;
1188 <ul>
1189 <li>
1190 <font color="#CC0000"><font size=+1><b>bit </b>variables could not be declared
1191 <b>extern</b>
1192 , bug was introduces while improving type checking for bit fields in structures.</font></font></li>
1193 </ul>
1194
1195 <hr WIDTH="100%">
1196 <p><b><font size=+1>Release 2.1.0</font></b>
1197 <p><font size=+1>A full source code release. Lots of stuff done in this
1198 release.</font>
1199 <br>&nbsp;
1200 <ul>
1201 <li>
1202 <font color="#CC0000"><font size=+1>Floating point support completed (although
1203 cannot be used in small model).</font></font></li>
1204
1205 <li>
1206 <font color="#CC0000"><font size=+1>Data flow computation enhanced to stop
1207 flow computation of global variables when there is a call to another function.</font></font></li>
1208
1209 <li>
1210 <font color="#CC0000"><font size=+1>JeanLouis VERN added a whole lot of
1211 optimizations to the back end.</font></font></li>
1212
1213 <li>
1214 <font color="#CC0000"><font size=+1>Function return value assigned to a
1215 bit variable was crashing the compiler.</font></font></li>
1216
1217 <li>
1218 <font color="#CC0000"><font size=+1>Changed the way peep hole optimizer
1219 rules were being included. Now it is much easier to add default rules.</font></font></li>
1220
1221 <li>
1222 <font color="#CC0000"><font size=+1>Added two new pointer types "* pdata"
1223 and "* idata" these will facilitate the following</font></font></li>
1224
1225 <ul>
1226 <li>
1227 <font color="#CC0000"><font size=+1>Optimized access to near data</font></font></li>
1228
1229 <li>
1230 <font color="#CC0000"><font size=+1>Implementation of external stack (External
1231 stack is required if the compiler is going to be used to implement an RTOS)</font></font></li>
1232 </ul>
1233
1234 <li>
1235 <font color="#CC0000"><font size=+1>Fixed problem of Compiler giving warning
1236 when it did not find any reaching definition for a local static variable.</font></font></li>
1237
1238 <li>
1239 <font color="#CC0000"><font size=+1>Added code to backed for more optimized
1240 access to arrays, structures &amp; unions placed in near space, now the
1241 compiler will not use indirect addressing to fetch the data if the offset
1242 is can be determined at compile time.</font></font></li>
1243
1244 <li>
1245 <font color="#CC0000"><font size=+1>Changed the way the startup code works.
1246 Documentation updated see section Startup for more details.</font></font></li>
1247
1248 <li>
1249 <font color="#CC0000"><font size=+1>Completed implementation of external
1250 stack. Documentation updated see section External stack.</font></font></li>
1251
1252 <li>
1253 <font color="#CC0000"><font size=+1>Jean-Louis VERN added a LOT of optimizations
1254 to the back end code generator, following is only a small list.</font></font></li>
1255
1256 <ul>
1257 <li>
1258 <font color="#CC0000"><font size=+1>gencjne improved</font></font></li>
1259
1260 <li>
1261 <font color="#CC0000"><font size=+1>gencmp improved</font></font></li>
1262
1263 <li>
1264 <font color="#CC0000"><font size=+1>genand improved</font></font></li>
1265
1266 <li>
1267 <font color="#CC0000"><font size=+1>genor improved.</font></font></li>
1268
1269 <li>
1270 <font color="#CC0000"><font size=+1>_divuint improved</font></font></li>
1271
1272 <li>
1273 <font color="#CC0000"><font size=+1>_divuint improved.</font></font></li>
1274 </ul>
1275
1276 <li>
1277 <font color="#CC0000"><font size=+1>Variables with absolute addresses now
1278 considered as VOLATILE.</font></font></li>
1279
1280 <li>
1281 <font color="#CC0000"><font size=+1>Dead Code elimination routine updated
1282 : will not eliminate global assignments to global variables when function
1283 call present.</font></font></li>
1284
1285 <li>
1286 <font color="#CC0000"><font size=+1>Added file <b>at89S8252.h </b>to distribution
1287 file supplied by "Michael Schmitt" &lt;mschmitt@mainz-online.de></font></font></li>
1288
1289 <li>
1290 <font color="#CC0000"><font size=+1>Martijn van Balen &lt;balen@natlab.research.philips.com>.
1291 Fixed problems in assembler and linker. Files affected are<b> asout.c</b>
1292 and <b>lklist.c</b></font></font></li>
1293
1294 <li>
1295 <font color="#CC0000"><font size=+1>Initialized character array variables
1296 with no size were being generated one byte less in length.</font></font></li>
1297
1298 <li>
1299 <font color="#CC0000"><font size=+1>Access to bit fields within structures
1300 mucho mucho improved.</font></font></li>
1301
1302 <li>
1303 <font color="#CC0000"><font size=+1>The compiler was allocating space on
1304 the stack for local variables (for reentrant functions) even when not needed,
1305 this has been fixed, the compiler will not allocate space on the stack
1306 for local variables if they are assigned to registers.</font></font></li>
1307 </ul>
1308
1309 <hr WIDTH="100%">
1310 <br><b><font size=+1>Release 2.0.21</font></b>
1311 <br>&nbsp;
1312 <blockquote>
1313 <li>
1314 <font size=+1><font color="#CC0000">Enhancement made to unsigned long &amp;
1315 integer division by </font><font color="#FF0000">Martijn van Balen &lt;balen@natlab.research.philips.com></font></font></li>
1316
1317 <li>
1318 <font color="#FF0000"><font size=+1>&nbsp;_gptrget.c &amp; _gptrput.c made
1319 register bank independent&nbsp; by Martijn van Balen &lt;balen@natlab.research.philips.com>.</font></font></li>
1320
1321 <li>
1322 <font color="#FF0000"><font size=+1>sdccbuil.sh script fixed by Subject:
1323 Markus Mathes &lt;mathes@prp.physik.tu-darmstadt.de></font></font></li>
1324
1325 <li>
1326 <font color="#FF0000"><font size=+1>Martijn van Balen &lt;balen@natlab.research.philips.com>
1327 found some problems with post &amp; pre increment of pointer variables
1328 , these are fixed.</font></font></li>
1329 </blockquote>
1330
1331 <hr WIDTH="100%">
1332 <br><b><font size=+1>Release 2.0.20</font></b>
1333 <p><font size=+1>Mostly enhancements in this release. Some bug fixes by
1334 Jean Louis.</font>
1335 <blockquote>
1336 <li>
1337 <font color="#FF0000"><font size=+1>Enhanced loop optimization (induction
1338 variables), will generate more compact code for simple loops</font></font></li>
1339
1340 <li>
1341 <font color="#FF0000"><font size=+1>Enhanced some aspects of basic block
1342 processing.</font></font></li>
1343
1344 <li>
1345 <font color="#FF0000"><font size=+1>Added a couple more MCU header files.</font></font></li>
1346
1347 <li>
1348 <font color="#FF0000"><font size=+1>Jean Louis made some enhancements in
1349 SDCCgen51.c for better code generation.</font></font></li>
1350
1351 <li>
1352 <font color="#FF0000"><font size=+1>Jean Louis also fixed some bugs in
1353 the back end .</font></font></li>
1354 </blockquote>
1355
1356 <hr WIDTH="100%">
1357 <br><b><font size=+1>Release 2.0.19</font></b>
1358 <br>&nbsp;
1359 <blockquote>
1360 <li>
1361 <font color="#FF0000"><font size=+1>Assignment of array variable to a pointer
1362 sometimes did not generate code.</font></font></li>
1363
1364 <li>
1365 <font color="#FF0000"><font size=+1>File containing intialised variables
1366 ONLY with NO functions caused the compiler to crash</font></font></li>
1367
1368 <li>
1369 <font color="#FF0000"><font size=+1>Initialising global volatile variables
1370 caused the compiler to fail.</font></font></li>
1371
1372 <li>
1373 <font color="#FF0000"><font size=+1>Generated incorrect code when bit variables
1374 were modified and subsequently used in a conditional statement.</font></font></li>
1375
1376 <li>
1377 <font color="#FF0000"><font size=+1>Added 3 more header files for Atmel
1378 MCUs , provided by Bernd&nbsp; Bartmann (Bernd.Bartmann@picard.isdn.cs.tu-berlin.de)</font></font></li>
1379
1380 <li>
1381 <font color="#FF0000"><font size=+1>Added a lot of peephole optimization
1382 rules, some suggested by Daniel Drotos &lt;drdani@mazsola.iit.uni-miskolc.hu></font></font></li>
1383
1384 <li>
1385 <font color="#FF0000"><font size=+1>Added check to make sure functions
1386 do not return 'bit'.</font></font></li>
1387
1388 <li>
1389 <font color="#FF0000"><font size=+1>Jean Louis-VERN (jlvern@writeme.com)
1390 fixed bug for divide with literal in his code.</font></font></li>
1391 </blockquote>
1392 </blockquote>
1393
1394 <ul>
1395 <hr WIDTH="100%">
1396 <br><b><font size=+1>Release 2.0.18</font></b>
1397 <br>&nbsp;
1398 <ul>
1399 <li>
1400 <font color="#FF0000"><font size=+1>Function prototype problem when parameter
1401 name in the prototype was the same as a local variables.</font></font></li>
1402
1403 <li>
1404 <font color="#FF0000"><font size=+1>Added header files for Atmel AT89x51
1405 &amp; AT89X52 provided by : Bernd&nbsp; Bartmann (Bernd.Bartmann@picard.isdn.cs.tu-berlin.de)</font></font></li>
1406
1407 <li>
1408 <font color="#FF0000"><font size=+1>Jean Louis-VERN (jlvern@writeme.com)
1409 has made </font><font size=+2>substantial improvements</font><font size=+1>
1410 to the Back-end code generation for </font><font size=+2>shift operations
1411 </font><font size=+1>and
1412 </font><font size=+2>multiplication.</font></font></li>
1413 </ul>
1414 </ul>
1415
1416 <dl>
1417 <dl>
1418 <hr WIDTH="100%">
1419 <br><b><font size=+1>Release 2.0.17</font></b></dl>
1420 </dl>
1421
1422 <dl>
1423 <ul>
1424 <ul>
1425 <li>
1426 <font color="#FF0000"><font size=+1>Empty if body with non-emtpy else body
1427 cause compiler to give error message. Patch provided by Martijn van Balen
1428 &lt;balen@natlab.research.philips.com></font></font></li>
1429
1430 <li>
1431 <font color="#FF0000"><font size=+1>Loop optimizer missed induction variables
1432 ;</font></font></li>
1433
1434 <li>
1435 <font color="#FF0000"><font size=+1>Added option <b>--main-return</b> ,
1436 will generate a '<b>ret</b>' instead of '<b>ljmp .</b>' when this option
1437 is used.</font></font></li>
1438
1439 <li>
1440 <font color="#FF0000"><font size=+1>Add support for user defined startup
1441 code.</font></font></li>
1442 </ul>
1443 </ul>
1444
1445 <dl>
1446 <hr WIDTH="100%">
1447 <ul>
1448 <li>
1449 <font color="#FF0000"><font size=+1>generating incorrect assembler code
1450 (new line missing), for '<i>long</i>' variables initialization when defined
1451 in '<i>code'</i> space.</font></font></li>
1452
1453 <li>
1454 <font color="#FF0000"><font size=+1><i>aslink</i> occasionally core dumped,
1455 after it finished processing. (patch provided by&nbsp; Eric Norum &lt;eric@skatter.USask.Ca>
1456 )</font></font></li>
1457
1458 <li>
1459 <font color="#FF0000"><font size=+1>comparing <i>pointers with literals
1460 </i>,
1461 e.g. ptr == NULL gave error message, (NULL had to be explicitly cast to
1462 the pointer type)</font></font></li>
1463
1464 <li>
1465 <font color="#FF0000"><font size=+1>assigning <b>signed char</b> values
1466 to <b>sfr</b>s generated duplicate code.</font></font></li>
1467
1468 <li>
1469 <font color="#FF0000"><font size=+1>definitions for CHAR_MIN, INT_MAX &amp;
1470 LONG_MAX incorrect in limits.h</font></font></li>
1471
1472 <li>
1473 <font color="#FF0000"><font size=+1>some more patches from Eric Norum &lt;eric@skatter.USask.Ca>
1474 his description of the patches.</font></font></li>
1475
1476 <ul>
1477 <li>
1478 <font color="#FF0000"><font size=+1>1) asxxxx/lkmain.c:181</font></font></li>
1479
1480 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; startp->f_type is
1481 an integer variable and so should not be</font></font>
1482 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; compared with NULL.</font></font>
1483 <p><font color="#FF0000"><font size=+1>2) asxxxx/lkmain.c:195</font></font>
1484 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; *ip is a character
1485 variable and so should not be</font></font>
1486 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; compared with NULL.</font></font>
1487 <p><font color="#FF0000"><font size=+1>3) asxxxx/lkmain.c:717</font></font>
1488 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; ctype[c] is a character
1489 variable so the expression (ctype[c] != ILL)</font></font>
1490 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; is always true on
1491 machines where char variables are signed.</font></font>
1492 <p><font color="#FF0000"><font size=+1>4) SDCCmain.c:780</font></font>
1493 <br><font color="#FF0000"><font size=+1>&nbsp;&nbsp; The preprocessor output
1494 file was left in the temporary directory.</font></font>
1495 <br>&nbsp;</ul>
1496
1497 <li>
1498 <font color="#FF0000"><font size=+1>&nbsp;volatile variables when used
1499 as loop induction variables caused the compiler to crash.</font></font></li>
1500
1501 <li>
1502 <font color="#FF0000"><font size=+1>compiler generated '<b>char * idata
1503 icp</b>'&nbsp; as a generic pointer instead of 1 byte pointer.</font></font></li>
1504
1505 <li>
1506 <font color="#FF0000"><font size=+1>link file problem, when linking multiple
1507 files together the compiler sometimes generated a bad file name.</font></font></li>
1508
1509 <li>
1510 <font color="#FF0000"><font size=+1>library function _<b>atol.c </b>had
1511 the function <b>main</b> in it.</font></font></li>
1512
1513 <li>
1514 <font color="#FF0000"><font size=+1>Incorrect code generated left shift
1515 of <b>one byte</b> variables <b>'rl'</b> should be <b>'rlc' </b>. Patch
1516 provided by : Jean-Louis VERN &lt;jlvern@writeme.com></font></font></li>
1517
1518 <li>
1519 <font color="#FF0000"><font size=+1>Bug in <b>./cpp/cpplib.c </b>. Patch
1520 provided by :Martijn van Balen &lt;balen@natlab.research.philips.com></font></font></li>
1521
1522 <li>
1523 <font color="#FF0000"><font size=+1>Consecutive <b>'if'</b> statements
1524 sometimes caused the compiler to crash. This bug was a fairly serious.</font></font></li>
1525
1526 <li>
1527 <font color="#FF0000"><font size=+1>Incorrect code generated right shift
1528 of <b>long variables</b> variables <b>'rlc'</b> should be <b>'rrc' </b>.
1529 Patch provided by : Jean-Louis VERN &lt;jlvern@writeme.com></font></font></li>
1530
1531 <li>
1532 <font color="#FF0000"><font size=+1>Xor, And and Or operation with bit
1533 variable &amp; non-bit variable generated incomplete code.</font></font></li>
1534
1535 <li>
1536 <font color="#FF0000"><font size=+1>Expression folding was too aggresive,
1537 was corrupting parameters in certain situations.</font></font></li>
1538
1539 <li>
1540 <font color="#FF0000"><font size=+1>Function prototypes declared with parameter
1541 names , occasionally caused problems.</font></font></li>
1542 </ul>
1543 </dl>
1544
1545 <dl>
1546 <ul>
1547 <li>
1548 </li>
1549 </ul>
1550 </dl>
1551 </dl>
1552
1553 </body>
1554 </html>