user: 请从给定的汇编指令推导出C源代码:

```asm
<cookey>:
  endbr64
  sub    $0x98,%rsp
  movdqu (%rdi),%xmm2
  movdqu 0x10(%rdi),%xmm3
  movdqa D30(%rip),%xmm6
  movdqa D5(%rip),%xmm7
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  movdqa %xmm2,%xmm5
  movdqa D2(%rip),%xmm4
  shufps $0xdd,%xmm3,%xmm2
  shufps $0x88,%xmm3,%xmm5
  movdqa %xmm5,%xmm0
  movdqa %xmm5,%xmm1
  movdqa D34(%rip),%xmm3
  pslld  $0x6,%xmm0
  pslld  $0xa,%xmm1
  movdqa %xmm2,%xmm8
  pand   %xmm7,%xmm1
  psrld  $0x6,%xmm8
  pand   %xmm6,%xmm0
  por    %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  pand   %xmm3,%xmm8
  psrld  $0xa,%xmm1
  pand   %xmm4,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrld  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movdqu 0x20(%rdi),%xmm2
  movaps %xmm0,0x10(%rsp)
  movdqu 0x30(%rdi),%xmm0
  movdqa %xmm2,%xmm5
  movaps %xmm1,(%rsp)
  shufps $0xdd,%xmm0,%xmm2
  shufps $0x88,%xmm0,%xmm5
  movdqa %xmm5,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0x6,%xmm0
  pslld  $0xa,%xmm1
  movdqa %xmm2,%xmm8
  pand   %xmm7,%xmm1
  psrld  $0x6,%xmm8
  pand   %xmm6,%xmm0
  por    %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  pand   %xmm3,%xmm8
  psrld  $0xa,%xmm1
  pand   %xmm4,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrld  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movdqu 0x40(%rdi),%xmm2
  movaps %xmm0,0x30(%rsp)
  movdqu 0x50(%rdi),%xmm0
  movdqa %xmm2,%xmm5
  movaps %xmm1,0x20(%rsp)
  shufps $0x88,%xmm0,%xmm5
  shufps $0xdd,%xmm0,%xmm2
  movdqa %xmm2,%xmm0
  movdqa %xmm2,%xmm1
  psrld  $0xa,%xmm0
  psrld  $0x6,%xmm1
  movdqa %xmm5,%xmm8
  pand   %xmm4,%xmm0
  pslld  $0xa,%xmm8
  pand   %xmm3,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pand   %xmm7,%xmm8
  pslld  $0x6,%xmm1
  pand   %xmm6,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrld  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movaps %xmm1,0x40(%rsp)
  movdqu 0x60(%rdi),%xmm1
  movaps %xmm0,0x50(%rsp)
  movdqu 0x70(%rdi),%xmm0
  mov    %rsp,%rdi
  movdqa %xmm1,%xmm5
  shufps $0x88,%xmm0,%xmm5
  shufps $0xdd,%xmm0,%xmm1
  movdqa %xmm1,%xmm0
  movdqa %xmm1,%xmm2
  psrld  $0x6,%xmm0
  psrld  $0xa,%xmm2
  movdqa %xmm5,%xmm8
  pand   %xmm4,%xmm2
  pslld  $0x6,%xmm8
  pand   %xmm3,%xmm0
  por    %xmm2,%xmm0
  movdqa %xmm5,%xmm2
  pand   %xmm6,%xmm8
  pslld  $0xa,%xmm2
  pand   %xmm7,%xmm2
  por    %xmm8,%xmm2
  por    %xmm2,%xmm0
  movdqa %xmm5,%xmm2
  pslld  $0x10,%xmm2
  pslld  $0xc,%xmm5
  pand   %xmm6,%xmm5
  pand   %xmm7,%xmm2
  por    %xmm5,%xmm2
  movdqa %xmm1,%xmm5
  pand   %xmm3,%xmm1
  psrld  $0x4,%xmm5
  pand   %xmm5,%xmm4
  por    %xmm4,%xmm1
  por    %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  punpckldq %xmm1,%xmm2
  punpckhdq %xmm1,%xmm0
  movaps %xmm2,0x60(%rsp)
  movaps %xmm0,0x70(%rsp)
  call   <usekey@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0x98,%rsp
  ret
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D30
type: byte[16]
name: extract_symbolic_data
arguments: tag: D5
type: byte[16]
name: extract_symbolic_data
arguments: tag: D2
type: byte[16]
name: extract_symbolic_data
arguments: tag: D34
type: byte[16]

tool: {"D30": [0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f]}

tool: {"D5": [0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00]}

tool: {"D2": [0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00]}

tool: {"D34": [0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00]}

assistant: ```c
void cookey(raw1) register unsigned int *raw1;
{
  register unsigned int *cook, *raw0;
  unsigned int dough[32];
  register int i;
  cook = dough;
  for (i = 0; i < 16; i++, raw1++) {
    raw0 = raw1++;
    *cook = (*raw0 & 0x00fc0000) << 6;
    *cook |= (*raw0 & 0x00000fc0) << 10;
    *cook |= (*raw1 & 0x00fc0000) >> 10;
    *cook++ |= (*raw1 & 0x00000fc0) >> 6;
    *cook = (*raw0 & 0x0003f000) << 12;
    *cook |= (*raw0 & 0x0000003f) << 16;
    *cook |= (*raw1 & 0x0003f000) >> 4;
    *cook++ |= (*raw1 & 0x0000003f);
  }
  usekey(dough);
  return;
}
```