user: Demonstrate the C code that generates the assembly output below:

```asm
<find_side>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  mov    $0xaaaaaaab,%r14d
  push   %r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x38,%rsp
L436:
  movsd  0x0(%rbp,%rbx,8),%xmm0
  call   <to_radians@plt>
  lea    0x1(%rbx),%edx
  mov    %rdx,%rax
  imul   %r14,%rdx
  movsd  %xmm0,0x8(%rsp)
  shr    $0x21,%rdx
  lea    (%rdx,%rdx,2),%edx
  sub    %edx,%eax
  cltq
  movsd  0x0(%rbp,%rax,8),%xmm0
  lea    0x0(,%rax,8),%r12
  add    %r15,%r12
  call   <to_radians@plt>
  lea    0x2(%rbx),%edx
  mov    %rdx,%rax
  imul   %r14,%rdx
  movsd  %xmm0,(%rsp)
  shr    $0x21,%rdx
  lea    (%rdx,%rdx,2),%edx
  sub    %edx,%eax
  cltq
  movsd  0x0(%rbp,%rax,8),%xmm0
  lea    0x0(,%rax,8),%r13
  add    %r15,%r13
  call   <to_radians@plt>
  movsd  (%r15,%rbx,8),%xmm5
  pxor   %xmm1,%xmm1
  movsd  (%r12),%xmm4
  movsd  0x0(%r13),%xmm6
  movsd  (%rsp),%xmm2
  movapd %xmm0,%xmm3
  lea    (%r15,%rbx,8),%rdx
  comisd %xmm1,%xmm5
  jbe    L379
L157:
  comisd %xmm1,%xmm4
  jbe    L345
  comisd %xmm1,%xmm6
  jbe    L137
L336:
  add    $0x1,%rbx
  cmp    $0x3,%rbx
  jne    L436
  xor    %eax,%eax
L351:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L379:
  movsd  0x8(%rsp),%xmm7
  comisd %xmm1,%xmm7
  jbe    L157
  comisd %xmm1,%xmm4
  jbe    L163
  comisd %xmm1,%xmm2
  ja     L27
L163:
  comisd %xmm1,%xmm6
  jbe    L157
  comisd %xmm1,%xmm3
  jbe    L157
  movsd  0x8(%rsp),%xmm0
  mov    %rdx,0x28(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x20(%rsp)
  call   <sin@plt>
  movsd  0x20(%rsp),%xmm3
  movsd  %xmm0,(%rsp)
  movapd %xmm3,%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm5
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm4
  mov    0x28(%rsp),%rdx
  mulsd  %xmm6,%xmm5
  divsd  %xmm0,%xmm5
  jmp    L380
  nopl   0x0(%rax)
L345:
  comisd %xmm1,%xmm2
  jbe    L35
  comisd %xmm1,%xmm5
  jbe    L334
  movsd  0x8(%rsp),%xmm7
  comisd %xmm1,%xmm7
  ja     L353
L334:
  comisd %xmm1,%xmm6
  jbe    L137
  comisd %xmm1,%xmm3
  ja     L54
  comisd %xmm1,%xmm4
  ja     L336
  comisd %xmm1,%xmm5
  jbe    L336
  comisd %xmm1,%xmm6
  jbe    L336
L271:
  movapd %xmm6,%xmm0
  movapd %xmm5,%xmm4
  mov    %rdx,0x20(%rsp)
  mulsd  %xmm6,%xmm0
  movsd  %xmm5,0x10(%rsp)
  mulsd  %xmm5,%xmm4
  movsd  %xmm6,0x8(%rsp)
  addsd  %xmm0,%xmm4
  movapd %xmm5,%xmm0
  addsd  %xmm5,%xmm0
  movsd  %xmm4,0x18(%rsp)
  mulsd  %xmm6,%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm0
  call   <cos@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movsd  0x18(%rsp),%xmm4
  cvtsi2sd %eax,%xmm0
  mulsd  (%rsp),%xmm0
  movsd  0x8(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm5
  mov    0x20(%rsp),%rdx
  subsd  %xmm0,%xmm4
  ucomisd %xmm4,%xmm1
  ja     L314
  sqrtsd %xmm4,%xmm4
  nopl   0x0(%rax)
L380:
  movsd  %xmm5,(%rdx)
  mov    $0x1,%eax
  movsd  %xmm4,(%r12)
  movsd  %xmm6,0x0(%r13)
  jmp    L351
  nopw   0x0(%rax,%rax,1)
L35:
  comisd %xmm1,%xmm6
  ja     L162
  cs nopw 0x0(%rax,%rax,1)
L137:
  comisd %xmm1,%xmm3
  jbe    L162
  comisd %xmm1,%xmm5
  jbe    L251
  movsd  0x8(%rsp),%xmm7
  comisd %xmm1,%xmm7
  ja     L69
  comisd %xmm1,%xmm4
  jbe    L268
L238:
  comisd %xmm1,%xmm2
  ja     L63
  comisd %xmm1,%xmm5
  ja     L263
L162:
  comisd %xmm1,%xmm4
  ja     L336
L268:
  comisd %xmm1,%xmm2
  jbe    L336
  comisd %xmm1,%xmm5
  jbe    L336
  comisd %xmm1,%xmm6
  jbe    L336
  jmp    L271
  nop
L251:
  comisd %xmm1,%xmm4
  ja     L238
  comisd %xmm1,%xmm5
  jbe    L162
  comisd %xmm1,%xmm4
  jbe    L268
L263:
  movapd %xmm5,%xmm0
  movapd %xmm4,%xmm2
  mov    %rdx,0x20(%rsp)
  mulsd  %xmm5,%xmm0
  movsd  %xmm5,0x10(%rsp)
  mulsd  %xmm4,%xmm2
  movsd  %xmm4,0x8(%rsp)
  movapd %xmm0,%xmm6
  movapd %xmm5,%xmm0
  addsd  %xmm5,%xmm0
  addsd  %xmm2,%xmm6
  mulsd  %xmm4,%xmm0
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm0,(%rsp)
  movapd %xmm3,%xmm0
  call   <cos@plt>
  pxor   %xmm2,%xmm2
  pxor   %xmm1,%xmm1
  movsd  0x18(%rsp),%xmm6
  cvtsi2sd %eax,%xmm2
  mulsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm5
  mov    0x20(%rsp),%rdx
  subsd  %xmm2,%xmm6
  ucomisd %xmm6,%xmm1
  ja     L192
  sqrtsd %xmm6,%xmm6
  jmp    L380
L27:
  movapd %xmm7,%xmm0
  mov    %rdx,0x28(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm2,0x20(%rsp)
  call   <sin@plt>
  movsd  0x20(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm5
  movsd  0x10(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm6
  mov    0x28(%rsp),%rdx
  mulsd  %xmm4,%xmm5
  divsd  %xmm0,%xmm5
  jmp    L380
L353:
  movapd %xmm2,%xmm0
  mov    %rdx,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  call   <sin@plt>
  movsd  %xmm0,(%rsp)
  movsd  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm4
  movsd  0x10(%rsp),%xmm5
  movsd  0x18(%rsp),%xmm6
  mov    0x20(%rsp),%rdx
  mulsd  %xmm5,%xmm4
  divsd  %xmm0,%xmm4
  jmp    L380
L69:
  movapd %xmm3,%xmm0
  mov    %rdx,0x20(%rsp)
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  call   <sin@plt>
  movsd  %xmm0,(%rsp)
  movsd  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm6
  movsd  0x10(%rsp),%xmm5
  movsd  0x18(%rsp),%xmm4
  mov    0x20(%rsp),%rdx
  mulsd  %xmm5,%xmm6
  divsd  %xmm0,%xmm6
  jmp    L380
L63:
  movapd %xmm3,%xmm0
  mov    %rdx,0x20(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  movsd  %xmm2,0x18(%rsp)
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm6
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm5
  mov    0x20(%rsp),%rdx
  mulsd  %xmm4,%xmm6
  divsd  %xmm0,%xmm6
  jmp    L380
L54:
  movapd %xmm2,%xmm0
  mov    %rdx,0x20(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  movsd  %xmm3,0x18(%rsp)
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm3
  movsd  %xmm0,(%rsp)
  movapd %xmm3,%xmm0
  call   <sin@plt>
  movsd  (%rsp),%xmm4
  movsd  0x10(%rsp),%xmm6
  movsd  0x8(%rsp),%xmm5
  mov    0x20(%rsp),%rdx
  mulsd  %xmm6,%xmm4
  divsd  %xmm0,%xmm4
  jmp    L380
L314:
  movapd %xmm4,%xmm0
  mov    %rdx,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <sqrt@plt>
  movsd  (%rsp),%xmm5
  movsd  0x8(%rsp),%xmm6
  mov    0x10(%rsp),%rdx
  movapd %xmm0,%xmm4
  jmp    L380
L192:
  movapd %xmm6,%xmm0
  mov    %rdx,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <sqrt@plt>
  movsd  (%rsp),%xmm5
  movsd  0x8(%rsp),%xmm4
  mov    0x10(%rsp),%rdx
  movapd %xmm0,%xmm6
  jmp    L380
```

