(** Translation of condition operators *)
Remark add_carry_eq0:
forall i,
Vint (Int.add (Int.add (Int.sub Int.zero i) i)
(Int.add_carry Int.zero (Int.xor i Int.mone) Int.one)) =
Val.of_bool (Int.eq i Int.zero).
Remark add_carry_ne0:
forall i,
Vint (Int.add (Int.add i (Int.xor (Int.add i Int.mone) Int.mone))
(Int.add_carry i Int.mone Int.zero)) =
Val.of_bool (negb (Int.eq i Int.zero)).

(* Specifications: *)
Lemma transl_cond_op_correct:
forall cond args r k rs m c,
transl_cond_op cond args r k = OK c ->
exists rs',
exec_straight ge fn c rs m k rs' m
/\ rs'#(preg_of r) = Val.of_optbool (eval_condition cond (map rs (map preg_of args)) m)
/\ forall r', important_preg r' = true -> preg_notin r' (destroyed_by_cond cond) ->  r' <> preg_of r -> rs'#r' = rs#r'.