let rec value_of_bits t bits : Data.value = match t with
    | Ctypes.C_int c_int -> 
        let c_val = z_from_bits bits (format_of_c_int_type c_int) in
        V_int (c_int, c_val)
    | Ctypes.C_float c_float -> 
        let ft = format_of_c_float_type c_float in
        let c_val = real_from_bits bits ft in
        V_float (c_float, c_val)
    | Ctypes.C_comp comp -> 
        let ft = format_of_compinfo comp in
        let c_val =  RtLib.from_bits bits ft in
        V_record (comp, F.unwrap c_val)
    | Ctypes.C_array arr -> 
        let ft = format_of_array arr in
        let c_val =  RtLib.from_bits bits ft in
        let logic_val = (* D.encode ft*) (F.unwrap c_val) in
          V_array (arr, F.unwrap logic_val)
    | Ctypes.C_pointer ty ->
        let c_val = z_from_bits bits (format_of_addr ty) in
        let addr = Tint.xaddr_of_integer c_val in
        V_pointer (ty, addr)