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