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

```asm
<R_faceBlendTetDrv>:
  endbr64
  mov    %rsi,%rax
  mov    0x4(%rdi),%ecx
  add    (%rdi),%ecx
  add    0x8(%rdi),%ecx
  movq   $0x0,0x10(%rdx)
  movq   $0x0,0x8(%rdx)
  movq   $0x0,(%rdx)
  cmp    $0x3,%ecx
  je     L28
  cmp    $0x5,%ecx
  je     L20
  cmp    $0x4,%ecx
  je     L39
  mov    $0x0,%esi
  cmp    $0x6,%ecx
  jne    L8
  movsd  0x8(%rax),%xmm0
  xorpd  D30(%rip),%xmm0
  mulsd  0x10(%rax),%xmm0
  movsd  %xmm0,(%rdx)
  movsd  0x10(%rax),%xmm3
  movsd  D46(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  (%rax),%xmm1
  movsd  0x8(%rax),%xmm2
  addsd  %xmm2,%xmm2
  subsd  %xmm2,%xmm1
  subsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm1
  movsd  %xmm1,0x8(%rdx)
  movsd  0x8(%rax),%xmm2
  subsd  (%rax),%xmm0
  subsd  %xmm2,%xmm0
  movsd  0x10(%rax),%xmm1
  addsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    $0x1,%esi
  jmp    L8
L28:
  movsd  0x8(%rsi),%xmm0
  mulsd  0x10(%rsi),%xmm0
  movsd  %xmm0,(%rdx)
  movsd  (%rsi),%xmm0
  mulsd  0x10(%rsi),%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  0x8(%rsi),%xmm0
  mulsd  (%rsi),%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    $0x1,%esi
L8:
  mov    %esi,%eax
  ret
L20:
  movsd  0x10(%rsi),%xmm3
  movsd  (%rsi),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  movsd  D46(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  subsd  0x8(%rsi),%xmm1
  subsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm1
  movsd  %xmm1,(%rdx)
  movsd  (%rsi),%xmm1
  xorpd  D30(%rip),%xmm1
  mulsd  0x10(%rsi),%xmm1
  movsd  %xmm1,0x8(%rdx)
  movsd  (%rsi),%xmm2
  subsd  %xmm2,%xmm0
  subsd  0x8(%rsi),%xmm0
  movsd  0x10(%rsi),%xmm1
  addsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    $0x1,%esi
  jmp    L8
L39:
  movsd  0x8(%rsi),%xmm3
  movsd  (%rsi),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  movsd  D46(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  subsd  %xmm3,%xmm1
  subsd  0x10(%rsi),%xmm1
  mulsd  %xmm3,%xmm1
  movsd  %xmm1,(%rdx)
  movsd  (%rsi),%xmm2
  subsd  %xmm2,%xmm0
  movsd  0x8(%rsi),%xmm1
  addsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  subsd  0x10(%rsi),%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  (%rsi),%xmm0
  xorpd  D30(%rip),%xmm0
  mulsd  0x8(%rsi),%xmm0
  movsd  %xmm0,0x10(%rdx)
  mov    $0x1,%esi
  jmp    L8
```

tool_calls: name: disassemble_data
arguments: data_label: D30
type_infered: byte[16]
name: disassemble_data
arguments: data_label: D46
type_infered: f64

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

tool: D46: 1

assistant: ```c
int R_faceBlendTetDrv(int *index, double *L, double drv[]) {
  int isum = index[0] + index[1] + index[2];
  drv[0] = drv[1] = drv[2] = 0;
  if (isum == 3) {
    drv[0] = L[1] * L[2];
    drv[1] = L[0] * L[2];
    drv[2] = L[1] * L[0];
  } else if (isum == 5) {
    drv[0] = L[2] * (1.0 - 2.0 * L[0] - L[1] - L[2]);
    drv[1] = -L[0] * L[2];
    drv[2] = L[0] * (1.0 - L[0] - L[1] - 2.0 * L[2]);
  } else if (isum == 4) {
    drv[0] = L[1] * (1.0 - 2.0 * L[0] - L[1] - L[2]);
    drv[1] = L[0] * (1.0 - L[0] - 2.0 * L[1] - L[2]);
    drv[2] = -L[0] * L[1];
  } else if (isum == 6) {
    drv[0] = -L[1] * L[2];
    drv[1] = L[2] * (1.0 - L[0] - 2.0 * L[1] - L[2]);
    drv[2] = L[1] * (1.0 - L[0] - L[1] - 2.0 * L[2]);
  } else
    return 0;
  return 1;
}
```