user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<poly_sub2>:
  endbr64
  push   %r15
  mov    %rdi,%rax
  mov    %rsi,%rdi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    (%rcx),%r10d
  mov    (%rdx),%ebx
  mov    0x4(%rcx),%r13d
  mov    0x4(%rdx),%r12d
  mov    %r10d,%esi
  cmp    %r10d,%ebx
  mov    %r13d,%ebp
  cmovge %ebx,%esi
  cmp    %r13d,%r12d
  cmovge %r12d,%ebp
  movd   %esi,%xmm0
  mov    %esi,%ecx
  movd   %ebp,%xmm7
  or     %ebp,%ecx
  punpckldq %xmm7,%xmm0
  movq   %xmm0,(%r9)
  js     L150
  movq   D9(%rip),%xmm1
  mov    %r10d,%r14d
  mov    %ebx,%r15d
  xor    %edx,%edx
  shr    $0x1f,%r14d
  mov    %rdi,%rcx
  add    $0x1,%ebp
  shr    $0x1f,%r15d
  movapd %xmm1,%xmm7
  movapd %xmm1,%xmm6
  movapd %xmm1,%xmm5
  movapd %xmm1,%xmm4
  movapd %xmm1,%xmm3
  movapd %xmm1,%xmm2
  nopl   (%rax)
L409:
  cmp    %edx,%r12d
  setl   %r11b
  cmp    %edx,%r13d
  setl   %dil
  test   %r14b,%r14b
  jne    L147
  test   %dil,%dil
  jne    L147
  movsd  (%rcx),%xmm8
  test   %r15b,%r15b
  jne    L515
  test   %r11b,%r11b
  jne    L515
  movsd  (%rax),%xmm0
  subsd  %xmm8,%xmm0
L57:
  movsd  %xmm0,(%r8)
  test   %esi,%esi
  jle    L96
  test   %r10d,%r10d
  jle    L180
  test   %dil,%dil
  jne    L180
  movsd  0x8(%rcx),%xmm8
  test   %ebx,%ebx
  jle    L222
  test   %r11b,%r11b
  jne    L222
  movsd  0x8(%rax),%xmm0
  subsd  %xmm8,%xmm0
L405:
  movsd  %xmm0,0x8(%r8)
  cmp    $0x1,%esi
  je     L96
  cmp    $0x1,%r10d
  jle    L9
  test   %dil,%dil
  jne    L9
  movsd  0x10(%rcx),%xmm8
  cmp    $0x1,%ebx
  jle    L232
  test   %r11b,%r11b
  jne    L232
  movsd  0x10(%rax),%xmm0
  subsd  %xmm8,%xmm0
L24:
  movsd  %xmm0,0x10(%r8)
  cmp    $0x2,%esi
  je     L96
  cmp    $0x2,%r10d
  jle    L132
  test   %dil,%dil
  jne    L132
  movsd  0x18(%rcx),%xmm8
  cmp    $0x2,%ebx
  jle    L143
  test   %r11b,%r11b
  jne    L143
  movsd  0x18(%rax),%xmm0
  subsd  %xmm8,%xmm0
L359:
  movsd  %xmm0,0x18(%r8)
  cmp    $0x3,%esi
  je     L96
  cmp    $0x3,%r10d
  jle    L93
  test   %dil,%dil
  jne    L93
  movsd  0x20(%rcx),%xmm8
  cmp    $0x3,%ebx
  jle    L54
  test   %r11b,%r11b
  jne    L54
  movsd  0x20(%rax),%xmm0
  subsd  %xmm8,%xmm0
L382:
  movsd  %xmm0,0x20(%r8)
  cmp    $0x4,%esi
  je     L96
  cmp    $0x4,%r10d
  jle    L244
  test   %dil,%dil
  jne    L244
  movsd  0x28(%rcx),%xmm8
  cmp    $0x4,%ebx
  jle    L511
  test   %r11b,%r11b
  jne    L511
  movsd  0x28(%rax),%xmm0
  subsd  %xmm8,%xmm0
