user: 下面的汇编指令对应的C源代码是什么:

```asm
<convert_units>:
  endbr64
  test   %rdi,%rdi
  je     L149
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r12
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  test   %rsi,%rsi
  je     L150
  test   %rdx,%rdx
  je     L208
  mov    %rdx,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  jne    L218
L113:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L218:
  lea    D46(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L144
  lea    D48(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L17
  lea    D139(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L36
  lea    D140(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L66
  lea    D70(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L34
  lea    D53(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L19
  lea    D64(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L69
  lea    D171(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L147
  lea    D150(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L121
  lea    D39(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L94
  lea    D189(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L113
  movsd  D90(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_THz@plt>
  jmp    L113
L144:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_um@plt>
  jmp    L113
L17:
  movsd  D137(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_um@plt>
  jmp    L113
L36:
  movsd  D169(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_um@plt>
  jmp    L113
L66:
  movsd  D19(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_um@plt>
  jmp    L113
L34:
  movsd  D149(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_um@plt>
  jmp    L113
L19:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_eV@plt>
  jmp    L113
L69:
  movsd  D121(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_eV@plt>
  jmp    L113
L147:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_THz@plt>
  jmp    L113
L121:
  movsd  D137(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_THz@plt>
  jmp    L113
L94:
  movsd  D96(%rip),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <convert_units_from_THz@plt>
  jmp    L113
L149:
  mov    $0xffffffff,%eax
  ret
L150:
  mov    $0xfffffffe,%eax
  jmp    L113
L208:
  mov    $0xfffffffd,%eax
  jmp    L113
```

tool_calls: name: read_data
arguments: label: D46
type: string
name: read_data
arguments: label: D48
type: string
name: read_data
arguments: label: D139
type: string
name: read_data
arguments: label: D140
type: string
name: read_data
arguments: label: D70
type: string
name: read_data
arguments: label: D53
type: string
name: read_data
arguments: label: D64
type: string
name: read_data
arguments: label: D171
type: string
name: read_data
arguments: label: D150
type: string
name: read_data
arguments: label: D39
type: string
name: read_data
arguments: label: D189
type: string
name: read_data
arguments: label: D90
type: byte[8]
name: read_data
arguments: label: D137
type: byte[8]
name: read_data
arguments: label: D169
type: f64
name: read_data
arguments: label: D19
type: f64
name: read_data
arguments: label: D149
type: f64
name: read_data
arguments: label: D121
type: f64
name: read_data
arguments: label: D96
type: byte[8]

tool: D46: um

tool: D48: nm

tool: D139: m

tool: D140: cm

tool: D70: mm

tool: D53: eV

tool: D64: J

tool: D171: THz

tool: D150: GHz

tool: D39: Hz

tool: D189: rad/s

tool: {"D90": [0x6d,0x8b,0x6b,0x40,0x29,0x66,0x46,0x3d]}

tool: {"D137": [0xfc,0xa9,0xf1,0xd2,0x4d,0x62,0x50,0x3f]}

tool: D169: 1000000

tool: D19: 10000

tool: D149: 1000

tool: D121: 6.241506363094027e+18

tool: {"D96": [0x11,0xea,0x2d,0x81,0x99,0x97,0x71,0x3d]}

assistant: ```c
int convert_units(double *value, const char *from_units, const char *to_units) {
  if (NULL == value) {
    return -1;
  }
  if (NULL == from_units) {
    return -2;
  }
  if (NULL == to_units) {
    return -3;
  }
  if (0 == strcmp(from_units, to_units)) {
    return 0;
  } else if (0 == strcmp(from_units, "um")) {
    return convert_units_from_um(value, to_units);
  } else if (0 == strcmp(from_units, "nm")) {
    *value *= 1e-3;
    return convert_units_from_um(value, to_units);
  } else if (0 == strcmp(from_units, "m")) {
    *value *= 1e6;
    return convert_units_from_um(value, to_units);
  } else if (0 == strcmp(from_units, "cm")) {
    *value *= 1e4;
    return convert_units_from_um(value, to_units);
  } else if (0 == strcmp(from_units, "mm")) {
    *value *= 1e3;
    return convert_units_from_um(value, to_units);
  } else if (0 == strcmp(from_units, "eV")) {
    return convert_units_from_eV(value, to_units);
  } else if (0 == strcmp(from_units, "J")) {
    *value *= 6.241506363094027e18;
    return convert_units_from_eV(value, to_units);
  } else if (0 == strcmp(from_units, "THz")) {
    return convert_units_from_THz(value, to_units);
  } else if (0 == strcmp(from_units, "GHz")) {
    *value *= 1e-3;
    return convert_units_from_THz(value, to_units);
  } else if (0 == strcmp(from_units, "Hz")) {
    *value *= 1e-12;
    return convert_units_from_THz(value, to_units);
  } else if (0 == strcmp(from_units, "rad/s")) {
    *value *= 1.5915494309189535e-13;
    return convert_units_from_THz(value, to_units);
  } else {
    return 1;
  }
}
```