user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<input_data>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x10,%rsp
  cmp    $0xf,%edi
  jbe    L279
  lea    D328(%rip),%rdi
  call   <puts@plt>
  lea    D55(%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    L95
L61:
  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    L137
L484:
  comisd D203(%rip),%xmm0
  ja     L475
L376:
  mov    0x8(%rbx),%rdi
  call   <atoi@plt>
  mov    0x8(%rbx),%rdi
  mov    %eax,%r13d
  call   <atoi@plt>
  cmp    $0x3f,%eax
  jle    L53
L146:
  mov    0x18(%rbx),%rdi
  lea    D40(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L290
  mov    0x18(%rbx),%rdi
  cmpb   $0x30,(%rdi)
  je     L290
  lea    D196(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L64
L473:
  mov    %r13d,%eax
  cltd
  idiv   %r12d
  cltd
  idiv   %ebp
  test   %eax,%eax
  jle    L453
L290:
  add    $0x10,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L279:
  mov    $0xffffffffffff7dbf,%rax
  mov    %edi,%r12d
  bt     %rdi,%rax
  jb     L39
  mov    0x10(%rsi),%rdi
  call   <atoi@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  jle    L330
  cmp    $0x9,%r12d
  je     L345
L114:
  cmp    $0x6,%r12d
  jne    L61
  lea    0x0(,%rbp,8),%eax
  cmp    $0x3f,%eax
  jle    L348
L283:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  jae    L34
L369:
  comisd D203(%rip),%xmm0
  ja     L205
L35:
  mov    0x28(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jle    L71
L117:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12d,%xmm0
  call   <logtwo@plt>
  movsd  D161(%rip),%xmm2
  movsd  D287(%rip),%xmm4
  movapd %xmm0,%xmm1
  movapd %xmm0,%xmm3
  andpd  %xmm2,%xmm1
  ucomisd %xmm1,%xmm4
  jbe    L252
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  movsd  D208(%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
L252:
  comisd %xmm3,%xmm0
  jbe    L376
  lea    D113(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L376
  nopl   0x0(%rax)
L53:
  lea    D281(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L146
  nopl   0x0(%rax,%rax,1)
L345:
  lea    0x0(,%rax,8),%eax
  cmp    $0x3f,%eax
  jle    L134
L454:
  mov    0x20(%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  jae    L182
L206:
  comisd D203(%rip),%xmm0
  ja     L82
L223:
  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    L18
  lea    D33(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L18:
  cmp    $0x2,%r12d
  jg     L166
L91:
  add    %r14d,%r12d
  add    %r13d,%r12d
  test   %r12d,%r12d
  jle    L208
L410:
  mov    0x40(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jg     L117
L71:
  lea    D113(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L117
  nopw   0x0(%rax,%rax,1)
L95:
  lea    D65(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L61
  nopl   0x0(%rax,%rax,1)
L64:
  mov    0x18(%rbx),%rdi
  call   <atoi@plt>
  mov    %eax,%ebx
  cmp    $0x10,%eax
  ja     L253
L164:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  call   <logtwo@plt>
  movsd  D161(%rip),%xmm2
  movsd  D287(%rip),%xmm4
  movapd %xmm0,%xmm1
  movapd %xmm0,%xmm3
  andpd  %xmm2,%xmm1
  ucomisd %xmm1,%xmm4
  ja     L116
L352:
  imul   %ebx,%ebp
  comisd %xmm3,%xmm0
  jbe    L473
  lea    D199(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L473
  nop
L453:
  lea    D147(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L290
L39:
  lea    D328(%rip),%rdi
  call   <puts@plt>
  lea    D55(%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     L61
L330:
  lea    D65(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  cmp    $0x9,%r12d
  jne    L114
L134:
  mov    $0x8,%esi
  lea    D201(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L454
  nopw   0x0(%rax,%rax,1)
L166:
  lea    D39(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L91
  nopl   0x0(%rax,%rax,1)
L82:
  lea    D115(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L223
  nopl   0x0(%rax,%rax,1)
L348:
  mov    $0x8,%esi
  lea    D201(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L283
  nopw   0x0(%rax,%rax,1)
L205:
  lea    D115(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L35
  nopl   0x0(%rax,%rax,1)
L475:
  lea    D115(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L376
  nopl   0x0(%rax,%rax,1)
L208:
  lea    D15(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L410
  nopl   0x0(%rax,%rax,1)
L182:
  lea    D76(%rip),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L206
  nopw   0x0(%rax,%rax,1)
L34:
  lea    D76(%rip),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L369
  nopw   0x0(%rax,%rax,1)
L137:
  lea    D76(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L484
  nopl   0x0(%rax)
L116:
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  movsd  D208(%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    L352
L253:
  lea    D219(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L164
```

tool_calls: name: retrieve_data
arguments: data_label: D328
type_guessed: string
name: retrieve_data
arguments: data_label: D55
type_guessed: string
name: retrieve_data
arguments: data_label: D203
type_guessed: f64[2]
name: retrieve_data
arguments: data_label: D40
type_guessed: string
name: retrieve_data
arguments: data_label: D196
type_guessed: string
name: retrieve_data
arguments: data_label: D161
type_guessed: byte[8]
name: retrieve_data
arguments: data_label: D287
type_guessed: byte[8]
name: retrieve_data
arguments: data_label: D208
type_guessed: byte[8]
name: retrieve_data
arguments: data_label: D113
type_guessed: string
name: retrieve_data
arguments: data_label: D281
type_guessed: string
name: retrieve_data
arguments: data_label: D33
type_guessed: string
name: retrieve_data
arguments: data_label: D65
type_guessed: string
name: retrieve_data
arguments: data_label: D199
type_guessed: string
name: retrieve_data
arguments: data_label: D147
type_guessed: string
name: retrieve_data
arguments: data_label: D201
type_guessed: string
name: retrieve_data
arguments: data_label: D39
type_guessed: string
name: retrieve_data
arguments: data_label: D115
type_guessed: string
name: retrieve_data
arguments: data_label: D15
type_guessed: string
name: retrieve_data
arguments: data_label: D76
type_guessed: string
name: retrieve_data
arguments: data_label: D219
type_guessed: string

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

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

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

tool: D40: FA

tool: D196: DM

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

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

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

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

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

tool: D33: Ports must >=0

tool: D65: Block size must >=1

tool: D199: Associativity should be a power of 2

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


tool: D39: Maximum of 2 read/write ports

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

tool: D15: Must have at least one port

tool: D76: Feature size must be > 0

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