user: Converte this assembly snippet into its equivalent C code:

```asm
<input_data>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x10,%rsp
  cmp    $0xf,%edi
  jbe    L444
  lea    D251(%rip),%rdi
  call   <puts@plt>
  lea    D13(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  mov    0x10(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jle    L56
L202:
  mov    0x48(%rbx),%rdi
  call   <atof@plt>
  mov    0x40(%rbx),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <atoi@plt>
  movsd  0x8(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  mov    %eax,%r12d
  comisd %xmm0,%xmm1
  jae    L100
L182:
  comisd D311(%rip),%xmm0
  ja     L183
L230:
  mov    0x8(%rbx),%rdi
  call   <atoi@plt>
  mov    0x8(%rbx),%rdi
  mov    %eax,%r13d
  call   <atoi@plt>
  cmp    $0x3f,%eax
  jle    L251
L27:
  mov    0x18(%rbx),%rdi
  lea    D291(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L79
  mov    0x18(%rbx),%rdi
  cmpb   $0x30,(%rdi)
  je     L79
  lea    D32(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L59
L347:
  mov    %r13d,%eax
  cltd
  idiv   %r12d
  cltd
  idiv   %ebp
  test   %eax,%eax
  jle    L477
L79:
  add    $0x10,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L444:
  mov    $0xffffffffffff7dbf,%rax
  mov    %edi,%r12d
  bt     %rdi,%rax
  jb     L84
  mov    0x10(%rsi),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jle    L449
  cmp    $0x9,%r12d
  je     L51
L425:
  cmp    $0x6,%r12d
  jne    L202
  lea    0x0(,%rbp,8),%eax
  cmp    $0x3f,%eax
  jle    L430
L164:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  jae    L144
L195:
  comisd D311(%rip),%xmm0
  ja     L486
L21:
  mov    0x28(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jle    L157
L87:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12d,%xmm0
  call   <logtwo@plt>
  movsd  D210(%rip),%xmm2
  movsd  D103(%rip),%xmm4
  movapd %xmm0,%xmm1
  movapd %xmm0,%xmm3
  andpd  %xmm2,%xmm1
  ucomisd %xmm1,%xmm4
  jbe    L10
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  movsd  D278(%rip),%xmm4
  andnpd %xmm0,%xmm2
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
L10:
  comisd %xmm3,%xmm0
  jbe    L230
  lea    D238(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L230
  nopl   0x0(%rax)
L251:
  lea    D296(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L27
  nopl   0x0(%rax,%rax,1)
L51:
  lea    0x0(,%rax,8),%eax
  cmp    $0x3f,%eax
  jle    L4
L383:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  jae    L370
L127:
  comisd D311(%rip),%xmm0
  ja     L394
L62:
  mov    0x28(%rbx),%rdi
  call   <atoi@plt>
  mov    0x30(%rbx),%rdi
  mov    %eax,%r12d
  call   <atoi@plt>
  mov    0x38(%rbx),%rdi
  mov    %eax,%r14d
  call   <atoi@plt>
  mov    %eax,%r13d
  mov    %r12d,%eax
  or     %r14d,%eax
  or     %r13d,%eax
  jns    L388
  lea    D286(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L388:
  cmp    $0x2,%r12d
  jg     L227
L8:
  add    %r14d,%r12d
  add    %r13d,%r12d
  test   %r12d,%r12d
  jle    L24
L94:
  mov    0x40(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jg     L87
L157:
  lea    D238(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L87
  nopw   0x0(%rax,%rax,1)
L56:
  lea    D179(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L202
  nopl   0x0(%rax,%rax,1)
L59:
  mov    0x18(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebx
  cmp    $0x10,%eax
  ja     L428
L259:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  call   <logtwo@plt>
  movsd  D210(%rip),%xmm2
  movsd  D103(%rip),%xmm4
  movapd %xmm0,%xmm1
  movapd %xmm0,%xmm3
  andpd  %xmm2,%xmm1
  ucomisd %xmm1,%xmm4
  ja     L414
L71:
  imul   %ebx,%ebp
  comisd %xmm3,%xmm0
  jbe    L347
  lea    D136(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L347
  nop
L477:
  lea    D256(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L79
L84:
  lea    D251(%rip),%rdi
  call   <puts@plt>
  lea    D13(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  mov    0x10(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jg     L202
L449:
  lea    D179(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  cmp    $0x9,%r12d
  jne    L425
L4:
  mov    $0x8,%esi
  lea    D96(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L383
  nopw   0x0(%rax,%rax,1)
L227:
  lea    D220(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L8
  nopl   0x0(%rax,%rax,1)
L394:
  lea    D57(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L62
  nopl   0x0(%rax,%rax,1)
L430:
  mov    $0x8,%esi
  lea    D96(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L164
  nopw   0x0(%rax,%rax,1)
L486:
  lea    D57(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L21
  nopl   0x0(%rax,%rax,1)
L183:
  lea    D57(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L230
  nopl   0x0(%rax,%rax,1)
L24:
  lea    D255(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L94
  nopl   0x0(%rax,%rax,1)
L370:
  lea    D276(%rip),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L127
  nopw   0x0(%rax,%rax,1)
L144:
  lea    D276(%rip),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L195
  nopw   0x0(%rax,%rax,1)
L100:
  lea    D276(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L182
  nopl   0x0(%rax)
L414:
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  movsd  D278(%rip),%xmm4
  andnpd %xmm0,%xmm2
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
  jmp    L71
L428:
  lea    D151(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L259
```

tool_calls: name: read_data
arguments: data_label: D251
type_guessed: string
name: read_data
arguments: data_label: D13
type_guessed: string
name: read_data
arguments: data_label: D311
type_guessed: f64[2]
name: read_data
arguments: data_label: D291
type_guessed: string
name: read_data
arguments: data_label: D32
type_guessed: string
name: read_data
arguments: data_label: D210
type_guessed: byte[8]
name: read_data
arguments: data_label: D103
type_guessed: byte[8]
name: read_data
arguments: data_label: D278
type_guessed: byte[8]
name: read_data
arguments: data_label: D238
type_guessed: string
name: read_data
arguments: data_label: D296
type_guessed: string
name: read_data
arguments: data_label: D286
type_guessed: string
name: read_data
arguments: data_label: D179
type_guessed: string
name: read_data
arguments: data_label: D136
type_guessed: string
name: read_data
arguments: data_label: D256
type_guessed: string
name: read_data
arguments: data_label: D96
type_guessed: string
name: read_data
arguments: data_label: D220
type_guessed: string
name: read_data
arguments: data_label: D57
type_guessed: string
name: read_data
arguments: data_label: D255
type_guessed: string
name: read_data
arguments: data_label: D276
type_guessed: string
name: read_data
arguments: data_label: D151
type_guessed: string

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

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

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

tool: D291: FA

tool: D32: DM

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

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

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

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

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

tool: D286: Ports must >=0

tool: D179: Block size must >=1

tool: D136: Associativity should be a power of 2

tool: D256: 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: D96: Block size must be at least %d


tool: D220: Maximum of 2 read/write ports

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

tool: D255: Must have at least one port

tool: D276: Feature size must be > 0

tool: D151: 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);
}
```