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:
22
logical.vhdl
22
logical.vhdl
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user