comb += self.o.xer_ca.ok.eq(op.output_carry)
# create condition register cr0 and sticky-overflow
- is_zero = Signal(reset_less=True)
+ is_nzero = Signal(reset_less=True)
is_positive = Signal(reset_less=True)
is_negative = Signal(reset_less=True)
msb_test = Signal(reset_less=True) # set equal to MSB, invert if OP=CMP
comb += is_cmp.eq(op.insn_type == InternalOp.OP_CMP)
comb += is_cmpeqb.eq(op.insn_type == InternalOp.OP_CMPEQB)
comb += msb_test.eq(target[-1] ^ is_cmp)
- comb += is_zero.eq(target == 0)
- comb += is_positive.eq(~is_zero & ~msb_test)
- comb += is_negative.eq(~is_zero & msb_test)
+ comb += is_nzero.eq(target.bool())
+ comb += is_positive.eq(is_nzero & ~msb_test)
+ comb += is_negative.eq(is_nzero & msb_test)
with m.If(is_cmpeqb):
comb += cr0.eq(self.i.cr0.data)
with m.Else():
- comb += cr0.eq(Cat(self.so, is_zero, is_positive, is_negative))
+ comb += cr0.eq(Cat(self.so, ~is_nzero, is_positive, is_negative))
# copy out [inverted] cr0, output, and context out
comb += self.o.o.data.eq(o)