user: Translate the below assembly code into C programming language:

```asm
<_compute_normal>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x40(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    (%rax),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    -0x40(%rbp),%rdx
  add    $0x4,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    (%rax),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  mov    -0x40(%rbp),%rdx
  add    $0x4,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0xc(%rbp),%eax
  imul   %edx,%eax
  mov    -0x18(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  imul   %ecx,%edx
  sub    %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%edx
  mov    -0xc(%rbp),%eax
  imul   %edx,%eax
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  imul   %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%edx
  mov    -0x10(%rbp),%eax
  imul   %edx,%eax
  mov    -0x1c(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  imul   %ecx,%edx
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L34
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  jmp    L69
L34:
  mov    -0x38(%rbp),%rax
  movsd  0x8(%rax),%xmm0
L69:
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  movsd  -0x30(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L16
  movsd  -0x30(%rbp),%xmm0
  jmp    L50
L16:
  mov    -0x38(%rbp),%rax
  movsd  0x10(%rax),%xmm0
L50:
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L68
  pxor   %xmm0,%xmm0
  ucomisd -0x28(%rbp),%xmm0
  je     L42
L68:
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  divsd  -0x28(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L42:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L43
  call   <__stack_chk_fail@plt>
L43:
  leave
  ret
```

assistant: ```c
void _compute_normal(double normal[3], const int voxes[9]) {
  int vox_a[3] = {voxes[3 + 0] - voxes[0 + 0], voxes[3 + 1] - voxes[0 + 1], voxes[3 + 2] - voxes[0 + 2]};
  int vox_b[3] = {voxes[6 + 0] - voxes[0 + 0], voxes[6 + 1] - voxes[0 + 1], voxes[6 + 2] - voxes[0 + 2]};
  normal[0] = vox_a[1] * vox_b[2] - vox_a[2] * vox_b[1];
  normal[1] = vox_a[0] * vox_b[2] - vox_a[2] * vox_b[0];
  normal[2] = vox_a[0] * vox_b[1] - vox_a[1] * vox_b[0];
  double _max = normal[0] > normal[1] ? normal[0] : normal[1];
  double max = _max > normal[2] ? _max : normal[2];
  if (max != 0.0) {
    normal[0] /= max;
    normal[1] /= max;
    normal[2] /= max;
  }
}
```