Ltac dec_enc :=
match goal with
[ |- decode_val ?CH _ = ?V] => assert (DE := decode_encode_val_general V CH CH);
apply decode_encode_val_similar in DE; auto
end.

Lemma semax_loadstore:
forall v0 v1 v2 (Delta: tycontext) e1 e2 sh P P',
writable0_share sh ->
(forall rho, P rho |-- !! (tc_val (typeof e1) v2)
&& rel_lvalue e1 v1 rho
&& rel_expr (Ecast e2 (typeof e1)) v2 rho
&& (mapsto sh (typeof e1) v1 v0 * P' rho)) ->
semax Espec Delta (fun rho => |> P rho) (Sassign e1 e2)
(normal_ret_assert (fun rho => mapsto sh (typeof e1) v1 v2 * P' rho)).