Skip to content

Commit 0f986ed

Browse files
authored
Fixes to One_bit_fewer (#677)
* One_bit_fewer: simplify signature * One_bit_fewer: fix shift_right_logical, remove unneeded sign extensions
1 parent 823dfdf commit 0f986ed

File tree

2 files changed

+7
-94
lines changed

2 files changed

+7
-94
lines changed

middle_end/flambda2/numbers/one_bit_fewer.ml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ module Make (I : S) : S with type t = I.t = struct
205205

206206
let mul x y = sign_extend (I.mul x y)
207207

208-
let mod_ x y = sign_extend (I.mod_ x y)
208+
(* No sign-extension: the result is always in the correct range *)
209+
let mod_ = I.mod_
209210

210211
let div x y = sign_extend (I.div x y)
211212

@@ -217,9 +218,11 @@ module Make (I : S) : S with type t = I.t = struct
217218

218219
let shift_left t i = sign_extend (I.shift_left t i)
219220

220-
let shift_right t i = sign_extend (I.shift_right t i)
221+
(* No sign-extension: the result is always in the correct range *)
222+
let shift_right = I.shift_right
221223

222-
let shift_right_logical t i = I.shift_right_logical (I.shift_left t 1) (i + 1)
224+
let shift_right_logical t i =
225+
I.shift_right (I.shift_right_logical (I.shift_left t 1) i) 1
223226

224227
let max = I.max
225228

middle_end/flambda2/numbers/one_bit_fewer.mli

Lines changed: 1 addition & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -90,94 +90,4 @@ module type S = sig
9090
val min : t -> t -> t
9191
end
9292

93-
module Make : functor (I : S) -> sig
94-
type t = I.t
95-
96-
val compare : t -> t -> int
97-
98-
val equal : t -> t -> bool
99-
100-
val hash : t -> int
101-
102-
val print : Format.formatter -> t -> unit
103-
104-
val min_value : t
105-
106-
val max_value : t
107-
108-
val max_string_length : t
109-
110-
val minus_one : t
111-
112-
val zero : t
113-
114-
val one : t
115-
116-
val ten : t
117-
118-
val hex_ff : t
119-
120-
val ( <= ) : t -> t -> bool
121-
122-
val ( < ) : t -> t -> bool
123-
124-
val bottom_byte_to_int : t -> int
125-
126-
val of_char : char -> t
127-
128-
val of_int : int -> t
129-
130-
val of_int_option : int -> t option
131-
132-
val of_int32 : int32 -> t
133-
134-
val of_int64 : int64 -> t
135-
136-
val of_targetint : Targetint_32_64.t -> t
137-
138-
val of_float : float -> t
139-
140-
val to_float : t -> float
141-
142-
val to_int : t -> int
143-
144-
val to_int_exn : t -> int
145-
146-
val to_int_option : t -> int option
147-
148-
val to_int32 : t -> int32
149-
150-
val to_int64 : t -> int64
151-
152-
val to_targetint : t -> Targetint_32_64.t
153-
154-
val neg : t -> t
155-
156-
val get_least_significant_16_bits_then_byte_swap : t -> t
157-
158-
val add : t -> t -> t
159-
160-
val sub : t -> t -> t
161-
162-
val mul : t -> t -> t
163-
164-
val mod_ : t -> t -> t
165-
166-
val div : t -> t -> t
167-
168-
val and_ : t -> t -> t
169-
170-
val or_ : t -> t -> t
171-
172-
val xor : t -> t -> t
173-
174-
val shift_left : t -> int -> t
175-
176-
val shift_right : t -> int -> t
177-
178-
val shift_right_logical : t -> int -> t
179-
180-
val max : t -> t -> t
181-
182-
val min : t -> t -> t
183-
end
93+
module Make : functor (I : S) -> S with type t = I.t

0 commit comments

Comments
 (0)