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

```asm
<drive>:
  endbr64
  sub    $0x28,%rsp
  movss  %xmm0,0x14(%rsp)
  movss  %xmm1,0xc(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movsd  D46(%rip),%xmm3
  movsd  %xmm5,(%rsp)
  subsd  %xmm5,%xmm3
  movapd %xmm3,%xmm0
  mulsd  D31(%rip),%xmm0
  divsd  D2(%rip),%xmm0
  call   <cos@plt>
  movss  %xmm0,0x8(%rsp)
  movsd  D46(%rip),%xmm7
  addsd  (%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  D31(%rip),%xmm0
  divsd  D2(%rip),%xmm0
  call   <cos@plt>
  movss  %xmm0,(%rsp)
  movss  0x8(%rsp),%xmm2
  movaps %xmm2,%xmm3
  mulss  0x14(%rsp),%xmm3
  movss  %xmm3,0x10(%rsp)
  movaps %xmm2,%xmm0
  call   <fabs@plt>
  mulss  0xc(%rsp),%xmm0
  movaps %xmm0,%xmm7
  addss  0x10(%rsp),%xmm7
  movss  %xmm7,0x18(%rsp)
  movss  0x14(%rsp),%xmm4
  movss  (%rsp),%xmm5
  mulss  %xmm5,%xmm4
  movss  %xmm4,0x14(%rsp)
  movaps %xmm5,%xmm0
  call   <fabs@plt>
  mulss  0xc(%rsp),%xmm0
  movaps %xmm0,%xmm1
  addss  0x14(%rsp),%xmm1
  movss  %xmm1,0x1c(%rsp)
  movss  (%rsp),%xmm0
  call   <fabs@plt>
  mulss  0xc(%rsp),%xmm0
  movss  0x14(%rsp),%xmm4
  subss  %xmm0,%xmm4
  movss  %xmm4,0x14(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <fabs@plt>
  mulss  0xc(%rsp),%xmm0
  movss  0x10(%rsp),%xmm3
  subss  %xmm0,%xmm3
  movss  %xmm3,0xc(%rsp)
  movss  0x18(%rsp),%xmm0
  call   <helpFindSign@plt>
  movss  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm1
  movss  0x18(%rsp),%xmm0
  call   <helpFindMinAbsFloat@plt>
  movaps %xmm0,%xmm7
  mulss  0x10(%rsp),%xmm7
  movss  %xmm7,0x18(%rsp)
  movss  0x1c(%rsp),%xmm0
  call   <helpFindSign@plt>
  movss  %xmm0,0x10(%rsp)
  movss  (%rsp),%xmm1
  movss  0x1c(%rsp),%xmm0
  call   <helpFindMinAbsFloat@plt>
  movaps %xmm0,%xmm7
  mulss  0x10(%rsp),%xmm7
  movss  %xmm7,0x1c(%rsp)
  movss  0x14(%rsp),%xmm0
  call   <helpFindSign@plt>
  movss  %xmm0,0x10(%rsp)
  movss  (%rsp),%xmm1
  movss  0x14(%rsp),%xmm0
  call   <helpFindMinAbsFloat@plt>
  movaps %xmm0,%xmm6
  mulss  0x10(%rsp),%xmm6
  movss  %xmm6,0x14(%rsp)
  movss  0xc(%rsp),%xmm0
  call   <helpFindSign@plt>
  movss  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm0
  call   <helpFindMinAbsFloat@plt>
  movaps %xmm0,%xmm2
  mulss  0x10(%rsp),%xmm2
  movss  %xmm2,0xc(%rsp)
  movss  (%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  call   <helpFindMaxAbsFloat@plt>
  movaps %xmm0,%xmm1
  movss  D93(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  0x1c(%rsp),%xmm7
  mulss  %xmm0,%xmm7
  movss  %xmm7,0x8(%rsp)
  movss  0x14(%rsp),%xmm6
  mulss  %xmm0,%xmm6
  movss  %xmm6,(%rsp)
  movss  0xc(%rsp),%xmm2
  mulss  %xmm0,%xmm2
  movss  %xmm2,0xc(%rsp)
  mulss  0x18(%rsp),%xmm0
  call   <helpRoundFloat@plt>
  mov    %eax,%esi
  lea    D80(%rip),%rdi
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  call   <helpRoundFloat@plt>
  mov    %eax,%esi
  lea    D92(%rip),%rdi
  call   <printf@plt>
  movss  (%rsp),%xmm0
  call   <helpRoundFloat@plt>
  mov    %eax,%esi
  lea    D68(%rip),%rdi
  call   <printf@plt>
  movss  0xc(%rsp),%xmm0
  call   <helpRoundFloat@plt>
  mov    %eax,%esi
  lea    D104(%rip),%rdi
  call   <printf@plt>
  add    $0x28,%rsp
  ret
```

tool_calls: name: unpack_data
arguments: tag: D46
data_type: f64
name: unpack_data
arguments: tag: D31
data_type: f64
name: unpack_data
arguments: tag: D2
data_type: f64
name: unpack_data
arguments: tag: D93
data_type: f32
name: unpack_data
arguments: tag: D80
data_type: string
name: unpack_data
arguments: tag: D92
data_type: string
name: unpack_data
arguments: tag: D68
data_type: string
name: unpack_data
arguments: tag: D104
data_type: string

tool: D46: 45

tool: D31: 3.141592654

tool: D2: 180

tool: D93: 100

tool: D80: Scaled Power FL: %d


tool: D92: Scaled Power BL: %d


tool: D68: Scaled Power FR: %d


tool: D104: Scaled Power BR: %d


assistant: ```c
void drive(int angle, float powerRatio, float rotationRatio) {
  float maxPowFLBR = cos((45.0 - (float)angle) * 3.141592654 / 180.0);
  float maxPowFRBL = cos((45.0 + (float)angle) * 3.141592654 / 180.0);
  float powFL = (powerRatio * maxPowFLBR) + (rotationRatio * fabs(maxPowFLBR));
  float powBL = (powerRatio * maxPowFRBL) + (rotationRatio * fabs(maxPowFRBL));
  float powFR = (powerRatio * maxPowFRBL) - (rotationRatio * fabs(maxPowFRBL));
  float powBR = (powerRatio * maxPowFLBR) - (rotationRatio * fabs(maxPowFLBR));
  powFL = helpFindSign(powFL) * helpFindMinAbsFloat(powFL, maxPowFLBR);
  powBL = helpFindSign(powBL) * helpFindMinAbsFloat(powBL, maxPowFRBL);
  powFR = helpFindSign(powFR) * helpFindMinAbsFloat(powFR, maxPowFRBL);
  powBR = helpFindSign(powBR) * helpFindMinAbsFloat(powBR, maxPowFLBR);
  float maxRefPow = 100.0;
  float absHighestPow = helpFindMaxAbsFloat(maxPowFLBR, maxPowFRBL);
  float multiplier = maxRefPow / absHighestPow;
  float scaledPowFL = powFL * multiplier;
  float scaledPowBL = powBL * multiplier;
  float scaledPowFR = powFR * multiplier;
  float scaledPowBR = powBR * multiplier;
  printf("Scaled Power FL: %d\n", helpRoundFloat(scaledPowFL));
  printf("Scaled Power BL: %d\n", helpRoundFloat(scaledPowBL));
  printf("Scaled Power FR: %d\n", helpRoundFloat(scaledPowFR));
  printf("Scaled Power BR: %d\n", helpRoundFloat(scaledPowBR));
}
```