home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!wupost!waikato.ac.nz!comp.vuw.ac.nz!durie.amigans.gen.nz!liam
- Newsgroups: comp.sys.amiga.programmer
- Subject: Re: DICE 2.06.39 to 2.06.40 changes
- Message-ID: <liam.0b4v@durie.amigans.gen.nz>
- From: liam@durie.amigans.gen.nz (Liam Greenwood)
- Date: 24 Dec 92 22:42:01 GMT+12
- References: <1992Dec20.014959.12792@newshub.ccs.yorku.ca>
- Organization: It's Home, really...
- X-Newsreader: TIN [version 1.1 PL6]
- Lines: 385
-
- W L Anderson (wlanders@nexus.yorku.ca) wrote:
- > Could someone post the version.doc file for DICE 2.06.40? I've
- > got 2.06.39, and I'm wondering what the changes are.
-
- VERSION.DOC
- DICE
-
- 2.06.40
- * Updates after the first free one will be upped to $15 (they used
- to be $10) as of 1 Jan 1993.
-
- B bug in commodore IEEEDPFix() routine found (it would trash D3),
- hack put in library code to save/restore D3 to get around it.
-
- B bug in switch() found relating to switch(unsigned_char), would
- not 'find' certain cases when the overall case range is greater
- than 128. (I wrote a comprehensive test program to construct
- random C switch statements with all signed/unsigned int types
- to ensure that switch() is really fixed this time!)
-
- B bug in structure copying code for word-aligned structures would
- mess up the last word in some cases. (doesn't occur with long
- aligned structures)
-
- B bug in constant floating point divide fixed, 0.0/<fpconst> would
- cause an endless loop in DC1.
-
- B bug in structural returns of the format return (*struct_ptr) has
- been fixed. Straight structural returns 'return(structure)' were
- not effected.
-
- B bug in casts to void fixed, previously generated an error, now
- allowed (no error message).
-
- 2.06.39
- F lstat() function added, understands soft links under 2.0
-
- F -unix option added to DCC
-
- F -O0 option added to DCC (objects go to current directory instead
- of T:)
-
- F setvbuf() was calling _CreatePort() for csr.lib instead of
- @CreatePort()
-
- F DICE now supports explicit register specification for arguments
- to procedures through new storage qualifiers __D0, __D1, etc...
- i.e.
-
- int fubar (__D0 int, __A0 char *);
-
- int
- fubar(a, p)
- __D0 int a;
- __A0 char *p;
- {
- ...
- }
-
- F -mu option added to DCC/DC1, enables unix-style common storage.
- Not currently compatible w/ standard amiga object module format.
-
- 2.06.38
- B fputc() would return a signed char, so fputc(0xFF, ..) would
- return -1 instead of 255.
-
- B long % long would return incorrect results for negative arguments
- to the modulus (result would be the wrong sign)
-
- B link error w/ large-data model combined with -gs fixed
-
- B strstr(str, "") used to return NULL. It now returns str.
-
- B bug in auto (stack) char arrays that are auto-aggregate initialized
- fixed. An odd sized array initializied like: char ary[31] =
- "abc.."; would crash a 68000 due to an odd-aligned longword access.
- Fixed.
-
- 2.06.37
- B arrays are now aligned the same as their element type
- alignment. Thus, char a[3]; is byte aligned while short a[3];
- is word aligned. Previously arrays were always word aligned.
- (not really a bug, but required to work with Amiga cia structures)
-
- F PROFILING ADDED. New -prof option to DCC, LIBMAKE, and FDTOLIB.
- This tool gives you unmatched profiling capabilities. You may
- profile just your source, standard C calls, amiga library calls,
- or any combination. A <programname>.dprof file is automatically
- generated when your program exits and may be turned into a
- textual representation with the DPROF program.
-
- Profiling routines have a 1 uS granularity under 2.0, 20 mS
- granularity under 1.3.
-
- __noprof qualifier for procedures added -- prevents a procedure
- from being profiled (used by the system to prevent the profiler
- routine from getting profiled itself)
-
- F C.LIB renamed to CS.LIB to generalize library names. Infix IDs
- are now generalized as follows:
-
- L large data model
- S small data model
- R registered args, else stack args (registered release only)
- P profiled, else not profiled.
-
- DCC will now use the -prof and -md/-mD options to determine which
- c.lib and amiga.lib to use. The more useful combinations are
- included in the distribution and registered users may make
- additional versions as needed.
-
- Note that you may mix options -- it is perfectly valid to compile
- source modules with -mD but link small-data.
-
- BL bug in fread() fixed relating to an fread() occuring after an
- ungetc().
-
- E ALL LIBRARIES IN THE SYSTEM REORGANIZED. There are now many
- more libraries. Registered users now have a means of remaking
- *ANY* library from scratch by unpacking the library source code
- and typeing 'dmake' with no arguments for instructions. Generally
- only the DTMP: assignment and -2.0 in your DCCOPTS is required.
-
- Since there are many more libraries possible then I can fit in the
- distribution, this means may be used to create esoteric libraries
- that the majority of people will never use.
-
- F Fixed two major bugs with constant floating point arithmatic...
- addition and subtraction would not work correctly in a few cases
- (it would get the sign wrong), the exponent would get screwed up
- in some cases (usually after a negation), and I was overflowing
- the single-precision exponent range for conversions to type float.
-
- Ooooo this stuff should have been caught long ago!
-
- F Fixed a pointer arithmatic bug, yet another case where a scratch
- register would get overwritten due to a procedure call.
-
- 2.06.36
- B register allocation bug fixed, related to floating point
- routines mainly. Would generate a 'Too many redos' error
- in some cases (bug did not generate bad code).
-
- F PRECOMPILED INCLUDES ADDED, see -H option in DOC/DCC.DOC.
-
-
- 2.06.35
- FL under 2.0 (V37), getenv() now checks for local enviroment variables
- before global ENV: variables. Under 1.3 only global ENV: variables
- are checked for.
-
- BL fixed %U and %W in strftime(), would generate incorrect week-of-year
-
- B fixed stringize operator for \n, i.e. quoteme(fubar\n) -> "fubar\n",
- would previously generate incorrect result (I think)
-
- B fixed bugs in integer multiply & divide, some cases would generate
- fatal errors (all caught by DICE)
-
- B fixed bug &= operator, would generate assembly error in
- conditional: while (x &= (x - 1)) ...
-
- F optimizations made to mulitply & divide, handles 16 bit expressions
- better.
-
- F minor optimization added for procedure calls within the same
- module. If call is within a byte offset then BSR.B will be
- used, else BSR.W is used.
-
- F DLink now checks for illegal small-data references to far objects
- and generates the appropriate error message. This was added for
- completeness and also because __far or -mD data objects are no
- longer A4-relative. The check will catch illegal model mixing.
-
- 2.06.34
- BL bug in <varargs.h> (old style var-args) fixed, was skipping first
- argument. Note that all ANSI projects should use <stdarg.h>
-
- 2.06.33
- B bug in offsetof(type, array_elm) fixed, previously caused error
- message.
-
- 2.06.32
- B fixed bug in dlink Introduced in .31 that would cause a machine
- crash.
-
-
- 2.06.31
- B fixed floating point bug relating to array indexing, would
- clobber A0 in some cases
-
- B fixed preprocessor bug relating to the use of hex constants
- in #if expressions (they wouldn't work)
-
- E redid the handling of the ?: routine to allocate its result
- storage (a temporary register) after running the sub-expressions
- instead of before, which allows you to nest ?: indefinitely without
- generating an too-many-redos error.
-
- B register allocation bug (would generate fatal error) in
- &array (redundant & operator) has been fixed.
-
- B DCPP now accepts null directives. # with no directive.
-
- 2.06.30
-
- F DCPP now evaluates undefined symbols in #if expressions as 0
- instead of generating an error message, as per ANSI.
-
- B Yet another bug in the # (stringtize) operator found. Fixed.
- Really really really should work right this time!
-
- B bug in switch/case fixed, case <enumid>: would generate an
- error message.
-
- BA I was shipping the wrong mathieeedoub*.library shared libraries,
- would cause erronous float->double conversion.
-
- 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.
-
- F Large programs that have more than 64K of *initialized* data
- may now use either __far for selected items (preferable) or -mD
- without causing link errors. Previously dlink would combine far
- data along with near data making all small-data referenced bss
- items out of range if more than 64K of initialized data had been
- declared, __far or not. Now, DC1 generates 'fardata' sections
- properly when -mD or __far is used (previously only worked with
- __far), and dlink will not combine any section name beginning with
- 'far' into the small data model.
-
- This is only of major import when compiling incredibly huge
- programs. Note that having greater than 64K of bss with -mD or
- __Far has always been supported since library bss is always forced
- in front of program bss.
-
- F DLink now takes approximately 15% less memory. While it still
- requires memory to hold the combined size of all objects and
- libraries, incidental memory requirements now reuse much of this
- memory from unlinked sections instead of allocate new memory.
-
- 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.
-
- version trace for 2.06.22 and below retired
-
-
- --
- Liam Greenwood ------ liam@durie.amigans.gen.nz ------ Wanganui, N.Z.
- Don't tell my Mother I'm a programmer,
- she thinks I'm a piano player in a brothel
-
-