let store_mem mem te loc v =
    match v with
      | V_int(_,t) -> store_with mem loc D.int_format t
      | V_float(_,t) -> store_with mem loc D.real_format t
      | V_pointer(_,lv) -> store_with mem loc addr_format (Model.addr lv)
      | V_record (comp,r) ->
          let fmt = DF.record_format comp in
          let dr = D.encode fmt r in
          let zp = zrange loc (F.e_int (List.length comp.cfields)) in
          model_update_range mem zp dr
      | V_union _ -> unsupported "union"
      | V_array (arr,r) ->
          let fmt = DF.array_format arr in
          let dr = D.encode fmt r in
          let zp = zrange loc  (sizeof te) in
          model_update_range mem zp dr