user: Converte this assembly snippet into its equivalent C code:

```asm
<crush_hash32_rjenkins1_2>:
  endbr64
  mov    %edi,%eax
  sub    %esi,%edi
  xor    %esi,%eax
  xor    $0x4e67c6a7,%eax
  sub    %eax,%edi
  sub    %eax,%esi
  mov    %edi,%edx
  mov    %eax,%edi
  sar    $0xd,%edi
  xor    %edx,%edi
  sub    %edi,%esi
  sub    %edi,%eax
  mov    %esi,%edx
  mov    %edi,%esi
  shl    $0x8,%esi
  xor    %edx,%esi
  mov    %esi,%edx
  sub    %esi,%eax
  sub    %esi,%edi
  sar    $0xd,%edx
  xor    %eax,%edx
  mov    %edx,%eax
  sub    %edx,%edi
  sub    %edx,%esi
  sar    $0xc,%eax
  xor    %edi,%eax
  mov    $0x38740,%edi
  mov    %eax,%ecx
  sub    %eax,%esi
  sub    %eax,%edx
  shl    $0x10,%ecx
  xor    %esi,%ecx
  mov    %edx,%esi
  mov    %ecx,%edx
  sub    %ecx,%esi
  sub    %ecx,%eax
  sar    $0x5,%edx
  xor    %esi,%edx
  sub    %edx,%eax
  sub    %edx,%ecx
  mov    %eax,%esi
  mov    %edx,%eax
  sar    $0x3,%eax
  xor    %esi,%eax
  mov    %eax,%esi
  sub    %eax,%ecx
  shl    $0xa,%esi
  sub    %eax,%edx
  sub    %eax,%edi
  xor    %ecx,%esi
  mov    %edx,%ecx
  mov    %esi,%edx
  sub    %esi,%ecx
  sar    $0xf,%edx
  xor    %ecx,%edx
  mov    %edx,%ecx
  sub    %edx,%edi
  sub    %edx,%eax
  sar    $0xd,%ecx
  xor    %edi,%ecx
  sub    %ecx,%eax
  sub    %ecx,%edx
  mov    %eax,%edi
  mov    %ecx,%eax
  shl    $0x8,%eax
  xor    %edi,%eax
  mov    %edx,%edi
  mov    %eax,%edx
  sub    %eax,%edi
  sub    %eax,%ecx
  sar    $0xd,%edx
  xor    %edi,%edx
  mov    %ecx,%edi
  mov    %edx,%ecx
  sub    %edx,%edi
  sub    %edx,%eax
  sar    $0xc,%ecx
  xor    %edi,%ecx
  sub    %ecx,%eax
  sub    %ecx,%edx
  mov    %eax,%edi
  mov    %ecx,%eax
  shl    $0x10,%eax
  xor    %edi,%eax
  mov    %edx,%edi
  mov    %eax,%edx
  sub    %eax,%edi
  sub    %eax,%ecx
  sar    $0x5,%edx
  xor    %edi,%edx
  mov    %edx,%edi
  sub    %edx,%ecx
  sar    $0x3,%edi
  sub    %edx,%eax
  sub    $0x4d0,%esi
  xor    %ecx,%edi
  sub    %edi,%eax
  sub    %edi,%edx
  mov    %eax,%ecx
  mov    %edi,%eax
  shl    $0xa,%eax
  xor    %ecx,%eax
  sub    %eax,%edx
  sar    $0xf,%eax
  xor    %edx,%eax
  mov    $0x4d0,%edx
  mov    %eax,%ecx
  sub    %eax,%esi
  sub    %eax,%edx
  sar    $0xd,%ecx
  xor    %esi,%ecx
  mov    %ecx,%esi
  sub    %ecx,%edx
  sub    %ecx,%eax
  shl    $0x8,%esi
  xor    %edx,%esi
  mov    %esi,%edx
  sub    %esi,%eax
  sub    %esi,%ecx
  sar    $0xd,%edx
  xor    %eax,%edx
  mov    %ecx,%eax
  mov    %edx,%ecx
  sub    %edx,%eax
  sub    %edx,%esi
  sar    $0xc,%ecx
  xor    %eax,%ecx
  mov    %ecx,%eax
  sub    %ecx,%esi
  sub    %ecx,%edx
  shl    $0x10,%eax
  xor    %esi,%eax
  mov    %edx,%esi
  mov    %eax,%edx
  sub    %eax,%esi
  sar    $0x5,%edx
  sub    %eax,%ecx
  xor    %esi,%edx
  mov    %edx,%esi
  sub    %edx,%ecx
  sub    %edx,%eax
  sar    $0x3,%esi
  xor    %ecx,%esi
  mov    %esi,%ecx
  sub    %esi,%eax
  sub    %esi,%edx
  shl    $0xa,%ecx
  xor    %ecx,%eax
  sub    %eax,%edx
  sar    $0xf,%eax
  xor    %edx,%eax
  ret
```

assistant: ```c
__u32 crush_hash32_rjenkins1_2(__u32 a, __u32 b) {
  __u32 hash = 1315423911 ^ a ^ b;
  __u32 x = 231232;
  __u32 y = 1232;
  do {
    a = a - b;
    a = a - hash;
    a = a ^ (hash >> 13);
    b = b - hash;
    b = b - a;
    b = b ^ (a << 8);
    hash = hash - a;
    hash = hash - b;
    hash = hash ^ (b >> 13);
    a = a - b;
    a = a - hash;
    a = a ^ (hash >> 12);
    b = b - hash;
    b = b - a;
    b = b ^ (a << 16);
    hash = hash - a;
    hash = hash - b;
    hash = hash ^ (b >> 5);
    a = a - b;
    a = a - hash;
    a = a ^ (hash >> 3);
    b = b - hash;
    b = b - a;
    b = b ^ (a << 10);
    hash = hash - a;
    hash = hash - b;
    hash = hash ^ (b >> 15);
  } while (0);
  do {
    x = x - a;
    x = x - hash;
    x = x ^ (hash >> 13);
    a = a - hash;
    a = a - x;
    a = a ^ (x << 8);
    hash = hash - x;
    hash = hash - a;
    hash = hash ^ (a >> 13);
    x = x - a;
    x = x - hash;
    x = x ^ (hash >> 12);
    a = a - hash;
    a = a - x;
    a = a ^ (x << 16);
    hash = hash - x;
    hash = hash - a;
    hash = hash ^ (a >> 5);
    x = x - a;
    x = x - hash;
    x = x ^ (hash >> 3);
    a = a - hash;
    a = a - x;
    a = a ^ (x << 10);
    hash = hash - x;
    hash = hash - a;
    hash = hash ^ (a >> 15);
  } while (0);
  do {
    b = b - y;
    b = b - hash;
    b = b ^ (hash >> 13);
    y = y - hash;
    y = y - b;
    y = y ^ (b << 8);
    hash = hash - b;
    hash = hash - y;
    hash = hash ^ (y >> 13);
    b = b - y;
    b = b - hash;
    b = b ^ (hash >> 12);
    y = y - hash;
    y = y - b;
    y = y ^ (b << 16);
    hash = hash - b;
    hash = hash - y;
    hash = hash ^ (y >> 5);
    b = b - y;
    b = b - hash;
    b = b ^ (hash >> 3);
    y = y - hash;
    y = y - b;
    y = y ^ (b << 10);
    hash = hash - b;
    hash = hash - y;
    hash = hash ^ (y >> 15);
  } while (0);
  return hash;
}
```