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

```asm
<GetColor>:
  endbr64
  push   %rbx
  xor    %eax,%eax
  mov    %rdi,%rbx
  xor    %edi,%edi
  call   <RemoveEqualsSign@plt>
  test   %eax,%eax
  je     L46
  xor    %eax,%eax
  lea    D115(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L21
  movl   $0x0,(%rbx)
  pop    %rbx
  ret
  nop
L46:
  mov    $0x1,%esi
  lea    D141(%rip),%rdi
  xor    %eax,%eax
  pop    %rbx
  jmp    1080 <ErrMsg@plt>
  nopl   0x0(%rax)
L21:
  xor    %eax,%eax
  lea    D174(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L161
  movl   $0x3f800000,(%rbx)
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L161:
  xor    %eax,%eax
  lea    D133(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L23
  movl   $0x40000000,(%rbx)
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L23:
  xor    %eax,%eax
  lea    D127(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L104
  movl   $0x40400000,(%rbx)
  pop    %rbx
  ret
L104:
  xor    %eax,%eax
  lea    D87(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L9
  movl   $0x40800000,(%rbx)
  pop    %rbx
  ret
L9:
  xor    %eax,%eax
  lea    D146(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L74
  movl   $0x40a00000,(%rbx)
  pop    %rbx
  ret
L74:
  xor    %eax,%eax
  lea    D173(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L3
  movl   $0x40c00000,(%rbx)
  pop    %rbx
  ret
L3:
  xor    %eax,%eax
  lea    D58(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L152
  movl   $0x40e00000,(%rbx)
  pop    %rbx
  ret
L152:
  xor    %eax,%eax
  lea    D69(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L67
  movl   $0x41700000,(%rbx)
  pop    %rbx
  ret
L67:
  xor    %eax,%eax
  lea    D0(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L142
  movl   $0x41800000,(%rbx)
  pop    %rbx
  ret
L142:
  xor    %eax,%eax
  lea    D22(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L154
  movl   $0x41880000,(%rbx)
  pop    %rbx
  ret
L154:
  xor    %eax,%eax
  lea    D124(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L113
  movl   $0x41900000,(%rbx)
  pop    %rbx
  ret
L113:
  xor    %eax,%eax
  lea    D21(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L31
  movl   $0x41980000,(%rbx)
  pop    %rbx
  ret
L31:
  xor    %eax,%eax
  lea    D16(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L57
  movl   $0x41a00000,(%rbx)
  pop    %rbx
  ret
L57:
  xor    %eax,%eax
  lea    D112(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L147
  movl   $0x41a80000,(%rbx)
  pop    %rbx
  ret
L147:
  xor    %eax,%eax
  lea    D27(%rip),%rdi
  call   <CheckTokenStr@plt>
  test   %eax,%eax
  je     L87
  movl   $0x41b00000,(%rbx)
  pop    %rbx
  ret
L87:
  mov    $0x1,%esi
  lea    D61(%rip),%rdi
  xor    %eax,%eax
  pop    %rbx
  jmp    1080 <ErrMsg@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D115
type_guessed: string
name: retrieve_data
arguments: tag: D141
type_guessed: string
name: retrieve_data
arguments: tag: D174
type_guessed: string
name: retrieve_data
arguments: tag: D133
type_guessed: string
name: retrieve_data
arguments: tag: D127
type_guessed: string
name: retrieve_data
arguments: tag: D87
type_guessed: string
name: retrieve_data
arguments: tag: D146
type_guessed: string
name: retrieve_data
arguments: tag: D173
type_guessed: string
name: retrieve_data
arguments: tag: D58
type_guessed: string
name: retrieve_data
arguments: tag: D69
type_guessed: string
name: retrieve_data
arguments: tag: D0
type_guessed: string
name: retrieve_data
arguments: tag: D22
type_guessed: string
name: retrieve_data
arguments: tag: D124
type_guessed: string
name: retrieve_data
arguments: tag: D21
type_guessed: string
name: retrieve_data
arguments: tag: D16
type_guessed: string
name: retrieve_data
arguments: tag: D112
type_guessed: string
name: retrieve_data
arguments: tag: D27
type_guessed: string
name: retrieve_data
arguments: tag: D61
type_guessed: string

tool: D115: BLACK

tool: D141: Missing Equals Sign in Color Assignment

tool: D174: RED

tool: D133: GREEN

tool: D127: BLUE

tool: D87: CYAN

tool: D146: YELLOW

tool: D173: PURPLE

tool: D58: WHITE

tool: D69: CUST1

tool: D0: CUST2

tool: D22: CUST3

tool: D124: CUST4

tool: D21: CUST5

tool: D16: CUST6

tool: D112: CUST7

tool: D27: CUST8

tool: D61: Invalid Color

assistant: ```c
void GetColor(C) float *C;
{
  if (RemoveEqualsSign(0)) {
    if (CheckTokenStr("BLACK"))
      *C = 0.0;
    else if (CheckTokenStr("RED"))
      *C = 1.0;
    else if (CheckTokenStr("GREEN"))
      *C = 2.0;
    else if (CheckTokenStr("BLUE"))
      *C = 3.0;
    else if (CheckTokenStr("CYAN"))
      *C = 4.0;
    else if (CheckTokenStr("YELLOW"))
      *C = 5.0;
    else if (CheckTokenStr("PURPLE"))
      *C = 6.0;
    else if (CheckTokenStr("WHITE"))
      *C = 7.0;
    else if (CheckTokenStr("CUST1"))
      *C = 15;
    else if (CheckTokenStr("CUST2"))
      *C = 15 + 1;
    else if (CheckTokenStr("CUST3"))
      *C = 15 + 2;
    else if (CheckTokenStr("CUST4"))
      *C = 15 + 3;
    else if (CheckTokenStr("CUST5"))
      *C = 15 + 4;
    else if (CheckTokenStr("CUST6"))
      *C = 15 + 5;
    else if (CheckTokenStr("CUST7"))
      *C = 15 + 6;
    else if (CheckTokenStr("CUST8"))
      *C = 15 + 7;
    else
      ErrMsg("Invalid Color", 1);
  } else
    ErrMsg("Missing Equals Sign in Color Assignment", 1);
}
```