diff --git a/lib/int40_stubs.c b/lib/int40_stubs.c index 6a374fe..7f36caa 100644 --- a/lib/int40_stubs.c +++ b/lib/int40_stubs.c @@ -29,6 +29,13 @@ int40_div(value v1, value v2) CAMLreturn (copy_int40((Int64_val(v1) / divisor) << 24)); } +CAMLprim value +int40_xor(value v1, value v2) +{ + CAMLparam2(v1, v2); + CAMLreturn (copy_int40((Int64_val(v1) ^ Int64_val(v2)) & mask)); +} + CAMLprim value int40_shift_right(value v1, value v2) { diff --git a/lib/int48_stubs.c b/lib/int48_stubs.c index 3173e3b..20f7141 100644 --- a/lib/int48_stubs.c +++ b/lib/int48_stubs.c @@ -29,6 +29,13 @@ int48_div(value v1, value v2) CAMLreturn (copy_int48((Int64_val(v1) / divisor) << 16)); } +CAMLprim value +int48_xor(value v1, value v2) +{ + CAMLparam2(v1, v2); + CAMLreturn (copy_int48((Int64_val(v1) ^ Int64_val(v2)) & mask)); +} + CAMLprim value int48_shift_right(value v1, value v2) { diff --git a/lib/int56_stubs.c b/lib/int56_stubs.c index 49e6e81..690cb6a 100644 --- a/lib/int56_stubs.c +++ b/lib/int56_stubs.c @@ -29,6 +29,13 @@ int56_div(value v1, value v2) CAMLreturn (copy_int56((Int64_val(v1) / divisor) << 8)); } +CAMLprim value +int56_xor(value v1, value v2) +{ + CAMLparam2(v1, v2); + CAMLreturn (copy_int56((Int64_val(v1) ^ Int64_val(v2)) & mask)); +} + CAMLprim value int56_shift_right(value v1, value v2) { diff --git a/lib/stdint.ml b/lib/stdint.ml index b53d3d2..b89c83d 100644 --- a/lib/stdint.ml +++ b/lib/stdint.ml @@ -434,7 +434,7 @@ module Int40 = struct external mul : int40 -> int40 -> int40 = "int40_mul" external div : int40 -> int40 -> int40 = "int40_div" - external logxor : int40 -> int40 -> int40 = "uint40_xor" + external logxor : int40 -> int40 -> int40 = "int40_xor" external shift_right : int40 -> int -> int40 = "int40_shift_right" external shift_right_logical : int40 -> int -> int40 = "uint40_shift_right" @@ -485,9 +485,10 @@ module Int40 = struct external max_int_fun : unit -> int40 = "int40_max_int" external min_int_fun : unit -> int40 = "int40_min_int" let one = of_int 1 + let minus_one = of_int (-1) let max_int = max_int_fun () let min_int = min_int_fun () - let lognot = logxor max_int + let lognot = logxor minus_one let compare = Stdint_stdlib_.compare let divmod = (fun x y -> div x y, rem x y) end @@ -518,7 +519,7 @@ module Int48 = struct external mul : int48 -> int48 -> int48 = "int48_mul" external div : int48 -> int48 -> int48 = "int48_div" - external logxor : int48 -> int48 -> int48 = "uint48_xor" + external logxor : int48 -> int48 -> int48 = "int48_xor" external shift_right : int48 -> int -> int48 = "int48_shift_right" external shift_right_logical : int48 -> int -> int48 = "uint48_shift_right" @@ -569,9 +570,10 @@ module Int48 = struct external max_int_fun : unit -> int48 = "int48_max_int" external min_int_fun : unit -> int48 = "int48_min_int" let one = of_int 1 + let minus_one = of_int (-1) let max_int = max_int_fun () let min_int = min_int_fun () - let lognot = logxor max_int + let lognot = logxor minus_one let compare = Stdint_stdlib_.compare let divmod = (fun x y -> div x y, rem x y) end @@ -602,7 +604,7 @@ module Int56 = struct external mul : int56 -> int56 -> int56 = "int56_mul" external div : int56 -> int56 -> int56 = "int56_div" - external logxor : int56 -> int56 -> int56 = "uint56_xor" + external logxor : int56 -> int56 -> int56 = "int56_xor" external shift_right : int56 -> int -> int56 = "int56_shift_right" external shift_right_logical : int56 -> int -> int56 = "uint56_shift_right" @@ -653,9 +655,10 @@ module Int56 = struct external max_int_fun : unit -> int56 = "int56_max_int" external min_int_fun : unit -> int56 = "int56_min_int" let one = of_int 1 + let minus_one = of_int (-1) let max_int = max_int_fun () let min_int = min_int_fun () - let lognot = logxor max_int + let lognot = logxor minus_one let compare = Stdint_stdlib_.compare let divmod = (fun x y -> div x y, rem x y) end @@ -742,11 +745,12 @@ module Int128 = struct let zero = of_int 0 let one = of_int 1 + let minus_one = of_int (-1) let succ = add one let pred x = sub x one let max_int = max_int_fun () let min_int = min_int_fun () - let lognot = logxor max_int + let lognot = logxor minus_one let compare = Stdint_stdlib_.compare let divmod = (fun x y -> div x y, rem x y)