user: 下面的汇编指令对应的C源代码是什么：

```asm
<sumGAMMAPROT>:
  endbr64
  mov    %edi,%eax
  push   %rbx
  mov    %rdx,%rdi
  mov    %rsi,%rbx
  mov    0x10(%rsp),%r10
  mov    0x18(%rsp),%esi
  mov    %rcx,%rdx
  mov    0x20(%rsp),%r11d
  cmp    $0x1,%eax
  je     L92
  cmp    $0x2,%eax
  je     L155
  test   %eax,%eax
  je     L8
  xor    %edi,%edi
  xor    %eax,%eax
  pop    %rbx
  jmp    1050 <assert@plt>
  xchg   %ax,%ax
L92:
  cmp    %r11d,%esi
  jge    L65
  lea    (%rsi,%rsi,4),%r10d
  movslq %esi,%rax
  lea    (%r11,%r11,4),%r11d
  shl    $0x4,%r10d
  add    %rax,%r9
  shl    $0x4,%r11d
  movslq %r10d,%rax
  shl    $0x3,%rax
  lea    (%rcx,%rax,1),%rsi
  lea    0x280(%rbx,%rax,1),%rdi
  nopw   0x0(%rax,%rax,1)
L147:
  movsbl (%r9),%eax
  mov    %rsi,%rdx
  lea    (%rax,%rax,4),%eax
  shl    $0x2,%eax
  cltq
  lea    (%r8,%rax,8),%rcx
  lea    -0x280(%rdi),%rax
L29:
  movsd  (%rcx),%xmm0
  mulsd  (%rdx),%xmm0
  add    $0xa0,%rax
  add    $0xa0,%rdx
  movsd  %xmm0,-0xa0(%rax)
  movsd  0x8(%rcx),%xmm0
  mulsd  -0x98(%rdx),%xmm0
  movsd  %xmm0,-0x98(%rax)
  movsd  0x10(%rcx),%xmm0
  mulsd  -0x90(%rdx),%xmm0
  movsd  %xmm0,-0x90(%rax)
  movsd  0x18(%rcx),%xmm0
  mulsd  -0x88(%rdx),%xmm0
  movsd  %xmm0,-0x88(%rax)
  movsd  0x20(%rcx),%xmm0
  mulsd  -0x80(%rdx),%xmm0
  movsd  %xmm0,-0x80(%rax)
  movsd  0x28(%rcx),%xmm0
  mulsd  -0x78(%rdx),%xmm0
  movsd  %xmm0,-0x78(%rax)
  movsd  0x30(%rcx),%xmm0
  mulsd  -0x70(%rdx),%xmm0
  movsd  %xmm0,-0x70(%rax)
  movsd  0x38(%rcx),%xmm0
  mulsd  -0x68(%rdx),%xmm0
  movsd  %xmm0,-0x68(%rax)
  movsd  0x40(%rcx),%xmm0
  mulsd  -0x60(%rdx),%xmm0
  movsd  %xmm0,-0x60(%rax)
  movsd  0x48(%rcx),%xmm0
  mulsd  -0x58(%rdx),%xmm0
  movsd  %xmm0,-0x58(%rax)
  movsd  0x50(%rcx),%xmm0
  mulsd  -0x50(%rdx),%xmm0
  movsd  %xmm0,-0x50(%rax)
  movsd  0x58(%rcx),%xmm0
  mulsd  -0x48(%rdx),%xmm0
  movsd  %xmm0,-0x48(%rax)
  movsd  0x60(%rcx),%xmm0
  mulsd  -0x40(%rdx),%xmm0
  movsd  %xmm0,-0x40(%rax)
  movsd  0x68(%rcx),%xmm0
  mulsd  -0x38(%rdx),%xmm0
  movsd  %xmm0,-0x38(%rax)
  movsd  0x70(%rcx),%xmm0
  mulsd  -0x30(%rdx),%xmm0
  movsd  %xmm0,-0x30(%rax)
  movsd  0x78(%rcx),%xmm0
  mulsd  -0x28(%rdx),%xmm0
  movsd  %xmm0,-0x28(%rax)
  movsd  0x80(%rcx),%xmm0
  mulsd  -0x20(%rdx),%xmm0
  movsd  %xmm0,-0x20(%rax)
  movsd  0x88(%rcx),%xmm0
  mulsd  -0x18(%rdx),%xmm0
  movsd  %xmm0,-0x18(%rax)
  movsd  0x90(%rcx),%xmm0
  mulsd  -0x10(%rdx),%xmm0
  movsd  %xmm0,-0x10(%rax)
  movsd  0x98(%rcx),%xmm0
  mulsd  -0x8(%rdx),%xmm0
  movsd  %xmm0,-0x8(%rax)
  cmp    %rdi,%rax
  jne    L29
  add    $0x50,%r10d
  add    $0x1,%r9
  add    $0x280,%rsi
  add    $0x280,%rdi
  cmp    %r11d,%r10d
  jne    L147
L65:
  pop    %rbx
  ret
  nopl   0x0(%rax)
L8:
  cmp    %r11d,%esi
  jge    L65
  lea    (%rsi,%rsi,4),%eax
  movslq %esi,%rdi
  shl    $0x4,%eax
  cltq
  lea    0x280(%rbx,%rax,8),%rsi
L45:
  movsbl (%r9,%rdi,1),%eax
  lea    (%rax,%rax,4),%eax
  shl    $0x2,%eax
  cltq
  lea    (%r8,%rax,8),%rcx
  movsbl (%r10,%rdi,1),%eax
  lea    (%rax,%rax,4),%eax
  shl    $0x2,%eax
  cltq
  lea    (%r8,%rax,8),%rdx
  lea    -0x280(%rsi),%rax
L55:
  movsd  (%rcx),%xmm0
  mulsd  (%rdx),%xmm0
  add    $0xa0,%rax
  movsd  %xmm0,-0xa0(%rax)
  movsd  0x8(%rcx),%xmm0
  mulsd  0x8(%rdx),%xmm0
  movsd  %xmm0,-0x98(%rax)
  movsd  0x10(%rcx),%xmm0
  mulsd  0x10(%rdx),%xmm0
  movsd  %xmm0,-0x90(%rax)
  movsd  0x18(%rcx),%xmm0
  mulsd  0x18(%rdx),%xmm0
  movsd  %xmm0,-0x88(%rax)
  movsd  0x20(%rcx),%xmm0
  mulsd  0x20(%rdx),%xmm0
  movsd  %xmm0,-0x80(%rax)
  movsd  0x28(%rcx),%xmm0
  mulsd  0x28(%rdx),%xmm0
  movsd  %xmm0,-0x78(%rax)
  movsd  0x30(%rcx),%xmm0
  mulsd  0x30(%rdx),%xmm0
  movsd  %xmm0,-0x70(%rax)
  movsd  0x38(%rcx),%xmm0
  mulsd  0x38(%rdx),%xmm0
  movsd  %xmm0,-0x68(%rax)
  movsd  0x40(%rcx),%xmm0
  mulsd  0x40(%rdx),%xmm0
  movsd  %xmm0,-0x60(%rax)
  movsd  0x48(%rcx),%xmm0
  mulsd  0x48(%rdx),%xmm0
  movsd  %xmm0,-0x58(%rax)
  movsd  0x50(%rcx),%xmm0
  mulsd  0x50(%rdx),%xmm0
  movsd  %xmm0,-0x50(%rax)
  movsd  0x58(%rcx),%xmm0
  mulsd  0x58(%rdx),%xmm0
  movsd  %xmm0,-0x48(%rax)
  movsd  0x60(%rcx),%xmm0
  mulsd  0x60(%rdx),%xmm0
  movsd  %xmm0,-0x40(%rax)
  movsd  0x68(%rcx),%xmm0
  mulsd  0x68(%rdx),%xmm0
  movsd  %xmm0,-0x38(%rax)
  movsd  0x70(%rcx),%xmm0
  mulsd  0x70(%rdx),%xmm0
  movsd  %xmm0,-0x30(%rax)
  movsd  0x78(%rcx),%xmm0
  mulsd  0x78(%rdx),%xmm0
  movsd  %xmm0,-0x28(%rax)
  movsd  0x80(%rcx),%xmm0
  mulsd  0x80(%rdx),%xmm0
  movsd  %xmm0,-0x20(%rax)
  movsd  0x88(%rcx),%xmm0
  mulsd  0x88(%rdx),%xmm0
  movsd  %xmm0,-0x18(%rax)
  movsd  0x90(%rcx),%xmm0
  mulsd  0x90(%rdx),%xmm0
  movsd  %xmm0,-0x10(%rax)
  movsd  0x98(%rcx),%xmm0
  mulsd  0x98(%rdx),%xmm0
  movsd  %xmm0,-0x8(%rax)
  cmp    %rsi,%rax
  jne    L55
  add    $0x1,%rdi
  add    $0x280,%rsi
  cmp    %edi,%r11d
  jg     L45
  pop    %rbx
  ret
  nopl   0x0(%rax)
L155:
  cmp    %r11d,%esi
  jge    L65
  movslq %esi,%rax
  lea    (%rsi,%rsi,4),%r10d
  lea    (%r11,%r11,4),%r11d
  lea    (%rax,%rax,4),%r8
  shl    $0x4,%r10d
  shl    $0x4,%r11d
  shl    $0x7,%r8
  lea    (%rbx,%r8,1),%rax
  lea    (%rdi,%r8,1),%rcx
  add    %r8,%rdx
  lea    0xa0(%rbx,%r8,1),%r9
  nopw   0x0(%rax,%rax,1)
L133:
  lea    0xa0(%rdx),%rdi
  mov    %rax,%rsi
  cmp    %rdi,%rax
  setae  %dil
  cmp    %rdx,%r9
  setbe  %r8b
  or     %r8b,%dil
  je     L69
  lea    0xa0(%rcx),%rdi
  cmp    %rdi,%rax
  setae  %dil
  cmp    %r9,%rcx
  setae  %r8b
  or     %r8b,%dil
  je     L69
  movupd 0x10(%rdx),%xmm1
  movupd 0x20(%rcx),%xmm2
  add    $0x280,%rax
  movupd 0x30(%rdx),%xmm3
  movupd 0x40(%rdx),%xmm4
  movupd 0x10(%rcx),%xmm8
  movupd 0x20(%rdx),%xmm7
  movupd 0x30(%rcx),%xmm6
  movupd 0x40(%rcx),%xmm5
  mulpd  %xmm1,%xmm8
  movupd 0x50(%rdx),%xmm1
  movupd 0x80(%rdx),%xmm0
  mulpd  %xmm2,%xmm7
  movupd 0x60(%rdx),%xmm2
  movupd 0x90(%rdx),%xmm10
  mulpd  %xmm3,%xmm6
  movupd 0x60(%rcx),%xmm3
  movupd (%rdx),%xmm11
  mulpd  %xmm4,%xmm5
  movupd 0x50(%rcx),%xmm4
  movupd (%rcx),%xmm9
  mulpd  %xmm2,%xmm3
  movupd 0x70(%rcx),%xmm2
  mulpd  %xmm1,%xmm4
  movupd 0x70(%rdx),%xmm1
  mulpd  %xmm11,%xmm9
  mulpd  %xmm1,%xmm2
  movupd 0x80(%rcx),%xmm1
  mulpd  %xmm0,%xmm1
  movupd 0x90(%rcx),%xmm0
  movups %xmm6,-0x250(%rax)
  movups %xmm4,-0x230(%rax)
  mulpd  %xmm10,%xmm0
  movups %xmm9,-0x280(%rax)
  movups %xmm3,-0x220(%rax)
  movups %xmm2,-0x210(%rax)
  movups %xmm1,-0x200(%rax)
  movups %xmm8,-0x270(%rax)
  movups %xmm0,-0x1f0(%rax)
  movups %xmm7,-0x260(%rax)
  movups %xmm5,-0x240(%rax)
  movupd 0xb0(%rdx),%xmm5
  movupd 0xb0(%rcx),%xmm8
  movupd 0xc0(%rcx),%xmm7
  movupd 0xc0(%rdx),%xmm6
  movupd 0xd0(%rdx),%xmm3
  movupd 0xe0(%rdx),%xmm4
  mulpd  %xmm5,%xmm8
  mulpd  %xmm6,%xmm7
  movupd 0xe0(%rcx),%xmm5
  movupd 0xd0(%rcx),%xmm6
  movupd 0xf0(%rdx),%xmm2
  movupd 0x100(%rdx),%xmm1
  mulpd  %xmm3,%xmm6
  movupd 0x100(%rcx),%xmm3
  movupd 0x120(%rdx),%xmm0
  movupd 0x130(%rdx),%xmm12
  mulpd  %xmm4,%xmm5
  movupd 0xf0(%rcx),%xmm4
  movupd 0xa0(%rcx),%xmm9
  mulpd  %xmm1,%xmm3
  movupd 0x110(%rdx),%xmm1
  movupd 0xa0(%rdx),%xmm13
  mulpd  %xmm2,%xmm4
  movupd 0x110(%rcx),%xmm2
  mulpd  %xmm1,%xmm2
  movupd 0x120(%rcx),%xmm1
  mulpd  %xmm13,%xmm9
  mulpd  %xmm0,%xmm1
  movupd 0x130(%rcx),%xmm0
  movups %xmm3,-0x180(%rax)
  movups %xmm4,-0x190(%rax)
  mulpd  %xmm12,%xmm0
  movups %xmm8,-0x1d0(%rax)
  movups %xmm2,-0x170(%rax)
  movups %xmm9,-0x1e0(%rax)
  movups %xmm1,-0x160(%rax)
  movups %xmm7,-0x1c0(%rax)
  movups %xmm0,-0x150(%rax)
  movups %xmm6,-0x1b0(%rax)
  movups %xmm5,-0x1a0(%rax)
  movupd 0x150(%rdx),%xmm7
  movupd 0x150(%rcx),%xmm8
  movupd 0x160(%rdx),%xmm5
  mulpd  %xmm7,%xmm8
  movupd 0x160(%rcx),%xmm7
  movupd 0x170(%rcx),%xmm6
  movupd 0x180(%rdx),%xmm4
  movupd 0x170(%rdx),%xmm3
  mulpd  %xmm5,%xmm7
  movupd 0x180(%rcx),%xmm5
  movupd 0x190(%rdx),%xmm2
  mulpd  %xmm3,%xmm6
  movupd 0x1a0(%rcx),%xmm3
  movupd 0x1b0(%rdx),%xmm1
  mulpd  %xmm4,%xmm5
  movupd 0x190(%rcx),%xmm4
  movupd 0x1c0(%rdx),%xmm0
  movupd 0x1d0(%rdx),%xmm14
  movupd 0x140(%rcx),%xmm9
  movupd 0x140(%rdx),%xmm15
  mulpd  %xmm2,%xmm4
  movupd 0x1a0(%rdx),%xmm2
  mulpd  %xmm2,%xmm3
  movupd 0x1b0(%rcx),%xmm2
  mulpd  %xmm15,%xmm9
  mulpd  %xmm1,%xmm2
  movupd 0x1c0(%rcx),%xmm1
  mulpd  %xmm0,%xmm1
  movupd 0x1d0(%rcx),%xmm0
  movups %xmm4,-0xf0(%rax)
  movups %xmm8,-0x130(%rax)
  mulpd  %xmm14,%xmm0
  movups %xmm9,-0x140(%rax)
  movups %xmm2,-0xd0(%rax)
  movups %xmm7,-0x120(%rax)
  movups %xmm1,-0xc0(%rax)
  movups %xmm6,-0x110(%rax)
  movups %xmm0,-0xb0(%rax)
  movups %xmm5,-0x100(%rax)
  movups %xmm3,-0xe0(%rax)
  movupd 0x1f0(%rdx),%xmm6
  movupd 0x1f0(%rcx),%xmm8
  movupd 0x200(%rcx),%xmm7
  movupd 0x200(%rdx),%xmm5
  movupd 0x210(%rdx),%xmm3
  mulpd  %xmm6,%xmm8
  movupd 0x210(%rcx),%xmm6
  mulpd  %xmm5,%xmm7
  movupd 0x220(%rcx),%xmm5
  movupd 0x220(%rdx),%xmm4
  mulpd  %xmm3,%xmm6
  movupd 0x230(%rdx),%xmm3
  movupd 0x240(%rdx),%xmm2
  mulpd  %xmm4,%xmm5
  movupd 0x230(%rcx),%xmm4
  movupd 0x250(%rdx),%xmm1
  movupd 0x260(%rdx),%xmm0
  movupd 0x270(%rdx),%xmm10
  movupd 0x1e0(%rcx),%xmm9
  mulpd  %xmm3,%xmm4
  movupd 0x240(%rcx),%xmm3
  movupd 0x1e0(%rdx),%xmm11
  mulpd  %xmm2,%xmm3
  movupd 0x250(%rcx),%xmm2
  mulpd  %xmm11,%xmm9
  mulpd  %xmm1,%xmm2
  movupd 0x260(%rcx),%xmm1
  mulpd  %xmm0,%xmm1
  movupd 0x270(%rcx),%xmm0
  movups %xmm7,-0x80(%rax)
  movups %xmm8,-0x90(%rax)
  mulpd  %xmm10,%xmm0
  movups %xmm9,-0xa0(%rax)
  movups %xmm6,-0x70(%rax)
  movups %xmm5,-0x60(%rax)
  movups %xmm4,-0x50(%rax)
  movups %xmm3,-0x40(%rax)
  movups %xmm2,-0x30(%rax)
  movups %xmm1,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
L7:
  add    $0x50,%r10d
  add    $0x280,%rcx
  add    $0x280,%r9
  add    $0x280,%rdx
  cmp    %r11d,%r10d
  jne    L133
  jmp    L65
  xchg   %ax,%ax
L69:
  mov    %rdx,%r8
  mov    %rcx,%rdi
  add    $0x280,%rax
L79:
  movsd  (%r8),%xmm0
  mulsd  (%rdi),%xmm0
  add    $0xa0,%rsi
  add    $0xa0,%rdi
  add    $0xa0,%r8
  movsd  %xmm0,-0xa0(%rsi)
  movsd  -0x98(%r8),%xmm0
  mulsd  -0x98(%rdi),%xmm0
  movsd  %xmm0,-0x98(%rsi)
  movsd  -0x90(%r8),%xmm0
  mulsd  -0x90(%rdi),%xmm0
  movsd  %xmm0,-0x90(%rsi)
  movsd  -0x88(%r8),%xmm0
  mulsd  -0x88(%rdi),%xmm0
  movsd  %xmm0,-0x88(%rsi)
  movsd  -0x80(%r8),%xmm0
  mulsd  -0x80(%rdi),%xmm0
  movsd  %xmm0,-0x80(%rsi)
  movsd  -0x78(%r8),%xmm0
  mulsd  -0x78(%rdi),%xmm0
  movsd  %xmm0,-0x78(%rsi)
  movsd  -0x70(%r8),%xmm0
  mulsd  -0x70(%rdi),%xmm0
  movsd  %xmm0,-0x70(%rsi)
  movsd  -0x68(%r8),%xmm0
  mulsd  -0x68(%rdi),%xmm0
  movsd  %xmm0,-0x68(%rsi)
  movsd  -0x60(%r8),%xmm0
  mulsd  -0x60(%rdi),%xmm0
  movsd  %xmm0,-0x60(%rsi)
  movsd  -0x58(%r8),%xmm0
  mulsd  -0x58(%rdi),%xmm0
  movsd  %xmm0,-0x58(%rsi)
  movsd  -0x50(%r8),%xmm0
  mulsd  -0x50(%rdi),%xmm0
  movsd  %xmm0,-0x50(%rsi)
  movsd  -0x48(%r8),%xmm0
  mulsd  -0x48(%rdi),%xmm0
  movsd  %xmm0,-0x48(%rsi)
  movsd  -0x40(%rdi),%xmm0
  mulsd  -0x40(%r8),%xmm0
  movsd  %xmm0,-0x40(%rsi)
  movsd  -0x38(%rdi),%xmm0
  mulsd  -0x38(%r8),%xmm0
  movsd  %xmm0,-0x38(%rsi)
  movsd  -0x30(%rdi),%xmm0
  mulsd  -0x30(%r8),%xmm0
  movsd  %xmm0,-0x30(%rsi)
  movsd  -0x28(%rdi),%xmm0
  mulsd  -0x28(%r8),%xmm0
  movsd  %xmm0,-0x28(%rsi)
  movsd  -0x20(%rdi),%xmm0
  mulsd  -0x20(%r8),%xmm0
  movsd  %xmm0,-0x20(%rsi)
  movsd  -0x18(%rdi),%xmm0
  mulsd  -0x18(%r8),%xmm0
  movsd  %xmm0,-0x18(%rsi)
  movsd  -0x10(%rdi),%xmm0
  mulsd  -0x10(%r8),%xmm0
  movsd  %xmm0,-0x10(%rsi)
  movsd  -0x8(%rdi),%xmm0
  mulsd  -0x8(%r8),%xmm0
  movsd  %xmm0,-0x8(%rsi)
  cmp    %rax,%rsi
  jne    L79
  jmp    L7
```

