home *** CD-ROM | disk | FTP | other *** search
-
- VERSION.DOC
- DICE
-
- VERS DES COMMENT
- VERS = Release Version
- DES = bug fixed / feature designator
- XB - major bug fixed in main compiler
- (use of routine in question could have caused a crash)
- B - minor bug fixed in main compiler
- F - feature added
- E - enhancement to existing feature
- O - optimization added
-
- ADD - feature added or fixed that is standard C but was not previously
- implemented or working.
-
- XBL - major bug fixed to library
- BL - minor bug fixed to library
- FL - feature added to library
- OL - optimization added to library
-
- XBA - major bug fixed in support program (i.e. not DCC or sub programs)
- BA - minor bug fixed in support program
- FA - feature added to support program (or new support program)
- OA - optimization added to support program
-
- COMMENT = comment or bug, feature
-
- 2.06.30
- B another floating point bug found in && and || of the
- form 'fp && fp' or 'fp || fp', would cause incorrect
- evaluation and/or assembly error
-
- B small bug in fread() would sometimes set error flag
- when returning EOF, and fseek() would not reset this
- flag (it does now).
-
- BL bug in *scanf(), %c would overwrite the char by one byte
- (i.e. store into two chars instead of one). fixed.
-
- B DCPP didn't handle a quoted /* in directives correctly.
-
- 2.06.29
- B another long standing bug found: short a = i * j; where i and j
- are long's and *also* a memory reference (not in regs),
- the multiplication short-result optimization was screwed up.
-
- B register allocation bug (would produce a fatal error) fixed,
- registers would not be deallocated in constant conditional
- expressions such as: 1 ? (a = 4) : b;
-
- 2.06.28
- B really dumb bug fixed, made retroactive to 2.06.27 (all 2.06.27
- dists were redone with this fixed). Had been introduced in 2.06.27
-
- 2.06.27
- E add -// option to DCC and DCPP, enables C++ style // comments.
- If not specified, // style comments are ignored. Generally
- one puts -// in DCCOPTS.
-
- E added -no-env option for DCC. If specified, DCC will *not*
- load options from DCCOPTS.
-
- B fixed bug: static int fio(), fio(); (procedure declared twice
- on same line) would force procedure to be non-static.
-
- fixed bug: __geta4 int fio(), bar(); ... __geta4 would apply
- only to first procedure.
-
- B fixed bug w/ labels ... label: case ... would generate error
- message (case or default following directly after label). Was
- introduced when I initially fixed labels.
-
- E AUTO-AGGREGATE INITIALIZATION ADDED, e.g.
- main() { int a[] = { 1, 2, 3 }; ... }.
-
- static & global initialization has been re-vamped. Note that
- bit-field aggregate initialization is NOT supported yet.
-
- B Fixed bug that has been in there from the beginning.
- int *a; a[20000] = 1; ... would not multiply the constant by 4 to
- get the index. ONLY EFFECTED CONSTANT INDEXES WHOS OFFSET WOULD BE
- LARGER THAN A SIGNED SHORT, which is why it was not caught.
-
- B Fixed bug in float point stack allocation... temporary fp variables
- from the previous procedure would not properly be cleared from the
- cache, causing erronous stack offsets (that overlap other variables)
- in the next procedure.
-
- E Added ANSI 'U' extension for constants, e.g. 123U. DICE now
- automatically promotes a constant to unsigned if it does not fit in
- a signed long, such as 4000000000. Note, however, the int->float
- conversion is currently always signed due to lack of
- unsigned->float calls in the amiga's shared fp libraries.
-
- B small bug in fread(), would not set the EOF flag when an EOF
- occurs for an fread() requesting a buffer size larger than the
- stdio buffer size.
-
- B when making a registered-args call (-mr, -mR, -mRR) where a
- pointer - int subtraction occurs, i.e. foo(ptr - int, int),
- arguments after the argument containing the ptr - int would
- be incorrect (registers would get squashed). ONLY applies
- to registered-args calls. This has been fixed!
-
- B bug in preprocessor fixed, #define fubar(x) "a x a" would replace
- the 'x' in the string, which is wrong.
-
- B bug with bitfields has been found and fixed. Essentially, bitfield
- operations in routines that need to run a retry pass can get
- munged. This is usually caused by routines that declare lots of
- local variables.
-
- 2.06.26
- B Fixed bug in floating pt compare of the form: x = (f1 == f2);
- i.e. a compare where the result is a boolean 0/1 when not in
- a conditional. Was caught by DICE (caused a fatal error).
-
- B Fixed bug w/ bitfields (was caught by DICE), would give fatal
- error if destination was not a register for field extraction.
-
- B fixed bugs with stringtize operator in macros, should now work
- according to the ANSI spec.
-
- #define fubar(x) #x
-
- BL month was off by one for %m operator in strftime()
-
- E PROCEDURES MAY NOW RETURN STRUCTURES. YOU MUST PROTOTYPE ALL SUCH
- PROCEDURES.
-
- E added // comments to DCPP (C++ style comments)
-
- 2.06.25
- E doc/errors.doc now exists, error handling centralized.
-
- E a printer driver and exec device driver example has been added to
- examples/ ... so now I have a shared library example, dos device
- driver example, EXEC device driver and printer driver example.
-
- 2.06.24
- B stack allocation changes in 2.06.23 were broken, broke floating point.
- (got the stack tracking mixed up w/ variable allocation)
-
- B ?: fix in 2.06.23 was broken (sigh), fixed ... 'default:' would
- not be properly tokenized.
-
- E *scanf() now supports %e/E/f/g/G and %[..]
-
- 2.06.23 BETA
- B goto labels are now in their own name space, no more conflicts
- with int a; ... goto a; ... a: ...
-
- F added stack tracking for fp temporaries, meaning that subroutines
- containing floating point expressions do not take up anywhere near
- the amount of stack they used to.
-
- F allows declarations after switch() { and before first case.
-
- F fixed problem with ... ? symbol : ... (symbol was being
- interpreted as a label instead of a variable within a ?:
- conditional
-
- F fixed problems with conditional returns from fp operations,
- such as: double a, b; int c = (a < b); that must
- generate a 0/1 result instead of a branch (as in an if()).
- Would generate error before.
-
- 2.06.22
- B fixed problem with GOTO labels, a goto label semantically is
- not a statement unto itself. The problem is a line like the
- below:
-
- if (i) j = 1; else x: j = 2;
-
- Currently j = 2; is completely outside the if in DICE. This
- is incorrect, 'x: j = 2;' counts as a single statement.
-
- E libmake is now documented, it wasn't before! New options have
- been added to libmake and fdtolib. For libmake, DCC's -D
- option has been added. For fdtolib, a new -p option is specifiable
- to set the prefix used on exported symbols (to support creation
- of dynamic.library compatible object modules)
-
- B fixed bug in string constant array initialization,
- char x[1] = "a"; previously generated an error
-
- B fixed infinite ERROR printing loop
-
- F revamped constant-address handling (i.e. when you map a
- complex structure over IO space at a known address, useful when
- generating ROM'd apps for 68000 based uP's.
-
- F dynamic.library & support routines now part of the distribution.
-
- 2.06.21
- E fixed register reallocation, should now do a better job
- allocating registers in complex subroutines. Hopefully squashed
- 'maximum retries exceeded' error for all but the most incredibly
- complex expressions.
-
- B fixed bug in int->float conversion, expressions such as:
- double x = (double)(a * b);
-
- E fixed somestuff that generated an infinite WARN loop.
-
- F DCC now creates the destination directory heirarchy if it does
- not exist. For example, when you DCC com/x.c the object file
- will be T:com/x.o, with T:com created if necessary.
-
- F DYNAMIC FUNCTION/VAR LIBARARY SUPPORT ADDED, see __dynamic
- explanation in DYNAMIC.DOC .
-
- F DCPP now accepts -Ddefine(vars..)=definition, it used to be
- able to only accept -Ddefine=value
-
- 2.06.20
- F TimerBase, for timer.device library calls, now has auto-open
- capability, meaning that you can simply call AddTime(), CmpTime(),
- SubTime(), and the new 2.0 calls (GetSysTime() & ReadEClock())
- without having to open the timer.device and set up TimerBase
- yourself.
-
- B bug in if (ptr & 1) and similar constructs doing a logical and
- in a compare against a pointer rather than an int produced
- bad code caught by DAS.
-
- B x.o was in c.lib, this is wrong... x.o must be the LAST file in
- any link and is included automatically by DCC when it runs DLINK.
-
- F additional example code in DCC2:examples -- a DOS handler and
- a shared library.
-
- 2.06.19
- B bug in dynamic stack code under 1.3 fixed
- B bug in workbench startup under 1.3 fixed
- B bug in register allocation fixed (would cause fatal error
- message 'too many retries' sometimes when procedure args
- declared as arrays instead of pointers)
-
- 2.06.18
- F several more libraries have auto-open capability
-
- B bug in DLINK fixed -- would GURU on large links due to an error
- in the allocation routines (relocation info larger than 4K would
- cause a GURU)
-
- 2.06.17
- F DCPP now scans DINCLUDE:PD/ for include files. This is where I
- will be putting .H files for various ports (such as the UNIX
- regexp port). This was done so as not to clutter the main
- DINCLUDE: and to differentiate between PD files and non-PD
- files.
-
- UNIX compatible .H files are usually placed in DINCLUDE: or
- DINCLUDE:SYS/
-
- F preprocessor now handles #if defined(symbol) properly (was
- previously not implemented)
-
- F BITFIELDS now 99% implemented! including signed/unsigned
- qualifications. The only thing that does not work is ++bitfield
- and --bitfield. Single-bit bitfields have been optimized.
- aggregate initialization of bitfields is still wanting. executable
- actually got smaller when I finally got down and fixed these up.
- No 020/030 support yet.
-
- F startup code modified to allow writes to desc 0, reads from desc 1,
- etc... at the file descriptor level but not the stdio level. This
- is to support some UNIX programs which do this.
-
- BL bug in [f]putc() fixed -- [f]putc() is supposed to return the put character,
- but did not do so in the case of a new line (putc), or
- at all (fputc).
-
- F NEW LIBRARY ROUTINESE: stat(), fstat(), getenv(), opendir(),
- readdir(), closedir(), rewinddir() (see MAN/UNIX.DOC)
-
- F chdir() now restores the original directory on exit
-
- F Dynamic Stacking added (-gs option). Somewhat primitive, but will
- get much better. This allows subroutines to be as deeply nested as
- required, allocating and deallocating stack frames when low stack
- conditions exist.
-
- F longjmp()/setjmp() now properly handle dynamic stacks
-
- B fixed another bug, this one having to do with the index address
- mode (An,Dn.x) combined with a binary operator.
-
- B fixed bug in FDTOLIB that screwed up register ordering.
-
- 2.06.16
- B fixed EXG bug in DAS, EXG As,Ad would generate Ds,Dd.. screwed
- up registered args (-mRR).
-
- B fixed bug in *= and /= combined w/ array indexing, things like
- temp[i] /= 23; would use the scratch regs for storage across
- the divide call.
-
- 2.06.15
- F BASIC REGISTERED ARGUMENTS ADDED. See -mr, -mR, and -mRR options
-
- F prototype optimization. If a prototype says a procedure takes a
- short, then DICE pushes a long (as usual). However, DICE will
- no longer EXT the object before pushing it (upper word is garbage).
- This works because the procedure, having declared the argument a
- short, will only access the lower 16 bits.
-
- B fixed token pasting bug in dcpp, a ## b ## c now works properly.
-
- F first registered distribution that includes the 2.0 includes,
- restructuring of 1.3 includes (now called 'amiga13' instead of
- 'amiga'), and restructuring of disks to make more space.
-
- 2.05.14
- BL fgets() would overflow the buffer by one character when input lines
- were larger than the buffer size.
-
- B DCC would complain about output (-o) files ending in .h or .c when
- they do not actually end in .h or .c ..
-
- 2.05.13
- B DCC was supplying only a 2K stack to NON-RESIDENTED sub programs.
- Oops.
-
- F New floating point support for MATHIEEESING*.LIBRARY ... single
- precision IEEE library. This is now the default since it is
- more compatible with the double precision IEEE library for
- conversions between single & double precision.
-
- Use the -ffp option to DCC to use the old motorola fast floating
- point single precision library. Note that the new ieee single
- precision library may not exist on every computer.
-
- 2.05.12
- B another bug with 'const static' items not properly aligning the
- routine they were declared in (when declared within a procedure
- definition). Fixed.
-
- B pfmt has a local 64 byte buffer which used to be static. This is
- illegal for the ROM.LIB version of sprintf() & vsprintf() and so I
- have made this an auto instead. This fix does not effect Amiga C
- programming though it does mean that [v]sprintf() may now be called
- out of context or multi-threaded without mishap.
-
- F qsort(), rand(), and srand() have been written.
-
- B volatile was not being handled proper, 'volatile char *ptr' is
- a pointer to a volatile char, NOT a volatile pointer, for
- example.
-
- 2.05.11
- F new library, ROM.LIB, contains only those routines from C.LIB that
- are completely self contained (reference no static or global data,
- or other routines. Use only autos if at all).
-
- This library is included instead of C.LIB when the -rom option
- to DCC is used (with the -rom option, amigas*.lib is not included
- either, and it is up to the programmer to specify his own startup
- module)
-
- F char ary[0] and empty structs return errors, but a direct 'void'
- declaration is allowed. i.e. 'void x;', useful in some cases.
-
- F Specifying the 'register' keyword now adds some 'weight' to the
- variable, perhaps giving it more of a chance of becomming a
- register.
-
- B DCPP was improperly handling token pasting (##), this has been
- fixed.
-
- B static const objects declared within a procedure not word-aligned
- could cause the procedure code to not be word-aligned, thus
- causing a software error.
-
- F CONST object handling has been changed. Before 2.05.11 const
- objects were not put into a CODE hunk unless the -ms or -mS options
- are given to DCC. 2.05.11 and beyond put const qualified objects
- in a code hunk regardless.
-
- F C.O Modified. Any program run in the background with RUN will not
- attempt to Open("*",..) to get the stderr channel but instead
- will use the stdout descriptor if it exists. This allows programs
- to be detached from a CLI (i.e. that you can run a program and
- then close the CLI window without mishap)
-
- F -020, -030, -881, -882 options formally added (currently -020/-030
- are the same and -881/-882 are the same)
-
- -020: uses EXTB.L (no major support has been added yet)
-
- B DSEARCH had a bug... when multiple files are scanned it would miss
- lines in the second file and beyond!
-
- F oops, const items in the library were not placed in the code
- section. This effects <ctype.h> ... you must recompile any
- source files that use <ctype.h> macros since the access method
- is now pc-relative instead of data-relative.
-
- The fix is more pertainent to ROMd applications that use <ctype.h>
- ... the lookup tables are no longer copied into RAM for such
- applications.
-
- 2.05.10
- F __config and __shared type qualifiers added
-
- B --var; generated an internal error
-
-