# operand a to be as-is or inverted
a = Signal.like(self.i.a)
- if hasattr(op, "invert_a"):
- with m.If(op.invert_a):
+ op_to_invert = 'ra'
+ if hasattr(self, "invert_op"):
+ op_to_invert = self.invert_op
+
+ if hasattr(op, "invert_in") and op_to_invert == 'ra':
+ with m.If(op.invert_in):
comb += a.eq(~self.i.a)
with m.Else():
comb += a.eq(self.i.a)
comb += self.o.a.eq(a)
+ ##### operand B #####
+
+ # operand b to be as-is or inverted
+ b = Signal.like(self.i.b)
+
+ if hasattr(op, "invert_in") and op_to_invert == 'rb':
+ with m.If(op.invert_in):
+ comb += b.eq(~self.i.b)
+ with m.Else():
+ comb += b.eq(self.i.b)
+ else:
+ comb += b.eq(self.i.b)
+
+ comb += self.o.b.eq(b)
+
##### carry-in #####
# either copy incoming carry or set to 1/0 as defined by op
##### sticky overflow and context (both pass-through) #####
if hasattr(self.o, "xer_so"): # hack (for now - for LogicalInputData)
- with m.If(op.oe.oe_ok):
- comb += self.o.xer_so.eq(self.i.xer_so)
+ comb += self.o.xer_so.eq(self.i.xer_so)
comb += self.o.ctx.eq(self.i.ctx)
return m