def arithmetic_negate(self) -> 'Value': if self.tag in (Tag.UBITS, Tag.SBITS): return self.bitwise_negate().add( Value(self.tag, Bits(bit_count=self.bits_payload.bit_count, value=1))) raise TypeError('Cannot arithmetic-negate values with tag:', self.tag)
def make_sbits(cls, bit_count: int, value: int) -> 'Value': return cls(Tag.SBITS, Bits(bit_count, value))
def test_sign_ext(self): a = Bits(bit_count=0, value=0b0) self.assertEqual(Bits(bit_count=2, value=0b0), a.sign_ext(new_bit_count=2)) b = Bits(bit_count=2, value=0b01) self.assertEqual(Bits(bit_count=2, value=0b01), b.sign_ext(new_bit_count=2)) self.assertEqual(Bits(bit_count=3, value=0b01), b.sign_ext(new_bit_count=3)) self.assertEqual(Bits(bit_count=4, value=0b01), b.sign_ext(new_bit_count=4)) c = Bits(bit_count=2, value=0b10) self.assertEqual( Bits(bit_count=3, value=0b110), c.sign_ext(new_bit_count=3)) self.assertEqual( Bits(bit_count=4, value=0b1110), c.sign_ext(new_bit_count=4))