user: Please show me the C implementation that matches the assembly code listed below:

```asm
<sidesToAngle>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %esi,-0x28(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jne    L1
  cmpl   $0x0,-0x28(%rbp)
  jne    L1
  movss  D42(%rip),%xmm0
  jmp    L33
L1:
  cmpl   $0x0,-0x24(%rbp)
  je     L174
  cmpl   $0x0,-0x28(%rbp)
  jne    L37
L174:
  cmpl   $0x0,-0x24(%rbp)
  jne    L74
  cmpl   $0x0,-0x28(%rbp)
  jle    L146
  movss  D53(%rip),%xmm0
  jmp    L33
L146:
  movss  D28(%rip),%xmm0
  jmp    L33
L74:
  cmpl   $0x0,-0x24(%rbp)
  jle    L66
  pxor   %xmm0,%xmm0
  jmp    L33
L66:
  movss  D38(%rip),%xmm0
  jmp    L33
L37:
  mov    -0x24(%rbp),%eax
  cltd
  idivl  -0x28(%rbp)
  mov    %eax,%edi
  call   <atan@plt>
  mov    %eax,%edi
  call   <abs@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  movss  -0x18(%rbp),%xmm1
  movss  D38(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D21(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  imul   -0x28(%rbp),%eax
  test   %eax,%eax
  jns    L118
  cmpl   $0x0,-0x24(%rbp)
  jle    L18
  movl   $0x4,-0x14(%rbp)
  jmp    L6
L18:
  movl   $0x2,-0x14(%rbp)
  jmp    L6
L118:
  cmpl   $0x0,-0x24(%rbp)
  jns    L128
  movl   $0x3,-0x14(%rbp)
  jmp    L6
L128:
  movl   $0x1,-0x14(%rbp)
L6:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  movd   %xmm0,%ebx
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  movd   %ebx,%xmm2
  comiss %xmm0,%xmm2
  jb     L30
  mov    -0x14(%rbp),%eax
  sub    $0x1,%eax
  imul   $0x5a,%eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x18(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  jmp    L96
L30:
  mov    -0x14(%rbp),%eax
  imul   $0x5a,%eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  subss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
L96:
  movss  -0x18(%rbp),%xmm0
L33:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D42
data_type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D53
data_type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D28
data_type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D38
data_type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D21
data_type: f64

tool: {"D42": [0x00,0x00,0x80,0xbf]}

tool: {"D53": [0x00,0x00,0xb4,0x42]}

tool: {"D28": [0x00,0x00,0x87,0x43]}

tool: {"D38": [0x00,0x00,0x34,0x43]}

tool: D21: 3.14

assistant: ```c
float sidesToAngle(int sideOne, int sideTwo) {
  if (sideOne == 0 && sideTwo == 0) {
    return -1;
  }
  if (sideOne == 0 || sideTwo == 0) {
    if (sideOne == 0) {
      if (sideTwo > 0) {
        return 90;
      } else {
        return 270;
      }
    } else {
      if (sideOne > 0) {
        return 0;
      } else {
        return 180;
      }
    }
  }
  float angle = abs(atan(sideOne / sideTwo));
  angle = ((angle * 180) / 3.14);
  int quadrant;
  if ((sideOne * sideTwo) < 0) {
    if (sideOne > 0) {
      quadrant = 4;
    } else {
      quadrant = 2;
    }
  } else if (sideOne < 0) {
    quadrant = 3;
  } else {
    quadrant = 1;
  }
  if (abs(sideOne) >= abs(sideTwo)) {
    angle += ((quadrant - 1) * 90);
  } else {
    angle = (quadrant * 90) - angle;
  }
  return angle;
}
```