1
0
mirror of https://github.com/antonblanchard/microwatt.git synced 2026-03-27 18:29:46 +00:00

logical: Only do output inversion for OP_AND, OP_OR and OP_XOR

It's not needed for the other ops (popcnt, parity, etc.) and the
logical unit shows up as a critical path from time to time.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
Paul Mackerras
2020-06-19 17:13:06 +10:00
parent c2da82764f
commit 9b40b5a77b

View File

@@ -87,12 +87,19 @@ begin
end if;
case op is
when OP_AND =>
tmp := rs and rb_adj;
when OP_OR =>
tmp := rs or rb_adj;
when OP_XOR =>
tmp := rs xor rb_adj;
when OP_AND | OP_OR | OP_XOR =>
case op is
when OP_AND =>
tmp := rs and rb_adj;
when OP_OR =>
tmp := rs or rb_adj;
when others =>
tmp := rs xor rb_adj;
end case;
if invert_out = '1' then
tmp := not tmp;
end if;
when OP_POPCNT =>
tmp := popcnt;
when OP_PRTY =>
@@ -115,9 +122,6 @@ begin
tmp(7 downto 0) := rs(7 downto 0);
end case;
if invert_out = '1' then
tmp := not tmp;
end if;
result <= tmp;
end process;