let data_cmp binop ka ga kb gb =
    match ka,kb with
      |Kint  | Kcint _) , (Kint| Kcint _) ->
        int_cmp binop (integer_of_data ka ga) (integer_of_data kb gb)
      | (Kreal|Kint| Kcint _) , (Kreal|Kint| Kcint _) ->
         real_cmp binop (real_of_data ka ga) (real_of_data kb gb)
      | Kptr ty , Kptr _ ->
          let obj = object_of ty in
          ptr_cmp  binop  (loc_of_data obj ga) (loc_of_data obj gb)
      | _ ->
          Wp_error.not_yet_implemented
            "boolean comparison between %a and %a"
            pp_kind ka pp_kind kb