123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384(**************************************************************************)(* *)(* OCaml *)(* *)(* Jacob Van Buren, Jane Street, New York *)(* *)(* Copyright 2024 Jane Street Group LLC *)(* *)(* All rights reserved. This file is distributed under the terms of *)(* the GNU Lesser General Public License version 2.1, with the *)(* special exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)[@@@ocaml.flambda_o3]open!Stdlibtypet=int16letsize=16externalof_int:int->int16@@portable="%int16_of_int"externalto_int:int16->int@@portable="%int_of_int16"external(<):int16->int16->bool@@portable="%int16_lessthan"letzero=of_int0letone=of_int1letminus_one=of_int(-1)externalneg:int16->int16@@portable="%int16_neg"externaladd:int16->int16->int16@@portable="%int16_add"externalsub:int16->int16->int16@@portable="%int16_sub"externalmul:int16->int16->int16@@portable="%int16_mul"externaldiv:int16->int16->int16@@portable="%int16_div"externalrem:int16->int16->int16@@portable="%int16_mod"externalsucc:int16->int16@@portable="%int16_succ"externalpred:int16->int16@@portable="%int16_pred"externallogand:int16->int16->int16@@portable="%int16_and"externallogor:int16->int16->int16@@portable="%int16_or"externallogxor:int16->int16->int16@@portable="%int16_xor"let[@inline]lognotx=logxorxminus_oneexternalshift_left:int16->int->int16@@portable="%int16_lsl"externalshift_right:int16->int->int16@@portable="%int16_asr"externalshift_right_logical:int16->int->int16@@portable="%int16_lsr"let[@inline]absx=ifx<zerothennegxelsexexternalequal:int16->int16->bool@@portable="%int16_equal"externalcompare:int16->int16->int@@portable="%int16_compare"let[@inline]minxy=ifx<ythenxelseylet[@inline]maxxy=ifx<ythenyelsexexternalof_float:float->int16@@portable="%int16_of_float"externalto_float:int16->float@@portable="%float_of_int16"let[@inline]to_stringt=Int.to_string(to_intt)externalof_string:string->int16@@portable="caml_int16_of_string"letmax_int=shift_right_logicalminus_one1letmin_int=succmax_intlet[@inline]unsigned_to_intt=to_inttland((1lslsize)-1)externalunsigned_compare:int16->int16->int@@portable="%int16_unsigned_compare"externalunsigned_lt:int16->int16->bool@@portable="%int16_unsigned_lessthan"(* Unsigned division from signed division of the same bitness. See Warren Jr.,
Henry S. (2013). Hacker's Delight (2 ed.), Sec 9-3. *)let[@inline]unsigned_divnd=ifd<zerothenifunsigned_ltndthenzeroelseoneelseletq=shift_left(div(shift_right_logicaln1)d)1inletr=subn(mulqd)inifunsigned_ltrdthenqelsesuccqlet[@inline]unsigned_remnd=subn(mul(unsigned_divnd)d)letseeded_hashseedx=Stdlib.Hashtbl.seeded_hashseed(to_intx)lethashx=Stdlib.Hashtbl.hash(to_intx)