user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<gr_get_color_int>:
  endbr64
  test   %rdi,%rdi
  je     L50
  push   %rbp
  lea    D28(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x1,%eax
  test   %r8d,%r8d
  je     L95
  lea    D128(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x2,%eax
  test   %r8d,%r8d
  je     L95
  lea    D184(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x3,%eax
  test   %r8d,%r8d
  je     L95
  lea    D69(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x4,%eax
  test   %r8d,%r8d
  je     L95
  lea    D89(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x5,%eax
  test   %r8d,%r8d
  je     L95
  lea    D86(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x6,%eax
  test   %r8d,%r8d
  je     L95
  lea    D1(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x7,%eax
  test   %r8d,%r8d
  je     L95
  lea    D176(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x8,%eax
  test   %r8d,%r8d
  je     L95
  lea    D209(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x9,%eax
  test   %r8d,%r8d
  je     L95
  lea    D94(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xa,%eax
  test   %r8d,%r8d
  je     L95
  lea    D75(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xb,%eax
  test   %r8d,%r8d
  je     L95
  lea    D155(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xc,%eax
  test   %r8d,%r8d
  je     L95
  lea    D99(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xd,%eax
  test   %r8d,%r8d
  je     L95
  lea    D131(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xe,%eax
  test   %r8d,%r8d
  je     L95
  lea    D125(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0xf,%eax
  test   %r8d,%r8d
  je     L95
  lea    D18(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x10,%eax
  test   %r8d,%r8d
  je     L95
  lea    D138(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x11,%eax
  test   %r8d,%r8d
  je     L95
  lea    D140(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x12,%eax
  test   %r8d,%r8d
  je     L95
  lea    D141(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x13,%eax
  test   %r8d,%r8d
  je     L95
  lea    D170(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %eax,%r8d
  mov    $0x14,%eax
  test   %r8d,%r8d
  je     L95
  lea    D160(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  cmp    $0x1,%eax
  sbb    %eax,%eax
  and    $0x15,%eax
L95:
  pop    %rbp
  ret
L50:
  mov    $0xffffffff,%eax
  ret
```

tool_calls: name: read_data
arguments: label: D28
data_type: string
name: read_data
arguments: label: D128
data_type: string
name: read_data
arguments: label: D184
data_type: string
name: read_data
arguments: label: D69
data_type: string
name: read_data
arguments: label: D89
data_type: string
name: read_data
arguments: label: D86
data_type: string
name: read_data
arguments: label: D1
data_type: string
name: read_data
arguments: label: D176
data_type: string
name: read_data
arguments: label: D209
data_type: string
name: read_data
arguments: label: D94
data_type: string
name: read_data
arguments: label: D75
data_type: string
name: read_data
arguments: label: D155
data_type: string
name: read_data
arguments: label: D99
data_type: string
name: read_data
arguments: label: D131
data_type: string
name: read_data
arguments: label: D125
data_type: string
name: read_data
arguments: label: D18
data_type: string
name: read_data
arguments: label: D138
data_type: string
name: read_data
arguments: label: D140
data_type: string
name: read_data
arguments: label: D141
data_type: string
name: read_data
arguments: label: D170
data_type: string
name: read_data
arguments: label: D160
data_type: string

tool: D28: Green

tool: D128: Navy

tool: D184: Yellow

tool: D69: Magenta

tool: D89: Cyan

tool: D86: Gray

tool: D1: Orange

tool: D176: Black

tool: D209: Maroon

tool: D94: White

tool: D75: Blue

tool: D155: Pink

tool: D99: Brown

tool: D131: Grey

tool: D125: LimeGreen

tool: D18: Turquoise

tool: D138: Violet

tool: D140: Wheat

tool: D141: Purple

tool: D170: Beige

tool: D160: Red

assistant: ```c
short gr_get_color_int(char *colorstr) {
  if (!colorstr)
    return -1;
  if (!strcmp(colorstr, "Green"))
    return 1;
  if (!strcmp(colorstr, "Navy"))
    return 2;
  if (!strcmp(colorstr, "Yellow"))
    return 3;
  if (!strcmp(colorstr, "Magenta"))
    return 4;
  if (!strcmp(colorstr, "Cyan"))
    return 5;
  if (!strcmp(colorstr, "Gray"))
    return 6;
  if (!strcmp(colorstr, "Orange"))
    return 7;
  if (!strcmp(colorstr, "Black"))
    return 8;
  if (!strcmp(colorstr, "Maroon"))
    return 9;
  if (!strcmp(colorstr, "White"))
    return 10;
  if (!strcmp(colorstr, "Blue"))
    return 11;
  if (!strcmp(colorstr, "Pink"))
    return 12;
  if (!strcmp(colorstr, "Brown"))
    return 13;
  if (!strcmp(colorstr, "Grey"))
    return 14;
  if (!strcmp(colorstr, "LimeGreen"))
    return 15;
  if (!strcmp(colorstr, "Turquoise"))
    return 16;
  if (!strcmp(colorstr, "Violet"))
    return 17;
  if (!strcmp(colorstr, "Wheat"))
    return 18;
  if (!strcmp(colorstr, "Purple"))
    return 19;
  if (!strcmp(colorstr, "Beige"))
    return 20;
  if (!strcmp(colorstr, "Red"))
    return 21;
  return 0;
}
```