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

```asm
<decode_base64>:
  endbr64
  push   %r12
  mov    $0x40,%r11d
  mov    $0x60,%r10d
  push   %rbp
  mov    %r10d,%r9d
  push   %rbx
  movsbl (%rdi),%eax
  movsbl 0x1(%rdi),%esi
  movsbl 0x2(%rdi),%edx
  movsbl 0x3(%rdi),%ecx
  mov    %r11d,%edi
  lea    -0x5b(%rax),%r8d
  sub    %eax,%r9d
  sub    %eax,%edi
  and    %edi,%r8d
  lea    -0x40(%rax),%edi
  sar    $0x8,%r8d
  and    %edi,%r8d
  lea    -0x7b(%rax),%edi
  and    %r9d,%edi
  lea    -0x46(%rax),%r9d
  sar    $0x8,%edi
  and    %r9d,%edi
  mov    $0x2f,%r9d
  lea    -0x1(%r8,%rdi,1),%ebx
  mov    %r9d,%r8d
  lea    -0x3a(%rax),%edi
  sub    %eax,%r8d
  and    %r8d,%edi
  lea    0x5(%rax),%r8d
  sar    $0x8,%edi
  and    %r8d,%edi
  mov    $0x2a,%r8d
  mov    %r8d,%ebp
  add    %edi,%ebx
  lea    -0x2c(%rax),%edi
  sub    %eax,%ebp
  and    %ebp,%edi
  lea    -0x30(%rax),%ebp
  sar    $0x8,%edi
  and    $0x3f,%edi
  add    %edi,%ebx
  mov    $0x2e,%edi
  mov    %edi,%r12d
  sub    %eax,%r12d
  mov    %ebp,%eax
  mov    %r11d,%ebp
  and    %r12d,%eax
  sub    %ecx,%ebp
  lea    -0x7b(%rcx),%r12d
  sar    $0x8,%eax
  and    $0x40,%eax
  add    %ebx,%eax
  lea    -0x5b(%rcx),%ebx
  and    %ebx,%ebp
  lea    -0x40(%rcx),%ebx
  shl    $0x12,%eax
  sar    $0x8,%ebp
  and    %ebx,%ebp
  mov    %r10d,%ebx
  sub    %ecx,%ebx
  and    %r12d,%ebx
  lea    -0x46(%rcx),%r12d
  sar    $0x8,%ebx
  and    %r12d,%ebx
  lea    -0x3a(%rcx),%r12d
  lea    -0x1(%rbp,%rbx,1),%ebx
  mov    %r9d,%ebp
  sub    %ecx,%ebp
  and    %r12d,%ebp
  lea    0x5(%rcx),%r12d
  sar    $0x8,%ebp
  and    %r12d,%ebp
  lea    -0x2c(%rcx),%r12d
  add    %ebp,%ebx
  mov    %r8d,%ebp
  sub    %ecx,%ebp
  and    %r12d,%ebp
  sar    $0x8,%ebp
  and    $0x3f,%ebp
  add    %ebp,%ebx
  mov    %edi,%ebp
  sub    %ecx,%ebp
  sub    $0x30,%ecx
  and    %ebp,%ecx
  mov    %r10d,%ebp
  sar    $0x8,%ecx
  sub    %esi,%ebp
  and    $0x40,%ecx
  add    %ebx,%ecx
  lea    -0x5b(%rsi),%ebx
  or     %ecx,%eax
  mov    %r11d,%ecx
  sub    %esi,%ecx
  and    %ecx,%ebx
  lea    -0x40(%rsi),%ecx
  sar    $0x8,%ebx
  and    %ecx,%ebx
  lea    -0x7b(%rsi),%ecx
  and    %ebp,%ecx
  lea    -0x46(%rsi),%ebp
  sar    $0x8,%ecx
  and    %ebp,%ecx
  mov    %r9d,%ebp
  sub    %esi,%ebp
  lea    -0x1(%rbx,%rcx,1),%ecx
  lea    -0x3a(%rsi),%ebx
  and    %ebp,%ebx
  lea    0x5(%rsi),%ebp
  sar    $0x8,%ebx
  and    %ebp,%ebx
  mov    %r8d,%ebp
  sub    %esi,%ebp
  add    %ebx,%ecx
  lea    -0x2c(%rsi),%ebx
  and    %ebp,%ebx
  mov    %edi,%ebp
  sar    $0x8,%ebx
  sub    %esi,%ebp
  sub    %edx,%r11d
  sub    %edx,%r9d
  and    $0x3f,%ebx
  sub    %edx,%r10d
  sub    %edx,%r8d
  sub    %edx,%edi
  add    %ebx,%ecx
  lea    -0x30(%rsi),%ebx
  mov    %ebx,%esi
  pop    %rbx
  and    %ebp,%esi
  pop    %rbp
  pop    %r12
  sar    $0x8,%esi
  and    $0x40,%esi
  add    %esi,%ecx
  lea    -0x3a(%rdx),%esi
  shl    $0xc,%ecx
  and    %esi,%r9d
  lea    0x5(%rdx),%esi
  or     %ecx,%eax
  lea    -0x5b(%rdx),%ecx
  sar    $0x8,%r9d
  and    %ecx,%r11d
  lea    -0x40(%rdx),%ecx
  and    %esi,%r9d
  sar    $0x8,%r11d
  lea    -0x2c(%rdx),%esi
  and    %ecx,%r11d
  lea    -0x7b(%rdx),%ecx
  and    %esi,%r8d
  and    %ecx,%r10d
  lea    -0x46(%rdx),%ecx
  sub    $0x30,%edx
  sar    $0x8,%r8d
  sar    $0x8,%r10d
  and    %edx,%edi
  and    $0x3f,%r8d
  and    %ecx,%r10d
  sar    $0x8,%edi
  lea    -0x1(%r11,%r10,1),%ecx
  add    %r9d,%ecx
  add    %r8d,%ecx
  and    $0x40,%edi
  lea    (%rcx,%rdi,1),%edx
  shl    $0x6,%edx
  or     %edx,%eax
  ret
```

assistant: ```c
int decode_base64(const char src[4]) {
  int val = 0;
  for (unsigned int i = 0; i < 4; ++i)
    val |= (-1 + ((((('A' - 1) - src[i]) & (src[i] - ('Z' + 1))) >> 8) & (src[i] - 64)) + ((((('a' - 1) - src[i]) & (src[i] - ('z' + 1))) >> 8) & (src[i] - 70)) + ((((('0' - 1) - src[i]) & (src[i] - ('9' + 1))) >> 8) & (src[i] + 5)) + ((((('+' - 1) - src[i]) & (src[i] - ('+' + 1))) >> 8) & 63) + ((((('/' - 1) - src[i]) & (src[i] - ('/' + 1))) >> 8) & 64)) << (18 - 6 * i);
  return val;
}
```