예제 #1
0
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
예제 #2
0
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)]
예제 #3
0
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