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

```asm
<print_flags_cmove>:
  endbr64
  test   %rdi,%rdi
  jne    L269
  ret
L269:
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r12
  mov    $0x3c,%edi
  call   <putchar@plt>
  mov    $0x20,%ebp
  mov    $0x1,%ebx
  lea    D3(%rip),%r15
  lea    D11(%rip),%r14
  mov    $0x80000000,%r13d
  jmp    L168
L243:
  cmp    $0x10,%rax
  je     L21
  jbe    L46
  cmp    $0x20,%rax
  jne    L332
  lea    D25(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L46:
  cmp    $0x1,%rax
  je     L25
  cmp    $0x8,%rax
  jne    L332
  lea    D55(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L86:
  cmp    $0x20000,%rax
  je     L302
  cmp    $0x40000,%rax
  jne    L332
  lea    D159(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L109:
  cmp    $0x10000000,%rax
  je     L321
  jbe    L342
  cmp    $0x40000000,%rax
  je     L151
  cmp    %r13,%rax
  jne    L209
  lea    D115(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L342:
  cmp    $0x4000000,%rax
  je     L398
  jbe    L307
  cmp    $0x8000000,%rax
  jne    L332
  lea    D49(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L307:
  cmp    $0x1000000,%rax
  je     L318
  cmp    $0x2000000,%rax
  jne    L332
  lea    D17(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L209:
  cmp    $0x20000000,%rax
  jne    L332
  lea    D89(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L25:
  lea    D69(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L332:
  add    %rbx,%rbx
  sub    $0x1,%ebp
  je     L272
L168:
  mov    %r12,%rax
  and    %rbx,%rax
  cmp    $0x200000,%rax
  je     L136
  ja     L109
  cmp    $0x10000,%rax
  je     L147
  jbe    L243
  cmp    $0x80000,%rax
  je     L146
  jbe    L86
  cmp    $0x100000,%rax
  jne    L332
  lea    D176(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L21:
  lea    D10(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L147:
  lea    D117(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L302:
  lea    D21(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L146:
  lea    D119(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L136:
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L318:
  lea    D79(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L398:
  lea    D15(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L321:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L151:
  lea    D106(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L332
L272:
  mov    $0x3e,%edi
  call   <putchar@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: parse_data
arguments: label: D3
type_guessed: string
name: parse_data
arguments: label: D11
type_guessed: string
name: parse_data
arguments: label: D25
type_guessed: string
name: parse_data
arguments: label: D55
type_guessed: string
name: parse_data
arguments: label: D159
type_guessed: string
name: parse_data
arguments: label: D115
type_guessed: string
name: parse_data
arguments: label: D49
type_guessed: string
name: parse_data
arguments: label: D17
type_guessed: string
name: parse_data
arguments: label: D89
type_guessed: string
name: parse_data
arguments: label: D69
type_guessed: string
name: parse_data
arguments: label: D176
type_guessed: string
name: parse_data
arguments: label: D10
type_guessed: string
name: parse_data
arguments: label: D117
type_guessed: string
name: parse_data
arguments: label: D21
type_guessed: string
name: parse_data
arguments: label: D119
type_guessed: string
name: parse_data
arguments: label: D79
type_guessed: string
name: parse_data
arguments: label: D15
type_guessed: string
name: parse_data
arguments: label: D106
type_guessed: string

tool: D3: CM_MULTIPLY 

tool: D11: CM_1D2_OBJ 

tool: D25: CM_75_RANDOM 

tool: D55: CM_20_RANDOM 

tool: D159: CM_PHASE 

tool: D115: CM_WIN 

tool: D49: CM_90_RANDOM 

tool: D17: CM_CARRY_GOLD 

tool: D89: CM_2D2_OBJ 

tool: D69: CM_ATTACK_ONLY 

tool: D176: CM_PICKS_UP 

tool: D10: CM_40_RANDOM 

tool: D117: CM_INVISIBLE 

tool: D21: CM_OPEN_DOOR 

tool: D119: CM_EATS_OTHER 

tool: D79: CM_CARRY_OTHER 

tool: D15: CM_60_RANDOM 

tool: D106: CM_4D2_OBJ 

assistant: ```c
print_flags_cmove(cmove) unsigned long cmove;
{
  int count;
  unsigned long mask;
  if (cmove == 0)
    return;
  printf("<");
  for (count = 0, mask = 0x01; count < 32; mask <<= 1, count++) {
    switch (cmove & mask) {
    case 0x00000001L:
      printf("CM_ATTACK_ONLY ");
      break;
    case 0x00000002L:
      break;
    case 0x00000008L:
      printf("CM_20_RANDOM ");
      break;
    case 0x00000010L:
      printf("CM_40_RANDOM ");
      break;
    case 0x00000020L:
      printf("CM_75_RANDOM ");
      break;
    case 0x00010000L:
      printf("CM_INVISIBLE ");
      break;
    case 0x00020000L:
      printf("CM_OPEN_DOOR ");
      break;
    case 0x00040000L:
      printf("CM_PHASE ");
      break;
    case 0x00080000L:
      printf("CM_EATS_OTHER ");
      break;
    case 0x00100000L:
      printf("CM_PICKS_UP ");
      break;
    case 0x00200000L:
      printf("CM_MULTIPLY ");
      break;
    case 0x01000000L:
      printf("CM_CARRY_OTHER ");
      break;
    case 0x02000000L:
      printf("CM_CARRY_GOLD ");
      break;
    case 0x04000000L:
      printf("CM_60_RANDOM ");
      break;
    case 0x08000000L:
      printf("CM_90_RANDOM ");
      break;
    case 0x10000000L:
      printf("CM_1D2_OBJ ");
      break;
    case 0x20000000L:
      printf("CM_2D2_OBJ ");
      break;
    case 0x40000000L:
      printf("CM_4D2_OBJ ");
      break;
    case 0x80000000L:
      printf("CM_WIN ");
      break;
    }
  }
  printf(">");
}
```