let rec value_of_bits t bits : Data.value = match t with
    | Ctypes.C_int c_int ->
        let c_val = z_from_bits bits (i_format c_int) in
        V_int (c_int, c_val)
    | Ctypes.C_float c_float ->
        let ft = f_format 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 cv = Ctypes.object_of ty in
        let c_val = z_from_bits bits (format_of_addr cv) in
        let addr = Tint.xaddr_of_integer c_val in
        V_pointer (cv, addr)