Picked up by my instruction Fuzzer
From http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHIHGGJ.html
Syntax MUL{cond}{S} Rd, Rm, Rs MLA{cond}{S} Rd, Rm, Rs, Rn where: cond is an optional condition code (see Conditional execution). S is an optional suffix. If S isspecified, the condition code flags are updated on the result of the operation (see Conditional execution). Rd is the ARM register for the result. Rm, Rs, Rn are ARM registers holding the operands. r15 cannot be used for any of Rd, Rm, Rs, or Rn. Rd cannot be the same as Rm.
So MUL r0,r0,r0 works perfectly on Amber but it doesnt work on any of the Emulators or a Real ARM. Just worth having a note of it here.
This is more of a documentation thing than a bug. If someone develops using Amber their code may fail on a real arm.
The GNU assembler does give a warming if Rd and Rm are the same;
arm-none-linux-gnueabi-gcc -c -march=armv2a -mno-thumb-interwork -I../../sw/include -o mul.o mul.S mul.S: Assembler messages: mul.S:64: Rd and Rm should be different in mul
Fair enough. It being here and closed is good enough for me.