user: What is the c source code of the assembly code below:

```asm
<iquant1_intra>:
  endbr64
  mov    %rcx,%r10
  movswl (%rdi),%eax
  mov    $0x3,%ecx
  mov    %rsi,%r9
  sub    %edx,%ecx
  lea    0x1(%r10),%rdx
  shl    %cl,%eax
  lea    0x80(%rsi),%rcx
  cmp    %rdx,%rcx
  mov    %ax,(%rsi)
  lea    0x40(%r10),%rcx
  lea    0x2(%rsi),%rax
  setbe  %dl
  cmp    %rcx,%rax
  setae  %cl
  or     %cl,%dl
  je     L16
  lea    0x4(%rdi),%rdx
  sub    %rdx,%rax
  cmp    $0x1c,%rax
  jbe    L16
  movd   %r8d,%xmm7
  sub    $0x50,%rsp
  pxor   %xmm15,%xmm15
  xor    %eax,%eax
  movdqa D265(%rip),%xmm14
  pshufd $0x0,%xmm7,%xmm6
  movdqa %xmm6,%xmm7
  movaps %xmm6,0x28(%rsp)
  psrlq  $0x20,%xmm7
  movaps %xmm7,0x38(%rsp)
L90:
  movdqu 0x1(%r10,%rax,1),%xmm2
  movdqu 0x2(%rdi,%rax,2),%xmm0
  pxor   %xmm7,%xmm7
  movdqa %xmm15,%xmm8
  movdqu 0x2(%rdi,%rax,2),%xmm3
  movdqa 0x38(%rsp),%xmm6
  movdqa %xmm14,%xmm10
  movdqa %xmm2,%xmm1
  punpckhbw %xmm7,%xmm2
  movdqu 0x12(%rdi,%rax,2),%xmm5
  movdqa D247(%rip),%xmm12
  movdqa D247(%rip),%xmm11
  punpcklbw %xmm7,%xmm1
  movdqa 0x28(%rsp),%xmm7
  pmullw %xmm1,%xmm0
  pmulhw %xmm1,%xmm3
  movdqa %xmm7,%xmm4
  pmulhw %xmm2,%xmm5
  movdqa %xmm0,%xmm1
  punpckhwd %xmm3,%xmm0
  punpcklwd %xmm3,%xmm1
  movdqa %xmm7,%xmm3
  pmuludq %xmm0,%xmm3
  psrlq  $0x20,%xmm0
  pmuludq %xmm6,%xmm0
  pmuludq %xmm1,%xmm4
  psrlq  $0x20,%xmm1
  pmuludq %xmm6,%xmm1
  pshufd $0x8,%xmm3,%xmm3
  pshufd $0x8,%xmm0,%xmm0
  pshufd $0x8,%xmm4,%xmm4
  punpckldq %xmm0,%xmm3
  movdqu 0x12(%rdi,%rax,2),%xmm0
  pshufd $0x8,%xmm1,%xmm1
  pmullw %xmm2,%xmm0
  punpckldq %xmm1,%xmm4
  movdqa %xmm7,%xmm2
  pcmpgtd %xmm4,%xmm8
  pand   D96(%rip),%xmm8
  paddd  %xmm4,%xmm8
  psrad  $0x4,%xmm8
  movdqa %xmm0,%xmm1
  punpckhwd %xmm5,%xmm0
  movdqa %xmm8,%xmm9
  punpcklwd %xmm5,%xmm1
  movdqa %xmm15,%xmm5
  pand   %xmm8,%xmm12
  pmuludq %xmm1,%xmm2
  psrlq  $0x20,%xmm1
  pmuludq %xmm6,%xmm1
  pcmpeqd %xmm15,%xmm12
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm2
  movdqa %xmm7,%xmm1
  movdqa %xmm15,%xmm7
  pmuludq %xmm0,%xmm1
  psrlq  $0x20,%xmm0
  movaps %xmm2,0x8(%rsp)
  pmuludq %xmm6,%xmm0
  pcmpgtd %xmm3,%xmm7
  movdqa %xmm15,%xmm6
  pcmpgtd %xmm2,%xmm6
  pand   D96(%rip),%xmm6
  pand   D96(%rip),%xmm7
  paddd  %xmm2,%xmm6
  movdqa %xmm8,%xmm2
  paddd  %xmm3,%xmm7
  psrad  $0x4,%xmm6
  psrad  $0x4,%xmm7
  pshufd $0x8,%xmm1,%xmm1
  pshufd $0x8,%xmm0,%xmm0
  movaps %xmm6,-0x78(%rsp)
  pand   %xmm7,%xmm11
  movdqa -0x78(%rsp),%xmm13
  pcmpgtd D184(%rip),%xmm2
  pcmpeqd %xmm15,%xmm11
  punpckldq %xmm0,%xmm1
  movdqa D247(%rip),%xmm0
  pcmpgtd %xmm1,%xmm5
  pand   D96(%rip),%xmm5
  pand   %xmm6,%xmm0
  movdqa D247(%rip),%xmm6
  movaps %xmm0,-0x68(%rsp)
  movdqa %xmm2,%xmm0
  pand   %xmm2,%xmm9
  pandn  D184(%rip),%xmm0
  movdqa %xmm7,%xmm2
  paddd  %xmm1,%xmm5
  por    %xmm9,%xmm0
  psrad  $0x4,%xmm5
  movdqa %xmm0,%xmm9
  pand   %xmm5,%xmm6
  movaps %xmm5,-0x58(%rsp)
  pcmpgtd %xmm14,%xmm9
  movaps %xmm6,-0x48(%rsp)
  pand   %xmm9,%xmm10
  pandn  %xmm0,%xmm9
  por    %xmm10,%xmm9
  movdqa %xmm7,%xmm10
  pcmpgtd D184(%rip),%xmm10
  pand   %xmm10,%xmm2
  pandn  D184(%rip),%xmm10
  por    %xmm2,%xmm10
  movdqa %xmm10,%xmm2
  pcmpgtd %xmm14,%xmm2
  movdqa %xmm2,%xmm0
  movdqa %xmm14,%xmm2
  pand   %xmm0,%xmm2
  pandn  %xmm10,%xmm0
  movdqa %xmm9,%xmm10
  por    %xmm2,%xmm0
  movdqa %xmm9,%xmm2
  movdqa %xmm13,%xmm9
  punpckhwd %xmm0,%xmm10
  punpcklwd %xmm0,%xmm2
  movdqa %xmm13,%xmm0
  pcmpgtd D184(%rip),%xmm0
  movdqa %xmm2,%xmm6
  punpckhwd %xmm10,%xmm2
  punpcklwd %xmm10,%xmm6
  movdqa %xmm14,%xmm10
  movdqa %xmm11,%xmm13
  movdqa -0x48(%rsp),%xmm11
  punpcklwd %xmm2,%xmm6
  pand   %xmm0,%xmm9
  pandn  D184(%rip),%xmm0
  pcmpeqd %xmm15,%xmm11
  por    %xmm9,%xmm0
  movdqa %xmm0,%xmm2
  pcmpgtd %xmm14,%xmm2
  movdqa %xmm2,%xmm9
  pand   %xmm2,%xmm10
  pandn  %xmm0,%xmm9
  movdqa %xmm5,%xmm0
  por    %xmm10,%xmm9
  movdqa %xmm5,%xmm10
  pcmpgtd D184(%rip),%xmm10
  pand   %xmm10,%xmm0
  pandn  D184(%rip),%xmm10
  por    %xmm0,%xmm10
  movdqa %xmm10,%xmm2
  pcmpgtd %xmm14,%xmm2
  movdqa %xmm2,%xmm0
  movdqa %xmm14,%xmm2
  pand   %xmm0,%xmm2
  pandn  %xmm10,%xmm0
  movdqa %xmm9,%xmm10
  por    %xmm2,%xmm0
  movdqa %xmm9,%xmm2
  punpcklwd %xmm0,%xmm2
  punpckhwd %xmm0,%xmm10
  movdqa -0x68(%rsp),%xmm0
  movaps %xmm11,-0x68(%rsp)
  movdqa %xmm2,%xmm5
  punpckhwd %xmm10,%xmm2
  punpcklwd %xmm10,%xmm5
  pcmpeqd %xmm15,%xmm0
  movdqa %xmm12,%xmm10
  movdqa %xmm8,%xmm12
  punpcklwd %xmm2,%xmm5
  movaps %xmm10,-0x18(%rsp)
  pcmpeqd %xmm15,%xmm12
  movaps %xmm13,-0x8(%rsp)
  pcmpgtd D96(%rip),%xmm4
  pcmpgtd D96(%rip),%xmm3
  pcmpgtd D96(%rip),%xmm1
  movdqa %xmm12,%xmm2
  pand   -0x18(%rsp),%xmm12
  pcmpeqd %xmm15,%xmm2
  movdqa %xmm2,%xmm9
  movdqa %xmm7,%xmm2
  pcmpeqd %xmm15,%xmm2
  pand   %xmm10,%xmm9
  movdqa -0x78(%rsp),%xmm10
  movaps %xmm9,-0x48(%rsp)
  pand   -0x48(%rsp),%xmm4
  pcmpeqd %xmm15,%xmm10
  movdqa %xmm2,%xmm11
  pcmpeqd %xmm15,%xmm2
  pand   -0x8(%rsp),%xmm11
  movdqa %xmm2,%xmm9
  movdqa %xmm10,%xmm2
  pand   %xmm0,%xmm10
  pcmpeqd %xmm15,%xmm2
  pand   %xmm13,%xmm9
  movdqa -0x68(%rsp),%xmm13
  movaps %xmm9,-0x38(%rsp)
  pand   -0x38(%rsp),%xmm3
  movdqa %xmm2,%xmm9
  pand   %xmm0,%xmm9
  pcmpeqd %xmm15,%xmm0
  movaps %xmm9,-0x28(%rsp)
  movdqa -0x58(%rsp),%xmm9
  pcmpeqd %xmm15,%xmm9
  movdqa %xmm9,%xmm2
  pcmpeqd %xmm15,%xmm2
  pand   %xmm2,%xmm13
  movdqa -0x68(%rsp),%xmm2
  pand   %xmm13,%xmm1
  pand   %xmm9,%xmm2
  movdqa -0x28(%rsp),%xmm9
  movaps %xmm2,0x18(%rsp)
  movdqa 0x8(%rsp),%xmm2
  pcmpgtd D96(%rip),%xmm2
  pand   %xmm2,%xmm9
  movdqa %xmm4,%xmm2
  pandn  D247(%rip),%xmm4
  por    %xmm2,%xmm4
  movdqa %xmm3,%xmm2
  pandn  D247(%rip),%xmm2
  paddd  %xmm8,%xmm4
  movdqa %xmm4,%xmm8
  por    %xmm2,%xmm3
  movdqa %xmm9,%xmm2
  pcmpgtd D184(%rip),%xmm8
  pandn  D247(%rip),%xmm2
  paddd  %xmm7,%xmm3
  por    %xmm9,%xmm2
  movdqa %xmm1,%xmm9
  paddd  -0x78(%rsp),%xmm2
  pandn  D247(%rip),%xmm9
  pand   %xmm8,%xmm4
  pandn  D184(%rip),%xmm8
  por    %xmm4,%xmm8
  por    %xmm9,%xmm1
  movdqa %xmm14,%xmm9
  movdqa %xmm8,%xmm4
  paddd  -0x58(%rsp),%xmm1
  pcmpgtd %xmm14,%xmm4
  pand   %xmm4,%xmm9
  pandn  %xmm8,%xmm4
  movdqa %xmm3,%xmm8
  pcmpgtd D184(%rip),%xmm8
  por    %xmm9,%xmm4
  movdqa %xmm8,%xmm7
  pandn  D184(%rip),%xmm7
  pand   %xmm8,%xmm3
  movdqa %xmm14,%xmm8
  por    %xmm3,%xmm7
  movdqa %xmm7,%xmm3
  pcmpgtd %xmm14,%xmm3
  pand   %xmm3,%xmm8
  pandn  %xmm7,%xmm3
  por    %xmm8,%xmm3
  movdqa %xmm4,%xmm8
  punpckhwd %xmm3,%xmm8
  movdqa %xmm8,%xmm7
  movdqa %xmm4,%xmm8
  punpcklwd %xmm3,%xmm8
  movdqa %xmm8,%xmm3
  punpcklwd %xmm7,%xmm8
  punpckhwd %xmm7,%xmm3
  punpcklwd %xmm3,%xmm8
  movdqa %xmm2,%xmm3
  pcmpgtd D184(%rip),%xmm3
  pand   %xmm3,%xmm2
  pandn  D184(%rip),%xmm3
  por    %xmm2,%xmm3
  movdqa %xmm3,%xmm4
  pcmpgtd %xmm14,%xmm4
  movdqa %xmm4,%xmm2
  movdqa %xmm14,%xmm4
  pand   %xmm2,%xmm4
  pandn  %xmm3,%xmm2
  movdqa %xmm1,%xmm3
  pcmpgtd D184(%rip),%xmm3
  por    %xmm4,%xmm2
  movdqa %xmm14,%xmm4
  pand   %xmm3,%xmm1
  pandn  D184(%rip),%xmm3
  movdqa -0x38(%rsp),%xmm7
  por    %xmm1,%xmm3
  movdqa %xmm3,%xmm1
  pcmpgtd %xmm14,%xmm1
  pand   %xmm1,%xmm4
  pandn  %xmm3,%xmm1
  movdqa %xmm2,%xmm3
  por    %xmm4,%xmm1
  movdqa -0x8(%rsp),%xmm4
  punpcklwd %xmm1,%xmm2
  punpckhwd %xmm1,%xmm3
  movdqa %xmm2,%xmm1
  pcmpeqd %xmm15,%xmm4
  punpcklwd %xmm3,%xmm2
  punpckhwd %xmm3,%xmm1
  movdqa -0x68(%rsp),%xmm3
  punpcklwd %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  pcmpeqd %xmm15,%xmm3
  punpcklwd %xmm3,%xmm0
  punpckhwd %xmm3,%xmm1
  movdqa %xmm0,%xmm3
  punpcklwd %xmm1,%xmm0
  punpckhwd %xmm1,%xmm3
  movdqa -0x18(%rsp),%xmm1
  punpcklwd %xmm3,%xmm0
  pcmpeqd %xmm15,%xmm1
  pand   %xmm5,%xmm0
  movdqa %xmm1,%xmm3
  punpcklwd %xmm4,%xmm1
  punpckhwd %xmm4,%xmm3
  movdqa %xmm1,%xmm4
  punpckhwd %xmm3,%xmm4
  punpcklwd %xmm3,%xmm1
  movdqa %xmm10,%xmm3
  punpcklwd %xmm4,%xmm1
  movdqa %xmm10,%xmm4
  pand   %xmm6,%xmm1
  movdqa 0x18(%rsp),%xmm6
  punpcklwd %xmm6,%xmm4
  punpckhwd %xmm6,%xmm3
  movdqa %xmm4,%xmm5
  punpcklwd %xmm3,%xmm4
  punpckhwd %xmm3,%xmm5
  movdqa %xmm12,%xmm3
  punpcklwd %xmm5,%xmm4
  punpcklwd %xmm11,%xmm3
  movdqa %xmm12,%xmm5
  punpckhwd %xmm11,%xmm5
  movdqa %xmm3,%xmm6
  pandn  %xmm0,%xmm4
  punpckhwd %xmm5,%xmm6
  punpcklwd %xmm5,%xmm3
  movdqa -0x28(%rsp),%xmm5
  punpcklwd %xmm6,%xmm3
  movdqa -0x48(%rsp),%xmm6
  pandn  %xmm1,%xmm3
  movdqa %xmm5,%xmm1
  movdqa %xmm5,%xmm0
  punpcklwd %xmm13,%xmm1
  punpckhwd %xmm13,%xmm0
  movdqa %xmm1,%xmm5
  punpcklwd %xmm0,%xmm1
  punpckhwd %xmm0,%xmm5
  movdqa %xmm6,%xmm0
  punpcklwd %xmm5,%xmm1
  punpcklwd %xmm7,%xmm0
  movdqa %xmm6,%xmm5
  punpckhwd %xmm7,%xmm5
  movdqa %xmm0,%xmm6
  pand   %xmm1,%xmm2
  punpckhwd %xmm5,%xmm6
  punpcklwd %xmm5,%xmm0
  pandn  %xmm4,%xmm1
  punpcklwd %xmm6,%xmm0
  por    %xmm1,%xmm2
  pand   %xmm0,%xmm8
  pandn  %xmm3,%xmm0
  movups %xmm2,0x12(%r9,%rax,2)
  por    %xmm8,%xmm0
  movups %xmm0,0x2(%r9,%rax,2)
  add    $0x10,%rax
  cmp    $0x30,%rax
  jne    L90
  mov    $0x31,%ecx
  nopl   0x0(%rax,%rax,1)
L42:
  movzbl (%r10,%rcx,1),%edx
  movswl (%rdi,%rcx,2),%eax
  imul   %edx,%eax
  imul   %r8d,%eax
  test   %eax,%eax
  lea    0xf(%rax),%esi
  cmovns %eax,%esi
  mov    %esi,%edx
  sar    $0x4,%edx
  and    $0x10,%esi
  jne    L85
  test   %edx,%edx
  je     L69
  cmp    $0xf,%eax
  setle  %al
  movzbl %al,%eax
  lea    -0x1(%rdx,%rax,2),%edx
L85:
  mov    $0xfffff800,%eax
  cmp    %eax,%edx
  cmovl  %eax,%edx
  mov    $0x7ff,%eax
  cmp    %eax,%edx
  cmovg  %eax,%edx
L69:
  mov    %dx,(%r9,%rcx,2)
  add    $0x1,%rcx
  cmp    $0x40,%rcx
  jne    L42
  add    $0x50,%rsp
  ret
L16:
  mov    $0x1,%edx
  jmp    L11
  nopw   0x0(%rax,%rax,1)
L94:
  xor    %ecx,%ecx
  test   %esi,%esi
  je     L109
  cmp    $0xf,%eax
  setle  %al
  movzbl %al,%eax
  lea    -0x1(%rsi,%rax,2),%ecx
  mov    $0xfffff800,%eax
  cmp    %eax,%ecx
  cmovl  %eax,%ecx
  mov    $0x7ff,%eax
  cmp    %eax,%ecx
  cmovg  %eax,%ecx
L109:
  mov    %cx,(%r9,%rdx,2)
  add    $0x1,%rdx
  cmp    $0x40,%rdx
  je     L72
L11:
  movswl (%rdi,%rdx,2),%ecx
  movzbl (%r10,%rdx,1),%eax
  imul   %ecx,%eax
  imul   %r8d,%eax
  test   %eax,%eax
  lea    0xf(%rax),%ecx
  cmovns %eax,%ecx
  mov    %ecx,%esi
  sar    $0x4,%esi
  and    $0x10,%ecx
  je     L94
  mov    $0xfffff800,%eax
  mov    $0x7ff,%ecx
  cmp    %eax,%esi
  cmovl  %eax,%esi
  cmp    %ecx,%esi
  cmovle %esi,%ecx
  mov    %cx,(%r9,%rdx,2)
  add    $0x1,%rdx
  cmp    $0x40,%rdx
  jne    L11
L72:
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D265
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D247
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D96
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D184
type_guessed: byte[16]

tool: {"D265": [0xff,0x07,0x00,0x00,0xff,0x07,0x00,0x00,0xff,0x07,0x00,0x00,0xff,0x07,0x00,0x00]}

tool: {"D247": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D96": [0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00]}

tool: {"D184": [0x00,0xf8,0xff,0xff,0x00,0xf8,0xff,0xff,0x00,0xf8,0xff,0xff,0x00,0xf8,0xff,0xff]}

assistant: ```c
void iquant1_intra(src, dst, dc_prec, quant_mat, mquant) short *src, *dst;
int dc_prec;
unsigned char *quant_mat;
int mquant;
{
  int i, val;
  dst[0] = src[0] << (3 - dc_prec);
  for (i = 1; i < 64; i++) {
    val = (int)(src[i] * quant_mat[i] * mquant) / 16;
    if ((val & 1) == 0 && val != 0)
      val += (val > 0) ? -1 : 1;
    dst[i] = (val > 2047) ? 2047 : ((val < -2048) ? -2048 : val);
  }
}
```