user: 请将以下的汇编代码转换成C语言代码:

```asm
<convert_units_from_THz>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L152
  mov    $0x0,%eax
  jmp    L46
L152:
  mov    -0x10(%rbp),%rax
  lea    D69(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L160
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D125(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L160:
  mov    -0x10(%rbp),%rax
  lea    D113(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L72
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D17(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L72:
  mov    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L190
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D149(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L190:
  mov    -0x10(%rbp),%rax
  lea    D87(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L128
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D132(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L128:
  mov    -0x10(%rbp),%rax
  lea    D176(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L205
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D83(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L205:
  mov    -0x10(%rbp),%rax
  lea    D98(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L38
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D129(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L38:
  mov    -0x10(%rbp),%rax
  lea    D148(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L37
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D76(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L37:
  mov    -0x10(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L33
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L33:
  mov    -0x10(%rbp),%rax
  lea    D173(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L64
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D89(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L64:
  mov    -0x10(%rbp),%rax
  lea    D157(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L3
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D133(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L95
L3:
  mov    $0x2,%eax
  jmp    L46
L95:
  mov    $0x0,%eax
L46:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D28
type: string
name: extract_symbolic_data
arguments: data_label: D69
type: string
name: extract_symbolic_data
arguments: data_label: D125
type: f64
name: extract_symbolic_data
arguments: data_label: D113
type: string
name: extract_symbolic_data
arguments: data_label: D17
type: f64
name: extract_symbolic_data
arguments: data_label: D16
type: string
name: extract_symbolic_data
arguments: data_label: D149
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D87
type: string
name: extract_symbolic_data
arguments: data_label: D132
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D176
type: string
name: extract_symbolic_data
arguments: data_label: D83
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D98
type: string
name: extract_symbolic_data
arguments: data_label: D129
type: f64
name: extract_symbolic_data
arguments: data_label: D148
type: string
name: extract_symbolic_data
arguments: data_label: D76
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D20
type: string
name: extract_symbolic_data
arguments: data_label: D109
type: f64
name: extract_symbolic_data
arguments: data_label: D173
type: string
name: extract_symbolic_data
arguments: data_label: D89
type: f64
name: extract_symbolic_data
arguments: data_label: D157
type: string
name: extract_symbolic_data
arguments: data_label: D133
type: f64

tool: D28: THz

tool: D69: um

tool: D125: 299.792458

tool: D113: nm

tool: D17: 299792.458

tool: D16: m

tool: {"D149": [0x90,0x94,0x7d,0xcd,0xae,0xa5,0x33,0x3f]}

tool: D87: cm

tool: {"D132": [0x20,0x38,0x14,0x21,0xe1,0xb2,0x9e,0x3f]}

tool: D176: mm

tool: {"D83": [0x14,0xa3,0xac,0xb4,0xcc,0x2f,0xd3,0x3f]}

tool: D98: eV

tool: D129: 0.004135665157613982

tool: D148: J

tool: {"D76": [0x81,0x02,0xb7,0x36,0x57,0x08,0x89,0x3b]}

tool: D20: GHz

tool: D109: 1000

tool: D173: Hz

tool: D89: 1000000000000

tool: D157: rad/s

tool: D133: 6283185307179.586

assistant: ```c
int convert_units_from_THz(double *value, const char *to_units) {
  if (0 == strcmp(to_units, "THz")) {
    return 0;
  } else if (0 == strcmp(to_units, "um")) {
    *value = 2.99792458e2 / *value;
  } else if (0 == strcmp(to_units, "nm")) {
    *value = 2.99792458e5 / *value;
  } else if (0 == strcmp(to_units, "m")) {
    *value = 2.99792458e-4 / *value;
  } else if (0 == strcmp(to_units, "cm")) {
    *value = 2.99792458e-2 / *value;
  } else if (0 == strcmp(to_units, "mm")) {
    *value = 2.99792458e-1 / *value;
  } else if (0 == strcmp(to_units, "eV")) {
    *value *= 0.004135665157613982;
  } else if (0 == strcmp(to_units, "J")) {
    *value *= 6.6260689599999995e-22;
  } else if (0 == strcmp(to_units, "GHz")) {
    *value *= 1e3;
  } else if (0 == strcmp(to_units, "Hz")) {
    *value *= 1e12;
  } else if (0 == strcmp(to_units, "rad/s")) {
    *value *= 6.283185307179586e12;
  } else {
    return 2;
  }
  return 0;
}
```