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

```asm
<convcode>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  movq   %xmm0,%r12
  mov    %edi,%ebx
  mov    %rsi,%rbp
  comisd D115(%rip),%xmm0
  jb     L118
  cmp    $0x20,%edi
  ja     L13
  movabs $0x100010006,%rax
  bt     %rdi,%rax
  jb     L77
L13:
  cmp    $0x1,%ebx
  je     L57
  cmp    $0x10,%ebx
  je     L57
L289:
  mov    %ebx,%eax
  cmp    $0x20,%ebx
  ja     L38
L374:
  movabs $0x100010002,%rdx
  bt     %rax,%rdx
  jae    L38
  lea    0x1(%rbp),%r13
  lea    D14(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L72
  lea    D54(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L72
  lea    D77(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L38
L72:
  lea    D49(%rip),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L328
L77:
  lea    0x1(%rsi),%r13
  lea    D274(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L138
  cmp    $0x1,%ebx
  je     L57
  mov    %ebx,%eax
  cmp    $0x10,%ebx
  jne    L374
L57:
  lea    0x1(%rbp),%r13
  lea    D258(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L87
  lea    D148(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L87
  lea    D219(%rip),%rsi
  mov    %r13,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L289
L87:
  lea    D94(%rip),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L328
L138:
  lea    D7(%rip),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L328
L118:
  comisd D115(%rip),%xmm0
  jae    L13
  comisd D115(%rip),%xmm0
  jae    L289
L38:
  cmp    $0x4,%ebx
  jne    L306
  movq   %r12,%xmm4
  comisd D115(%rip),%xmm4
  jae    L51
L306:
  lea    D266(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L288
  lea    D264(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L288
  lea    D83(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L288
  lea    D43(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L272
L288:
  lea    D93(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
L328:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L51:
  lea    0x1(%rbp),%rbx
  lea    D274(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L177
  lea    D198(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L306
  lea    D141(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  jmp    L328
L177:
  lea    D7(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  jmp    L328
L272:
  lea    D137(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L60
  lea    D72(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L60
  lea    D80(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L60
  lea    D131(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L60
  lea    D21(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L115
L60:
  lea    D126(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  jmp    L328
L115:
  movb   $0x0,0x2(%rbp)
  jmp    L328
```

tool_calls: name: parse_data
arguments: label: D115
type_infered: f64
name: parse_data
arguments: label: D14
type_infered: string
name: parse_data
arguments: label: D54
type_infered: string
name: parse_data
arguments: label: D77
type_infered: string
name: parse_data
arguments: label: D49
type_infered: string
name: parse_data
arguments: label: D274
type_infered: string
name: parse_data
arguments: label: D258
type_infered: string
name: parse_data
arguments: label: D148
type_infered: string
name: parse_data
arguments: label: D219
type_infered: string
name: parse_data
arguments: label: D94
type_infered: string
name: parse_data
arguments: label: D7
type_infered: string
name: parse_data
arguments: label: D266
type_infered: string
name: parse_data
arguments: label: D264
type_infered: string
name: parse_data
arguments: label: D83
type_infered: string
name: parse_data
arguments: label: D43
type_infered: string
name: parse_data
arguments: label: D93
type_infered: string
name: parse_data
arguments: label: D198
type_infered: string
name: parse_data
arguments: label: D141
type_infered: string
name: parse_data
arguments: label: D137
type_infered: string
name: parse_data
arguments: label: D72
type_infered: string
name: parse_data
arguments: label: D80
type_infered: string
name: parse_data
arguments: label: D131
type_infered: string
name: parse_data
arguments: label: D21
type_infered: string
name: parse_data
arguments: label: D126
type_infered: string

tool: D115: 2.12

tool: D14: 2S

tool: D54: 2L

tool: D77: 2X

tool: D49: C

tool: D274: 1C

tool: D258: 1S

tool: D148: 1L

tool: D219: 1X

tool: D94: B

tool: D7: A

tool: D266: C1P

tool: D264: C1W

tool: D83: C1Y

tool: D43: C1N

tool: D93: P1

tool: D198: 2C

tool: D141: D

tool: D137: C2P

tool: D72: C2W

tool: D80: C2Y

tool: D131: C2N

tool: D21: C2D

tool: D126: P2

assistant: ```c
void convcode(double ver, int sys, char *type) {
  if (ver >= 2.12 && (sys == 0x01 || sys == 0x10 || sys == 0x02 || sys == 0x20) && !strcmp(type + 1, "1C")) {
    strcpy(type + 1, "A");
  } else if (ver >= 2.12 && (sys == 0x01 || sys == 0x10) && (!strcmp(type + 1, "1S") || !strcmp(type + 1, "1L") || !strcmp(type + 1, "1X"))) {
    strcpy(type + 1, "B");
  } else if (ver >= 2.12 && (sys == 0x01 || sys == 0x10 || sys == 0x20) && (!strcmp(type + 1, "2S") || !strcmp(type + 1, "2L") || !strcmp(type + 1, "2X"))) {
    strcpy(type + 1, "C");
  } else if (ver >= 2.12 && sys == 0x04 && !strcmp(type + 1, "1C")) {
    strcpy(type + 1, "A");
  } else if (ver >= 2.12 && sys == 0x04 && !strcmp(type + 1, "2C")) {
    strcpy(type + 1, "D");
  } else if (!strcmp(type, "C1P") || !strcmp(type, "C1W") || !strcmp(type, "C1Y") || !strcmp(type, "C1N")) {
    strcpy(type, "P1");
  } else if (!strcmp(type, "C2P") || !strcmp(type, "C2W") || !strcmp(type, "C2Y") || !strcmp(type, "C2N") || !strcmp(type, "C2D")) {
    strcpy(type, "P2");
  } else {
    type[2] = '\0';
  }
}
```