Commit 9b40b5a7 authored by Paul Mackerras's avatar Paul Mackerras

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: default avatarPaul Mackerras <paulus@ozlabs.org>
parent c2da8276
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment