Esempio n. 1
0
def make_bv_sizes_equal(bv1: BV, bv2: BV) -> Tuple[BV, BV]:
    """
    Makes two BVs equal in length through sign extension.
    """
    if bv1.size() < bv2.size():
        return (bv1.sign_extend(bv2.size() - bv1.size()), bv2)
    elif bv1.size() > bv2.size():
        return (bv1, bv2.sign_extend(bv1.size() - bv2.size()))
    else:
        return (bv1, bv2)
Esempio n. 2
0
 def evaluate_binary(self, size_out: int, size_in: int, in1: BV,
                     in2: BV) -> BV:
     if in2.size() < in1.size():
         in2 = in2.sign_extend(in1.size() - in2.size())
     return (in1 >> (in2 * 8)) & (2**(size_out * 8) - 1)
Esempio n. 3
0
 def evaluate_unary(self, size_out: int, size_in: int, in1: BV) -> BV:
     return in1.sign_extend((size_out - size_in) * 8)
Esempio n. 4
0
 def evaluate_binary(self, size_out: int, size_in: int, in1: BV,
                     in2: BV) -> BV:
     if in2.size() < in1.size():
         in2 = in2.sign_extend(in1.size() - in2.size())
     return in1.LShR(in2)