user: Demonstrate the C code that generates the assembly output below:

```asm
<toylog_convert_priority>:
  endbr64
  push   %rbp
  lea    D94(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x1,%eax
  test   %r8,%r8
  jne    L66
L6:
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L66:
  lea    D22(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x2,%eax
  test   %r8,%r8
  je     L6
  lea    D38(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x4,%eax
  test   %r8,%r8
  je     L6
  lea    D85(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x8,%eax
  test   %r8,%r8
  je     L6
  lea    D26(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x10,%eax
  test   %r8,%r8
  je     L6
  lea    D2(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x20,%eax
  test   %r8,%r8
  je     L6
  lea    D49(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x40,%eax
  test   %r8,%r8
  je     L6
  lea    D83(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x80,%eax
  test   %r8,%r8
  je     L6
  lea    D6(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x100,%eax
  test   %r8,%r8
  je     L6
  lea    D1(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcasecmp@plt>
  mov    %rax,%r8
  mov    $0x200,%eax
  test   %r8,%r8
  je     L6
  mov    %rbp,%rdi
  lea    D14(%rip),%rsi
  call   <strcasecmp@plt>
  pop    %rbp
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0x401,%eax
  sub    $0x1,%eax
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D94
type_infered: string
name: disassemble_data
arguments: data_tag: D22
type_infered: string
name: disassemble_data
arguments: data_tag: D38
type_infered: string
name: disassemble_data
arguments: data_tag: D85
type_infered: string
name: disassemble_data
arguments: data_tag: D26
type_infered: string
name: disassemble_data
arguments: data_tag: D2
type_infered: string
name: disassemble_data
arguments: data_tag: D49
type_infered: string
name: disassemble_data
arguments: data_tag: D83
type_infered: string
name: disassemble_data
arguments: data_tag: D6
type_infered: string
name: disassemble_data
arguments: data_tag: D1
type_infered: string
name: disassemble_data
arguments: data_tag: D14
type_infered: string

tool: D94: FATAL

tool: D22: ALERT

tool: D38: CRIT

tool: D85: ERROR

tool: D26: WARN

tool: D2: NOTICE

tool: D49: INFO

tool: D83: DEBUG

tool: D6: RACE

tool: D1: NOTSET

tool: D14: UNKNOWN

assistant: ```c
int toylog_convert_priority(const char *priority) {
  if (strcasecmp(priority, "FATAL") == 0) {
    return (1 << 0);
  }
  if (strcasecmp(priority, "ALERT") == 0) {
    return (1 << 1);
  }
  if (strcasecmp(priority, "CRIT") == 0) {
    return (1 << 2);
  }
  if (strcasecmp(priority, "ERROR") == 0) {
    return (1 << 3);
  }
  if (strcasecmp(priority, "WARN") == 0) {
    return (1 << 4);
  }
  if (strcasecmp(priority, "NOTICE") == 0) {
    return (1 << 5);
  }
  if (strcasecmp(priority, "INFO") == 0) {
    return (1 << 6);
  }
  if (strcasecmp(priority, "DEBUG") == 0) {
    return (1 << 7);
  }
  if (strcasecmp(priority, "RACE") == 0) {
    return (1 << 8);
  }
  if (strcasecmp(priority, "NOTSET") == 0) {
    return (1 << 9);
  }
  if (strcasecmp(priority, "UNKNOWN") == 0) {
    return (1 << 10);
  }
  return -1;
}
```