#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef scalar_t__ uint8_t;
typedef int uint64_t;

/* Variables and functions */
uint64_t c_jhash64(const uint8_t *k, uint64_t length, uint64_t intval) {
  uint64_t a, b, c, len;
  len = length;
  a = b = intval;
  c = 0x9e3779b97f4a7c13LL;
  while (len >= 24) {
    a += (k[0] + ((uint64_t)k[1] << 8) + ((uint64_t)k[2] << 16) +
          ((uint64_t)k[3] << 24) + ((uint64_t)k[4] << 32) +
          ((uint64_t)k[5] << 40) + ((uint64_t)k[6] << 48) +
          ((uint64_t)k[7] << 56));
    b += (k[8] + ((uint64_t)k[9] << 8) + ((uint64_t)k[10] << 16) +
          ((uint64_t)k[11] << 24) + ((uint64_t)k[12] << 32) +
          ((uint64_t)k[13] << 40) + ((uint64_t)k[14] << 48) +
          ((uint64_t)k[15] << 56));
    c += (k[16] + ((uint64_t)k[17] << 8) + ((uint64_t)k[18] << 16) +
          ((uint64_t)k[19] << 24) + ((uint64_t)k[20] << 32) +
          ((uint64_t)k[21] << 40) + ((uint64_t)k[22] << 48) +
          ((uint64_t)k[23] << 56));
    {
      a -= b;
      a -= c;
      a ^= (c >> 43);
      b -= c;
      b -= a;
      b ^= (a << 9);
      c -= a;
      c -= b;
      c ^= (b >> 8);
      a -= b;
      a -= c;
      a ^= (c >> 38);
      b -= c;
      b -= a;
      b ^= (a << 23);
      c -= a;
      c -= b;
      c ^= (b >> 5);
      a -= b;
      a -= c;
      a ^= (c >> 35);
      b -= c;
      b -= a;
      b ^= (a << 49);
      c -= a;
      c -= b;
      c ^= (b >> 11);
      a -= b;
      a -= c;
      a ^= (c >> 12);
      b -= c;
      b -= a;
      b ^= (a << 18);
      c -= a;
      c -= b;
      c ^= (b >> 22);
    };
    k += 24;
    len -= 24;
  }
  c += length;
  switch (len) {
  case 23:
    c += ((uint64_t)k[22] << 56);
  case 22:
    c += ((uint64_t)k[21] << 48);
  case 21:
    c += ((uint64_t)k[20] << 40);
  case 20:
    c += ((uint64_t)k[19] << 32);
  case 19:
    c += ((uint64_t)k[18] << 24);
  case 18:
    c += ((uint64_t)k[17] << 16);
  case 17:
    c += ((uint64_t)k[16] << 8);
  case 16:
    b += ((uint64_t)k[15] << 56);
  case 15:
    b += ((uint64_t)k[14] << 48);
  case 14:
    b += ((uint64_t)k[13] << 40);
  case 13:
    b += ((uint64_t)k[12] << 32);
  case 12:
    b += ((uint64_t)k[11] << 24);
  case 11:
    b += ((uint64_t)k[10] << 16);
  case 10:
    b += ((uint64_t)k[9] << 8);
  case 9:
    b += ((uint64_t)k[8]);
  case 8:
    a += ((uint64_t)k[7] << 56);
  case 7:
    a += ((uint64_t)k[6] << 48);
  case 6:
    a += ((uint64_t)k[5] << 40);
  case 5:
    a += ((uint64_t)k[4] << 32);
  case 4:
    a += ((uint64_t)k[3] << 24);
  case 3:
    a += ((uint64_t)k[2] << 16);
  case 2:
    a += ((uint64_t)k[1] << 8);
  case 1:
    a += ((uint64_t)k[0]);
  }
  {
    a -= b;
    a -= c;
    a ^= (c >> 43);
    b -= c;
    b -= a;
    b ^= (a << 9);
    c -= a;
    c -= b;
    c ^= (b >> 8);
    a -= b;
    a -= c;
    a ^= (c >> 38);
    b -= c;
    b -= a;
    b ^= (a << 23);
    c -= a;
    c -= b;
    c ^= (b >> 5);
    a -= b;
    a -= c;
    a ^= (c >> 35);
    b -= c;
    b -= a;
    b ^= (a << 49);
    c -= a;
    c -= b;
    c ^= (b >> 11);
    a -= b;
    a -= c;
    a ^= (c >> 12);
    b -= c;
    b -= a;
    b ^= (a << 18);
    c -= a;
    c -= b;
    c ^= (b >> 22);
  };
  return c;
}


x86 assembly (clang, -O0):
<c_jhash64>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    %eax,-0x14(%rbp)
movl   $0x7f4a7c13,-0x1c(%rbp)
cmpl   $0x18,-0x20(%rbp)
jl     150d <c_jhash64+0x40d>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    -0x8(%rbp),%rcx
mov    0x8(%rcx),%rcx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x10(%rcx),%rcx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x18(%rcx),%rcx
shl    $0x18,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x20(%rcx),%rcx
mov    %ecx,%edx
mov    $0x20,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x28(%rcx),%rcx
mov    %ecx,%edx
mov    $0x28,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x30(%rcx),%rcx
mov    %ecx,%edx
mov    $0x30,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    0x38(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
mov    -0x38(%rbp),%rcx
cltq
add    %rax,%rcx
movslq -0x14(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x40(%rax),%rax
mov    -0x8(%rbp),%rcx
mov    0x48(%rcx),%rcx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x50(%rcx),%rcx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x58(%rcx),%rcx
shl    $0x18,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x60(%rcx),%rcx
mov    %ecx,%edx
mov    $0x20,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x68(%rcx),%rcx
mov    %ecx,%edx
mov    $0x28,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x70(%rcx),%rcx
mov    %ecx,%edx
mov    $0x30,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    0x78(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
mov    -0x30(%rbp),%rcx
cltq
add    %rax,%rcx
movslq -0x18(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x80(%rax),%rax
mov    -0x8(%rbp),%rcx
mov    0x88(%rcx),%rcx
shl    $0x8,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x90(%rcx),%rcx
shl    $0x10,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0x98(%rcx),%rcx
shl    $0x18,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0xa0(%rcx),%rcx
mov    %ecx,%edx
mov    $0x20,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0xa8(%rcx),%rcx
mov    %ecx,%edx
mov    $0x28,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
mov    0xb0(%rcx),%rcx
mov    %ecx,%edx
mov    $0x30,%ecx
shl    %cl,%edx
mov    %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0xb8(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
mov    -0x28(%rbp),%rcx
cltq
add    %rax,%rcx
movslq -0x1c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x2b,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x9,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x8,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x26,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x17,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x5,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x23,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x31,%ecx
shl    %cl,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0xb,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0xc,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x12,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x16,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
add    $0xc0,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%eax
sub    $0x18,%eax
mov    %eax,-0x20(%rbp)
jmp    1124 <c_jhash64+0x24>
mov    -0xc(%rbp),%ecx
mov    -0x1c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x16,%eax
ja     1706 <c_jhash64+0x606>
mov    -0x40(%rbp),%rax
lea    0xac8(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
mov    0xb0(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0xa8(%rax),%rax
mov    $0x30,%ecx
shl    %cl,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0xa0(%rax),%rax
mov    $0x28,%ecx
shl    %cl,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x98(%rax),%rax
mov    $0x20,%ecx
shl    %cl,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x90(%rax),%rax
shl    $0x18,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x88(%rax),%rax
shl    $0x10,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x80(%rax),%rax
shl    $0x8,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x78(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x70(%rax),%rax
mov    $0x30,%ecx
shl    %cl,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x68(%rax),%rax
mov    $0x28,%ecx
shl    %cl,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x60(%rax),%rax
mov    $0x20,%ecx
shl    %cl,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x58(%rax),%rax
shl    $0x18,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x50(%rax),%rax
shl    $0x10,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x48(%rax),%rax
shl    $0x8,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x40(%rax),%rax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x38(%rax),%rax
mov    $0x38,%ecx
shl    %cl,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x30(%rax),%rax
mov    $0x30,%ecx
shl    %cl,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x28(%rax),%rax
mov    $0x28,%ecx
shl    %cl,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x20(%rax),%rax
mov    $0x20,%ecx
shl    %cl,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
shl    $0x18,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
shl    $0x10,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
shl    $0x8,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x2b,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x9,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x8,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x26,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x17,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x5,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x23,%ecx
sar    %cl,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x31,%ecx
shl    %cl,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0xb,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0xc,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x12,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x16,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<c_jhash64>:
ret

LLVM IR (-O0):
define i32 @c_jhash64(i64* %0, i32 %1, i32 %2) {
%4 = alloca i64*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i64* %0, i64** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%11 = load i32, i32* %5
store i32 %11, i32* %10
%12 = load i32, i32* %6
store i32 %12, i32* %8
store i32 %12, i32* %7
store i32 2135587859, i32* %9
br label %13
13: ; preds = %16, %3
%14 = load i32, i32* %10
%15 = icmp sge i32 %14, 24
br i1 %15, label %16, label %309
16: ; preds = %13
%17 = load i64*, i64** %4
%18 = getelementptr inbounds i64, i64* %17, i64 0
%19 = load i64, i64* %18
%20 = load i64*, i64** %4
%21 = getelementptr inbounds i64, i64* %20, i64 1
%22 = load i64, i64* %21
%23 = trunc i64 %22 to i32
%24 = shl i32 %23, 8
%25 = sext i32 %24 to i64
%26 = add nsw i64 %19, %25
%27 = load i64*, i64** %4
%28 = getelementptr inbounds i64, i64* %27, i64 2
%29 = load i64, i64* %28
%30 = trunc i64 %29 to i32
%31 = shl i32 %30, 16
%32 = sext i32 %31 to i64
%33 = add nsw i64 %26, %32
%34 = load i64*, i64** %4
%35 = getelementptr inbounds i64, i64* %34, i64 3
%36 = load i64, i64* %35
%37 = trunc i64 %36 to i32
%38 = shl i32 %37, 24
%39 = sext i32 %38 to i64
%40 = add nsw i64 %33, %39
%41 = load i64*, i64** %4
%42 = getelementptr inbounds i64, i64* %41, i64 4
%43 = load i64, i64* %42
%44 = trunc i64 %43 to i32
%45 = shl i32 %44, 32
%46 = sext i32 %45 to i64
%47 = add nsw i64 %40, %46
%48 = load i64*, i64** %4
%49 = getelementptr inbounds i64, i64* %48, i64 5
%50 = load i64, i64* %49
%51 = trunc i64 %50 to i32
%52 = shl i32 %51, 40
%53 = sext i32 %52 to i64
%54 = add nsw i64 %47, %53
%55 = load i64*, i64** %4
%56 = getelementptr inbounds i64, i64* %55, i64 6
%57 = load i64, i64* %56
%58 = trunc i64 %57 to i32
%59 = shl i32 %58, 48
%60 = sext i32 %59 to i64
%61 = add nsw i64 %54, %60
%62 = load i64*, i64** %4
%63 = getelementptr inbounds i64, i64* %62, i64 7
%64 = load i64, i64* %63
%65 = trunc i64 %64 to i32
%66 = shl i32 %65, 56
%67 = sext i32 %66 to i64
%68 = add nsw i64 %61, %67
%69 = load i32, i32* %7
%70 = sext i32 %69 to i64
%71 = add nsw i64 %70, %68
%72 = trunc i64 %71 to i32
store i32 %72, i32* %7
%73 = load i64*, i64** %4
%74 = getelementptr inbounds i64, i64* %73, i64 8
%75 = load i64, i64* %74
%76 = load i64*, i64** %4
%77 = getelementptr inbounds i64, i64* %76, i64 9
%78 = load i64, i64* %77
%79 = trunc i64 %78 to i32
%80 = shl i32 %79, 8
%81 = sext i32 %80 to i64
%82 = add nsw i64 %75, %81
%83 = load i64*, i64** %4
%84 = getelementptr inbounds i64, i64* %83, i64 10
%85 = load i64, i64* %84
%86 = trunc i64 %85 to i32
%87 = shl i32 %86, 16
%88 = sext i32 %87 to i64
%89 = add nsw i64 %82, %88
%90 = load i64*, i64** %4
%91 = getelementptr inbounds i64, i64* %90, i64 11
%92 = load i64, i64* %91
%93 = trunc i64 %92 to i32
%94 = shl i32 %93, 24
%95 = sext i32 %94 to i64
%96 = add nsw i64 %89, %95
%97 = load i64*, i64** %4
%98 = getelementptr inbounds i64, i64* %97, i64 12
%99 = load i64, i64* %98
%100 = trunc i64 %99 to i32
%101 = shl i32 %100, 32
%102 = sext i32 %101 to i64
%103 = add nsw i64 %96, %102
%104 = load i64*, i64** %4
%105 = getelementptr inbounds i64, i64* %104, i64 13
%106 = load i64, i64* %105
%107 = trunc i64 %106 to i32
%108 = shl i32 %107, 40
%109 = sext i32 %108 to i64
%110 = add nsw i64 %103, %109
%111 = load i64*, i64** %4
%112 = getelementptr inbounds i64, i64* %111, i64 14
%113 = load i64, i64* %112
%114 = trunc i64 %113 to i32
%115 = shl i32 %114, 48
%116 = sext i32 %115 to i64
%117 = add nsw i64 %110, %116
%118 = load i64*, i64** %4
%119 = getelementptr inbounds i64, i64* %118, i64 15
%120 = load i64, i64* %119
%121 = trunc i64 %120 to i32
%122 = shl i32 %121, 56
%123 = sext i32 %122 to i64
%124 = add nsw i64 %117, %123
%125 = load i32, i32* %8
%126 = sext i32 %125 to i64
%127 = add nsw i64 %126, %124
%128 = trunc i64 %127 to i32
store i32 %128, i32* %8
%129 = load i64*, i64** %4
%130 = getelementptr inbounds i64, i64* %129, i64 16
%131 = load i64, i64* %130
%132 = load i64*, i64** %4
%133 = getelementptr inbounds i64, i64* %132, i64 17
%134 = load i64, i64* %133
%135 = trunc i64 %134 to i32
%136 = shl i32 %135, 8
%137 = sext i32 %136 to i64
%138 = add nsw i64 %131, %137
%139 = load i64*, i64** %4
%140 = getelementptr inbounds i64, i64* %139, i64 18
%141 = load i64, i64* %140
%142 = trunc i64 %141 to i32
%143 = shl i32 %142, 16
%144 = sext i32 %143 to i64
%145 = add nsw i64 %138, %144
%146 = load i64*, i64** %4
%147 = getelementptr inbounds i64, i64* %146, i64 19
%148 = load i64, i64* %147
%149 = trunc i64 %148 to i32
%150 = shl i32 %149, 24
%151 = sext i32 %150 to i64
%152 = add nsw i64 %145, %151
%153 = load i64*, i64** %4
%154 = getelementptr inbounds i64, i64* %153, i64 20
%155 = load i64, i64* %154
%156 = trunc i64 %155 to i32
%157 = shl i32 %156, 32
%158 = sext i32 %157 to i64
%159 = add nsw i64 %152, %158
%160 = load i64*, i64** %4
%161 = getelementptr inbounds i64, i64* %160, i64 21
%162 = load i64, i64* %161
%163 = trunc i64 %162 to i32
%164 = shl i32 %163, 40
%165 = sext i32 %164 to i64
%166 = add nsw i64 %159, %165
%167 = load i64*, i64** %4
%168 = getelementptr inbounds i64, i64* %167, i64 22
%169 = load i64, i64* %168
%170 = trunc i64 %169 to i32
%171 = shl i32 %170, 48
%172 = sext i32 %171 to i64
%173 = add nsw i64 %166, %172
%174 = load i64*, i64** %4
%175 = getelementptr inbounds i64, i64* %174, i64 23
%176 = load i64, i64* %175
%177 = trunc i64 %176 to i32
%178 = shl i32 %177, 56
%179 = sext i32 %178 to i64
%180 = add nsw i64 %173, %179
%181 = load i32, i32* %9
%182 = sext i32 %181 to i64
%183 = add nsw i64 %182, %180
%184 = trunc i64 %183 to i32
store i32 %184, i32* %9
%185 = load i32, i32* %8
%186 = load i32, i32* %7
%187 = sub nsw i32 %186, %185
store i32 %187, i32* %7
%188 = load i32, i32* %9
%189 = load i32, i32* %7
%190 = sub nsw i32 %189, %188
store i32 %190, i32* %7
%191 = load i32, i32* %9
%192 = ashr i32 %191, 43
%193 = load i32, i32* %7
%194 = xor i32 %193, %192
store i32 %194, i32* %7
%195 = load i32, i32* %9
%196 = load i32, i32* %8
%197 = sub nsw i32 %196, %195
store i32 %197, i32* %8
%198 = load i32, i32* %7
%199 = load i32, i32* %8
%200 = sub nsw i32 %199, %198
store i32 %200, i32* %8
%201 = load i32, i32* %7
%202 = shl i32 %201, 9
%203 = load i32, i32* %8
%204 = xor i32 %203, %202
store i32 %204, i32* %8
%205 = load i32, i32* %7
%206 = load i32, i32* %9
%207 = sub nsw i32 %206, %205
store i32 %207, i32* %9
%208 = load i32, i32* %8
%209 = load i32, i32* %9
%210 = sub nsw i32 %209, %208
store i32 %210, i32* %9
%211 = load i32, i32* %8
%212 = ashr i32 %211, 8
%213 = load i32, i32* %9
%214 = xor i32 %213, %212
store i32 %214, i32* %9
%215 = load i32, i32* %8
%216 = load i32, i32* %7
%217 = sub nsw i32 %216, %215
store i32 %217, i32* %7
%218 = load i32, i32* %9
%219 = load i32, i32* %7
%220 = sub nsw i32 %219, %218
store i32 %220, i32* %7
%221 = load i32, i32* %9
%222 = ashr i32 %221, 38
%223 = load i32, i32* %7
%224 = xor i32 %223, %222
store i32 %224, i32* %7
%225 = load i32, i32* %9
%226 = load i32, i32* %8
%227 = sub nsw i32 %226, %225
store i32 %227, i32* %8
%228 = load i32, i32* %7
%229 = load i32, i32* %8
%230 = sub nsw i32 %229, %228
store i32 %230, i32* %8
%231 = load i32, i32* %7
%232 = shl i32 %231, 23
%233 = load i32, i32* %8
%234 = xor i32 %233, %232
store i32 %234, i32* %8
%235 = load i32, i32* %7
%236 = load i32, i32* %9
%237 = sub nsw i32 %236, %235
store i32 %237, i32* %9
%238 = load i32, i32* %8
%239 = load i32, i32* %9
%240 = sub nsw i32 %239, %238
store i32 %240, i32* %9
%241 = load i32, i32* %8
%242 = ashr i32 %241, 5
%243 = load i32, i32* %9
%244 = xor i32 %243, %242
store i32 %244, i32* %9
%245 = load i32, i32* %8
%246 = load i32, i32* %7
%247 = sub nsw i32 %246, %245
store i32 %247, i32* %7
%248 = load i32, i32* %9
%249 = load i32, i32* %7
%250 = sub nsw i32 %249, %248
store i32 %250, i32* %7
%251 = load i32, i32* %9
%252 = ashr i32 %251, 35
%253 = load i32, i32* %7
%254 = xor i32 %253, %252
store i32 %254, i32* %7
%255 = load i32, i32* %9
%256 = load i32, i32* %8
%257 = sub nsw i32 %256, %255
store i32 %257, i32* %8
%258 = load i32, i32* %7
%259 = load i32, i32* %8
%260 = sub nsw i32 %259, %258
store i32 %260, i32* %8
%261 = load i32, i32* %7
%262 = shl i32 %261, 49
%263 = load i32, i32* %8
%264 = xor i32 %263, %262
store i32 %264, i32* %8
%265 = load i32, i32* %7
%266 = load i32, i32* %9
%267 = sub nsw i32 %266, %265
store i32 %267, i32* %9
%268 = load i32, i32* %8
%269 = load i32, i32* %9
%270 = sub nsw i32 %269, %268
store i32 %270, i32* %9
%271 = load i32, i32* %8
%272 = ashr i32 %271, 11
%273 = load i32, i32* %9
%274 = xor i32 %273, %272
store i32 %274, i32* %9
%275 = load i32, i32* %8
%276 = load i32, i32* %7
%277 = sub nsw i32 %276, %275
store i32 %277, i32* %7
%278 = load i32, i32* %9
%279 = load i32, i32* %7
%280 = sub nsw i32 %279, %278
store i32 %280, i32* %7
%281 = load i32, i32* %9
%282 = ashr i32 %281, 12
%283 = load i32, i32* %7
%284 = xor i32 %283, %282
store i32 %284, i32* %7
%285 = load i32, i32* %9
%286 = load i32, i32* %8
%287 = sub nsw i32 %286, %285
store i32 %287, i32* %8
%288 = load i32, i32* %7
%289 = load i32, i32* %8
%290 = sub nsw i32 %289, %288
store i32 %290, i32* %8
%291 = load i32, i32* %7
%292 = shl i32 %291, 18
%293 = load i32, i32* %8
%294 = xor i32 %293, %292
store i32 %294, i32* %8
%295 = load i32, i32* %7
%296 = load i32, i32* %9
%297 = sub nsw i32 %296, %295
store i32 %297, i32* %9
%298 = load i32, i32* %8
%299 = load i32, i32* %9
%300 = sub nsw i32 %299, %298
store i32 %300, i32* %9
%301 = load i32, i32* %8
%302 = ashr i32 %301, 22
%303 = load i32, i32* %9
%304 = xor i32 %303, %302
store i32 %304, i32* %9
%305 = load i64*, i64** %4
%306 = getelementptr inbounds i64, i64* %305, i64 24
store i64* %306, i64** %4
%307 = load i32, i32* %10
%308 = sub nsw i32 %307, 24
store i32 %308, i32* %10
br label %13
309: ; preds = %13
%310 = load i32, i32* %5
%311 = load i32, i32* %9
%312 = add nsw i32 %311, %310
store i32 %312, i32* %9
%313 = load i32, i32* %10
switch i32 %313, label %496 [
i32 23, label %314
i32 22, label %322
i32 21, label %330
i32 20, label %338
i32 19, label %346
i32 18, label %354
i32 17, label %362
i32 16, label %370
i32 15, label %378
i32 14, label %386
i32 13, label %394
i32 12, label %402
i32 11, label %410
i32 10, label %418
i32 9, label %426
i32 8, label %433
i32 7, label %441
i32 6, label %449
i32 5, label %457
i32 4, label %465
i32 3, label %473
i32 2, label %481
i32 1, label %489
]
314: ; preds = %309
%315 = load i64*, i64** %4
%316 = getelementptr inbounds i64, i64* %315, i64 22
%317 = load i64, i64* %316
%318 = trunc i64 %317 to i32
%319 = shl i32 %318, 56
%320 = load i32, i32* %9
%321 = add nsw i32 %320, %319
store i32 %321, i32* %9
br label %322
322: ; preds = %309, %314
%323 = load i64*, i64** %4
%324 = getelementptr inbounds i64, i64* %323, i64 21
%325 = load i64, i64* %324
%326 = trunc i64 %325 to i32
%327 = shl i32 %326, 48
%328 = load i32, i32* %9
%329 = add nsw i32 %328, %327
store i32 %329, i32* %9
br label %330
330: ; preds = %309, %322
%331 = load i64*, i64** %4
%332 = getelementptr inbounds i64, i64* %331, i64 20
%333 = load i64, i64* %332
%334 = trunc i64 %333 to i32
%335 = shl i32 %334, 40
%336 = load i32, i32* %9
%337 = add nsw i32 %336, %335
store i32 %337, i32* %9
br label %338
338: ; preds = %309, %330
%339 = load i64*, i64** %4
%340 = getelementptr inbounds i64, i64* %339, i64 19
%341 = load i64, i64* %340
%342 = trunc i64 %341 to i32
%343 = shl i32 %342, 32
%344 = load i32, i32* %9
%345 = add nsw i32 %344, %343
store i32 %345, i32* %9
br label %346
346: ; preds = %309, %338
%347 = load i64*, i64** %4
%348 = getelementptr inbounds i64, i64* %347, i64 18
%349 = load i64, i64* %348
%350 = trunc i64 %349 to i32
%351 = shl i32 %350, 24
%352 = load i32, i32* %9
%353 = add nsw i32 %352, %351
store i32 %353, i32* %9
br label %354
354: ; preds = %309, %346
%355 = load i64*, i64** %4
%356 = getelementptr inbounds i64, i64* %355, i64 17
%357 = load i64, i64* %356
%358 = trunc i64 %357 to i32
%359 = shl i32 %358, 16
%360 = load i32, i32* %9
%361 = add nsw i32 %360, %359
store i32 %361, i32* %9
br label %362
362: ; preds = %309, %354
%363 = load i64*, i64** %4
%364 = getelementptr inbounds i64, i64* %363, i64 16
%365 = load i64, i64* %364
%366 = trunc i64 %365 to i32
%367 = shl i32 %366, 8
%368 = load i32, i32* %9
%369 = add nsw i32 %368, %367
store i32 %369, i32* %9
br label %370
370: ; preds = %309, %362
%371 = load i64*, i64** %4
%372 = getelementptr inbounds i64, i64* %371, i64 15
%373 = load i64, i64* %372
%374 = trunc i64 %373 to i32
%375 = shl i32 %374, 56
%376 = load i32, i32* %8
%377 = add nsw i32 %376, %375
store i32 %377, i32* %8
br label %378
378: ; preds = %309, %370
%379 = load i64*, i64** %4
%380 = getelementptr inbounds i64, i64* %379, i64 14
%381 = load i64, i64* %380
%382 = trunc i64 %381 to i32
%383 = shl i32 %382, 48
%384 = load i32, i32* %8
%385 = add nsw i32 %384, %383
store i32 %385, i32* %8
br label %386
386: ; preds = %309, %378
%387 = load i64*, i64** %4
%388 = getelementptr inbounds i64, i64* %387, i64 13
%389 = load i64, i64* %388
%390 = trunc i64 %389 to i32
%391 = shl i32 %390, 40
%392 = load i32, i32* %8
%393 = add nsw i32 %392, %391
store i32 %393, i32* %8
br label %394
394: ; preds = %309, %386
%395 = load i64*, i64** %4
%396 = getelementptr inbounds i64, i64* %395, i64 12
%397 = load i64, i64* %396
%398 = trunc i64 %397 to i32
%399 = shl i32 %398, 32
%400 = load i32, i32* %8
%401 = add nsw i32 %400, %399
store i32 %401, i32* %8
br label %402
402: ; preds = %309, %394
%403 = load i64*, i64** %4
%404 = getelementptr inbounds i64, i64* %403, i64 11
%405 = load i64, i64* %404
%406 = trunc i64 %405 to i32
%407 = shl i32 %406, 24
%408 = load i32, i32* %8
%409 = add nsw i32 %408, %407
store i32 %409, i32* %8
br label %410
410: ; preds = %309, %402
%411 = load i64*, i64** %4
%412 = getelementptr inbounds i64, i64* %411, i64 10
%413 = load i64, i64* %412
%414 = trunc i64 %413 to i32
%415 = shl i32 %414, 16
%416 = load i32, i32* %8
%417 = add nsw i32 %416, %415
store i32 %417, i32* %8
br label %418
418: ; preds = %309, %410
%419 = load i64*, i64** %4
%420 = getelementptr inbounds i64, i64* %419, i64 9
%421 = load i64, i64* %420
%422 = trunc i64 %421 to i32
%423 = shl i32 %422, 8
%424 = load i32, i32* %8
%425 = add nsw i32 %424, %423
store i32 %425, i32* %8
br label %426
426: ; preds = %309, %418
%427 = load i64*, i64** %4
%428 = getelementptr inbounds i64, i64* %427, i64 8
%429 = load i64, i64* %428
%430 = trunc i64 %429 to i32
%431 = load i32, i32* %8
%432 = add nsw i32 %431, %430
store i32 %432, i32* %8
br label %433
433: ; preds = %309, %426
%434 = load i64*, i64** %4
%435 = getelementptr inbounds i64, i64* %434, i64 7
%436 = load i64, i64* %435
%437 = trunc i64 %436 to i32
%438 = shl i32 %437, 56
%439 = load i32, i32* %7
%440 = add nsw i32 %439, %438
store i32 %440, i32* %7
br label %441
441: ; preds = %309, %433
%442 = load i64*, i64** %4
%443 = getelementptr inbounds i64, i64* %442, i64 6
%444 = load i64, i64* %443
%445 = trunc i64 %444 to i32
%446 = shl i32 %445, 48
%447 = load i32, i32* %7
%448 = add nsw i32 %447, %446
store i32 %448, i32* %7
br label %449
449: ; preds = %309, %441
%450 = load i64*, i64** %4
%451 = getelementptr inbounds i64, i64* %450, i64 5
%452 = load i64, i64* %451
%453 = trunc i64 %452 to i32
%454 = shl i32 %453, 40
%455 = load i32, i32* %7
%456 = add nsw i32 %455, %454
store i32 %456, i32* %7
br label %457
457: ; preds = %309, %449
%458 = load i64*, i64** %4
%459 = getelementptr inbounds i64, i64* %458, i64 4
%460 = load i64, i64* %459
%461 = trunc i64 %460 to i32
%462 = shl i32 %461, 32
%463 = load i32, i32* %7
%464 = add nsw i32 %463, %462
store i32 %464, i32* %7
br label %465
465: ; preds = %309, %457
%466 = load i64*, i64** %4
%467 = getelementptr inbounds i64, i64* %466, i64 3
%468 = load i64, i64* %467
%469 = trunc i64 %468 to i32
%470 = shl i32 %469, 24
%471 = load i32, i32* %7
%472 = add nsw i32 %471, %470
store i32 %472, i32* %7
br label %473
473: ; preds = %309, %465
%474 = load i64*, i64** %4
%475 = getelementptr inbounds i64, i64* %474, i64 2
%476 = load i64, i64* %475
%477 = trunc i64 %476 to i32
%478 = shl i32 %477, 16
%479 = load i32, i32* %7
%480 = add nsw i32 %479, %478
store i32 %480, i32* %7
br label %481
481: ; preds = %309, %473
%482 = load i64*, i64** %4
%483 = getelementptr inbounds i64, i64* %482, i64 1
%484 = load i64, i64* %483
%485 = trunc i64 %484 to i32
%486 = shl i32 %485, 8
%487 = load i32, i32* %7
%488 = add nsw i32 %487, %486
store i32 %488, i32* %7
br label %489
489: ; preds = %309, %481
%490 = load i64*, i64** %4
%491 = getelementptr inbounds i64, i64* %490, i64 0
%492 = load i64, i64* %491
%493 = trunc i64 %492 to i32
%494 = load i32, i32* %7
%495 = add nsw i32 %494, %493
store i32 %495, i32* %7
br label %496
496: ; preds = %489, %309
%497 = load i32, i32* %8
%498 = load i32, i32* %7
%499 = sub nsw i32 %498, %497
store i32 %499, i32* %7
%500 = load i32, i32* %9
%501 = load i32, i32* %7
%502 = sub nsw i32 %501, %500
store i32 %502, i32* %7
%503 = load i32, i32* %9
%504 = ashr i32 %503, 43
%505 = load i32, i32* %7
%506 = xor i32 %505, %504
store i32 %506, i32* %7
%507 = load i32, i32* %9
%508 = load i32, i32* %8
%509 = sub nsw i32 %508, %507
store i32 %509, i32* %8
%510 = load i32, i32* %7
%511 = load i32, i32* %8
%512 = sub nsw i32 %511, %510
store i32 %512, i32* %8
%513 = load i32, i32* %7
%514 = shl i32 %513, 9
%515 = load i32, i32* %8
%516 = xor i32 %515, %514
store i32 %516, i32* %8
%517 = load i32, i32* %7
%518 = load i32, i32* %9
%519 = sub nsw i32 %518, %517
store i32 %519, i32* %9
%520 = load i32, i32* %8
%521 = load i32, i32* %9
%522 = sub nsw i32 %521, %520
store i32 %522, i32* %9
%523 = load i32, i32* %8
%524 = ashr i32 %523, 8
%525 = load i32, i32* %9
%526 = xor i32 %525, %524
store i32 %526, i32* %9
%527 = load i32, i32* %8
%528 = load i32, i32* %7
%529 = sub nsw i32 %528, %527
store i32 %529, i32* %7
%530 = load i32, i32* %9
%531 = load i32, i32* %7
%532 = sub nsw i32 %531, %530
store i32 %532, i32* %7
%533 = load i32, i32* %9
%534 = ashr i32 %533, 38
%535 = load i32, i32* %7
%536 = xor i32 %535, %534
store i32 %536, i32* %7
%537 = load i32, i32* %9
%538 = load i32, i32* %8
%539 = sub nsw i32 %538, %537
store i32 %539, i32* %8
%540 = load i32, i32* %7
%541 = load i32, i32* %8
%542 = sub nsw i32 %541, %540
store i32 %542, i32* %8
%543 = load i32, i32* %7
%544 = shl i32 %543, 23
%545 = load i32, i32* %8
%546 = xor i32 %545, %544
store i32 %546, i32* %8
%547 = load i32, i32* %7
%548 = load i32, i32* %9
%549 = sub nsw i32 %548, %547
store i32 %549, i32* %9
%550 = load i32, i32* %8
%551 = load i32, i32* %9
%552 = sub nsw i32 %551, %550
store i32 %552, i32* %9
%553 = load i32, i32* %8
%554 = ashr i32 %553, 5
%555 = load i32, i32* %9
%556 = xor i32 %555, %554
store i32 %556, i32* %9
%557 = load i32, i32* %8
%558 = load i32, i32* %7
%559 = sub nsw i32 %558, %557
store i32 %559, i32* %7
%560 = load i32, i32* %9
%561 = load i32, i32* %7
%562 = sub nsw i32 %561, %560
store i32 %562, i32* %7
%563 = load i32, i32* %9
%564 = ashr i32 %563, 35
%565 = load i32, i32* %7
%566 = xor i32 %565, %564
store i32 %566, i32* %7
%567 = load i32, i32* %9
%568 = load i32, i32* %8
%569 = sub nsw i32 %568, %567
store i32 %569, i32* %8
%570 = load i32, i32* %7
%571 = load i32, i32* %8
%572 = sub nsw i32 %571, %570
store i32 %572, i32* %8
%573 = load i32, i32* %7
%574 = shl i32 %573, 49
%575 = load i32, i32* %8
%576 = xor i32 %575, %574
store i32 %576, i32* %8
%577 = load i32, i32* %7
%578 = load i32, i32* %9
%579 = sub nsw i32 %578, %577
store i32 %579, i32* %9
%580 = load i32, i32* %8
%581 = load i32, i32* %9
%582 = sub nsw i32 %581, %580
store i32 %582, i32* %9
%583 = load i32, i32* %8
%584 = ashr i32 %583, 11
%585 = load i32, i32* %9
%586 = xor i32 %585, %584
store i32 %586, i32* %9
%587 = load i32, i32* %8
%588 = load i32, i32* %7
%589 = sub nsw i32 %588, %587
store i32 %589, i32* %7
%590 = load i32, i32* %9
%591 = load i32, i32* %7
%592 = sub nsw i32 %591, %590
store i32 %592, i32* %7
%593 = load i32, i32* %9
%594 = ashr i32 %593, 12
%595 = load i32, i32* %7
%596 = xor i32 %595, %594
store i32 %596, i32* %7
%597 = load i32, i32* %9
%598 = load i32, i32* %8
%599 = sub nsw i32 %598, %597
store i32 %599, i32* %8
%600 = load i32, i32* %7
%601 = load i32, i32* %8
%602 = sub nsw i32 %601, %600
store i32 %602, i32* %8
%603 = load i32, i32* %7
%604 = shl i32 %603, 18
%605 = load i32, i32* %8
%606 = xor i32 %605, %604
store i32 %606, i32* %8
%607 = load i32, i32* %7
%608 = load i32, i32* %9
%609 = sub nsw i32 %608, %607
store i32 %609, i32* %9
%610 = load i32, i32* %8
%611 = load i32, i32* %9
%612 = sub nsw i32 %611, %610
store i32 %612, i32* %9
%613 = load i32, i32* %8
%614 = ashr i32 %613, 22
%615 = load i32, i32* %9
%616 = xor i32 %615, %614
store i32 %616, i32* %9
%617 = load i32, i32* %9
ret i32 %617
}

LLVM IR (-O2):
define i32 @c_jhash64(i64* nocapture readnone %0, i32 %1, i32 %2) {
ret i32 poison
}