The current encoding of the multi-precision and xc.mror instructions is very wasteful.
Current usage patterns are:
xc.madd.3 (a,b), c, d, a
xc.msub.3 (a,b), c, d, a
xc.mmul.3 (a,b), c, d, a
xc.macc.1 (a,b), a, b, c
Most of the time, a source and a destination register (or two) are the same.
Suggestions:
- For
xc.madd.3, xc.msub.3, xc.mmul.3, make what is now rs3 an implicit argument, which is always equal to the "low" destination register.
- This frees up 32 code points per instruction.
- For
xc.macc.1, either:
- Remove
rs3, make rs1 a multi-register address and add rs2 to the catenation of rs1 registers, placing the result in rdm.
- Make
rdm an implicit source register pair.
- Frees up 256 code points.
For xc.mror:
- make
rs1 a multi-source register.
- make
rs2 the rotate ammount.
The current encoding of the multi-precision and
xc.mrorinstructions is very wasteful.Current usage patterns are:
xc.madd.3 (a,b), c, d, axc.msub.3 (a,b), c, d, axc.mmul.3 (a,b), c, d, axc.macc.1 (a,b), a, b, cMost of the time, a source and a destination register (or two) are the same.
Suggestions:
xc.madd.3,xc.msub.3,xc.mmul.3, make what is nowrs3an implicit argument, which is always equal to the "low" destination register.xc.macc.1, either:rs3, makers1a multi-register address and addrs2to the catenation ofrs1registers, placing the result inrdm.rdman implicit source register pair.For
xc.mror:rs1a multi-source register.rs2the rotate ammount.