user: Please show me the C implementation that matches the assembly code listed below:

```asm
<convert_units_from_THz>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%rbx
  lea    D40(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  jne    L125
L157:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L125:
  lea    D120(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L99
  movsd  D193(%rip),%xmm0
  divsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L99:
  lea    D53(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L106
  movsd  D86(%rip),%xmm0
  divsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L106:
  lea    D141(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L152
  movsd  D45(%rip),%xmm0
  divsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L152:
  lea    D65(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L79
  movsd  D209(%rip),%xmm0
  divsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L79:
  lea    D33(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L142
  movsd  D80(%rip),%xmm0
  divsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L142:
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L123
  movsd  D158(%rip),%xmm0
  mulsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L123:
  lea    D203(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L87
  movsd  D97(%rip),%xmm0
  mulsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L87:
  lea    D185(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L33
  movsd  D9(%rip),%xmm0
  mulsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L33:
  lea    D135(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L167
  movsd  D39(%rip),%xmm0
  mulsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L167:
  lea    D98(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L1
  movsd  D66(%rip),%xmm0
  mulsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  jmp    L157
L1:
  mov    $0x2,%eax
  jmp    L157
```

tool_calls: name: parse_data
arguments: data_tag: D40
type: string
name: parse_data
arguments: data_tag: D120
type: string
name: parse_data
arguments: data_tag: D193
type: f64
name: parse_data
arguments: data_tag: D53
type: string
name: parse_data
arguments: data_tag: D86
type: f64
name: parse_data
arguments: data_tag: D141
type: string
name: parse_data
arguments: data_tag: D45
type: byte[8]
name: parse_data
arguments: data_tag: D65
type: string
name: parse_data
arguments: data_tag: D209
type: byte[8]
name: parse_data
arguments: data_tag: D33
type: string
name: parse_data
arguments: data_tag: D80
type: byte[8]
name: parse_data
arguments: data_tag: D75
type: string
name: parse_data
arguments: data_tag: D158
type: f64
name: parse_data
arguments: data_tag: D203
type: string
name: parse_data
arguments: data_tag: D97
type: byte[8]
name: parse_data
arguments: data_tag: D185
type: string
name: parse_data
arguments: data_tag: D9
type: f64
name: parse_data
arguments: data_tag: D135
type: string
name: parse_data
arguments: data_tag: D39
type: f64
name: parse_data
arguments: data_tag: D98
type: string
name: parse_data
arguments: data_tag: D66
type: f64

tool: D40: THz

tool: D120: um

tool: D193: 299.792458

tool: D53: nm

tool: D86: 299792.458

tool: D141: m

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

tool: D65: cm

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

tool: D33: mm

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

tool: D75: eV

tool: D158: 0.004135665157613982

tool: D203: J

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

tool: D185: GHz

tool: D9: 1000

tool: D135: Hz

tool: D39: 1000000000000

tool: D98: rad/s

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