BUG REPORTS FOR MOTOROLA DSP56000 ASSEMBLER, LINKER, LIBRARIAN
Since Version 3.0

1)  There is a potential problem with the assembler RDIRECT directive in
    than its use might cause subsequent incorrect lookups for assembler
    mnemonics and pseudo-ops.  When an RDIRECT is issued for an opcode
    the high bit of the first character of the op string is set in the
    assembler's internal lookup tables.  These tables are searched using a
    string comparision on the opcode name.  The search might fail to function
    properly if an entry with the high bit set were encountered during
    lookup.  This problem is fixed in version 3.01 of the assembler.

2)  The assembler will accept "tcc b,b" as a valid instruction (it is not)
    and encode it as if it were "tcc a,b."  Likewise, "tcc a,a" is accepted
    and encoded as "tcc b,a."  This applies to all conditional transfer
    instructions.  Fixed in version 3.02 of the assembler.

3)  The assembler may incorrectly resolve a reference to a label if the
    label is defined with the same name in two different sections and is
    XREFed in the referencing section.  This is because the assembler
    erroneously uses the first matching symbol it finds if the symbol
    name has been XREFed in the current section.  This problem is fixed
    in version 3.03.

4)  If an assembler source file generates code without an explicit origin,
    and later the origin is reset to P space without an explicit address,
    phasing errors may occur because the symbol references in the non-origined
    code will have incorrect values.  This will be fixed in a future release.
    The workaround is to explicitly origin code before generating it.

5)  The assembler will improperly assemble a fractional immediate value when
    used in an X and Y data bus move if all significant bits of the fractional
    value will fit in eight bits.  This is because the assembler strips low
    order zeroes in the value before determining where the value is to be
    encoded in the instruction word.  In the case of X/Y data moves, the
    immediate value will always go in the second word, and thus should not
    be truncated in any case.  This is fixed in the assembler version 3.04.

6)  There is a bug with the assembler memory utilization report such that
    if a block of code recognized by the report logic is encapsulated within
    another block, subsequent unused blocks may have incorrect starting
    addresses.  This can happen when a buffer is allocated (via DSM/DSR) and
    the program counter is reset to the beginning of the buffer.  Fixed in
    assembler version 3.04.

7)  When the assembler and linker encounter block data directives for L
    memory they produce separate BLOCKDATA records for the X and Y data
    components.  However, the X data value may not be converted to uppercase
    hexadecimal as it should be.  This will be corrected in a later release
    of the assembler and linker.

8)  When a DO loop is encountered the assembler saves the first instruction
    line.  This line is partially reprocessed after the last instruction
    in the loop to check for pipeline restrictions which might exist between
    the last instruction and the first.  However, if the first instruction
    in the loop contains a reference to an underscore label, that label may
    be out of scope at the end of the loop, resulting in an undefined symbol
    error when the first line is reprocessed.  This problem will be fixed
    in a later release of the assembler.

9)  The librarian sometimes has problems doing module updates on the PC.
    This is due partly to sharing an input buffer between the library file
    and the module to be updated, and possibly a Microsoft C library bug.
    The problem is fixed in the librarian version 3.02.

10) The assembler incorrectly handles macro local labels associated with
    nested macro calls.  If a macro A is called which contains another macro
    B invocation, and on the macro B invocation line there is a local label,
    the local label will be associated with macro B rather than with macro
    A as expected.  This causes unresolved symbol references in macro A.
    The workaround is to put the label on a separate line immediately preceding
    the macro B call.  Fixed in assembler version 3.06.


BUG REPORTS FOR MOTOROLA DSP96000 ASSEMBLER, LINKER, LIBRARIAN
Since Version 1.0

1)  Symbol scoping in nested sections does not work.  It is fixed in version
    1.01 of the assembler.

2)  Loading an address register (Rn,Nn,Mn) and then using the same register
    in a branch instruction (Bcc, BScc) immediately following should yield
    an error indicating that the contents of the register are not available
    for the branch.  This does not happen in 1.0; fixed in assembler version
    1.01.

3)  Use of immediate operands for the counter in the SCS .FOR statement are
    not flagged until macro expansion of the statement.  This is corrected in
    version 1.01 of the assembler.

4)  The linker may get a segmentation fault on Sun or VAX systems when a
    bracketed (module local) value is encountered in the link file.  The
    linker attempts to use the relocation section number to offset into a
    module-specific table of section pointers.  However, the relocation
    section number may or may not correspond to a valid table offset.  This
    problem can also cause invalid substitution of relocated values for the
    bracketed expressions.  Fixed in linker version 1.01.

5)  The assembler will generate an incorrect loop address for a PC-relative
    DO instruction (DOR) if the calculated loop address is zero.  Generally
    this is not a problem since such a loop address would indicate an empty DO
    loop which is an error (the assembler does not produce an error message
    under the circumstances, however).  This is fixed in assembler version
    1.03.

6)  The assembler incorrectly accepted a .L register as the destination
    register for a MPYS/U instruction (e.g. MPYS D3.L,D4.L,D5.L) and would not
    accept a .ML register (e.g. MPYS D3.L,D4.L,D5.ML).  This has been
    fixed in version 1.04 of the assembler.

7)  An incorrect number of parameters was being passed to one of the
    assembler lookup routines, causing random errors.  This is fixed
    in assembler version 1.05.

8)  There was a bug in the section nesting traversal logic which
    caused the section list to be scanned for every matching symbol.
    This caused a nesting match at the outermost section level, rather
    than the innermost level.  Corrected in assembler version 1.05.

9)  A short jump or branch instruction with an external target will be
    assembled incorrectly.  This is because the target bits are split
    in the instruction word and the assembler had the bit blocks
    swapped.  This problem is fixed in version 1.05.

10) There are problems with scoping in sections.  Suppose a symbol JUNK is
    defined in section FOO and section BAR is nested inside section FOO.
    Suppose further that another symbol JUNK is defined inside section BAR
    and that a reference to JUNK is made inside BAR.  Now if the reference
    to JUNK in BAR precedes the definition within BAR the assembler will
    use the definition of JUNK from FOO on the first pass and the
    definition from BAR on the second pass.  This could result in a
    phasing error.  The workaround is to use unique symbol
    names such that scoping does not occur; the solution is to provide a
    LOCAL directive (like a forward declaration) to inform the assembler
    that a local definition will be provided.  This will be fixed in a
    future version of the assembler.

11) Behavior of global sections in general and use of SET directives
    within global sections in particular can be flakey.  A symbol defined
    outside of any section and then redefined inside a global section is
    not flagged as an error.  Values of SET symbols can get munged if the
    SET symbol is reset within a global section.  And XREFed SETs within
    sections are not properly set.  These bugs will be fixed in a future
    release of the assembler.

12) When the -c option is given the assembler will not correctly close
    MACLIB and INCLUDE files.  If many MACLIB or INCLUDE files are used
    in the source this can exhaust available file handles on some systems.
    Fixed in assembler version 1.06.

13) The assembler directive BSR for Block Storage Reverse collides with
    the assembler instruction mnemonic BSR for BRanch Subroutine.  The
    directive name is changed in version 1.07 to BSB for Block Storage
    Bit-reverse.

14) The assembler will issue an error if the TRAP instruction is found
    at the loop address of a DO loop.  This is incorrect and is fixed in
    version 1.07 of the assembler.
