Binutils has the following for this instruction:
{ "l.maci", "rA,I", "01 0x3 IIIII AAAAA ---- -III IIII IIII", EF(l_mac), 0, it_mac },
The architecture spec, then, is wrong in indicating A's register address field as reserved, and B's being used.
The supplementary spec (http://opencores.org/ocsvn/openrisc/openrisc/trunk/docs/openrisc1200v2_supplementary_prm.odt ) and, I think or1ksim, now has immediate in 15:0 and register number in A field is used.
Binutils opcode table for OR32 still has immediate as bits 25:21 and 10:0.
Option 1: Update supplementary manual to indicate immediate value in 25:21 and 10:0, and fix OR1200 and or1ksim to use immediate in those locations. This would not require a change to binutils opcode table.
Option 2: Update binutils opcode table indicating immediate is now in bits 15:0, bringing it in line with supplementary manual, or1ksim and or1200.
Actually, it looks like the OR1200 does fish the immediate from bits 25:21 and 10:0, as can be seen in or1200_ctrl.v:
ifdef OR1200_MAC_IMPLEMENTED
OR1200_OR32_MACI:
id_simm = {{16{id_insn[25]}}, id_insn[25:21], id_insn[10:0]};
endif
The other instructions to use these immediate fields is the store data instructions (l.sw, l.sh, l.sb), so this isn't an unusual way to pack in an immediate.
Maybe we should stick to the original implementation, only updating the supplementary manual to indicate the A field for register address is used. This would mean no change to the OR1200 RTL, and a very minimal alteration of the instruction in the supplementary manual, as well, as, I guess, bringing or1ksim in line with this.