assistant: ```c
void sumGAMMAPROT(int tipCase, double *sumtable, double *x1, double *x2, double *tipVector, char *tipX1, char *tipX2, int lower, int n) {
  int i, l;
  double *left, *right, *sum;
  switch (tipCase) {
  case 0:
    for (i = lower; i < n; i++) {
      left = &(tipVector[20 * tipX1[i]]);
      right = &(tipVector[20 * tipX2[i]]);
      sum = &(sumtable[i * 80]);
      for (l = 0; l < 4; l++) {
        *sum++ = left[0] * right[0];
        *sum++ = left[1] * right[1];
        *sum++ = left[2] * right[2];
        *sum++ = left[3] * right[3];
        *sum++ = left[4] * right[4];
        *sum++ = left[5] * right[5];
        *sum++ = left[6] * right[6];
        *sum++ = left[7] * right[7];
        *sum++ = left[8] * right[8];
        *sum++ = left[9] * right[9];
        *sum++ = left[10] * right[10];
        *sum++ = left[11] * right[11];
        *sum++ = left[12] * right[12];
        *sum++ = left[13] * right[13];
        *sum++ = left[14] * right[14];
        *sum++ = left[15] * right[15];
        *sum++ = left[16] * right[16];
        *sum++ = left[17] * right[17];
        *sum++ = left[18] * right[18];
        *sum++ = left[19] * right[19];
      }
    }
    break;
  case 1:
    for (i = lower; i < n; i++) {
      left = &(tipVector[20 * tipX1[i]]);
      sum = &(sumtable[i * 80]);
      for (l = 0; l < 4; l++) {
        right = &(x2[80 * i + l * 20]);
        *sum++ = left[0] * right[0];
        *sum++ = left[1] * right[1];
        *sum++ = left[2] * right[2];
        *sum++ = left[3] * right[3];
        *sum++ = left[4] * right[4];
        *sum++ = left[5] * right[5];
        *sum++ = left[6] * right[6];
        *sum++ = left[7] * right[7];
        *sum++ = left[8] * right[8];
        *sum++ = left[9] * right[9];
        *sum++ = left[10] * right[10];
        *sum++ = left[11] * right[11];
        *sum++ = left[12] * right[12];
        *sum++ = left[13] * right[13];
        *sum++ = left[14] * right[14];
        *sum++ = left[15] * right[15];
        *sum++ = left[16] * right[16];
        *sum++ = left[17] * right[17];
        *sum++ = left[18] * right[18];
        *sum++ = left[19] * right[19];
      }
    }
    break;
  case 2:
    for (i = lower; i < n; i++) {
      sum = &sumtable[i * 80];
      for (l = 0; l < 4; l++) {
        left = &(x1[80 * i + l * 20]);
        right = &(x2[80 * i + l * 20]);
        *sum++ = left[0] * right[0];
        *sum++ = left[1] * right[1];
        *sum++ = left[2] * right[2];
        *sum++ = left[3] * right[3];
        *sum++ = left[4] * right[4];
        *sum++ = left[5] * right[5];
        *sum++ = left[6] * right[6];
        *sum++ = left[7] * right[7];
        *sum++ = left[8] * right[8];
        *sum++ = left[9] * right[9];
        *sum++ = left[10] * right[10];
        *sum++ = left[11] * right[11];
        *sum++ = left[12] * right[12];
        *sum++ = left[13] * right[13];
        *sum++ = left[14] * right[14];
        *sum++ = left[15] * right[15];
        *sum++ = left[16] * right[16];
        *sum++ = left[17] * right[17];
        *sum++ = left[18] * right[18];
        *sum++ = left[19] * right[19];
      }
    }
    break;
  default:
    assert(0);
  }
}
```