def fp_size_to_sort(size): size_class = z3.Float64() if size == 16: size_class = z3.Float16() elif size == 32: size_class = z3.Float32() elif size == 80: size_class = z3.Float128() elif size == 128: size_class = z3.Float128() return size_class
def _ty_sort(ty): 'Translate a Type expression to a Z3 Sort' if isinstance(ty, IntType): return z3.BitVecSort(ty.width) return { PtrType: z3.BitVecSort(64), HalfType: z3.FloatHalf(), SingleType: z3.Float32(), DoubleType: z3.Float64(), FP128Type: z3.Float128(), X86FP80Type: z3.FPSort(15, 64), }[type(ty)]
def prepare_float(val, signext=False, size=SIZE) -> z3.FPRef: if z3.is_fp(val): return val size_class = z3.Float64() if size == 32: size_class = z3.Float32() elif size == 128: size_class = z3.Float128() if type(val) in (int, float): result = z3.FPVal(val) else: bv_val = prepare(val, signext, size) result = z3.fpBVToFP(bv_val, size_class) return result