@@ -880,39 +880,67 @@ module Generate (Target : Target_sig.S) = struct
880880 Value. unit
881881 | Prim (Not, [ x ]) ->
882882 Value. not (transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) x)
883- | Prim (Lt, [ x ; y ]) ->
884- Value. lt
885- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
886- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y)
887- | Prim (Le, [ x ; y ]) ->
888- Value. le
889- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
890- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y)
883+ | Prim (Lt, [ x ; y ]) -> (
884+ match get_type ctx x, get_type ctx y with
885+ | (Number (Int Normalized) as typ ), Number (Int Normalized) ->
886+ Arith. (transl_prim_arg ctx ~typ x < transl_prim_arg ctx ~typ y)
887+ | ( Number (Int (Normalized | Unnormalized ))
888+ , Number (Int (Normalized | Unnormalized )) ) ->
889+ Arith. (
890+ transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) x lsl const 1l
891+ < transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) y lsl const 1l )
892+ | _ ->
893+ Value. lt
894+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
895+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y))
896+ | Prim (Le, [ x ; y ]) -> (
897+ match get_type ctx x, get_type ctx y with
898+ | (Number (Int Normalized) as typ ), Number (Int Normalized) ->
899+ Arith. (transl_prim_arg ctx ~typ x < = transl_prim_arg ctx ~typ y)
900+ | ( Number (Int (Normalized | Unnormalized ))
901+ , Number (Int (Normalized | Unnormalized )) ) ->
902+ Arith. (
903+ transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) x lsl const 1l
904+ < = transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) y lsl const 1l )
905+ | _ ->
906+ Value. le
907+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
908+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y))
891909 | Prim (Eq, [ x ; y ]) -> (
892910 match get_type ctx x, get_type ctx y with
893911 | (Number (Int Normalized) as typ ), Number (Int Normalized) ->
894912 Arith. (transl_prim_arg ctx ~typ x = transl_prim_arg ctx ~typ y)
895- | ( ( Number (Int (Normalized | Unnormalized )) as typ )
913+ | ( Number (Int (Normalized | Unnormalized ))
896914 , Number (Int (Normalized | Unnormalized )) ) ->
897915 Arith. (
898- transl_prim_arg ctx ~typ x lsl const 1l
899- = transl_prim_arg ctx ~typ y lsl const 1l )
916+ transl_prim_arg ctx ~typ: ( Number ( Int Unnormalized )) x lsl const 1l
917+ = transl_prim_arg ctx ~typ: ( Number ( Int Unnormalized )) y lsl const 1l )
900918 | _ -> Value. eq (transl_prim_arg ctx ~typ: Top x) (transl_prim_arg ctx ~typ: Top y))
901919 | Prim (Neq, [ x ; y ]) -> (
902920 match get_type ctx x, get_type ctx y with
903921 | (Number (Int Normalized) as typ ), Number (Int Normalized) ->
904922 Arith. (transl_prim_arg ctx ~typ x <> transl_prim_arg ctx ~typ y)
905- | ( ( Number (Int (Normalized | Unnormalized )) as typ )
923+ | ( Number (Int (Normalized | Unnormalized ))
906924 , Number (Int (Normalized | Unnormalized )) ) ->
907925 Arith. (
908- transl_prim_arg ctx ~typ x lsl const 1l
909- <> transl_prim_arg ctx ~typ y lsl const 1l )
926+ transl_prim_arg ctx ~typ: ( Number ( Int Unnormalized )) x lsl const 1l
927+ <> transl_prim_arg ctx ~typ: ( Number ( Int Unnormalized )) y lsl const 1l )
910928 | _ -> Value. neq (transl_prim_arg ctx ~typ: Top x) (transl_prim_arg ctx ~typ: Top y)
911929 )
912- | Prim (Ult, [ x ; y ]) ->
913- Value. ult
914- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
915- (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y)
930+ | Prim (Ult, [ x ; y ]) -> (
931+ match get_type ctx x, get_type ctx y with
932+ | (Number (Int Normalized) as typ ), Number (Int Normalized) ->
933+ Arith. ult (transl_prim_arg ctx ~typ x) (transl_prim_arg ctx ~typ y)
934+ | ( Number (Int (Normalized | Unnormalized ))
935+ , Number (Int (Normalized | Unnormalized )) ) ->
936+ Arith. (
937+ ult
938+ (transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) x lsl const 1l )
939+ (transl_prim_arg ctx ~typ: (Number (Int Unnormalized )) y lsl const 1l ))
940+ | _ ->
941+ Value. ult
942+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) x)
943+ (transl_prim_arg ctx ~typ: (Number (Int Normalized )) y))
916944 | Prim (Array_get, [ x ; y ]) ->
917945 Memory. array_get
918946 (transl_prim_arg ctx x)
0 commit comments