-------------------------------------------------------------------------------
*  RELEASE 2.10 BUGLIST                                                       *
*  Update - 05/21/90                                                          *
*                                                                             *
*  This file contains a list of bugs in the release 2.10 of the 320C30 code   *
*  generation tools.                                                          *
*                                                                             *
*  All bugs will be fixed in the next production release unless otherwise     *
*  indicated.  There will sometimes be references to internal versions in     *
*  this list.  For that reason you must always refer to the release status    *
*  information (published every two weeks) to verify the availability of a    *
*  specific revision.                                                         *
*                                                                             *
-------------------------------------------------------------------------------
 
DOCUMENTATION
-------------------------------------------------------------------------------
2866   V2.10   will fix
$IF <parameter> statements in $MACRO block need to be in the form <parameter.v>
But assembler manual does not explain the use of the .v (value) suffix.
The value suffix is also needed to pass parameter values to $LOOP blocks.
 
COMPILER
-------------------------------------------------------------------------------
2910   V2.10   Fixed V3.00
Consecutive writes to same address can execute in wrong order at run-time.
For example:             *out = A;
                         *out = B;
will execute in the order: B, A because of parallel STI's to same address.
                  ------[ Work-around ]------
-x option suppresses generation of parallel instructions.
 
2920   V2.10   Fixed V3.00
Problem with data page pointer when using f.p. constants with big model (-b).
Compiler forgets to load DP when it should before accessing floating
point constant.
 
2948   V2.10   Fixed V3.00
16-bit unsigned constants are sometimes treated as signed; e.g. bitwise AND
and other logical operations (OR, XOR).
Example:
                regsiter i, j;
                j = i & 0xFFFF;        /* SIGN-EXTENDED TO 0xFFFFFFFF */
               ---------[ Work Around ]-------
The -mx option on CL30 can be used as a workaround in the AND case.
 
3047   V2.10   Fixed V3.00
Compiler may corrupt FP (frame pointer) in the following cases:
In an expression of the form "<expr1> + <expr2> + constant", if both <expr1>
and <expr2> involve function calls (either to internal math RTS or to an
external function), the FP may be corrupted by a later operation involving
indirection.
                     -------[ Work Around ]--------
  Break up the statement into two lines.  For example:
                    variable = <expr1> + <expr2>;
                    variable += constant;
 
3085   V3.00   will fix V4.00
If a pointer to a structure is de-referenced immediately before a condition
statement, and a different member of the same structure is the only reference
within that condition statement, the condition test may not be done properly.
For example:       x = ptr->a;
                   if ( ptr->b ) x++;       /*  x may not be incremented   */
WORK-AROUND:
use cl30 option -mx
 
3184   V3.00   will fix
This C-expression  hangs up the code generator:
      b3184()
      {
         int a,b;
         b = -b * -a;
      }
 
RTS
-------------------------------------------------------------------------------
2971   V2.10   Fixed V3.00
strtok(*S1,*S2) does not stop at NULL character in string S1 in some cases.
For example:      char S1[] = "This\0is a test";
 
LINKER
-------------------------------------------------------------------------------
2990   V2.10   Fixed V3.00
On a PC host, symbol table overflow occurs when files with greater than 2k
global symbols are linked.
Note - Starting with release 3.00 the linker symbol limits are:
            PC host: 8400              MPW host: 10050
          UNIX host: 42000
    (overflow may occur below these limits if host has insufficient memory.)
 
ASSEMBLER
-------------------------------------------------------------------------------
3030   V2.10   Fixed V3.00
AND   *++AR2(0),AR2,AR2   assembles as 21ca0ad2 - should assemble 21ca0ac2
 
3149   V3.00   will fix
VMS ONLY:  asm30 will not accept macros of this form ...
m_name      $MACRO   type
            addf     *+ar6(7),r0
            $IF      type.v = 0
            $ELSE
            $ENDIF
            $ENDM
                     ---------[ work around ]----------
the macro will work with the addition of a comment:
m_name      $MACRO   type
            addf     *+ar6(7),r0
*           >>>>>>>>>>   add a comment line here <<<<<<<<<<<<<<   *
            $IF      type.v = 0
            $ELSE
            $ENDIF
            $ENDM
 
UTILITIES
-------------------------------------------------------------------------------
3054   V2.10   Fixed V3.00
VMS only: Tools return same exit code to system ($STATUS) whether or not there
were errors during execution.
 
HLL - High Level Language source code debugger (Rev number 2.00)
      (V2.10 of HLL does not refer to V2.10 of other C30 tools)
-------------------------------------------------------------------------------
                    ------[ Please Note ]--------
The HLL source code debugger verifies that all programs fit into available
memory and will not accept programs with memory map errors.  The EMU30
emulator, however, does not make this verification before loading programs.
When the HLL debugger flags 'Invalid load file' and 'Memory out of range'
errors this means it has detected load file problems which may not have been
detected by emu30.
 
3016   V2.00   Fixed V2.10
Displayed data for structure variables is sometimes not updated correctly.
 
3021   V2.00   Fixed V2.10
Floating point multiply returns infinity if any operand has negative exponent
                  For example:   220 * 0.2
WORKAROUND: Instead of 0.2, use  2.0 and divide by 10
                  For example:   (220 * 2.0) / 10
            This would still not work:     220 * (2.0 / 10.0)
 
3033   V2.00   will fix V2.10
Changes do not show when preripherial registers are written to by commands
from the command window or during program execution.  (INIT.CMD file has
incorrect mapping of the peripheral registers. Each register needs to have
its own memory definition.)
 
3083   V2.00   will fix
Sequential access to multiply mapped memory leads to scrambled display when
reading into a memory window (e.g. FRAM or FIFO mapped on entire IOBUS)
 
3130   V2.00   Fixed V2.10
The sample program distributed with DB30 will not load if using the RAM (-cr)
model.  "Memory Address Out of Range" error is generated.
 
-------------------------------------------------------------------------------