L443:
  movsd  %xmm0,0x28(%r8)
  mov    $0x6,%r9d
  cmp    $0x5,%esi
  jne    L22
  jmp    L96
  nopl   0x0(%rax,%rax,1)
L166:
  test   %dil,%dil
  jne    L358
  movsd  (%rcx,%r9,8),%xmm8
  cmp    -0x4(%rsp),%ebx
  jl     L319
  test   %r11b,%r11b
  jne    L319
  movsd  (%rax,%r9,8),%xmm0
  subsd  %xmm8,%xmm0
L215:
  movsd  %xmm0,(%r8,%r9,8)
  add    $0x1,%r9
  cmp    %r9d,%esi
  jl     L96
L22:
  mov    %r9d,-0x4(%rsp)
  cmp    %r9d,%r10d
  jge    L166
L358:
  movsd  (%rax,%r9,8),%xmm0
  movsd  %xmm0,(%r8,%r9,8)
  add    $0x1,%r9
  cmp    %r9d,%esi
  jge    L22
  nopw   0x0(%rax,%rax,1)
L96:
  add    $0x1,%edx
  add    $0x28,%r8
  add    $0x28,%rax
  add    $0x28,%rcx
  cmp    %ebp,%edx
  jne    L409
L150:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L147:
  movsd  (%rax),%xmm0
  jmp    L57
  nopl   0x0(%rax)
L180:
  movsd  0x8(%rax),%xmm0
  jmp    L405
  nopw   0x0(%rax,%rax,1)
L9:
  movsd  0x10(%rax),%xmm0
  jmp    L24
  nopw   0x0(%rax,%rax,1)
L132:
  movsd  0x18(%rax),%xmm0
  jmp    L359
  nopw   0x0(%rax,%rax,1)
L515:
  movapd %xmm8,%xmm0
  xorpd  %xmm1,%xmm0
  jmp    L57
  cs nopw 0x0(%rax,%rax,1)
L93:
  movsd  0x20(%rax),%xmm0
  jmp    L382
  nopw   0x0(%rax,%rax,1)
L222:
  movapd %xmm8,%xmm0
  xorpd  %xmm2,%xmm0
  jmp    L405
  xchg   %ax,%ax
L244:
  movsd  0x28(%rax),%xmm0
  jmp    L443
  nopw   0x0(%rax,%rax,1)
L232:
  movapd %xmm8,%xmm0
  xorpd  %xmm3,%xmm0
  jmp    L24
  xchg   %ax,%ax
L143:
  movapd %xmm8,%xmm0
  xorpd  %xmm4,%xmm0
  jmp    L359
  xchg   %ax,%ax
L54:
  movapd %xmm8,%xmm0
  xorpd  %xmm5,%xmm0
  jmp    L382
  xchg   %ax,%ax
L511:
  movapd %xmm8,%xmm0
  xorpd  %xmm6,%xmm0
  jmp    L443
  xchg   %ax,%ax
L319:
  movapd %xmm8,%xmm0
  xorpd  %xmm7,%xmm0
  jmp    L215
```

tool_calls: name: read_data
arguments: data_label: D9
type: byte[8]

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void poly_sub2(double u1[5][5], double u2[5][5], int p1[2], int p2[2], double u3[5][5], int p3[2]) {
  int i, j, p11, p12, p21, p22;
  int i1_ok, i2_ok;
  p11 = p1[0];
  p12 = p1[1];
  p21 = p2[0];
  p22 = p2[1];
  p3[0] = ((p11) > (p21)) ? (p11) : (p21);
  p3[1] = ((p12) > (p22)) ? (p12) : (p22);
  for (i = 0; i <= p3[1]; i++) {
    i1_ok = (i > p12);
    i2_ok = (i > p22);
    for (j = 0; j <= p3[0]; j++) {
      if (i2_ok || (j > p21))
        u3[i][j] = u1[i][j];
      else if (i1_ok || (j > p11))
        u3[i][j] = -u2[i][j];
      else
        u3[i][j] = u1[i][j] - u2[i][j];
    }
  }
  return;
}
```