123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473typeint8=inttypeint16=inttypeint32=Int32.ttypeint24=inttypeint64=Int64.ttypeint40=int64typeint48=int64typeint56=int64typeint128typeuint8=inttypeuint16=inttypeuint24=inttypeuint32typeuint64typeuint40=uint64typeuint48=uint64typeuint56=uint64typeuint128moduletypeInt=sigtypetvalzero:tvalone:tvalmax_int:tvalmin_int:tvalbits:intval(+):t->t->tval(-):t->t->tval(*):t->t->tval(/):t->t->tvaladd:t->t->tvalsub:t->t->tvalmul:t->t->tvaldiv:t->t->tvalrem:t->t->tvalsucc:t->tvalpred:t->tvalabs:t->tvalneg:t->tvallogand:t->t->tvallogor:t->t->tvallogxor:t->t->tvallognot:t->tvalshift_left:t->int->tvalshift_right:t->int->tvalshift_right_logical:t->int->tvalof_int:int->tvalto_int:t->intvalof_float:float->tvalto_float:t->floatvalof_nativeint:nativeint->tvalto_nativeint:t->nativeintvalof_int8:int8->tvalto_int8:t->int8valof_int16:int16->tvalto_int16:t->int16valof_int24:int24->tvalto_int24:t->int24valof_int32:int32->tvalto_int32:t->int32valof_int40:int40->tvalto_int40:t->int40valof_int48:int48->tvalto_int48:t->int48valof_int56:int56->tvalto_int56:t->int56valof_int64:int64->tvalto_int64:t->int64valof_int128:int128->tvalto_int128:t->int128valof_uint8:uint8->tvalto_uint8:t->uint8valof_uint16:uint16->tvalto_uint16:t->uint16valof_uint24:uint24->tvalto_uint24:t->uint24valof_uint32:uint32->tvalto_uint32:t->uint32valof_uint40:uint40->tvalto_uint40:t->uint40valof_uint48:uint48->tvalto_uint48:t->uint48valof_uint56:uint56->tvalto_uint56:t->uint56valof_uint64:uint64->tvalto_uint64:t->uint64valof_uint128:uint128->tvalto_uint128:t->uint128valof_string:string->tvalto_string:t->stringvalto_string_bin:t->stringvalto_string_oct:t->stringvalto_string_hex:t->stringvalprinter:Format.formatter->t->unitvalprinter_bin:Format.formatter->t->unitvalprinter_oct:Format.formatter->t->unitvalprinter_hex:Format.formatter->t->unitvalof_bytes_big_endian:Bytes.t->int->tvalof_bytes_little_endian:Bytes.t->int->tvalto_bytes_big_endian:t->Bytes.t->int->unitvalto_bytes_little_endian:t->Bytes.t->int->unitvalcompare:t->t->intendmoduleInt8=structmoduleBase=structincludeInt_wrapper.Make_signed(structletbits=8end)letfmt="hh"letname="Int8"endincludeBaseexternalof_nativeint:nativeint->int8="int8_of_nativeint"externalof_float:float->int8="int8_of_float"externalof_int8:int8->int8="%identity"externalof_int16:int16->int8="int8_of_int16"externalof_int24:int24->int8="int8_of_int24"externalof_int32:int32->int8="int8_of_int32"externalof_int40:int40->int8="int8_of_int40"externalof_int48:int48->int8="int8_of_int48"externalof_int56:int56->int8="int8_of_int56"externalof_int64:int64->int8="int8_of_int64"externalof_int128:int128->int8="int8_of_int128"externalof_uint8:uint8->int8="int8_of_uint8"externalof_uint16:uint16->int8="int8_of_uint16"externalof_uint24:uint24->int8="int8_of_uint24"externalof_uint32:uint32->int8="int8_of_uint32"externalof_uint40:uint40->int8="int8_of_uint40"externalof_uint48:uint48->int8="int8_of_uint48"externalof_uint56:uint56->int8="int8_of_uint56"externalof_uint64:uint64->int8="int8_of_uint64"externalof_uint128:uint128->int8="int8_of_uint128"externalto_nativeint:int8->nativeint="nativeint_of_int8"externalto_float:int8->float="float_of_int8"externalto_int8:int8->int8="%identity"externalto_int16:int8->int16="int16_of_int8"externalto_int24:int8->int24="int24_of_int8"externalto_int32:int8->int32="int32_of_int8"externalto_int40:int8->int40="int40_of_int8"externalto_int48:int8->int48="int48_of_int8"externalto_int56:int8->int56="int56_of_int8"externalto_int64:int8->int64="int64_of_int8"externalto_int128:int8->int128="int128_of_int8"externalto_uint8:int8->uint8="uint8_of_int8"externalto_uint16:int8->uint16="uint16_of_int8"externalto_uint24:int8->uint24="uint24_of_int8"externalto_uint32:int8->uint32="uint32_of_int8"externalto_uint40:int8->uint40="uint40_of_int8"externalto_uint48:int8->uint48="uint48_of_int8"externalto_uint56:int8->uint56="uint56_of_int8"externalto_uint64:int8->uint64="uint64_of_int8"externalto_uint128:int8->uint128="uint128_of_int8"externalbits_of_float:float->int8="int8_bits_of_float"externalfloat_of_bits:int8->float="int8_float_of_bits"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int8)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int8)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int8)endmoduleInt16=structmoduleBase=structincludeInt_wrapper.Make_signed(structletbits=16end)letfmt="h"letname="int16"endincludeBaseexternalof_nativeint:nativeint->int16="int16_of_nativeint"externalof_float:float->int16="int16_of_float"externalof_int8:int8->int16="int16_of_int8"externalof_int16:int16->int16="%identity"externalof_int24:int24->int16="int16_of_int24"externalof_int32:int32->int16="int16_of_int32"externalof_int40:int40->int16="int16_of_int40"externalof_int48:int48->int16="int16_of_int48"externalof_int56:int56->int16="int16_of_int56"externalof_int64:int64->int16="int16_of_int64"externalof_int128:int128->int16="int16_of_int128"externalof_uint8:uint8->int16="int16_of_uint8"externalof_uint16:uint16->int16="int16_of_uint16"externalof_uint24:uint24->int16="int16_of_uint24"externalof_uint32:uint32->int16="int16_of_uint32"externalof_uint40:uint40->int16="int16_of_uint40"externalof_uint48:uint48->int16="int16_of_uint48"externalof_uint56:uint56->int16="int16_of_uint56"externalof_uint64:uint64->int16="int16_of_uint64"externalof_uint128:uint128->int16="int16_of_uint128"externalto_nativeint:int16->nativeint="nativeint_of_int16"externalto_float:int16->float="float_of_int16"externalto_int8:int16->int8="int8_of_int16"externalto_int16:int16->int16="%identity"externalto_int24:int16->int24="int24_of_int16"externalto_int32:int16->int32="int32_of_int16"externalto_int40:int16->int40="int40_of_int16"externalto_int48:int16->int48="int48_of_int16"externalto_int56:int16->int56="int56_of_int16"externalto_int64:int16->int64="int64_of_int16"externalto_int128:int16->int128="int128_of_int16"externalto_uint8:int16->uint8="uint8_of_int16"externalto_uint16:int16->uint16="uint16_of_int16"externalto_uint24:int16->uint24="uint24_of_int16"externalto_uint32:int16->uint32="uint32_of_int16"externalto_uint40:int16->uint40="uint40_of_int16"externalto_uint48:int16->uint48="uint48_of_int16"externalto_uint56:int16->uint56="uint56_of_int16"externalto_uint64:int16->uint64="uint64_of_int16"externalto_uint128:int16->uint128="uint128_of_int16"externalbits_of_float:float->int16="int16_bits_of_float"externalfloat_of_bits:int16->float="int16_float_of_bits"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int16)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int16)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int16)endmoduleInt24=structmoduleBase=structincludeInt_wrapper.Make_signed(structletbits=24end)letfmt="l"letname="Int24"endincludeBaseexternalof_nativeint:nativeint->int24="int24_of_nativeint"externalof_float:float->int24="int24_of_float"externalof_int8:int8->int24="int24_of_int8"externalof_int16:int16->int24="int24_of_int16"externalof_int24:int24->int24="%identity"externalof_int32:int32->int24="int24_of_int32"externalof_int40:int40->int24="int24_of_int40"externalof_int48:int48->int24="int24_of_int48"externalof_int56:int56->int24="int24_of_int56"externalof_int64:int64->int24="int24_of_int64"externalof_int128:int128->int24="int24_of_int128"externalof_uint8:uint8->int24="int24_of_uint8"externalof_uint16:uint16->int24="int24_of_uint16"externalof_uint24:uint24->int24="int24_of_uint24"externalof_uint32:uint32->int24="int24_of_uint32"externalof_uint40:uint40->int24="int24_of_uint40"externalof_uint48:uint48->int24="int24_of_uint48"externalof_uint56:uint56->int24="int24_of_uint56"externalof_uint64:uint64->int24="int24_of_uint64"externalof_uint128:uint128->int24="int24_of_uint128"externalto_nativeint:int24->nativeint="nativeint_of_int24"externalto_float:int24->float="float_of_int24"externalto_int8:int24->int8="int8_of_int24"externalto_int16:int24->int16="int16_of_int24"externalto_int24:int24->int24="%identity"externalto_int32:int24->int32="int32_of_int24"externalto_int40:int24->int40="int40_of_int24"externalto_int48:int24->int48="int48_of_int24"externalto_int56:int24->int56="int56_of_int24"externalto_int64:int24->int64="int64_of_int24"externalto_int128:int24->int128="int128_of_int24"externalto_uint8:int24->uint8="uint8_of_int24"externalto_uint16:int24->uint16="uint16_of_int24"externalto_uint24:int24->uint24="uint24_of_int24"externalto_uint32:int24->uint32="uint32_of_int24"externalto_uint40:int24->uint40="uint40_of_int24"externalto_uint48:int24->uint48="uint48_of_int24"externalto_uint56:int24->uint56="uint56_of_int24"externalto_uint64:int24->uint64="uint64_of_int24"externalto_uint128:int24->uint128="uint128_of_int24"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int24)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int24)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int24)endmoduleInt32=structmoduleBase=structincludeInt32letbits=32letfmt="l"letname="int32"letdivmod=(funxy->divxy,remxy)endincludeBaseletof_nativeint=Nativeint.to_int32letto_nativeint=Nativeint.of_int32externalof_int8:int8->int32="int32_of_int8"externalof_int16:int16->int32="int32_of_int16"externalof_int24:int24->int32="int32_of_int24"externalof_int32:int32->int32="%identity"externalof_int40:int40->int32="int32_of_int40"externalof_int48:int48->int32="int32_of_int48"externalof_int56:int56->int32="int32_of_int56"externalof_int64:int64->int32="int32_of_int64"externalof_int128:int128->int32="int32_of_int128"externalof_uint8:uint8->int32="int32_of_uint8"externalof_uint16:uint16->int32="int32_of_uint16"externalof_uint24:uint24->int32="int32_of_uint24"externalof_uint32:uint32->int32="int32_of_uint32"externalof_uint40:uint40->int32="int32_of_uint40"externalof_uint48:uint48->int32="int32_of_uint48"externalof_uint56:uint56->int32="int32_of_uint56"externalof_uint64:uint64->int32="int32_of_uint64"externalof_uint128:uint128->int32="int32_of_uint128"externalto_int8:int32->int8="int8_of_int32"externalto_int16:int32->int16="int16_of_int32"externalto_int24:int32->int24="int24_of_int32"externalto_int32:int32->int32="%identity"externalto_int40:int32->int40="int40_of_int32"externalto_int48:int32->int48="int48_of_int32"externalto_int56:int32->int56="int56_of_int32"externalto_int64:int32->int64="int64_of_int32"externalto_int128:int32->int128="int128_of_int32"externalto_uint8:int32->uint8="uint8_of_int32"externalto_uint16:int32->uint16="uint16_of_int32"externalto_uint24:int32->uint24="uint24_of_int32"externalto_uint32:int32->uint32="uint32_of_int32"externalto_uint40:int32->uint40="uint40_of_int32"externalto_uint48:int32->uint48="uint48_of_int32"externalto_uint56:int32->uint56="uint56_of_int32"externalto_uint64:int32->uint64="uint64_of_int32"externalto_uint128:int32->uint128="uint128_of_int32"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int32)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int32)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int32)endmoduleInt64=structmoduleBase=structincludeInt64letbits=64letfmt="ll"letname="int64"letdivmod=(funxy->divxy,remxy)endincludeBaseexternalof_int8:int8->int64="int64_of_int8"externalof_int16:int16->int64="int64_of_int16"externalof_int24:int24->int64="int64_of_int24"externalof_int32:int32->int64="int64_of_int32"externalof_int40:int40->int64="int64_of_int40"externalof_int48:int48->int64="int64_of_int48"externalof_int56:int56->int64="int64_of_int56"externalof_int64:int64->int64="%identity"externalof_int128:int128->int64="int64_of_int128"externalof_uint8:uint8->int64="int64_of_uint8"externalof_uint16:uint16->int64="int64_of_uint16"externalof_uint24:uint24->int64="int64_of_uint24"externalof_uint32:uint32->int64="int64_of_uint32"externalof_uint40:uint40->int64="int64_of_uint40"externalof_uint48:uint48->int64="int64_of_uint48"externalof_uint56:uint56->int64="int64_of_uint56"externalof_uint64:uint64->int64="int64_of_uint64"externalof_uint128:uint128->int64="int64_of_uint128"externalto_int8:int64->int8="int8_of_int64"externalto_int16:int64->int16="int16_of_int64"externalto_int24:int64->int24="int24_of_int64"externalto_int32:int64->int32="int32_of_int64"externalto_int40:int64->int40="int40_of_int64"externalto_int48:int64->int48="int48_of_int64"externalto_int56:int64->int56="int56_of_int64"externalto_int64:int64->int64="%identity"externalto_int128:int64->int128="int128_of_int64"externalto_uint8:int64->uint8="uint8_of_int64"externalto_uint16:int64->uint16="uint16_of_int64"externalto_uint24:int64->uint24="uint24_of_int64"externalto_uint32:int64->uint32="uint32_of_int64"externalto_uint40:int64->uint40="uint40_of_int64"externalto_uint48:int64->uint48="uint48_of_int64"externalto_uint56:int64->uint56="uint56_of_int64"externalto_uint64:int64->uint64="uint64_of_int64"externalto_uint128:int64->uint128="uint128_of_int64"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int64)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int64)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int64)endmoduleInt40=struct(* int40 is modeled as int64, where only the UPPER 40 bits are used;
this has the advantage that most operations are identical to the int64 ones.
The post-condition of all int40 opertaions is, that the LOWER 24 bit are 0x000000.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeInt64.Baseletbits=40letfmt="ll"letname="Int40"externalmul:int40->int40->int40="uint40_mul"externaldiv:int40->int40->int40="int40_div"externallogxor:int40->int40->int40="uint40_xor"externalshift_right:int40->int->int40="uint40_shift_right"externalshift_right_logical:int40->int->int40="int40_shift_right"externalof_int:int->int40="int40_of_int"externalof_nativeint:nativeint->int40="int40_of_nativeint"externalof_float:float->int40="int40_of_float"externalof_int8:int8->int40="int40_of_int8"externalof_int16:int16->int40="int40_of_int16"externalof_int24:int24->int40="int40_of_int24"externalof_int32:int32->int40="int40_of_int32"externalof_int40:int40->int40="%identity"externalof_int48:int48->int40="int40_of_int48"externalof_int56:int56->int40="int40_of_int56"externalof_int64:int64->int40="int40_of_int64"externalof_int128:int128->int40="int40_of_int128"externalof_uint8:uint8->int40="int40_of_uint8"externalof_uint16:uint16->int40="int40_of_uint16"externalof_uint24:uint24->int40="int40_of_uint24"externalof_uint32:uint32->int40="int40_of_uint32"externalof_uint40:uint40->int40="int40_of_uint40"externalof_uint48:uint48->int40="int40_of_uint48"externalof_uint56:uint56->int40="int40_of_uint56"externalof_uint64:uint64->int40="int40_of_uint64"externalof_uint128:uint128->int40="int40_of_uint128"externalto_int:int40->int="int_of_int40"externalto_nativeint:int40->nativeint="nativeint_of_int40"externalto_float:int40->float="float_of_int40"externalto_int8:int40->int8="int8_of_int40"externalto_int16:int40->int16="int16_of_int40"externalto_int24:int40->int24="int24_of_int40"externalto_int32:int40->int32="int32_of_int40"externalto_int40:int40->int40="%identity"externalto_int48:int40->int48="int48_of_int40"externalto_int56:int40->int56="int56_of_int40"externalto_int64:int40->int64="int64_of_int40"externalto_int128:int40->int128="int128_of_int40"externalto_uint8:int40->uint8="uint8_of_int40"externalto_uint16:int40->uint16="uint16_of_int40"externalto_uint24:int40->uint24="uint24_of_int40"externalto_uint32:int40->uint32="uint32_of_int40"externalto_uint40:int40->uint40="uint40_of_int40"externalto_uint48:int40->uint48="uint48_of_int40"externalto_uint56:int40->uint56="uint56_of_int40"externalto_uint64:int40->uint64="uint64_of_int40"externalto_uint128:int40->uint128="uint128_of_int40"externalmax_int_fun:unit->int40="int40_max_int"externalmin_int_fun:unit->int40="int40_min_int"letone=of_int1letmax_int=max_int_fun()letmin_int=min_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int40)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int40)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int40)endmoduleInt48=struct(* int48 is modeled as int64, where only the UPPER 48 bits are used;
this has the advantage that most operations are identical to the int64 ones.
The post-condition of all int48 opertaions is, that the LOWER 16 bit are 0x0000.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeInt64.Baseletbits=48letfmt="ll"letname="Int48"externalmul:int48->int48->int48="uint48_mul"externaldiv:int48->int48->int48="int48_div"externallogxor:int48->int48->int48="uint48_xor"externalshift_right:int48->int->int48="uint48_shift_right"externalshift_right_logical:int48->int->int48="int48_shift_right"externalof_int:int->int48="int48_of_int"externalof_nativeint:nativeint->int48="int48_of_nativeint"externalof_float:float->int48="int48_of_float"externalof_int8:int8->int48="int48_of_int8"externalof_int16:int16->int48="int48_of_int16"externalof_int24:int24->int48="int48_of_int24"externalof_int32:int32->int48="int48_of_int32"externalof_int40:int40->int48="int48_of_int40"externalof_int48:int48->int48="%identity"externalof_int56:int56->int48="int48_of_int56"externalof_int64:int64->int48="int48_of_int64"externalof_int128:int128->int48="int48_of_int128"externalof_uint8:uint8->int48="int48_of_uint8"externalof_uint16:uint16->int48="int48_of_uint16"externalof_uint24:uint24->int48="int48_of_uint24"externalof_uint32:uint32->int48="int48_of_uint32"externalof_uint40:uint40->int48="int48_of_uint40"externalof_uint48:uint48->int48="int48_of_uint48"externalof_uint56:uint56->int48="int48_of_uint56"externalof_uint64:uint64->int48="int48_of_uint64"externalof_uint128:uint128->int48="int48_of_uint128"externalto_int:int48->int="int_of_int48"externalto_nativeint:int48->nativeint="nativeint_of_int48"externalto_float:int48->float="float_of_int48"externalto_int8:int48->int8="int8_of_int48"externalto_int16:int48->int16="int16_of_int48"externalto_int24:int48->int24="int24_of_int48"externalto_int32:int48->int32="int32_of_int48"externalto_int40:int48->int40="int40_of_int48"externalto_int48:int48->int48="%identity"externalto_int56:int48->int56="int56_of_int48"externalto_int64:int48->int64="int64_of_int48"externalto_int128:int48->int128="int128_of_int48"externalto_uint8:int48->uint8="uint8_of_int48"externalto_uint16:int48->uint16="uint16_of_int48"externalto_uint24:int48->uint24="uint24_of_int48"externalto_uint32:int48->uint32="uint32_of_int48"externalto_uint40:int48->uint40="uint40_of_int48"externalto_uint48:int48->uint48="uint48_of_int48"externalto_uint56:int48->uint56="uint56_of_int48"externalto_uint64:int48->uint64="uint64_of_int48"externalto_uint128:int48->uint128="uint128_of_int48"externalmax_int_fun:unit->int48="int48_max_int"externalmin_int_fun:unit->int48="int48_min_int"letone=of_int1letmax_int=max_int_fun()letmin_int=min_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int48)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int48)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int48)endmoduleInt56=struct(* int56 is modeled as int64, where only the UPPER 56 bits are used;
this has the advantage that most operations are identical to the int64 ones.
The post-condition of all int56 opertaions is, that the LOWER 8 bit are 0x00.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeInt64.Baseletbits=56letfmt="ll"letname="Int56"externalmul:int56->int56->int56="uint56_mul"externaldiv:int56->int56->int56="int56_div"externallogxor:int56->int56->int56="uint56_xor"externalshift_right:int56->int->int56="uint56_shift_right"externalshift_right_logical:int56->int->int56="int56_shift_right"externalof_int:int->int56="int56_of_int"externalof_nativeint:nativeint->int56="int56_of_nativeint"externalof_float:float->int56="int56_of_float"externalof_int8:int8->int56="int56_of_int8"externalof_int16:int16->int56="int56_of_int16"externalof_int24:int24->int56="int56_of_int24"externalof_int32:int32->int56="int56_of_int32"externalof_int40:int40->int56="int56_of_int40"externalof_int48:int48->int56="int56_of_int48"externalof_int56:int56->int56="%identity"externalof_int64:int64->int56="int56_of_int64"externalof_int128:int128->int56="int56_of_int128"externalof_uint8:uint8->int56="int56_of_uint8"externalof_uint16:uint16->int56="int56_of_uint16"externalof_uint24:uint24->int56="int56_of_uint24"externalof_uint32:uint32->int56="int56_of_uint32"externalof_uint40:uint40->int56="int56_of_uint40"externalof_uint48:uint48->int56="int56_of_uint48"externalof_uint56:uint56->int56="int56_of_uint56"externalof_uint64:uint64->int56="int56_of_uint64"externalof_uint128:uint128->int56="int56_of_uint128"externalto_int:int56->int="int_of_int56"externalto_nativeint:int56->nativeint="nativeint_of_int56"externalto_float:int56->float="float_of_int56"externalto_int8:int56->int8="int8_of_int56"externalto_int16:int56->int16="int16_of_int56"externalto_int24:int56->int24="int24_of_int56"externalto_int32:int56->int32="int32_of_int56"externalto_int40:int56->int40="int40_of_int56"externalto_int48:int56->int48="int48_of_int56"externalto_int56:int56->int56="%identity"externalto_int64:int56->int64="int64_of_int56"externalto_int128:int56->int128="int128_of_int56"externalto_uint8:int56->uint8="uint8_of_int56"externalto_uint16:int56->uint16="uint16_of_int56"externalto_uint24:int56->uint24="uint24_of_int56"externalto_uint32:int56->uint32="uint32_of_int56"externalto_uint40:int56->uint40="uint40_of_int56"externalto_uint48:int56->uint48="uint48_of_int56"externalto_uint56:int56->uint56="uint56_of_int56"externalto_uint64:int56->uint64="uint64_of_int56"externalto_uint128:int56->uint128="uint128_of_int56"externalmax_int_fun:unit->int56="int56_max_int"externalmin_int_fun:unit->int56="int56_min_int"letone=of_int1letmax_int=max_int_fun()letmin_int=min_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int56)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int56)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int56)endmoduleInt128=structmoduleBase=structtypet=int128letbits=128letfmt="LL"letname="Int128"externaladd:int128->int128->int128="int128_add"externalsub:int128->int128->int128="int128_sub"externalmul:int128->int128->int128="int128_mul"externaldiv:int128->int128->int128="int128_div"externalrem:int128->int128->int128="int128_mod"externallogand:int128->int128->int128="int128_and"externallogor:int128->int128->int128="int128_or"externallogxor:int128->int128->int128="int128_xor"externalshift_left:int128->int->int128="int128_shift_left"externalshift_right:int128->int->int128="int128_shift_right"externalshift_right_logical:int128->int->int128="int128_shift_right"externalabs:int128->int128="int128_abs"externalneg:int128->int128="int128_neg"externalof_int:int->int128="int128_of_int"externalof_nativeint:nativeint->int128="int128_of_nativeint"externalof_float:float->int128="int128_of_float"externalof_int8:int8->int128="int128_of_int8"externalof_int16:int16->int128="int128_of_int16"externalof_int24:int24->int128="int128_of_int24"externalof_int32:int32->int128="int128_of_int32"externalof_int40:int40->int128="int128_of_int40"externalof_int48:int48->int128="int128_of_int48"externalof_int56:int56->int128="int128_of_int56"externalof_int64:int64->int128="int128_of_int64"externalof_int128:int128->int128="%identity"externalof_uint8:uint8->int128="int128_of_uint8"externalof_uint16:uint16->int128="int128_of_uint16"externalof_uint24:uint24->int128="int128_of_uint24"externalof_uint32:uint32->int128="int128_of_uint32"externalof_uint40:uint40->int128="int128_of_uint40"externalof_uint48:uint48->int128="int128_of_uint48"externalof_uint56:uint56->int128="int128_of_uint56"externalof_uint64:uint64->int128="int128_of_uint64"externalof_uint128:uint128->int128="int128_of_uint128"externalto_int:int128->int="int_of_int128"externalto_nativeint:int128->nativeint="nativeint_of_int128"externalto_float:int128->float="float_of_int128"externalto_int8:int128->int8="int8_of_int128"externalto_int16:int128->int16="int16_of_int128"externalto_int24:int128->int24="int24_of_int128"externalto_int32:int128->int32="int32_of_int128"externalto_int40:int128->int40="int40_of_int128"externalto_int48:int128->int48="int48_of_int128"externalto_int56:int128->int56="int56_of_int128"externalto_int64:int128->int64="int64_of_int128"externalto_int128:int128->int128="%identity"externalto_uint8:int128->uint8="uint8_of_int128"externalto_uint16:int128->uint16="uint16_of_int128"externalto_uint24:int128->uint24="uint24_of_int128"externalto_uint32:int128->uint32="uint32_of_int128"externalto_uint40:int128->uint40="uint40_of_int128"externalto_uint48:int128->uint48="uint48_of_int128"externalto_uint56:int128->uint56="uint56_of_int128"externalto_uint64:int128->uint64="uint64_of_int128"externalto_uint128:int128->uint128="uint128_of_int128"externalmax_int_fun:unit->int128="int128_max_int"externalmin_int_fun:unit->int128="int128_min_int"letzero=of_int0letone=of_int1letsucc=addoneletpredx=subxoneletmax_int=max_int_fun()letmin_int=min_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)externalinit_custom_ops:unit->unit="int128_init_custom_ops"let()=init_custom_ops()endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=int128)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=int128)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=int128)endmoduleUint8=structmoduleBase=structincludeInt_wrapper.Make_unsigned(structletbits=8end)letfmt="Uhh"letname="Uint8"endincludeBaseexternalof_nativeint:nativeint->uint8="uint8_of_nativeint"externalof_float:float->uint8="uint8_of_float"externalof_int8:int8->uint8="uint8_of_int8"externalof_int16:int16->uint8="uint8_of_int16"externalof_int24:int24->uint8="uint8_of_int24"externalof_int32:int32->uint8="uint8_of_int32"externalof_int40:int40->uint8="uint8_of_int40"externalof_int48:int48->uint8="uint8_of_int48"externalof_int56:int56->uint8="uint8_of_int56"externalof_int64:int64->uint8="uint8_of_int64"externalof_int128:int128->uint8="uint8_of_int128"externalof_uint8:uint8->uint8="%identity"externalof_uint16:uint16->uint8="uint8_of_uint16"externalof_uint24:uint24->uint8="uint8_of_uint24"externalof_uint32:uint32->uint8="uint8_of_uint32"externalof_uint40:uint40->uint8="uint8_of_uint40"externalof_uint48:uint48->uint8="uint8_of_uint48"externalof_uint56:uint56->uint8="uint8_of_uint56"externalof_uint64:uint64->uint8="uint8_of_uint64"externalof_uint128:uint128->uint8="uint8_of_uint128"externalto_nativeint:uint8->nativeint="nativeint_of_uint8"externalto_float:uint8->float="float_of_uint8"externalto_int8:uint8->int8="int8_of_uint8"externalto_int16:uint8->int16="int16_of_uint8"externalto_int24:uint8->int24="int24_of_uint8"externalto_int32:uint8->int32="int32_of_uint8"externalto_int40:uint8->int40="int40_of_uint8"externalto_int48:uint8->int48="int48_of_uint8"externalto_int56:uint8->int56="int56_of_uint8"externalto_int64:uint8->int64="int64_of_uint8"externalto_int128:uint8->int128="int128_of_uint8"externalto_uint8:uint8->uint8="%identity"externalto_uint16:uint8->uint16="uint16_of_uint8"externalto_uint24:uint8->uint24="uint24_of_uint8"externalto_uint32:uint8->uint32="uint32_of_uint8"externalto_uint40:uint8->uint40="uint40_of_uint8"externalto_uint48:uint8->uint48="uint48_of_uint8"externalto_uint56:uint8->uint56="uint56_of_uint8"externalto_uint64:uint8->uint64="uint64_of_uint8"externalto_uint128:uint8->uint128="uint128_of_uint8"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint8)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint8)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint8)endmoduleUint16=structmoduleBase=structincludeInt_wrapper.Make_unsigned(structletbits=16end)letfmt="Uh"letname="Uint16"endincludeBaseexternalof_nativeint:nativeint->uint16="uint16_of_nativeint"externalof_float:float->uint16="uint16_of_float"externalof_int8:int8->uint16="uint16_of_int8"externalof_int16:int16->uint16="uint16_of_int16"externalof_int24:int24->uint16="uint16_of_int24"externalof_int32:int32->uint16="uint16_of_int32"externalof_int40:int40->uint16="uint16_of_int40"externalof_int48:int48->uint16="uint16_of_int48"externalof_int56:int56->uint16="uint16_of_int56"externalof_int64:int64->uint16="uint16_of_int64"externalof_int128:int128->uint16="uint16_of_int128"externalof_uint8:uint8->uint16="uint16_of_uint8"externalof_uint16:uint16->uint16="%identity"externalof_uint24:uint24->uint16="uint16_of_uint24"externalof_uint32:uint32->uint16="uint16_of_uint32"externalof_uint40:uint40->uint16="uint16_of_uint40"externalof_uint48:uint48->uint16="uint16_of_uint48"externalof_uint56:uint56->uint16="uint16_of_uint56"externalof_uint64:uint64->uint16="uint16_of_uint64"externalof_uint128:uint128->uint16="uint16_of_uint128"externalto_nativeint:uint16->nativeint="nativeint_of_uint16"externalto_float:uint16->float="float_of_uint16"externalto_int8:uint16->int8="int8_of_uint16"externalto_int16:uint16->int16="int16_of_uint16"externalto_int24:uint16->int24="int24_of_uint16"externalto_int32:uint16->int32="int32_of_uint16"externalto_int40:uint16->int40="int40_of_uint16"externalto_int48:uint16->int48="int48_of_uint16"externalto_int56:uint16->int56="int56_of_uint16"externalto_int64:uint16->int64="int64_of_uint16"externalto_int128:uint16->int128="int128_of_uint16"externalto_uint8:uint16->uint8="uint8_of_uint16"externalto_uint16:uint16->uint16="%identity"externalto_uint24:uint16->uint24="uint24_of_uint16"externalto_uint32:uint16->uint32="uint32_of_uint16"externalto_uint40:uint16->uint40="uint40_of_uint16"externalto_uint48:uint16->uint48="uint48_of_uint16"externalto_uint56:uint16->uint56="uint56_of_uint16"externalto_uint64:uint16->uint64="uint64_of_uint16"externalto_uint128:uint16->uint128="uint128_of_uint16"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint16)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint16)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint16)endmoduleUint24=structmoduleBase=structincludeInt_wrapper.Make_unsigned(structletbits=24end)letfmt="Ul"letname="Uint24"endincludeBaseexternalof_nativeint:nativeint->uint24="uint24_of_nativeint"externalof_float:float->uint24="uint24_of_float"externalof_int8:int8->uint24="uint24_of_int8"externalof_int16:int16->uint24="uint24_of_int16"externalof_int24:int24->uint24="uint24_of_int24"externalof_int32:int32->uint24="uint24_of_int32"externalof_int40:int40->uint24="uint24_of_int40"externalof_int48:int48->uint24="uint24_of_int48"externalof_int56:int56->uint24="uint24_of_int56"externalof_int64:int64->uint24="uint24_of_int64"externalof_int128:int128->uint24="uint24_of_int128"externalof_uint8:uint8->uint24="uint24_of_uint8"externalof_uint16:uint16->uint24="uint24_of_uint16"externalof_uint24:uint24->uint24="%identity"externalof_uint32:uint32->uint24="uint24_of_uint32"externalof_uint40:uint40->uint24="uint24_of_uint40"externalof_uint48:uint48->uint24="uint24_of_uint48"externalof_uint56:uint56->uint24="uint24_of_uint56"externalof_uint64:uint64->uint24="uint24_of_uint64"externalof_uint128:uint128->uint24="uint24_of_uint128"externalto_nativeint:uint24->nativeint="nativeint_of_uint24"externalto_float:uint24->float="float_of_uint24"externalto_int8:uint24->int8="int8_of_uint24"externalto_int16:uint24->int16="int16_of_uint24"externalto_int24:uint24->int24="int24_of_uint24"externalto_int32:uint24->int32="int32_of_uint24"externalto_int40:uint24->int40="int40_of_uint24"externalto_int48:uint24->int48="int48_of_uint24"externalto_int56:uint24->int56="int56_of_uint24"externalto_int64:uint24->int64="int64_of_uint24"externalto_int128:uint24->int128="int128_of_uint24"externalto_uint8:uint24->uint8="uint8_of_uint24"externalto_uint16:uint24->uint16="uint16_of_uint24"externalto_uint24:uint24->uint24="%identity"externalto_uint32:uint24->uint32="uint32_of_uint24"externalto_uint40:uint24->uint40="uint40_of_uint24"externalto_uint48:uint24->uint48="uint48_of_uint24"externalto_uint56:uint24->uint56="uint56_of_uint24"externalto_uint64:uint24->uint64="uint64_of_uint24"externalto_uint128:uint24->uint128="uint128_of_uint24"moduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint24)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint24)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint24)endmoduleUint32=structmoduleBase=structtypet=uint32letbits=32letfmt="Ul"letname="Uint32"externaladd:uint32->uint32->uint32="uint32_add"externalsub:uint32->uint32->uint32="uint32_sub"externalmul:uint32->uint32->uint32="uint32_mul"externaldiv:uint32->uint32->uint32="uint32_div"externalrem:uint32->uint32->uint32="uint32_mod"externallogand:uint32->uint32->uint32="uint32_and"externallogor:uint32->uint32->uint32="uint32_or"externallogxor:uint32->uint32->uint32="uint32_xor"externalshift_left:uint32->int->uint32="uint32_shift_left"externalshift_right:uint32->int->uint32="uint32_shift_right"letshift_right_logical=shift_rightexternalabs:uint32->uint32="%identity"externalneg:uint32->uint32="uint32_neg"externalof_int:int->uint32="uint32_of_int"externalof_nativeint:nativeint->uint32="uint32_of_nativeint"externalof_float:float->uint32="uint32_of_float"externalof_int8:int8->uint32="uint32_of_int8"externalof_int16:int16->uint32="uint32_of_int16"externalof_int24:int24->uint32="uint32_of_int24"externalof_int32:int32->uint32="uint32_of_int32"externalof_int40:int40->uint32="uint32_of_int40"externalof_int48:int48->uint32="uint32_of_int48"externalof_int56:int56->uint32="uint32_of_int56"externalof_int64:int64->uint32="uint32_of_int64"externalof_int128:int128->uint32="uint32_of_int128"externalof_uint8:uint8->uint32="uint32_of_uint8"externalof_uint16:uint16->uint32="uint32_of_uint16"externalof_uint24:uint24->uint32="uint32_of_uint24"externalof_uint32:uint32->uint32="%identity"externalof_uint40:uint40->uint32="uint32_of_uint40"externalof_uint48:uint48->uint32="uint32_of_uint48"externalof_uint56:uint56->uint32="uint32_of_uint56"externalof_uint64:uint64->uint32="uint32_of_uint64"externalof_uint128:uint128->uint32="uint32_of_uint128"externalto_int:uint32->int="int_of_uint32"externalto_nativeint:uint32->nativeint="nativeint_of_uint32"externalto_float:uint32->float="float_of_uint32"externalto_int8:uint32->int8="int8_of_uint32"externalto_int16:uint32->int16="int16_of_uint32"externalto_int24:uint32->int24="int24_of_uint32"externalto_int32:uint32->int32="int32_of_uint32"externalto_int40:uint32->int40="int40_of_uint32"externalto_int48:uint32->int48="int48_of_uint32"externalto_int56:uint32->int56="int56_of_uint32"externalto_int64:uint32->int64="int64_of_uint32"externalto_int128:uint32->int128="int128_of_uint32"externalto_uint8:uint32->uint8="uint8_of_uint32"externalto_uint16:uint32->uint16="uint16_of_uint32"externalto_uint24:uint32->uint24="uint24_of_uint32"externalto_uint32:uint32->uint32="%identity"externalto_uint40:uint32->uint40="uint40_of_uint32"externalto_uint48:uint32->uint48="uint48_of_uint32"externalto_uint56:uint32->uint56="uint56_of_uint32"externalto_uint64:uint32->uint64="uint64_of_uint32"externalto_uint128:uint32->uint128="uint128_of_uint32"externalmax_int_fun:unit->uint32="uint32_max_int"letzero=of_int0letone=of_int1letsucc=addoneletpredx=subxoneletmax_int=max_int_fun()letmin_int=zeroletlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)externalinit_custom_ops:unit->unit="uint32_init_custom_ops"let()=init_custom_ops()endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint32)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint32)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint32)endmoduleUint64=structmoduleBase=structtypet=uint64letbits=64letname="Uint64"letfmt="UL"externaladd:uint64->uint64->uint64="uint64_add"externalsub:uint64->uint64->uint64="uint64_sub"externalmul:uint64->uint64->uint64="uint64_mul"externaldiv:uint64->uint64->uint64="uint64_div"externalrem:uint64->uint64->uint64="uint64_mod"externallogand:uint64->uint64->uint64="uint64_and"externallogor:uint64->uint64->uint64="uint64_or"externallogxor:uint64->uint64->uint64="uint64_xor"externalshift_left:uint64->int->uint64="uint64_shift_left"externalshift_right:uint64->int->uint64="uint64_shift_right"letshift_right_logical=shift_rightexternalabs:uint64->uint64="%identity"externalneg:uint64->uint64="uint64_neg"externalof_int:int->uint64="uint64_of_int"externalof_nativeint:nativeint->uint64="uint64_of_nativeint"externalof_float:float->uint64="uint64_of_float"externalof_int8:int8->uint64="uint64_of_int8"externalof_int16:int16->uint64="uint64_of_int16"externalof_int24:int24->uint64="uint64_of_int24"externalof_int32:int32->uint64="uint64_of_int32"externalof_int40:int40->uint64="uint64_of_int40"externalof_int48:int48->uint64="uint64_of_int48"externalof_int56:int56->uint64="uint64_of_int56"externalof_int64:int64->uint64="uint64_of_int64"externalof_int128:int128->uint64="uint64_of_int128"externalof_uint8:uint8->uint64="uint64_of_uint8"externalof_uint16:uint16->uint64="uint64_of_uint16"externalof_uint24:uint24->uint64="uint64_of_uint24"externalof_uint32:uint32->uint64="uint64_of_uint32"externalof_uint40:uint40->uint64="uint64_of_uint40"externalof_uint48:uint48->uint64="uint64_of_uint48"externalof_uint56:uint56->uint64="uint64_of_uint56"externalof_uint64:uint64->uint64="%identity"externalof_uint128:uint128->uint64="uint64_of_uint128"externalto_int:uint64->int="int_of_uint64"externalto_nativeint:uint64->nativeint="nativeint_of_uint64"externalto_float:uint64->float="float_of_uint64"externalto_int8:uint64->int8="int8_of_uint64"externalto_int16:uint64->int16="int16_of_uint64"externalto_int24:uint64->int24="int24_of_uint64"externalto_int32:uint64->int32="int32_of_uint64"externalto_int40:uint64->int40="int40_of_uint64"externalto_int48:uint64->int48="int48_of_uint64"externalto_int56:uint64->int56="int56_of_uint64"externalto_int64:uint64->int64="int64_of_uint64"externalto_int128:uint64->int128="int128_of_uint64"externalto_uint8:uint64->uint8="uint8_of_uint64"externalto_uint16:uint64->uint16="uint16_of_uint64"externalto_uint24:uint64->uint24="uint24_of_uint64"externalto_uint32:uint64->uint32="uint32_of_uint64"externalto_uint40:uint64->uint40="uint40_of_uint64"externalto_uint48:uint64->uint48="uint48_of_uint64"externalto_uint56:uint64->uint56="uint56_of_uint64"externalto_uint64:uint64->uint64="%identity"externalto_uint128:uint64->uint128="uint128_of_uint64"externalmax_int_fun:unit->uint64="uint64_max_int"letzero=of_int0letone=of_int1letsucc=addoneletpredx=subxoneletmax_int=max_int_fun()letmin_int=zeroletlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)externalinit_custom_ops:unit->unit="uint64_init_custom_ops"let()=init_custom_ops()endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint64)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint64)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint64)endmoduleUint40=struct(* uint40 is modeled as uint64, where only the UPPER 40 bits are used;
this has the advantage that most operations are identical to the uint64 ones.
The post-condition of all uint40 opertaions is, that the LOWER 24 bit are 0x000000.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeUint64.Baseletbits=40letfmt="Ul"letname="Uint40"externalmul:uint40->uint40->uint40="uint40_mul"externaldiv:uint40->uint40->uint40="uint40_div"externallogxor:uint40->uint40->uint40="uint40_xor"externalshift_right:uint40->int->uint40="uint40_shift_right"letshift_right_logical=shift_rightexternalneg:uint40->uint40="uint40_neg"externalof_int:int->uint40="uint40_of_int"externalof_nativeint:nativeint->uint40="uint40_of_nativeint"externalof_float:float->uint40="uint40_of_float"externalof_int8:int8->uint40="uint40_of_int8"externalof_int16:int16->uint40="uint40_of_int16"externalof_int24:int24->uint40="uint40_of_int24"externalof_int32:int32->uint40="uint40_of_int32"externalof_int40:int40->uint40="uint40_of_int40"externalof_int48:int48->uint40="uint40_of_int48"externalof_int56:int56->uint40="uint40_of_int56"externalof_int64:int64->uint40="uint40_of_int64"externalof_int128:int128->uint40="uint40_of_int128"externalof_uint8:uint8->uint40="uint40_of_uint8"externalof_uint16:uint16->uint40="uint40_of_uint16"externalof_uint24:uint24->uint40="uint40_of_uint24"externalof_uint32:uint32->uint40="uint40_of_uint32"externalof_uint40:uint40->uint40="%identity"externalof_uint48:uint48->uint40="uint40_of_uint48"externalof_uint56:uint56->uint40="uint40_of_uint56"externalof_uint64:uint64->uint40="uint40_of_uint64"externalof_uint128:uint128->uint40="uint40_of_uint128"externalto_int:uint40->int="int_of_uint40"externalto_nativeint:uint40->nativeint="nativeint_of_uint40"externalto_float:uint40->float="float_of_uint40"externalto_int8:uint40->int8="int8_of_uint40"externalto_int16:uint40->int16="int16_of_uint40"externalto_int24:uint40->int24="int24_of_uint40"externalto_int32:uint40->int32="int32_of_uint40"externalto_int40:uint40->int40="int40_of_uint40"externalto_int48:uint40->int48="int48_of_uint40"externalto_int56:uint40->int56="int56_of_uint40"externalto_int64:uint40->int64="int64_of_uint40"externalto_int128:uint40->int128="int128_of_uint40"externalto_uint8:uint40->uint8="uint8_of_uint40"externalto_uint16:uint40->uint16="uint16_of_uint40"externalto_uint24:uint40->uint24="uint24_of_uint40"externalto_uint32:uint40->uint32="uint32_of_uint40"externalto_uint40:uint40->uint40="%identity"externalto_uint48:uint40->uint48="uint48_of_uint40"externalto_uint56:uint40->uint56="uint56_of_uint40"externalto_uint64:uint40->uint64="uint64_of_uint40"externalto_uint128:uint40->uint128="uint128_of_uint40"letone=of_int1letmax_int=max_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint40)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint40)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint40)endmoduleUint48=struct(* uint48 is modeled as uint64, where only the UPPER 48 bits are used;
this has the advantage that most operations are identical to the uint64 ones.
The post-condition of all uint48 opertaions is, that the LOWER 16 bit are 0x0000.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeUint64.Baseletbits=48letfmt="Ul"letname="Uint48"externalmul:uint48->uint48->uint48="uint48_mul"externaldiv:uint48->uint48->uint48="uint48_div"externallogxor:uint48->uint48->uint48="uint48_xor"externalshift_right:uint48->int->uint48="uint48_shift_right"letshift_right_logical=shift_rightexternalneg:uint48->uint48="uint48_neg"externalof_int:int->uint48="uint48_of_int"externalof_nativeint:nativeint->uint48="uint48_of_nativeint"externalof_float:float->uint48="uint48_of_float"externalof_int8:int8->uint48="uint48_of_int8"externalof_int16:int16->uint48="uint48_of_int16"externalof_int24:int24->uint48="uint48_of_int24"externalof_int32:int32->uint48="uint48_of_int32"externalof_int40:int40->uint48="uint48_of_int40"externalof_int48:int48->uint48="uint48_of_int48"externalof_int56:int56->uint48="uint48_of_int56"externalof_int64:int64->uint48="uint48_of_int64"externalof_int128:int128->uint48="uint48_of_int128"externalof_uint8:uint8->uint48="uint48_of_uint8"externalof_uint16:uint16->uint48="uint48_of_uint16"externalof_uint24:uint24->uint48="uint48_of_uint24"externalof_uint32:uint32->uint48="uint48_of_uint32"externalof_uint40:uint40->uint48="uint48_of_uint40"externalof_uint48:uint48->uint48="%identity"externalof_uint56:uint56->uint48="uint48_of_uint56"externalof_uint64:uint64->uint48="uint48_of_uint64"externalof_uint128:uint128->uint48="uint48_of_uint128"externalto_int:uint48->int="int_of_uint48"externalto_nativeint:uint48->nativeint="nativeint_of_uint48"externalto_float:uint48->float="float_of_uint48"externalto_int8:uint48->int8="int8_of_uint48"externalto_int16:uint48->int16="int16_of_uint48"externalto_int24:uint48->int24="int24_of_uint48"externalto_int32:uint48->int32="int32_of_uint48"externalto_int40:uint48->int40="int40_of_uint48"externalto_int48:uint48->int48="int48_of_uint48"externalto_int56:uint48->int56="int56_of_uint48"externalto_int64:uint48->int64="int64_of_uint48"externalto_int128:uint48->int128="int128_of_uint48"externalto_uint8:uint48->uint8="uint8_of_uint48"externalto_uint16:uint48->uint16="uint16_of_uint48"externalto_uint24:uint48->uint24="uint24_of_uint48"externalto_uint32:uint48->uint32="uint32_of_uint48"externalto_uint40:uint48->uint40="uint40_of_uint48"externalto_uint48:uint48->uint48="%identity"externalto_uint56:uint48->uint56="uint56_of_uint48"externalto_uint64:uint48->uint64="uint64_of_uint48"externalto_uint128:uint48->uint128="uint128_of_uint48"letone=of_int1letmax_int=max_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint48)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint48)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint48)endmoduleUint56=struct(* uint56 is modeled as uint64, where only the UPPER 56 bits are used;
this has the advantage that most operations are identical to the uint64 ones.
The post-condition of all uint56 opertaions is, that the LOWER 8 bit are 0x00.
Only operations that are not identical or do not preserve the post-condition are implemented.
*)moduleBase=structincludeUint64.Baseletbits=56letfmt="Ul"letname="Uint56"externalmul:uint56->uint56->uint56="uint56_mul"externaldiv:uint56->uint56->uint56="uint56_div"externallogxor:uint56->uint56->uint56="uint56_xor"externalshift_right:uint56->int->uint56="uint56_shift_right"letshift_right_logical=shift_rightexternalneg:uint56->uint56="uint56_neg"externalof_int:int->uint56="uint56_of_int"externalof_nativeint:nativeint->uint56="uint56_of_nativeint"externalof_float:float->uint56="uint56_of_float"externalof_int8:int8->uint56="uint56_of_int8"externalof_int16:int16->uint56="uint56_of_int16"externalof_int24:int24->uint56="uint56_of_int24"externalof_int32:int32->uint56="uint56_of_int32"externalof_int40:int40->uint56="uint56_of_int40"externalof_int48:int48->uint56="uint56_of_int48"externalof_int56:int56->uint56="uint56_of_int56"externalof_int64:int64->uint56="uint56_of_int64"externalof_int128:int128->uint56="uint56_of_int128"externalof_uint8:uint8->uint56="uint56_of_uint8"externalof_uint16:uint16->uint56="uint56_of_uint16"externalof_uint24:uint24->uint56="uint56_of_uint24"externalof_uint32:uint32->uint56="uint56_of_uint32"externalof_uint40:uint40->uint56="uint56_of_uint40"externalof_uint48:uint48->uint56="uint56_of_uint48"externalof_uint56:uint56->uint56="%identity"externalof_uint64:uint64->uint56="uint56_of_uint64"externalof_uint128:uint128->uint56="uint56_of_uint128"externalto_int:uint56->int="int_of_uint56"externalto_nativeint:uint56->nativeint="nativeint_of_uint56"externalto_float:uint56->float="float_of_uint56"externalto_int8:uint56->int8="int8_of_uint56"externalto_int16:uint56->int16="int16_of_uint56"externalto_int24:uint56->int24="int24_of_uint56"externalto_int32:uint56->int32="int32_of_uint56"externalto_int40:uint56->int40="int40_of_uint56"externalto_int48:uint56->int48="int48_of_uint56"externalto_int56:uint56->int56="int56_of_uint56"externalto_int64:uint56->int64="int64_of_uint56"externalto_int128:uint56->int128="int128_of_uint56"externalto_uint8:uint56->uint8="uint8_of_uint56"externalto_uint16:uint56->uint16="uint16_of_uint56"externalto_uint24:uint56->uint24="uint24_of_uint56"externalto_uint32:uint56->uint32="uint32_of_uint56"externalto_uint40:uint56->uint40="uint40_of_uint56"externalto_uint48:uint56->uint48="uint48_of_uint56"externalto_uint56:uint56->uint56="%identity"externalto_uint64:uint56->uint64="uint64_of_uint56"externalto_uint128:uint56->uint128="uint128_of_uint56"letone=of_int1letmax_int=max_int_fun()letlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint56)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint56)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint56)endmoduleUint128=structmoduleBase=structtypet=uint128letbits=128letfmt="ULL"letname="Int1128"externaladd:uint128->uint128->uint128="uint128_add"externalsub:uint128->uint128->uint128="uint128_sub"externalmul:uint128->uint128->uint128="uint128_mul"externaldiv:uint128->uint128->uint128="uint128_div"externalrem:uint128->uint128->uint128="uint128_mod"externallogand:uint128->uint128->uint128="uint128_and"externallogor:uint128->uint128->uint128="uint128_or"externallogxor:uint128->uint128->uint128="uint128_xor"externalshift_left:uint128->int->uint128="uint128_shift_left"externalshift_right:uint128->int->uint128="uint128_shift_right"letshift_right_logical=shift_rightexternalabs:uint128->uint128="%identity"externalof_int:int->uint128="uint128_of_int"externalof_nativeint:nativeint->uint128="uint128_of_nativeint"externalof_float:float->uint128="uint128_of_float"externalof_int8:int8->uint128="uint128_of_int8"externalof_int16:int16->uint128="uint128_of_int16"externalof_int24:int24->uint128="uint128_of_int24"externalof_int32:int32->uint128="uint128_of_int32"externalof_int40:int40->uint128="uint128_of_int40"externalof_int48:int48->uint128="uint128_of_int48"externalof_int56:int56->uint128="uint128_of_int56"externalof_int64:int64->uint128="uint128_of_int64"externalof_int128:int128->uint128="uint128_of_int128"externalof_uint8:uint8->uint128="uint128_of_uint8"externalof_uint16:uint16->uint128="uint128_of_uint16"externalof_uint24:uint24->uint128="uint128_of_uint24"externalof_uint32:uint32->uint128="uint128_of_uint32"externalof_uint40:uint40->uint128="uint128_of_uint40"externalof_uint48:uint48->uint128="uint128_of_uint48"externalof_uint56:uint56->uint128="uint128_of_uint56"externalof_uint64:uint64->uint128="uint128_of_uint64"externalof_uint128:uint128->uint128="%identity"externalto_int:uint128->int="int_of_uint128"externalto_nativeint:uint128->nativeint="nativeint_of_uint128"externalto_float:uint128->float="float_of_uint128"externalto_int8:uint128->int8="int8_of_uint128"externalto_int16:uint128->int16="int16_of_uint128"externalto_int24:uint128->int24="int24_of_uint128"externalto_int32:uint128->int32="int32_of_uint128"externalto_int40:uint128->int40="int40_of_uint128"externalto_int48:uint128->int48="int48_of_uint128"externalto_int56:uint128->int56="int56_of_uint128"externalto_int64:uint128->int64="int64_of_uint128"externalto_int128:uint128->int128="int128_of_uint128"externalto_uint8:uint128->uint8="uint8_of_uint128"externalto_uint16:uint128->uint16="uint16_of_uint128"externalto_uint24:uint128->uint24="uint24_of_uint128"externalto_uint32:uint128->uint32="uint32_of_uint128"externalto_uint40:uint128->uint40="uint40_of_uint128"externalto_uint48:uint128->uint48="uint48_of_uint128"externalto_uint56:uint128->uint56="uint56_of_uint128"externalto_uint64:uint128->uint64="uint64_of_uint128"externalto_uint128:uint128->uint128="%identity"externalmax_int_fun:unit->uint128="uint128_max_int"letzero=of_int0letone=of_int1letsucc=addoneletpredx=subxoneletmax_int=max_int_fun()letmin_int=zeroletlognot=logxormax_intletcompare=Pervasives.compareletdivmod=(funxy->divxy,remxy)letnegx=add(submax_intx)oneexternalinit_custom_ops:unit->unit="uint128_init_custom_ops"let()=init_custom_ops()endincludeBasemoduleConv=Str_conv.Make(Base)include(Conv:moduletypeofConvwithtypet:=uint128)moduleEndian=Bytes_conv.Make(Base)include(Endian:moduletypeofEndianwithtypet:=uint128)moduleInf=Infix.Make(Base)include(Inf:moduletypeofInfwithtypet:=uint128)end