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

```asm
<yc_poly_emulator>:
  endbr64
  test   %edx,%edx
  je     L76
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edx,%r11d
  lea    -0x1(%rdx),%eax
  lea    0x1(%rsi,%rax,1),%r13
  mov    %rsi,%r9
  add    %esi,%r11d
  lea    D1(%rip),%r8
  jmp    L91
L27:
  cmp    $0xd2,%al
  je     L68
  cmp    $0xeb,%al
  jne    L78
  add    $0x1,%edx
  mov    %edx,%eax
  movsbl (%rdi,%rax,1),%eax
  add    %eax,%edx
L41:
  add    $0x1,%edx
  cmp    $0x2f,%edx
  ja     L69
L59:
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%eax
  cmp    $0x34,%al
  jg     L41
  cmp    $0xfe,%al
  jl     L27
  add    $0x2,%eax
  cmp    $0x36,%al
  ja     L41
  movzbl %al,%eax
  movslq (%r8,%rax,4),%rax
  add    %r8,%rax
  notrack jmp *%rax
L78:
  cmp    $0xc0,%al
  jne    L41
  lea    0x1(%rdx),%eax
  cmpb   $0xc0,(%rdi,%rax,1)
  je     L106
  add    $0x2,%edx
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%ecx
  and    $0x7,%ecx
  ror    %cl,%sil
  jmp    L41
  sub    $0x1,%esi
  add    $0x1,%edx
  jmp    L41
  add    %r12d,%esi
  add    $0x1,%edx
  jmp    L41
  add    %r10d,%esi
  add    $0x1,%edx
  jmp    L41
  xor    %r10d,%esi
  add    $0x1,%edx
  jmp    L41
  add    $0x1,%edx
  mov    %edx,%eax
  add    (%rdi,%rax,1),%sil
  jmp    L41
  add    $0x1,%edx
  mov    %edx,%eax
  xor    (%rdi,%rax,1),%sil
  jmp    L41
  add    $0x1,%edx
  mov    %edx,%eax
  sub    (%rdi,%rax,1),%sil
  jmp    L41
L106:
  add    $0x2,%edx
  mov    %edx,%eax
  movzbl (%rdi,%rax,1),%ecx
  and    $0x7,%ecx
  rol    %cl,%sil
  jmp    L41
L68:
  lea    0x1(%rdx),%eax
  cmpb   $0xc8,(%rdi,%rax,1)
  je     L132
  add    $0x2,%edx
  mov    %ebp,%ecx
  rol    %cl,%sil
  jmp    L41
L132:
  add    $0x2,%edx
  mov    %ebp,%ecx
  ror    %cl,%sil
  jmp    L41
L69:
  mov    %sil,(%rbx)
  add    $0x1,%r9
  cmp    %r9,%r13
  je     L136
L91:
  mov    %r11d,%r10d
  sub    %r9d,%r10d
  mov    %r9,%rbx
  movzbl (%r9),%esi
  mov    $0x0,%edx
  mov    %r9d,%r12d
  sub    %r11d,%r12d
  mov    %r10d,%ebp
  and    $0x7,%ebp
  jmp    L59
L136:
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L76:
  mov    $0x0,%eax
  ret
```

assistant: ```c
__attribute__((always_)) int yc_poly_emulator(char *decryptor_offset, char *code, unsigned int ecx) {
  unsigned char al;
  unsigned char cl = ecx & 0xff;
  unsigned int j, i;
  for (i = 0; i < ecx; i++) {
    al = code[i];
    for (j = 0; j < 0x30; j++) {
      switch (decryptor_offset[j]) {
      case '\xEB':
        j++;
        j = j + decryptor_offset[j];
        break;
      case '\xFE':
        al--;
        j++;
        break;
      case '\x2A':
        al = al - cl;
        j++;
        break;
      case '\x02':
        al = al + cl;
        j++;
        break;
      case '\x32':
        al = al ^ cl;
        j++;
        break;
        ;
      case '\x04':
        j++;
        al = al + decryptor_offset[j];
        break;
        ;
      case '\x34':
        j++;
        al = al ^ decryptor_offset[j];
        break;
      case '\x2C':
        j++;
        al = al - decryptor_offset[j];
        break;
      case '\xC0':
        j++;
        if (decryptor_offset[j] == '\xC0') {
          j++;
          al = (al << (decryptor_offset[j] % (sizeof(al) << 3))) | (al >> ((sizeof(al) << 3) - (decryptor_offset[j] % (sizeof(al) << 3))));
        } else {
          j++;
          al = (al >> (decryptor_offset[j] % (sizeof(al) << 3))) | (al << ((sizeof(al) << 3) - (decryptor_offset[j] % (sizeof(al) << 3))));
        }
        break;
      case '\xD2':
        j++;
        if (decryptor_offset[j] == '\xC8') {
          j++;
          al = (al >> (cl % (sizeof(al) << 3))) | (al << ((sizeof(al) << 3) - (cl % (sizeof(al) << 3))));
        } else {
          j++;
          al = (al << (cl % (sizeof(al) << 3))) | (al >> ((sizeof(al) << 3) - (cl % (sizeof(al) << 3))));
        }
        break;
      case '\x90':
      case '\xf8':
      case '\xf9':
        break;
      default:;
        break;
      }
    }
    cl--;
    code[i] = al;
  }
  return 0;
}
```