assistant: ```c
int find_side(double *sides, const double *angles) {
  double a, b, c;
  register int i;
  a = b = c = 0;
  for (i = 0; i < 3; i++) {
    const double A = to_radians(angles[(i + 0)]);
    const double B = to_radians(angles[(i + 1) % 3]);
    const double C = to_radians(angles[(i + 2) % 3]);
    a = sides[(i + 0)];
    b = sides[(i + 1) % 3];
    c = sides[(i + 2) % 3];
    if (!((a) > 0) && ((A) > 0) && ((b) > 0) && ((B) > 0)) {
      a = sin(A) * b / sin(B);
      goto new_info;
    }
    if (!((a) > 0) && ((A) > 0) && ((c) > 0) && ((C) > 0)) {
      a = sin(A) * c / sin(C);
      goto new_info;
    }
    if (!((b) > 0) && ((B) > 0) && ((a) > 0) && ((A) > 0)) {
      b = sin(B) * a / sin(A);
      goto new_info;
    }
    if (!((b) > 0) && ((B) > 0) && ((c) > 0) && ((C) > 0)) {
      b = sin(B) * c / sin(C);
      goto new_info;
    }
    if (!((c) > 0) && ((C) > 0) && ((a) > 0) && ((A) > 0)) {
      c = sin(C) * a / sin(A);
      goto new_info;
    }
    if (!((c) > 0) && ((C) > 0) && ((b) > 0) && ((B) > 0)) {
      c = sin(C) * b / sin(B);
      goto new_info;
    }
    if (!((c) > 0) && ((C) > 0) && ((a) > 0) && ((b) > 0)) {
      c = sqrt(a * a + b * b - 2 * a * b * cos(C));
      goto new_info;
    }
    if (!((b) > 0) && ((B) > 0) && ((a) > 0) && ((c) > 0)) {
      b = sqrt(a * a + c * c - 2 * a * c * cos(B));
      goto new_info;
    }
    if (!((a) > 0) && ((A) > 0) && ((a) > 0) && ((b) > 0)) {
      a = sqrt(b * b + c * c - 2 * b * c * cos(A));
      goto new_info;
    }
  }
  return 0;
new_info:
  sides[(i + 0) % 3] = a;
  sides[(i + 1) % 3] = b;
  sides[(i + 2) % 3] = c;
  return 1;
}
```