Exemple #1
0
 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)
Exemple #2
0
 def make_sbits(cls, bit_count: int, value: int) -> 'Value':
     return cls(Tag.SBITS, Bits(bit_count, value))
Exemple #3
0
  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))