1.20.18.0022 RC01

Product: 

. GCC4 compiler engineering fix:
  . Corrected wrong code generated for i2 register left shift.
  . 'A' register optimisation leading to instruction removals and
    instruction recodings.

    o Removed instruction samples:
     * Unneeded recopy removed:
       MOVE mem, a              =>  MOVE mem, a
       MOVE a, mem

     * Unneeded compare because status already set:
       MOVE Reg, mem/Reg        =>  MOVE Reg, mem/Reg
       CMP  Reg, #0

    o Instruction recoding: If a = Reg (beware of instructions setting implicitly a) and if Reg is one of the source registers, it is replaced by a.

      INST is an arithmetic or logic instruction.

       INST Reg3, Reg2, Reg     =>  INST Reg3, Reg2, a

       INST a, Reg, Reg2        =>  INST a, a, Reg2

       INST Reg2, Reg, Reg2     =>  INST Reg2, a, Reg2

       INST Reg2, Reg           =>  INST Reg2, a

       MOVE mem, Reg            =>  MOVE mem, a

       MOVE Reg2, Reg           =>  INST a, #const
       INST Reg2, #const            MOVE Reg2, a