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

```asm
<tds7_crypt_pass>:
  endbr64
  mov    %rdi,%rcx
  mov    %rdx,%r8
  test   %rsi,%rsi
  je     L89
  lea    0x1(%rdi),%rdx
  mov    %r8,%rax
  sub    %rdx,%rax
  cmp    $0xe,%rax
  jbe    L132
  lea    -0x1(%rsi),%rax
  cmp    $0xe,%rax
  jbe    L132
  mov    %rsi,%rdx
  movdqa D10(%rip),%xmm3
  movdqa D14(%rip),%xmm2
  xor    %eax,%eax
  and    $0xfffffffffffffff0,%rdx
  xchg   %ax,%ax
L119:
  movdqu (%rcx,%rax,1),%xmm1
  movdqa %xmm1,%xmm0
  paddb  %xmm1,%xmm0
  psrlw  $0x4,%xmm1
  paddb  %xmm0,%xmm0
  pand   %xmm3,%xmm1
  paddb  %xmm0,%xmm0
  paddb  %xmm0,%xmm0
  por    %xmm1,%xmm0
  pxor   %xmm2,%xmm0
  movups %xmm0,(%r8,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L119
  mov    %rsi,%rax
  and    $0xfffffffffffffff0,%rax
  test   $0xf,%sil
  je     L89
  movzbl (%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,(%r8,%rax,1)
  lea    0x1(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x1(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x1(%r8,%rax,1)
  lea    0x2(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x2(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x2(%r8,%rax,1)
  lea    0x3(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x3(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x3(%r8,%rax,1)
  lea    0x4(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x4(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x4(%r8,%rax,1)
  lea    0x5(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x5(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x5(%r8,%rax,1)
  lea    0x6(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x6(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x6(%r8,%rax,1)
  lea    0x7(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x7(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x7(%r8,%rax,1)
  lea    0x8(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x8(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x8(%r8,%rax,1)
  lea    0x9(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0x9(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0x9(%r8,%rax,1)
  lea    0xa(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0xa(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0xa(%r8,%rax,1)
  lea    0xb(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0xb(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0xb(%r8,%rax,1)
  lea    0xc(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0xc(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0xc(%r8,%rax,1)
  lea    0xd(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0xd(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0xd(%r8,%rax,1)
  lea    0xe(%rax),%rdx
  cmp    %rdx,%rsi
  jbe    L89
  movzbl 0xe(%rcx,%rax,1),%edx
  rol    $0x4,%dl
  xor    $0xffffffa5,%edx
  mov    %dl,0xe(%r8,%rax,1)
L89:
  mov    %r8,%rax
  ret
  nopl   (%rax)
L132:
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L7:
  movzbl (%rcx,%rdx,1),%eax
  rol    $0x4,%al
  xor    $0xffffffa5,%eax
  mov    %al,(%r8,%rdx,1)
  add    $0x1,%rdx
  cmp    %rdx,%rsi
  jne    L7
  mov    %r8,%rax
  ret
```

tool_calls: name: read_data
arguments: tag: D10
type_guessed: byte[16]
name: read_data
arguments: tag: D14
type_guessed: byte[16]

tool: {"D10": [0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f]}

tool: {"D14": [0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5]}

assistant: ```c
unsigned char *tds7_crypt_pass(const unsigned char *clear_pass, size_t len, unsigned char *crypt_pass) {
  size_t i;
  for (i = 0; i < len; i++)
    crypt_pass[i] = ((clear_pass[i] << 4) | (clear_pass[i] >> 4)) ^ 0xA5;
  return crypt_pass;
}
```