def walk_bv_ashr(self, formula, args, **kwargs): l,r = args if l.is_bv_constant() and r.is_bv_constant(): sign = l.bv_signed_value() < 0 ret = self.walk_bv_lshr(self.manager.BVLShr(l, r), [l, r], **kwargs) width = formula.bv_width() if sign: n = ret.bv_unsigned_value() padlen = width if width > r.bv_unsigned_value(): padlen = r.bv_unsigned_value() for i in xrange(width-padlen, width): n = set_bit(n, i, True) ret = self.manager.BV(n, width) return ret return self.manager.BVAShr(l, r)