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

```asm
<driveCalcMecPolarDegrees>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %edi,-0x34(%rbp)
  movss  %xmm0,-0x38(%rbp)
  movss  %xmm1,-0x3c(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %rdx,-0x50(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %r9,-0x68(%rbp)
  cmpl   $0x168,-0x34(%rbp)
  jg     L49
  cmpl   $0x0,-0x34(%rbp)
  js     L49
  mov    -0x38(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movss  D43(%rip),%xmm0
  movd   %eax,%xmm6
  comiss %xmm0,%xmm6
  ja     L49
  mov    -0x3c(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movss  D43(%rip),%xmm0
  movd   %eax,%xmm7
  comiss %xmm0,%xmm7
  jbe    L45
L49:
  movss  -0x3c(%rbp),%xmm0
  mov    -0x38(%rbp),%edx
  mov    -0x34(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %edx,%xmm0
  mov    %eax,%esi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <writeDebugStream@plt>
  jmp    L43
L45:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x34(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D6(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <cosDegrees@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x34(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D6(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <cosDegrees@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x20(%rbp)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x24(%rbp),%xmm0
  movss  %xmm0,-0x6c(%rbp)
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm3
  mulss  -0x3c(%rbp),%xmm3
  movaps %xmm3,%xmm0
  addss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x6c(%rbp)
  mov    -0x20(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm5
  mulss  -0x3c(%rbp),%xmm5
  movaps %xmm5,%xmm0
  addss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x6c(%rbp)
  mov    -0x20(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mulss  -0x3c(%rbp),%xmm1
  movss  -0x6c(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x24(%rbp),%xmm0
  movss  %xmm0,-0x6c(%rbp)
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <abs@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mulss  -0x3c(%rbp),%xmm1
  movss  -0x6c(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sgn@plt>
  movss  %xmm0,-0x6c(%rbp)
  movss  -0x24(%rbp),%xmm0
  mov    -0x1c(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <helpFindMinAbsFloat@plt>
  mulss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <sgn@plt>
  movss  %xmm0,-0x6c(%rbp)
  movss  -0x20(%rbp),%xmm0
  mov    -0x18(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <helpFindMinAbsFloat@plt>
  mulss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <sgn@plt>
  movss  %xmm0,-0x6c(%rbp)
  movss  -0x20(%rbp),%xmm0
  mov    -0x14(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <helpFindMinAbsFloat@plt>
  mulss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  movd   %eax,%xmm0
  call   <sgn@plt>
  movss  %xmm0,-0x6c(%rbp)
  movss  -0x24(%rbp),%xmm0
  mov    -0x10(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <helpFindMinAbsFloat@plt>
  mulss  -0x6c(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x20(%rbp),%xmm0
  mov    -0x24(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <helpFindMaxAbsFloat@plt>
  movd   %xmm0,%eax
  mov    %eax,-0xc(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x48(%rbp),%xmm0
  divss  -0xc(%rbp),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x8(%rbp),%xmm0
  mulss  -0x1c(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <round@plt>
  mov    -0x50(%rbp),%rdx
  mov    %rax,(%rdx)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x8(%rbp),%xmm0
  mulss  -0x18(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <round@plt>
  mov    -0x58(%rbp),%rdx
  mov    %rax,(%rdx)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x8(%rbp),%xmm0
  mulss  -0x14(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <round@plt>
  mov    -0x60(%rbp),%rdx
  mov    %rax,(%rdx)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x8(%rbp),%xmm0
  mulss  -0x10(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <round@plt>
  mov    -0x68(%rbp),%rdx
  mov    %rax,(%rdx)
  nop
L43:
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D43
type_guessed: f32
name: unpack_data
arguments: data_label: D13
type_guessed: string
name: unpack_data
arguments: data_label: D6
type_guessed: f64

tool: D43: 1

tool: D13: Drive parameters do not fit constraints! Ang: %d, Pow: %f, Rot: %f

tool: D6: 45

assistant: ```c
void driveCalcMecPolarDegrees(int angle, float powerRatio, float rotationRatio, long maxRefVal, long *mecFL, long *mecBL, long *mecFR, long *mecBR) {
  if (angle > 360 || angle < 0 || abs(powerRatio) > 1.0 || abs(rotationRatio) > 1.0) {
    writeDebugStream("Drive parameters do not fit constraints! Ang: %d, Pow: %f, Rot: %f", angle, powerRatio, rotationRatio);
  } else {
    float maxPowFLBR = cosDegrees(45.0 - (float)angle);
    float maxPowFRBL = cosDegrees(45.0 + (float)angle);
    float powFL = (powerRatio * maxPowFLBR) + (rotationRatio * abs(maxPowFLBR));
    float powBL = (powerRatio * maxPowFRBL) + (rotationRatio * abs(maxPowFRBL));
    float powFR = (powerRatio * maxPowFRBL) - (rotationRatio * abs(maxPowFRBL));
    float powBR = (powerRatio * maxPowFLBR) - (rotationRatio * abs(maxPowFLBR));
    powFL = sgn(powFL) * helpFindMinAbsFloat(powFL, maxPowFLBR);
    powBL = sgn(powBL) * helpFindMinAbsFloat(powBL, maxPowFRBL);
    powFR = sgn(powFR) * helpFindMinAbsFloat(powFR, maxPowFRBL);
    powBR = sgn(powBR) * helpFindMinAbsFloat(powBR, maxPowFLBR);
    float absHighestPow = helpFindMaxAbsFloat(maxPowFLBR, maxPowFRBL);
    long multiplier = maxRefVal / absHighestPow;
    *mecFL = round(powFL * multiplier);
    *mecBL = round(powBL * multiplier);
    *mecFR = round(powFR * multiplier);
    *mecBR = round(powBR * multiplier);
  }
}
```