Skip to content

Commit d73ab6b

Browse files
committed
PERF
1 parent dbaaffa commit d73ab6b

File tree

1 file changed

+46
-18
lines changed

1 file changed

+46
-18
lines changed

compiler/lib-wasm/generate.ml

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)