fhdl.ast, back.pysim: implement shifts.
This commit is contained in:
parent
46f5addf05
commit
db4600d52b
5 changed files with 50 additions and 16 deletions
|
|
@ -75,15 +75,23 @@ class _RHSValueCompiler(ValueTransformer):
|
|||
elif len(value.operands) == 2:
|
||||
lhs, rhs = map(self, value.operands)
|
||||
if value.op == "+":
|
||||
return lambda state: normalize(lhs(state) + rhs(state), shape)
|
||||
return lambda state: normalize(lhs(state) + rhs(state), shape)
|
||||
if value.op == "-":
|
||||
return lambda state: normalize(lhs(state) - rhs(state), shape)
|
||||
return lambda state: normalize(lhs(state) - rhs(state), shape)
|
||||
if value.op == "&":
|
||||
return lambda state: normalize(lhs(state) & rhs(state), shape)
|
||||
return lambda state: normalize(lhs(state) & rhs(state), shape)
|
||||
if value.op == "|":
|
||||
return lambda state: normalize(lhs(state) | rhs(state), shape)
|
||||
return lambda state: normalize(lhs(state) | rhs(state), shape)
|
||||
if value.op == "^":
|
||||
return lambda state: normalize(lhs(state) ^ rhs(state), shape)
|
||||
return lambda state: normalize(lhs(state) ^ rhs(state), shape)
|
||||
if value.op == "<<":
|
||||
def sshl(lhs, rhs):
|
||||
return lhs << rhs if rhs >= 0 else lhs >> -rhs
|
||||
return lambda state: normalize(sshl(lhs(state), rhs(state)), shape)
|
||||
if value.op == ">>":
|
||||
def sshr(lhs, rhs):
|
||||
return lhs >> rhs if rhs >= 0 else lhs << -rhs
|
||||
return lambda state: normalize(sshr(lhs(state), rhs(state)), shape)
|
||||
if value.op == "==":
|
||||
return lambda state: normalize(lhs(state) == rhs(state), shape)
|
||||
if value.op == "!=":
|
||||
|
|
|
|||
|
|
@ -206,8 +206,8 @@ class _ValueTransformer(xfrm.ValueTransformer):
|
|||
(2, "/"): "$div",
|
||||
(2, "%"): "$mod",
|
||||
(2, "**"): "$pow",
|
||||
(2, "<<<"): "$sshl",
|
||||
(2, ">>>"): "$sshr",
|
||||
(2, "<<"): "$sshl",
|
||||
(2, ">>"): "$sshr",
|
||||
(2, "&"): "$and",
|
||||
(2, "^"): "$xor",
|
||||
(2, "|"): "$or",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue