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

```asm
<GetConstraintTypeFromTypeName>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  lea    D57(%rip),%rsi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x2,%eax
  test   %rdx,%rdx
  je     L93
  lea    D24(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x3,%eax
  test   %rdx,%rdx
  je     L93
  lea    D93(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xb5,%eax
  test   %rdx,%rdx
  je     L93
  lea    D6(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L71
L93:
  pop    %rbx
  ret
L71:
  lea    D20(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  je     L93
  lea    D101(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xb4,%eax
  test   %rdx,%rdx
  je     L93
  lea    D7(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x8,%eax
  test   %rdx,%rdx
  je     L93
  lea    D58(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x7,%eax
  test   %rdx,%rdx
  je     L93
  lea    D36(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0xb6,%eax
  test   %rdx,%rdx
  je     L93
  lea    D19(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x5,%eax
  test   %rdx,%rdx
  je     L93
  lea    D69(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0x7,%eax
  sub    $0x1,%eax
  jmp    L93
```

tool_calls: name: parse_data
arguments: data_label: D57
type: string
name: parse_data
arguments: data_label: D24
type: string
name: parse_data
arguments: data_label: D93
type: string
name: parse_data
arguments: data_label: D6
type: string
name: parse_data
arguments: data_label: D20
type: string
name: parse_data
arguments: data_label: D101
type: string
name: parse_data
arguments: data_label: D7
type: string
name: parse_data
arguments: data_label: D58
type: string
name: parse_data
arguments: data_label: D36
type: string
name: parse_data
arguments: data_label: D19
type: string
name: parse_data
arguments: data_label: D69
type: string

tool: D57: SYMBOL

tool: D24: STRING

tool: D93: LEXEME

tool: D6: INTEGER

tool: D20: FLOAT

tool: D101: NUMBER

tool: D7: INSTANCE-NAME

tool: D58: INSTANCE-ADDRESS

tool: D36: INSTANCE

tool: D19: EXTERNAL-ADDRESS

tool: D69: FACT-ADDRESS

assistant: ```c
int GetConstraintTypeFromTypeName(const char *constraintName) {
  if (strcmp(constraintName, "SYMBOL") == 0)
    return (2);
  else if (strcmp(constraintName, "STRING") == 0)
    return (3);
  else if (strcmp(constraintName, "LEXEME") == 0)
    return (181);
  else if (strcmp(constraintName, "INTEGER") == 0)
    return (1);
  else if (strcmp(constraintName, "FLOAT") == 0)
    return (0);
  else if (strcmp(constraintName, "NUMBER") == 0)
    return (180);
  else if (strcmp(constraintName, "INSTANCE-NAME") == 0)
    return (8);
  else if (strcmp(constraintName, "INSTANCE-ADDRESS") == 0)
    return (7);
  else if (strcmp(constraintName, "INSTANCE") == 0)
    return (182);
  else if (strcmp(constraintName, "EXTERNAL-ADDRESS") == 0)
    return (5);
  else if (strcmp(constraintName, "FACT-ADDRESS") == 0)
    return (6);
  return (-1);
}
```