user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<shear>:
  endbr64
  mov    %rdi,%rax
  cmp    $0x78,%sil
  je     L1
  cmp    $0x79,%sil
  je     L16
  movsd  0x10(%rdi),%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  (%rdi),%xmm2
  movsd  %xmm2,(%rdi)
  movsd  0x30(%rdi),%xmm4
  movapd %xmm4,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x20(%rdi),%xmm2
  movsd  %xmm2,0x20(%rdi)
  movsd  0x50(%rdi),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x40(%rdi),%xmm2
  movsd  %xmm2,0x40(%rdi)
  movsd  0x70(%rdi),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  0x60(%rdi),%xmm0
  movsd  %xmm0,0x60(%rdi)
  mulsd  %xmm1,%xmm5
  addsd  0x8(%rdi),%xmm5
  movsd  %xmm5,0x8(%rdi)
  mulsd  %xmm1,%xmm4
  addsd  0x28(%rdi),%xmm4
  movsd  %xmm4,0x28(%rdi)
  mulsd  %xmm1,%xmm3
  addsd  0x48(%rdi),%xmm3
  movsd  %xmm3,0x48(%rdi)
  mulsd  %xmm1,%xmm2
  addsd  0x68(%rdi),%xmm2
  movsd  %xmm2,0x68(%rdi)
  ret
L1:
  movsd  (%rdi),%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x8(%rdi),%xmm2
  movsd  %xmm2,0x8(%rdi)
  movsd  0x20(%rdi),%xmm4
  movapd %xmm4,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x28(%rdi),%xmm2
  movsd  %xmm2,0x28(%rdi)
  movsd  0x40(%rdi),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x48(%rdi),%xmm2
  movsd  %xmm2,0x48(%rdi)
  movsd  0x60(%rdi),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  0x68(%rdi),%xmm0
  movsd  %xmm0,0x68(%rdi)
  mulsd  %xmm1,%xmm5
  addsd  0x10(%rdi),%xmm5
  movsd  %xmm5,0x10(%rdi)
  mulsd  %xmm1,%xmm4
  addsd  0x30(%rdi),%xmm4
  movsd  %xmm4,0x30(%rdi)
  mulsd  %xmm1,%xmm3
  addsd  0x50(%rdi),%xmm3
  movsd  %xmm3,0x50(%rdi)
  mulsd  %xmm1,%xmm2
  addsd  0x70(%rdi),%xmm2
  movsd  %xmm2,0x70(%rdi)
  ret
L16:
  movsd  0x8(%rdi),%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  (%rdi),%xmm2
  movsd  %xmm2,(%rdi)
  movsd  0x28(%rdi),%xmm4
  movapd %xmm4,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x20(%rdi),%xmm2
  movsd  %xmm2,0x20(%rdi)
  movsd  0x48(%rdi),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  0x40(%rdi),%xmm2
  movsd  %xmm2,0x40(%rdi)
  movsd  0x68(%rdi),%xmm2
  mulsd  %xmm2,%xmm0
  addsd  0x60(%rdi),%xmm0
  movsd  %xmm0,0x60(%rdi)
  mulsd  %xmm1,%xmm5
  addsd  0x10(%rdi),%xmm5
  movsd  %xmm5,0x10(%rdi)
  mulsd  %xmm1,%xmm4
  addsd  0x30(%rdi),%xmm4
  movsd  %xmm4,0x30(%rdi)
  mulsd  %xmm1,%xmm3
  addsd  0x50(%rdi),%xmm3
  movsd  %xmm3,0x50(%rdi)
  mulsd  %xmm1,%xmm2
  addsd  0x70(%rdi),%xmm2
  movsd  %xmm2,0x70(%rdi)
  ret
```

assistant: ```c
shear(a, dir, u, v) double a[4][4], u, v;
char dir;
{
  if (dir == 'x') {
    a[0][1] += u * a[0][0];
    a[1][1] += u * a[1][0];
    a[2][1] += u * a[2][0];
    a[3][1] += u * a[3][0];
    a[0][2] += v * a[0][0];
    a[1][2] += v * a[1][0];
    a[2][2] += v * a[2][0];
    a[3][2] += v * a[3][0];
  } else if (dir == 'y') {
    a[0][0] += u * a[0][1];
    a[1][0] += u * a[1][1];
    a[2][0] += u * a[2][1];
    a[3][0] += u * a[3][1];
    a[0][2] += v * a[0][1];
    a[1][2] += v * a[1][1];
    a[2][2] += v * a[2][1];
    a[3][2] += v * a[3][1];
  } else {
    a[0][0] += u * a[0][2];
    a[1][0] += u * a[1][2];
    a[2][0] += u * a[2][2];
    a[3][0] += u * a[3][2];
    a[0][1] += v * a[0][2];
    a[1][1] += v * a[1][2];
    a[2][1] += v * a[2][2];
    a[3][1] += v * a[3][2];
  }
}
```