. 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
Product: