unsigned long zcrc64(const void *data, int size, unsigned long init_value) {
  int i;
  unsigned long crc = init_value;
  static unsigned long crc64_tab[256] = {
      0x0000000000000000UL, 0x7ad870c830358979UL, 0xf5b0e190606b12f2UL,
      0x8f689158505e9b8bUL, 0xc038e5739841b68fUL, 0xbae095bba8743ff6UL,
      0x358804e3f82aa47dUL, 0x4f50742bc81f2d04UL, 0xab28ecb46814fe75UL,
      0xd1f09c7c5821770cUL, 0x5e980d24087fec87UL, 0x24407dec384a65feUL,
      0x6b1009c7f05548faUL, 0x11c8790fc060c183UL, 0x9ea0e857903e5a08UL,
      0xe478989fa00bd371UL, 0x7d08ff3b88be6f81UL, 0x07d08ff3b88be6f8UL,
      0x88b81eabe8d57d73UL, 0xf2606e63d8e0f40aUL, 0xbd301a4810ffd90eUL,
      0xc7e86a8020ca5077UL, 0x4880fbd87094cbfcUL, 0x32588b1040a14285UL,
      0xd620138fe0aa91f4UL, 0xacf86347d09f188dUL, 0x2390f21f80c18306UL,
      0x594882d7b0f40a7fUL, 0x1618f6fc78eb277bUL, 0x6cc0863448deae02UL,
      0xe3a8176c18803589UL, 0x997067a428b5bcf0UL, 0xfa11fe77117cdf02UL,
      0x80c98ebf2149567bUL, 0x0fa11fe77117cdf0UL, 0x75796f2f41224489UL,
      0x3a291b04893d698dUL, 0x40f16bccb908e0f4UL, 0xcf99fa94e9567b7fUL,
      0xb5418a5cd963f206UL, 0x513912c379682177UL, 0x2be1620b495da80eUL,
      0xa489f35319033385UL, 0xde51839b2936bafcUL, 0x9101f7b0e12997f8UL,
      0xebd98778d11c1e81UL, 0x64b116208142850aUL, 0x1e6966e8b1770c73UL,
      0x8719014c99c2b083UL, 0xfdc17184a9f739faUL, 0x72a9e0dcf9a9a271UL,
      0x08719014c99c2b08UL, 0x4721e43f0183060cUL, 0x3df994f731b68f75UL,
      0xb29105af61e814feUL, 0xc849756751dd9d87UL, 0x2c31edf8f1d64ef6UL,
      0x56e99d30c1e3c78fUL, 0xd9810c6891bd5c04UL, 0xa3597ca0a188d57dUL,
      0xec09088b6997f879UL, 0x96d1784359a27100UL, 0x19b9e91b09fcea8bUL,
      0x636199d339c963f2UL, 0xdf7adabd7a6e2d6fUL, 0xa5a2aa754a5ba416UL,
      0x2aca3b2d1a053f9dUL, 0x50124be52a30b6e4UL, 0x1f423fcee22f9be0UL,
      0x659a4f06d21a1299UL, 0xeaf2de5e82448912UL, 0x902aae96b271006bUL,
      0x74523609127ad31aUL, 0x0e8a46c1224f5a63UL, 0x81e2d7997211c1e8UL,
      0xfb3aa75142244891UL, 0xb46ad37a8a3b6595UL, 0xceb2a3b2ba0eececUL,
      0x41da32eaea507767UL, 0x3b024222da65fe1eUL, 0xa2722586f2d042eeUL,
      0xd8aa554ec2e5cb97UL, 0x57c2c41692bb501cUL, 0x2d1ab4dea28ed965UL,
      0x624ac0f56a91f461UL, 0x1892b03d5aa47d18UL, 0x97fa21650afae693UL,
      0xed2251ad3acf6feaUL, 0x095ac9329ac4bc9bUL, 0x7382b9faaaf135e2UL,
      0xfcea28a2faafae69UL, 0x8632586aca9a2710UL, 0xc9622c4102850a14UL,
      0xb3ba5c8932b0836dUL, 0x3cd2cdd162ee18e6UL, 0x460abd1952db919fUL,
      0x256b24ca6b12f26dUL, 0x5fb354025b277b14UL, 0xd0dbc55a0b79e09fUL,
      0xaa03b5923b4c69e6UL, 0xe553c1b9f35344e2UL, 0x9f8bb171c366cd9bUL,
      0x10e3202993385610UL, 0x6a3b50e1a30ddf69UL, 0x8e43c87e03060c18UL,
      0xf49bb8b633338561UL, 0x7bf329ee636d1eeaUL, 0x012b592653589793UL,
      0x4e7b2d0d9b47ba97UL, 0x34a35dc5ab7233eeUL, 0xbbcbcc9dfb2ca865UL,
      0xc113bc55cb19211cUL, 0x5863dbf1e3ac9decUL, 0x22bbab39d3991495UL,
      0xadd33a6183c78f1eUL, 0xd70b4aa9b3f20667UL, 0x985b3e827bed2b63UL,
      0xe2834e4a4bd8a21aUL, 0x6debdf121b863991UL, 0x1733afda2bb3b0e8UL,
      0xf34b37458bb86399UL, 0x8993478dbb8deae0UL, 0x06fbd6d5ebd3716bUL,
      0x7c23a61ddbe6f812UL, 0x3373d23613f9d516UL, 0x49aba2fe23cc5c6fUL,
      0xc6c333a67392c7e4UL, 0xbc1b436e43a74e9dUL, 0x95ac9329ac4bc9b5UL,
      0xef74e3e19c7e40ccUL, 0x601c72b9cc20db47UL, 0x1ac40271fc15523eUL,
      0x5594765a340a7f3aUL, 0x2f4c0692043ff643UL, 0xa02497ca54616dc8UL,
      0xdafce7026454e4b1UL, 0x3e847f9dc45f37c0UL, 0x445c0f55f46abeb9UL,
      0xcb349e0da4342532UL, 0xb1eceec59401ac4bUL, 0xfebc9aee5c1e814fUL,
      0x8464ea266c2b0836UL, 0x0b0c7b7e3c7593bdUL, 0x71d40bb60c401ac4UL,
      0xe8a46c1224f5a634UL, 0x927c1cda14c02f4dUL, 0x1d148d82449eb4c6UL,
      0x67ccfd4a74ab3dbfUL, 0x289c8961bcb410bbUL, 0x5244f9a98c8199c2UL,
      0xdd2c68f1dcdf0249UL, 0xa7f41839ecea8b30UL, 0x438c80a64ce15841UL,
      0x3954f06e7cd4d138UL, 0xb63c61362c8a4ab3UL, 0xcce411fe1cbfc3caUL,
      0x83b465d5d4a0eeceUL, 0xf96c151de49567b7UL, 0x76048445b4cbfc3cUL,
      0x0cdcf48d84fe7545UL, 0x6fbd6d5ebd3716b7UL, 0x15651d968d029fceUL,
      0x9a0d8ccedd5c0445UL, 0xe0d5fc06ed698d3cUL, 0xaf85882d2576a038UL,
      0xd55df8e515432941UL, 0x5a3569bd451db2caUL, 0x20ed197575283bb3UL,
      0xc49581ead523e8c2UL, 0xbe4df122e51661bbUL, 0x3125607ab548fa30UL,
      0x4bfd10b2857d7349UL, 0x04ad64994d625e4dUL, 0x7e7514517d57d734UL,
      0xf11d85092d094cbfUL, 0x8bc5f5c11d3cc5c6UL, 0x12b5926535897936UL,
      0x686de2ad05bcf04fUL, 0xe70573f555e26bc4UL, 0x9ddd033d65d7e2bdUL,
      0xd28d7716adc8cfb9UL, 0xa85507de9dfd46c0UL, 0x273d9686cda3dd4bUL,
      0x5de5e64efd965432UL, 0xb99d7ed15d9d8743UL, 0xc3450e196da80e3aUL,
      0x4c2d9f413df695b1UL, 0x36f5ef890dc31cc8UL, 0x79a59ba2c5dc31ccUL,
      0x037deb6af5e9b8b5UL, 0x8c157a32a5b7233eUL, 0xf6cd0afa9582aa47UL,
      0x4ad64994d625e4daUL, 0x300e395ce6106da3UL, 0xbf66a804b64ef628UL,
      0xc5bed8cc867b7f51UL, 0x8aeeace74e645255UL, 0xf036dc2f7e51db2cUL,
      0x7f5e4d772e0f40a7UL, 0x05863dbf1e3ac9deUL, 0xe1fea520be311aafUL,
      0x9b26d5e88e0493d6UL, 0x144e44b0de5a085dUL, 0x6e963478ee6f8124UL,
      0x21c640532670ac20UL, 0x5b1e309b16452559UL, 0xd476a1c3461bbed2UL,
      0xaeaed10b762e37abUL, 0x37deb6af5e9b8b5bUL, 0x4d06c6676eae0222UL,
      0xc26e573f3ef099a9UL, 0xb8b627f70ec510d0UL, 0xf7e653dcc6da3dd4UL,
      0x8d3e2314f6efb4adUL, 0x0256b24ca6b12f26UL, 0x788ec2849684a65fUL,
      0x9cf65a1b368f752eUL, 0xe62e2ad306bafc57UL, 0x6946bb8b56e467dcUL,
      0x139ecb4366d1eea5UL, 0x5ccebf68aecec3a1UL, 0x2616cfa09efb4ad8UL,
      0xa97e5ef8cea5d153UL, 0xd3a62e30fe90582aUL, 0xb0c7b7e3c7593bd8UL,
      0xca1fc72bf76cb2a1UL, 0x45775673a732292aUL, 0x3faf26bb9707a053UL,
      0x70ff52905f188d57UL, 0x0a2722586f2d042eUL, 0x854fb3003f739fa5UL,
      0xff97c3c80f4616dcUL, 0x1bef5b57af4dc5adUL, 0x61372b9f9f784cd4UL,
      0xee5fbac7cf26d75fUL, 0x9487ca0fff135e26UL, 0xdbd7be24370c7322UL,
      0xa10fceec0739fa5bUL, 0x2e675fb4576761d0UL, 0x54bf2f7c6752e8a9UL,
      0xcdcf48d84fe75459UL, 0xb71738107fd2dd20UL, 0x387fa9482f8c46abUL,
      0x42a7d9801fb9cfd2UL, 0x0df7adabd7a6e2d6UL, 0x772fdd63e7936bafUL,
      0xf8474c3bb7cdf024UL, 0x829f3cf387f8795dUL, 0x66e7a46c27f3aa2cUL,
      0x1c3fd4a417c62355UL, 0x935745fc4798b8deUL, 0xe98f353477ad31a7UL,
      0xa6df411fbfb21ca3UL, 0xdc0731d78f8795daUL, 0x536fa08fdfd90e51UL,
      0x29b7d047efec8728UL,
  };
  unsigned char *src_c = (unsigned char *)data;
  for (i = 0; i < size; i++) {
    crc = crc64_tab[(unsigned char)crc ^ (src_c[i])] ^ (crc >> 8);
  }
  return crc;
}


x86 assembly (clang, -O0):
<zcrc64>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1172 <zcrc64+0x72>
mov    -0x28(%rbp),%rax
movzbl %al,%eax
mov    -0x30(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
xor    %ecx,%eax
movslq %eax,%rcx
lea    0x2edf(%rip),%rax
mov    (%rax,%rcx,8),%rax
mov    -0x28(%rbp),%rcx
shr    $0x8,%rcx
xor    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1126 <zcrc64+0x26>
mov    -0x28(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<zcrc64>:
mov    %rdx,%rax
test   %esi,%esi
jle    117d <zcrc64+0x7d>
mov    %esi,%r8d
cmp    $0x1,%esi
jne    1113 <zcrc64+0x13>
xor    %edx,%edx
jmp    115e <zcrc64+0x5e>
mov    %r8d,%r10d
and    $0xfffffffe,%r10d
xor    %edx,%edx
lea    0xedd(%rip),%r9
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl %al,%ecx
movzbl (%rdi,%rdx,1),%esi
xor    %rcx,%rsi
shr    $0x8,%rax
xor    (%r9,%rsi,8),%rax
movzbl %al,%ecx
movzbl 0x1(%rdi,%rdx,1),%esi
xor    %rcx,%rsi
shr    $0x8,%rax
xor    (%r9,%rsi,8),%rax
add    $0x2,%rdx
cmp    %rdx,%r10
jne    1130 <zcrc64+0x30>
test   $0x1,%r8b
je     117d <zcrc64+0x7d>
movzbl %al,%ecx
movzbl (%rdi,%rdx,1),%edx
xor    %rcx,%rdx
lea    0xe8b(%rip),%rcx
shr    $0x8,%rax
xor    (%rcx,%rdx,8),%rax
ret

LLVM IR (-O0):
@zcrc64.crc64_tab = internal global [256 x i64] [i64 0, i64 8851949072701294969, i64 -742845928306961678, i64 -8113074920216421493, i64 -4595671135093148017, i64 -4980816554654154762, i64 3857338458010461309, i64 5715195658523061508, i64 -6113376234570973579, i64 -3318980867503589620, i64 6816212484437830791, i64 2612226237385041406, i64 7714676916020922618, i64 1281407202545942915, i64 -7016352756663428600, i64 -1983667824504351887, i64 9009731685717012353, i64 563108230357313272, i64 -8595086165142045325, i64 -981663343647329270, i64 -4814319104833890034, i64 -4041863567026532233, i64 5224452474770082812, i64 3627802401766982277, i64 -3017390241667706380, i64 -5982922944867788659, i64 2562814405091885830, i64 6433535930597116543, i64 1592294032496338811, i64 7836410910743637506, i64 -2042356677977557623, i64 -7390293033759687440, i64 -427280702275526910, i64 -9166638614987581829, i64 1126216460714626544, i64 8464919223366468745, i64 4190910634541279629, i64 4679640014836523252, i64 -3487480918944875649, i64 -5385871547969572346, i64 5852729821509460343, i64 3161916214005835790, i64 -6590469041452534907, i64 -2427014021741364484, i64 -7997839124169385992, i64 -1451980451876168063, i64 7255604803533964554, i64 2191395843288271987, i64 -8711930575662698365, i64 -161723297007453702, i64 8262382231073956465, i64 608425843627928328, i64 5125628810183771660, i64 4465764294926438261, i64 -5579672212515318530, i64 -4014548506208526969, i64 3184588064992677622, i64 6262709589572306831, i64 -2773922252222276604, i64 -6676167943253338755, i64 -1438609211103119239, i64 -7579144467225874176, i64 1853769023980628619, i64 7161174014982448114, i64 -2343320148755206801, i64 -6511454690488900586, i64 3083341959784644509, i64 5769757520242456292, i64 2252432921429253088, i64 7321251034957484697, i64 -1516905626976614126, i64 -8058436620964003733, i64 8381821269082559258, i64 1047727658635319907, i64 -9087464044036505112, i64 -343778454096557935, i64 -5446308276092574315, i64 -3552597168020853524, i64 4745161141923116903, i64 4252033715651608094, i64 -6741284430690630930, i64 -2834359218710656105, i64 6323832428011671580, i64 3250108949404244325, i64 7082685524280996961, i64 1770671381070249240, i64 -7495641911945140589, i64 -1359434333054603286, i64 674072313427442843, i64 8323419547594995170, i64 -222320551145787799, i64 -8776855508102797552, i64 -3935534466641622508, i64 -5495978650921565331, i64 4382791686576543974, i64 5047054248884015519, i64 2696289253709771373, i64 6895947823530343188, i64 -3396904503390642017, i64 -6195909022666954266, i64 -1921979611561638686, i64 -6950266497748513381, i64 1216851687255856656, i64 7654800921679748969, i64 -8195486453342008296, i64 -820859414382410399, i64 8931528589852876522, i64 84259039178430355, i64 5655163293556783767, i64 3792978414742418414, i64 -4914609589448824731, i64 -4534073323166293732, i64 6369176129985355244, i64 2502782282785952917, i64 -5921324894564937954, i64 -2951183038082316697, i64 -7468306826918024349, i64 -2124768518181707238, i64 7920669638525335953, i64 1671873238255513832, i64 -915577327403375719, i64 -8533398194874357024, i64 503231997654823275, i64 8945175932061546514, i64 3707538047961257238, i64 5308515798192249967, i64 -4124396043744655388, i64 -4892242429347410275, i64 -7661587058870466123, i64 -1192077443213672244, i64 6925536469308201799, i64 1928669229005230654, i64 6166683919569289018, i64 3408106242218915395, i64 -6907229033224639032, i64 -2667002881850940239, i64 4504865842858506176, i64 4925828954283753145, i64 -3804242003794582222, i64 -5625859302133486517, i64 -91027543915855537, i64 -8906736712287582154, i64 796147016248169405, i64 8202193697865996996, i64 -1683101535544433100, i64 -7891400724083364019, i64 2095455317270639814, i64 7479631577382337983, i64 2926364910754730171, i64 5928137516128508354, i64 -2509515504350199223, i64 -6344419337991189712, i64 4867406749023426625, i64 4131191115536978232, i64 -5315266574900639053, i64 -3682798812180528182, i64 -8956421789863317810, i64 -473980642647513161, i64 8504067431303216188, i64 926884511990314309, i64 8051711962477172407, i64 1541670979892322254, i64 -7346060597066464187, i64 -2245611732491203268, i64 -5799079217686208456, i64 -3072025708008887999, i64 6500217898808488650, i64 2372580570961558451, i64 -4281373025147557694, i64 -4733862501121891909, i64 3541342762140498480, i64 5475551080882205513, i64 337036156713721421, i64 9112211761281881908, i64 -1072554861787525953, i64 -8375017722257553978, i64 1348144626854885686, i64 7524919785159454799, i64 -1799904978519561276, i64 -7071492277665275203, i64 -3274830414739877959, i64 -6317134249602496832, i64 2827581646778391883, i64 6766067242130363442, i64 -5071758167665440957, i64 -4376075960543867334, i64 5489218623395763633, i64 3960334819262667976, i64 8765583373153087948, i64 251615998827411637, i64 -8352635575941520578, i64 -662861498787124665, i64 5392578507419542746, i64 3462768234654100899, i64 -4654848426648865240, i64 -4197679429721555119, i64 -8435614942565739947, i64 -1137479759323604180, i64 9177858264896848039, i64 398073508124084702, i64 -2162109211042833745, i64 -7266885753923922986, i64 1463182455377365085, i64 7968614284679676196, i64 2433703374511713312, i64 6565738749404456281, i64 -3137142230350053678, i64 -5859516218004850773, i64 4025855981238586203, i64 5550341738321543714, i64 -4436512653762848343, i64 -5136874382911270704, i64 -583686894003798572, i64 -8269133292856429395, i64 168518078356860710, i64 8687094605961012831, i64 -7136417486595984082, i64 -1860502510218052521, i64 7585956829484836828, i64 1413790823389195941, i64 6687492953022055329, i64 2744609311697881816, i64 -6233440411522313901, i64 -3195816097608607702, i64 -5708391813738841128, i64 -3882165362121461087, i64 5005564565571905834, i64 4588929132448424019, i64 8142317431333358935, i64 731591227688682542, i64 -8840650729859080283, i64 -29339608537491748, i64 2012927990619293101, i64 7005115709973351636, i64 -1270091202558503073, i64 -7743998864187498970, i64 -2605404796658879710, i64 -6841021795823650213, i64 3343746476511027664, i64 6106651831093618857, i64 -3616591881864522663, i64 -5253668796789236448, i64 4071158715666679467, i64 4803046671925235666, i64 1006463995309646550, i64 8588326435575524271, i64 -556392209586458588, i64 -9034435310825997987, i64 7415076095922514476, i64 2035579357833339733, i64 -7829712477325051682, i64 -1617015241740308057, i64 -6422342938991125341, i64 -2592048258632673830, i64 6012200567359213137, i64 3006100283679606568]
define i64 @zcrc64(i8* %0, i32 %1, i64 %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i64
%7 = alloca i32
%8 = alloca i64
%9 = alloca i8*
store i8* %0, i8** %4
store i32 %1, i32* %5
store i64 %2, i64* %6
%10 = load i64, i64* %6
store i64 %10, i64* %8
%11 = load i8*, i8** %4
store i8* %11, i8** %9
store i32 0, i32* %7
br label %12
12: ; preds = %33, %3
%13 = load i32, i32* %7
%14 = load i32, i32* %5
%15 = icmp slt i32 %13, %14
br i1 %15, label %16, label %36
16: ; preds = %12
%17 = load i64, i64* %8
%18 = trunc i64 %17 to i8
%19 = zext i8 %18 to i32
%20 = load i8*, i8** %9
%21 = load i32, i32* %7
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i8, i8* %20, i64 %22
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
%26 = xor i32 %19, %25
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [256 x i64], [256 x i64]* @zcrc64.crc64_tab, i64 0, i64 %27
%29 = load i64, i64* %28
%30 = load i64, i64* %8
%31 = lshr i64 %30, 8
%32 = xor i64 %29, %31
store i64 %32, i64* %8
br label %33
33: ; preds = %16
%34 = load i32, i32* %7
%35 = add nsw i32 %34, 1
store i32 %35, i32* %7
br label %12
36: ; preds = %12
%37 = load i64, i64* %8
ret i64 %37
}

LLVM IR (-O2):
@zcrc64.crc64_tab = internal unnamed_addr constant [256 x i64] [i64 0, i64 8851949072701294969, i64 -742845928306961678, i64 -8113074920216421493, i64 -4595671135093148017, i64 -4980816554654154762, i64 3857338458010461309, i64 5715195658523061508, i64 -6113376234570973579, i64 -3318980867503589620, i64 6816212484437830791, i64 2612226237385041406, i64 7714676916020922618, i64 1281407202545942915, i64 -7016352756663428600, i64 -1983667824504351887, i64 9009731685717012353, i64 563108230357313272, i64 -8595086165142045325, i64 -981663343647329270, i64 -4814319104833890034, i64 -4041863567026532233, i64 5224452474770082812, i64 3627802401766982277, i64 -3017390241667706380, i64 -5982922944867788659, i64 2562814405091885830, i64 6433535930597116543, i64 1592294032496338811, i64 7836410910743637506, i64 -2042356677977557623, i64 -7390293033759687440, i64 -427280702275526910, i64 -9166638614987581829, i64 1126216460714626544, i64 8464919223366468745, i64 4190910634541279629, i64 4679640014836523252, i64 -3487480918944875649, i64 -5385871547969572346, i64 5852729821509460343, i64 3161916214005835790, i64 -6590469041452534907, i64 -2427014021741364484, i64 -7997839124169385992, i64 -1451980451876168063, i64 7255604803533964554, i64 2191395843288271987, i64 -8711930575662698365, i64 -161723297007453702, i64 8262382231073956465, i64 608425843627928328, i64 5125628810183771660, i64 4465764294926438261, i64 -5579672212515318530, i64 -4014548506208526969, i64 3184588064992677622, i64 6262709589572306831, i64 -2773922252222276604, i64 -6676167943253338755, i64 -1438609211103119239, i64 -7579144467225874176, i64 1853769023980628619, i64 7161174014982448114, i64 -2343320148755206801, i64 -6511454690488900586, i64 3083341959784644509, i64 5769757520242456292, i64 2252432921429253088, i64 7321251034957484697, i64 -1516905626976614126, i64 -8058436620964003733, i64 8381821269082559258, i64 1047727658635319907, i64 -9087464044036505112, i64 -343778454096557935, i64 -5446308276092574315, i64 -3552597168020853524, i64 4745161141923116903, i64 4252033715651608094, i64 -6741284430690630930, i64 -2834359218710656105, i64 6323832428011671580, i64 3250108949404244325, i64 7082685524280996961, i64 1770671381070249240, i64 -7495641911945140589, i64 -1359434333054603286, i64 674072313427442843, i64 8323419547594995170, i64 -222320551145787799, i64 -8776855508102797552, i64 -3935534466641622508, i64 -5495978650921565331, i64 4382791686576543974, i64 5047054248884015519, i64 2696289253709771373, i64 6895947823530343188, i64 -3396904503390642017, i64 -6195909022666954266, i64 -1921979611561638686, i64 -6950266497748513381, i64 1216851687255856656, i64 7654800921679748969, i64 -8195486453342008296, i64 -820859414382410399, i64 8931528589852876522, i64 84259039178430355, i64 5655163293556783767, i64 3792978414742418414, i64 -4914609589448824731, i64 -4534073323166293732, i64 6369176129985355244, i64 2502782282785952917, i64 -5921324894564937954, i64 -2951183038082316697, i64 -7468306826918024349, i64 -2124768518181707238, i64 7920669638525335953, i64 1671873238255513832, i64 -915577327403375719, i64 -8533398194874357024, i64 503231997654823275, i64 8945175932061546514, i64 3707538047961257238, i64 5308515798192249967, i64 -4124396043744655388, i64 -4892242429347410275, i64 -7661587058870466123, i64 -1192077443213672244, i64 6925536469308201799, i64 1928669229005230654, i64 6166683919569289018, i64 3408106242218915395, i64 -6907229033224639032, i64 -2667002881850940239, i64 4504865842858506176, i64 4925828954283753145, i64 -3804242003794582222, i64 -5625859302133486517, i64 -91027543915855537, i64 -8906736712287582154, i64 796147016248169405, i64 8202193697865996996, i64 -1683101535544433100, i64 -7891400724083364019, i64 2095455317270639814, i64 7479631577382337983, i64 2926364910754730171, i64 5928137516128508354, i64 -2509515504350199223, i64 -6344419337991189712, i64 4867406749023426625, i64 4131191115536978232, i64 -5315266574900639053, i64 -3682798812180528182, i64 -8956421789863317810, i64 -473980642647513161, i64 8504067431303216188, i64 926884511990314309, i64 8051711962477172407, i64 1541670979892322254, i64 -7346060597066464187, i64 -2245611732491203268, i64 -5799079217686208456, i64 -3072025708008887999, i64 6500217898808488650, i64 2372580570961558451, i64 -4281373025147557694, i64 -4733862501121891909, i64 3541342762140498480, i64 5475551080882205513, i64 337036156713721421, i64 9112211761281881908, i64 -1072554861787525953, i64 -8375017722257553978, i64 1348144626854885686, i64 7524919785159454799, i64 -1799904978519561276, i64 -7071492277665275203, i64 -3274830414739877959, i64 -6317134249602496832, i64 2827581646778391883, i64 6766067242130363442, i64 -5071758167665440957, i64 -4376075960543867334, i64 5489218623395763633, i64 3960334819262667976, i64 8765583373153087948, i64 251615998827411637, i64 -8352635575941520578, i64 -662861498787124665, i64 5392578507419542746, i64 3462768234654100899, i64 -4654848426648865240, i64 -4197679429721555119, i64 -8435614942565739947, i64 -1137479759323604180, i64 9177858264896848039, i64 398073508124084702, i64 -2162109211042833745, i64 -7266885753923922986, i64 1463182455377365085, i64 7968614284679676196, i64 2433703374511713312, i64 6565738749404456281, i64 -3137142230350053678, i64 -5859516218004850773, i64 4025855981238586203, i64 5550341738321543714, i64 -4436512653762848343, i64 -5136874382911270704, i64 -583686894003798572, i64 -8269133292856429395, i64 168518078356860710, i64 8687094605961012831, i64 -7136417486595984082, i64 -1860502510218052521, i64 7585956829484836828, i64 1413790823389195941, i64 6687492953022055329, i64 2744609311697881816, i64 -6233440411522313901, i64 -3195816097608607702, i64 -5708391813738841128, i64 -3882165362121461087, i64 5005564565571905834, i64 4588929132448424019, i64 8142317431333358935, i64 731591227688682542, i64 -8840650729859080283, i64 -29339608537491748, i64 2012927990619293101, i64 7005115709973351636, i64 -1270091202558503073, i64 -7743998864187498970, i64 -2605404796658879710, i64 -6841021795823650213, i64 3343746476511027664, i64 6106651831093618857, i64 -3616591881864522663, i64 -5253668796789236448, i64 4071158715666679467, i64 4803046671925235666, i64 1006463995309646550, i64 8588326435575524271, i64 -556392209586458588, i64 -9034435310825997987, i64 7415076095922514476, i64 2035579357833339733, i64 -7829712477325051682, i64 -1617015241740308057, i64 -6422342938991125341, i64 -2592048258632673830, i64 6012200567359213137, i64 3006100283679606568]
define i64 @zcrc64(i8* nocapture %0, i32 %1, i64 %2) {
%4 = icmp sgt i32 %1, 0
br i1 %4, label %5, label %52
5: ; preds = %3
%6 = zext i32 %1 to i64
%7 = and i64 %6, 1
%8 = icmp eq i32 %1, 1
br i1 %8, label %37, label %9
9: ; preds = %5
%10 = and i64 %6, 4294967294
br label %11
11: ; preds = %11, %9
%12 = phi i64 [ 0, %9 ], [ %34, %11 ]
%13 = phi i64 [ %2, %9 ], [ %33, %11 ]
%14 = phi i64 [ 0, %9 ], [ %35, %11 ]
%15 = and i64 %13, 255
%16 = getelementptr inbounds i8, i8* %0, i64 %12
%17 = load i8, i8* %16
%18 = zext i8 %17 to i64
%19 = xor i64 %15, %18
%20 = getelementptr inbounds [256 x i64], [256 x i64]* @zcrc64.crc64_tab, i64 0, i64 %19
%21 = load i64, i64* %20
%22 = lshr i64 %13, 8
%23 = xor i64 %21, %22
%24 = or i64 %12, 1
%25 = and i64 %23, 255
%26 = getelementptr inbounds i8, i8* %0, i64 %24
%27 = load i8, i8* %26
%28 = zext i8 %27 to i64
%29 = xor i64 %25, %28
%30 = getelementptr inbounds [256 x i64], [256 x i64]* @zcrc64.crc64_tab, i64 0, i64 %29
%31 = load i64, i64* %30
%32 = lshr i64 %23, 8
%33 = xor i64 %31, %32
%34 = add nuw nsw i64 %12, 2
%35 = add i64 %14, 2
%36 = icmp eq i64 %35, %10
br i1 %36, label %37, label %11
37: ; preds = %11, %5
%38 = phi i64 [ undef, %5 ], [ %33, %11 ]
%39 = phi i64 [ 0, %5 ], [ %34, %11 ]
%40 = phi i64 [ %2, %5 ], [ %33, %11 ]
%41 = icmp eq i64 %7, 0
br i1 %41, label %52, label %42
42: ; preds = %37
%43 = and i64 %40, 255
%44 = getelementptr inbounds i8, i8* %0, i64 %39
%45 = load i8, i8* %44
%46 = zext i8 %45 to i64
%47 = xor i64 %43, %46
%48 = getelementptr inbounds [256 x i64], [256 x i64]* @zcrc64.crc64_tab, i64 0, i64 %47
%49 = load i64, i64* %48
%50 = lshr i64 %40, 8
%51 = xor i64 %49, %50
br label %52
52: ; preds = %42, %37, %3
%53 = phi i64 [ %2, %3 ], [ %38, %37 ], [ %51, %42 ]
ret i64 %53
}