user: 请从给定的汇编指令推导出C源代码:

```asm
<GetConstraintTypeFromTypeName>:
  endbr64
  push   %rbp
  lea    D77(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x2,%eax
  test   %r8,%r8
  je     L47
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x3,%eax
  test   %r8,%r8
  je     L47
  lea    D92(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xb5,%eax
  test   %r8,%r8
  je     L47
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x1,%eax
  test   %r8,%r8
  jne    L24
L47:
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L24:
  lea    D78(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  xor    %eax,%eax
  test   %r8,%r8
  je     L47
  lea    D40(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xb4,%eax
  test   %r8,%r8
  je     L47
  lea    D103(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x8,%eax
  test   %r8,%r8
  je     L47
  lea    D31(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x7,%eax
  test   %r8,%r8
  je     L47
  lea    D25(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xb6,%eax
  test   %r8,%r8
  je     L47
  lea    D29(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x5,%eax
  test   %r8,%r8
  je     L47
  mov    %rbp,%rdi
  lea    D63(%rip),%rsi
  call   <strcmp@plt>
  pop    %rbp
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0x7,%eax
  sub    $0x1,%eax
  ret
```

tool_calls: name: disassemble_data
arguments: label: D77
type: string
name: disassemble_data
arguments: label: D32
type: string
name: disassemble_data
arguments: label: D92
type: string
name: disassemble_data
arguments: label: D58
type: string
name: disassemble_data
arguments: label: D78
type: string
name: disassemble_data
arguments: label: D40
type: string
name: disassemble_data
arguments: label: D103
type: string
name: disassemble_data
arguments: label: D31
type: string
name: disassemble_data
arguments: label: D25
type: string
name: disassemble_data
arguments: label: D29
type: string
name: disassemble_data
arguments: label: D63
type: string

tool: D77: SYMBOL

tool: D32: STRING

tool: D92: LEXEME

tool: D58: INTEGER

tool: D78: FLOAT

tool: D40: NUMBER

tool: D103: INSTANCE-NAME

tool: D31: INSTANCE-ADDRESS

tool: D25: INSTANCE

tool: D29: EXTERNAL-ADDRESS

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