user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<input_data>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebp
  mov    %rsi,%rbx
  cmp    $0xf,%edi
  ja     L25
  mov    $0x8240,%eax
  bt     %rdi,%rax
  jae    L25
  mov    0x10(%rsi),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jle    L383
  cmp    $0x9,%ebp
  je     L41
L108:
  cmp    $0x6,%ebp
  jne    L179
  lea    0x0(,%r12,8),%eax
  cmp    $0x3f,%eax
  jle    L296
L427:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  movq   %xmm0,%rbp
  pxor   %xmm0,%xmm0
  movq   %rbp,%xmm7
  comisd %xmm7,%xmm0
  jae    L136
L142:
  movq   %rbp,%xmm7
  comisd D129(%rip),%xmm7
  ja     L261
L435:
  mov    0x28(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jle    L221
L458:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  call   <logtwo@plt>
  movapd %xmm0,%xmm3
  movsd  D77(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D234(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L428
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  movsd  D104(%rip),%xmm4
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  andnpd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
L428:
  comisd %xmm3,%xmm0
  jbe    L45
  lea    D199(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L45
L25:
  lea    D96(%rip),%rdi
  call   <puts@plt>
  lea    D312(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  mov    0x10(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jle    L383
L179:
  mov    0x48(%rbx),%rdi
  call   <atof@plt>
  movq   %xmm0,%r13
  mov    0x40(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  pxor   %xmm0,%xmm0
  movq   %r13,%xmm5
  comisd %xmm5,%xmm0
  jae    L66
L344:
  movq   %r13,%xmm6
  comisd D129(%rip),%xmm6
  jbe    L45
  lea    D217(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L45
L383:
  lea    D27(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  cmp    $0x9,%ebp
  jne    L108
L267:
  mov    $0x8,%esi
  lea    D317(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L262
L41:
  lea    0x0(,%rax,8),%eax
  cmp    $0x3f,%eax
  jle    L267
L262:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  movq   %xmm0,%rbp
  pxor   %xmm0,%xmm0
  movq   %rbp,%xmm5
  comisd %xmm5,%xmm0
  jae    L301
L268:
  movq   %rbp,%xmm6
  comisd D129(%rip),%xmm6
  ja     L140
L100:
  mov    0x28(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  mov    0x30(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r14d
  mov    0x38(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r13d
  mov    %ebp,%eax
  or     %r14d,%eax
  or     %r13d,%eax
  jns    L349
  lea    D356(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L349:
  cmp    $0x2,%ebp
  jg     L481
L393:
  lea    0x0(%rbp,%r14,1),%eax
  add    %r13d,%eax
  test   %eax,%eax
  jle    L244
L332:
  mov    0x40(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jle    L446
L491:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  call   <logtwo@plt>
  movapd %xmm0,%xmm3
  movsd  D77(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D234(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L72
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  movsd  D104(%rip),%xmm4
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  andnpd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
L72:
  comisd %xmm3,%xmm0
  ja     L396
L45:
  mov    0x8(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r13d
  mov    0x8(%rbx),%rdi
  call   <atoi@plt>
  cmp    $0x3f,%eax
  jle    L14
L185:
  mov    0x18(%rbx),%rdi
  lea    D126(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L13
  mov    0x18(%rbx),%rdi
  cmpb   $0x30,(%rdi)
  jne    L321
L13:
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L301:
  lea    D358(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L268
L140:
  lea    D217(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L100
L481:
  lea    D328(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L393
L244:
  lea    D32(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L332
L446:
  lea    D199(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L491
L396:
  lea    D199(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L45
L296:
  mov    $0x8,%esi
  lea    D317(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L427
L136:
  lea    D358(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L142
L261:
  lea    D217(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L435
L221:
  lea    D199(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L458
L66:
  lea    D358(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L344
L14:
  lea    D26(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L185
L321:
  lea    D156(%rip),%rsi
  call   <strcmp@plt>
  mov    $0x1,%r14d
  test   %rax,%rax
  jne    L160
L493:
  mov    %r13d,%eax
  cltd
  idiv   %ebp
  mov    %r14d,%ecx
  imul   %r12d,%ecx
  cltd
  idiv   %ecx
  test   %eax,%eax
  jg     L13
  lea    D250(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L13
L160:
  mov    0x18(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r14d
  cmp    $0x10,%eax
  ja     L327
L474:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r14d,%xmm0
  call   <logtwo@plt>
  movapd %xmm0,%xmm3
  movsd  D77(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D234(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L180
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  movsd  D104(%rip),%xmm4
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  andnpd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
L180:
  comisd %xmm3,%xmm0
  jbe    L493
  lea    D45(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L493
L327:
  lea    D22(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L474
```

tool_calls: name: retrieve_data
arguments: data_tag: D129
type_infered: f64[2]
name: retrieve_data
arguments: data_tag: D77
type_infered: byte[8]
name: retrieve_data
arguments: data_tag: D234
type_infered: byte[8]
name: retrieve_data
arguments: data_tag: D104
type_infered: byte[8]
name: retrieve_data
arguments: data_tag: D199
type_infered: string
name: retrieve_data
arguments: data_tag: D96
type_infered: string
name: retrieve_data
arguments: data_tag: D312
type_infered: string
name: retrieve_data
arguments: data_tag: D217
type_infered: string
name: retrieve_data
arguments: data_tag: D27
type_infered: string
name: retrieve_data
arguments: data_tag: D317
type_infered: string
name: retrieve_data
arguments: data_tag: D356
type_infered: string
name: retrieve_data
arguments: data_tag: D126
type_infered: string
name: retrieve_data
arguments: data_tag: D358
type_infered: string
name: retrieve_data
arguments: data_tag: D328
type_infered: string
name: retrieve_data
arguments: data_tag: D32
type_infered: string
name: retrieve_data
arguments: data_tag: D26
type_infered: string
name: retrieve_data
arguments: data_tag: D156
type_infered: string
name: retrieve_data
arguments: data_tag: D250
type_infered: string
name: retrieve_data
arguments: data_tag: D45
type_infered: string
name: retrieve_data
arguments: data_tag: D22
type_infered: string

tool: {"D129": [0.8,4503599627370496.0]}

tool: {"D77": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D234": [0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x43]}

tool: {"D104": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D199: Number of subbanks should be greater than or equal to 1 and should be a power of 2

tool: D96: Cmd-line parameters: C B A TECH NSubbanks

tool: D312:                  OR: C B A TECH RWP ERP EWP NSubbanks

tool: D217: Feature size must be <= 0.80 (um)

tool: D27: Block size must >=1

tool: D317: Block size must be at least %d


tool: D356: Ports must >=0

tool: D126: FA

tool: D358: Feature size must be > 0

tool: D328: Maximum of 2 read/write ports

tool: D32: Must have at least one port

tool: D26: Cache size must be greater than 32!

tool: D156: DM

tool: D250: Number of sets is less than 1:
  Need to either increase cache size, or decrease associativity or block size
  (or use fully associative cache)

tool: D45: Associativity should be a power of 2

tool: D22: Associativity must be  1,2,4,8,16 or 0(fully associative)

assistant: ```c
int input_data(int argc, char *argv[]) {
  int C, B, A, ERP, EWP, RWP, NSER, NSubbanks, fully_assoc;
  double tech;
  double logbanks, assoc;
  double logbanksfloor, assocfloor;
  int bits_output = 64;
  if ((argc != 6) && (argc != 9) && (argc != 15)) {
    printf("Cmd-line parameters: C B A TECH NSubbanks\n");
    printf("                 OR: C B A TECH RWP ERP EWP NSubbanks\n");
    exit(1);
  }
  B = atoi(argv[2]);
  if ((B < 1)) {
    printf("Block size must >=1\n");
    exit(1);
  }
  if (argc == 9) {
    if ((B * 8 < bits_output)) {
      printf("Block size must be at least %d\n", bits_output / 8);
      exit(1);
    }
    tech = atof(argv[4]);
    if ((tech <= 0)) {
      printf("Feature size must be > 0\n");
      exit(1);
    }
    if ((tech > 0.8)) {
      printf("Feature size must be <= 0.80 (um)\n");
      exit(1);
    }
    RWP = atoi(argv[5]);
    ERP = atoi(argv[6]);
    EWP = atoi(argv[7]);
    NSER = 0;
    if ((RWP < 0) || (EWP < 0) || (ERP < 0)) {
      printf("Ports must >=0\n");
      exit(1);
    }
    if (RWP > 2) {
      printf("Maximum of 2 read/write ports\n");
      exit(1);
    }
    if ((RWP + ERP + EWP) < 1) {
      printf("Must have at least one port\n");
      exit(1);
    }
    NSubbanks = atoi(argv[8]);
    if (NSubbanks < 1) {
      printf("Number of subbanks should be greater than or equal to 1 and should be a power of 2\n");
      exit(1);
    }
    logbanks = logtwo((double)(NSubbanks));
    logbanksfloor = floor(logbanks);
    if (logbanks > logbanksfloor) {
      printf("Number of subbanks should be greater than or equal to 1 and should be a power of 2\n");
      exit(1);
    }
  } else if (argc == 6) {
    if ((B * 8 < bits_output)) {
      printf("Block size must be at least %d\n", bits_output / 8);
      exit(1);
    }
    tech = atof(argv[4]);
    if ((tech <= 0)) {
      printf("Feature size must be > 0\n");
      exit(1);
    }
    if ((tech > 0.8)) {
      printf("Feature size must be <= 0.80 (um)\n");
      exit(1);
    }
    RWP = 1;
    ERP = 0;
    EWP = 0;
    NSER = 0;
    NSubbanks = atoi(argv[5]);
    if (NSubbanks < 1) {
      printf("Number of subbanks should be greater than or equal to 1 and should be a power of 2\n");
      exit(1);
    }
    logbanks = logtwo((double)(NSubbanks));
    logbanksfloor = floor(logbanks);
    if (logbanks > logbanksfloor) {
      printf("Number of subbanks should be greater than or equal to 1 and should be a power of 2\n");
      exit(1);
    }
  } else {
    tech = atof(argv[9]);
    NSubbanks = atoi(argv[8]);
    if ((tech <= 0)) {
      printf("Feature size must be > 0\n");
      exit(1);
    }
    if ((tech > 0.8)) {
      printf("Feature size must be <= 0.80 (um)\n");
      exit(1);
    }
  }
  C = atoi(argv[1]) / ((int)(NSubbanks));
  if (atoi(argv[1]) < 64) {
    printf("Cache size must be greater than 32!\n");
    exit(1);
  }
  if ((strcmp(argv[3], "FA") == 0) || (argv[3][0] == '0')) {
    A = C / B;
    fully_assoc = 1;
  } else {
    if (strcmp(argv[3], "DM") == 0) {
      A = 1;
      fully_assoc = 0;
    } else {
      fully_assoc = 0;
      A = atoi(argv[3]);
      if ((A < 0) || (A > 16)) {
        printf("Associativity must be  1,2,4,8,16 or 0(fully associative)\n");
        exit(1);
      }
      assoc = logtwo((double)(A));
      assocfloor = floor(assoc);
      if (assoc > assocfloor) {
        printf("Associativity should be a power of 2\n");
        exit(1);
      }
    }
  }
  if (!fully_assoc && C / (B * A) < 1) {
    printf("Number of sets is less than 1:\n  Need to either increase cache size, or decrease associativity or block size\n  (or use fully associative cache)\n");
    exit(1);
  }
  return (1);
}
```