Require Export mc_reify.symexe_soundness.

(* Specifications: *)
Lemma bdo_loop2_body_proof:
forall (Espec : OracleKind)
(b : list int) (ctx : val) ( regs : list int) (i : nat) kv Xv
(Hregs: length regs = 8%nat)
(H : Zlength b = LBLOCKz)
(H0 : (LBLOCK <= i < c64)%nat),
semax Delta_loop1
(PROP  ()
LOCAL  (temp _ctx ctx; temp _i (Vint (Int.repr (Z.of_nat i)));
temp _a  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 0));
temp _b  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 1));
temp _c  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 2));
temp _d  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 3));
temp _e  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 4));
temp _f  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 5));
temp _g  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 6));
temp _h  (Vint (nthi (Round regs (nthi b) (Z.of_nat i - 1)) 7));
canon.var _X (tarray tuint LBLOCKz) Xv;
canon.var  _K256 (tarray tuint CBLOCKz) kv)
SEP  (`(K_vector kv);
`(data_at Tsh (tarray tuint LBLOCKz) (map Vint (Xarray b i)) Xv)))
bdo_loop2_body
(normal_ret_assert
(EX  i0 : nat,
PROP  (LBLOCK <= i0 <= c64)
LOCAL  (temp _ctx ctx; temp _i (Vint (Int.repr (Z.of_nat i0 - 1)));
temp _a  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 0));
temp _b  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 1));
temp _c  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 2));
temp _d  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 3));
temp _e  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 4));
temp _f  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 5));
temp _g  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 6));
temp _h  (Vint (nthi (Round regs (nthi b) (Z.of_nat i0 - 1)) 7));
canon.var _X (tarray tuint LBLOCKz) Xv;
canon.var  _K256 (tarray tuint CBLOCKz) kv)
SEP  (`(K_vector kv);
`(data_at Tsh (tarray tuint LBLOCKz) (map Vint (Xarray b i0)) Xv)))).