示例#1
0
def do_F2F(op, stack, state):
    prev_type = state.esil["type"]
    state.esil["type"] = FLOAT

    val, size = pop_values(stack, state, 2)
    fp_sort = fp_size_to_sort(size)

    stack.append(z3.fpFPToFP(FPM, val, fp_sort))

    state.esil["type"] = prev_type
示例#2
0
def do_D2F(op, stack, state):
    prev_type = state.esil["type"]
    state.esil["type"] = FLOAT

    val, = pop_values(stack, state)
    state.esil["type"] = prev_type

    size, = pop_values(stack, state)
    fp_sort = fp_size_to_sort(size)

    if val.sort() != fp_sort:
        stack.append(z3.fpFPToFP(FPM, val, fp_sort))
    else:
        stack.append(val)
示例#3
0
def do_F2D(op, stack, state):
    prev_type = state.esil["type"]
    state.esil["type"] = FLOAT

    val, = pop_values(stack, state)
    state.esil["type"] = prev_type

    size, = pop_values(stack, state)

    #val = z3.fpFPToFP(FPM, val, fp_sort)
    if val.sort() != FSIZE:
        #fp_sort = fp_size_to_sort(size)
        stack.append(z3.fpFPToFP(FPM, val, FSIZE))
    else:
        stack.append(val)
示例#4
0
def prepare_float(val, signext=False, size=SIZE) -> z3.FPRef:

    size_class = fp_size_to_sort(size)

    if z3.is_fp(val):
        result = val
    elif type(val) in (int, float):
        result = z3.FPVal(float(val), size_class)
    else:
        bv_val = z3.simplify(prepare(val, signext, size))
        if bv_val.decl().name() == "fp.to_ieee_bv":
            result = bv_val.arg(0)
        else:
            result = z3.fpToFP(bv_val, size_class)

    if result.sort() != size_class:
        result = z3.fpFPToFP(result, size_class)

    return result