(* This code extends 'std_prelude'. *) let word_add = (fun v1 -> (fun v2 -> (let x = (v1 + v2) in (x mod 4294967296)))) ;; let word_mul = (fun v1 -> (fun v2 -> (let x = (v1 * v2) in (x mod 4294967296)))) ;; let word_add_1 = (fun v1 -> (fun v2 -> (let x = (v1 + v2) in (x mod 65536)))) ;; let word_mul_1 = (fun v1 -> (fun v2 -> (let x = (v1 * v2) in (x mod 65536)))) ;; let word_add_2 = (fun v1 -> (fun v2 -> (let x = (v1 + v2) in (x mod 256)))) ;; let word_mul_2 = (fun v1 -> (fun v2 -> (let x = (v1 * v2) in (x mod 256)))) ;; let rec BITWISE v1 = (fun v2 -> (fun v3 -> (fun v4 -> (if (v1 <= 0) then 0 else (((((BITWISE (v1 - 1)) v2) v3) v4) + ((SBIT ((v2 ((BIT (v1 - 1)) v3)) ((BIT (v1 - 1)) v4))) (v1 - 1))))))) ;; let word_xor = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 32) (fun v2 -> (fun v1 -> ((v2 = v1) = false)))) v4) v3) in (x mod 4294967296)))) ;; let word_xor_1 = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 8) (fun v2 -> (fun v1 -> ((v2 = v1) = false)))) v4) v3) in (x mod 256)))) ;; let word_xor_2 = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 16) (fun v2 -> (fun v1 -> ((v2 = v1) = false)))) v4) v3) in (x mod 65536)))) ;; let word_or = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 32) (fun v2 -> (fun v1 -> (v2 || v1)))) v4) v3) in (x mod 4294967296)))) ;; let word_or_1 = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 16) (fun v2 -> (fun v1 -> (v2 || v1)))) v4) v3) in (x mod 65536)))) ;; let word_and = (fun v4 -> (fun v3 -> (let x = ((((BITWISE 32) (fun v2 -> (fun v1 -> (v2 && v1)))) v4) v3) in (x mod 4294967296)))) ;; let word_lsl = (fun v1 -> (fun v2 -> ((word_mul (let x = ((EXP 2) v2) in (x mod 4294967296))) v1))) ;; let word_lsl_1 = (fun v1 -> (fun v2 -> ((word_mul_1 (let x = ((EXP 2) v2) in (x mod 65536))) v1))) ;; let word_lsl_2 = (fun v1 -> (fun v2 -> ((word_mul_2 (let x = ((EXP 2) v2) in (x mod 256))) v1))) ;; let word_lsr = (fun v2 -> (fun v1 -> (let x = (v2 / ((EXP 2) v1)) in (x mod 4294967296)))) ;; let word_lsr_1 = (fun v2 -> (fun v1 -> (let x = (v2 / ((EXP 2) v1)) in (x mod 65536)))) ;; let word_lsr_2 = (fun v2 -> (fun v1 -> (let x = (v2 / ((EXP 2) v1)) in (x mod 256)))) ;; let word_msb = (fun v1 -> ((BIT 31) v1)) ;; let word_msb_1 = (fun v1 -> ((BIT 15) v1)) ;; let word_msb_2 = (fun v1 -> ((BIT 7) v1)) ;; let word_lsb = (fun v1 -> (((v1 mod 2) <= 0) = false)) ;; let word_lsb_1 = (fun v1 -> (((v1 mod 2) <= 0) = false)) ;; let word_lsb_2 = (fun v1 -> (((v1 mod 2) <= 0) = false)) ;; let word_asr = (fun v2 -> (fun v1 -> (if (word_msb v2) then ((word_or (let x = (let k = (4294967296 - ((EXP 2) (let k = (32 - ((MIN v1) 32)) in (if (k < 0) then 0 else k)))) in (if (k < 0) then 0 else k)) in (x mod 4294967296))) ((word_lsr v2) v1)) else ((word_lsr v2) v1)))) ;; let word_asr_1 = (fun v2 -> (fun v1 -> (if (word_msb_1 v2) then ((word_or_1 (let x = (let k = (65536 - ((EXP 2) (let k = (16 - ((MIN v1) 16)) in (if (k < 0) then 0 else k)))) in (if (k < 0) then 0 else k)) in (x mod 65536))) ((word_lsr_1 v2) v1)) else ((word_lsr_1 v2) v1)))) ;; let word_sub = (fun v1 -> (fun v2 -> ((word_add v1) (let x = (let k = (4294967296 - v2) in (if (k < 0) then 0 else k)) in (x mod 4294967296))))) ;; let word_sub_1 = (fun v1 -> (fun v2 -> ((word_add_1 v1) (let x = (let k = (65536 - v2) in (if (k < 0) then 0 else k)) in (x mod 65536))))) ;; let word_sub_2 = (fun v1 -> (fun v2 -> ((word_add_2 v1) (let x = (let k = (256 - v2) in (if (k < 0) then 0 else k)) in (x mod 256))))) ;; let word_bits = (fun v1 -> (fun v2 -> (fun v3 -> (let x = (((BITS ((MIN v1) 31)) v2) v3) in (x mod 4294967296))))) ;; let word_ror = (fun v3 -> (fun v2 -> (let v1 = (v2 mod 32) in ((word_or (((word_bits 31) v1) v3)) ((word_lsl (((word_bits (let k = (v1 - 1) in (if (k < 0) then 0 else k))) 0) v3)) (let k = (32 - v1) in (if (k < 0) then 0 else k))))))) ;; let word_rol = (fun v2 -> (fun v1 -> ((word_ror v2) (let k = (32 - (v1 mod 32)) in (if (k < 0) then 0 else k))))) ;;