Consolidate add/subtract instructions into a single op
authorPaul Mackerras <paulus@ozlabs.org>
Fri, 4 Oct 2019 06:11:21 +0000 (16:11 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Fri, 4 Oct 2019 06:11:21 +0000 (16:11 +1000)
commit96b402a4bfb4ec8d74c64aa2dd4b8de7ee90e3c0
tree23ff825b9ddeee030d39fa6d4a0f248414b8b885
parentb0f302ecf4a6073bb96dfea47dd139b009f54d6c
Consolidate add/subtract instructions into a single op

All of the PPC add and subtract instructions, including carrying
and extended versions, do much the same arithmetic operation:

result = (I xor A) + B + C

where A is the value from RA, I provides a logical inversion of A
(i.e. I is 0 or -1), B is either from RB or is a constant 0 or -1,
and C is 0, 1 or the carry bit from XER (CA).

To consolidate all the add/subtract instructions into a single
OP_ADD, we add a column to decode_rom_t to indicate when A should
be inverted, and change the input_carry field to a 3-state selector
to select C in the equation above.

This also adds a new "CONST_M1" value for input_reg_b_t to indicate
that B is a constant -1.  This allows us to implement addme and
subfme.

The addex instruction appears not to exist, so the comments referring
to it are removed.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
common.vhdl
decode1.vhdl
decode2.vhdl
decode_types.vhdl
execute1.vhdl