sim._pyrtl: mask bitwise binary operands.

Boolean negation produces negative integers, which when unmasked
drastically affects the result of these operations.
This commit is contained in:
Charlotte 2023-06-24 13:22:56 +10:00 committed by Catherine
parent 59a83cf7eb
commit 99417d6499

View file

@ -166,11 +166,11 @@ class _RHSValueCompiler(_ValueCompiler):
if value.operator == "%":
return f"zmod({sign(lhs)}, {sign(rhs)})"
if value.operator == "&":
return f"({self(lhs)} & {self(rhs)})"
return f"({mask(lhs)} & {mask(rhs)})"
if value.operator == "|":
return f"({self(lhs)} | {self(rhs)})"
return f"({mask(lhs)} | {mask(rhs)})"
if value.operator == "^":
return f"({self(lhs)} ^ {self(rhs)})"
return f"({mask(lhs)} ^ {mask(rhs)})"
if value.operator == "<<":
return f"({sign(lhs)} << {sign(rhs)})"
if value.operator == ">>":