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

```asm
<GPIO_event_config>:
  endbr64
  mov    %esi,%r8d
  mov    %esi,%r9d
  mov    %esi,%eax
  mov    %edi,%edx
  and    $0x2,%r8d
  lea    -0x20(%rdi),%edi
  and    $0x4,%r9d
  test   $0x1,%al
  je     L113
  mov    $0x1,%esi
  test   %edi,%edi
  js     L60
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,0x200050
  mov    %esi,%ecx
  test   %r8d,%r8d
  jne    L216
  test   %r9d,%r9d
  jne    L375
  test   $0x8,%al
  jne    L301
  test   $0x10,%al
  jne    L225
  nopl   (%rax)
L142:
  test   $0x20,%al
  jne    L291
  ret
  nopl   0x0(%rax)
L113:
  test   %r8d,%r8d
  je     L27
  mov    $0x1,%esi
  test   %edi,%edi
  js     L8
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
L216:
  mov    %ecx,0x20005c
  test   %r9d,%r9d
  je     L74
L375:
  mov    %ecx,0x200068
  test   $0x8,%al
  jne    L267
L144:
  test   $0x10,%al
  je     L142
  test   %edi,%edi
  js     L148
L225:
  mov    %edi,%ecx
  mov    $0x1,%edx
  shl    %cl,%edx
  mov    %edx,%ecx
  mov    %ecx,0x200080
  test   $0x20,%al
  je     L76
L83:
  mov    %ecx,0x20008c
  ret
  nopl   (%rax)
L27:
  test   %r9d,%r9d
  je     L74
  mov    $0x1,%esi
  test   %edi,%edi
  js     L112
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  jmp    L375
  nopw   0x0(%rax,%rax,1)
L60:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,0x20004c
  mov    %esi,%ecx
  test   %r8d,%r8d
  je     L255
  mov    %ecx,0x200058
  test   %r9d,%r9d
  je     L74
L124:
  mov    %ecx,0x200064
  test   $0x8,%al
  je     L144
  mov    %ecx,0x200070
  test   $0x10,%al
  je     L142
L305:
  mov    %ecx,0x20007c
  test   $0x20,%al
  je     L244
L25:
  mov    %ecx,0x200088
  ret
  nopl   0x0(%rax,%rax,1)
L74:
  test   $0x8,%al
  je     L144
  test   %edi,%edi
  js     L137
L301:
  mov    %edi,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
L267:
  mov    %ecx,0x200074
  test   $0x10,%al
  je     L142
  mov    %ecx,0x200080
  test   $0x20,%al
  jne    L83
  jmp    L76
  nopl   0x0(%rax,%rax,1)
L291:
  mov    $0x1,%eax
  test   %edi,%edi
  js     L26
  mov    %edi,%ecx
  shl    %cl,%eax
  mov    %eax,%ecx
  mov    %ecx,0x20008c
  ret
  nopw   0x0(%rax,%rax,1)
L76:
  ret
  nopl   0x0(%rax)
L26:
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,%ecx
  mov    %ecx,0x200088
  ret
  cs nopw 0x0(%rax,%rax,1)
L244:
  ret
  nopl   0x0(%rax)
L255:
  test   %r9d,%r9d
  jne    L124
  test   $0x8,%al
  je     L303
L137:
  mov    %edx,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x200070
  test   $0x10,%al
  jne    L305
  jmp    L142
  nopl   0x0(%rax)
L8:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x200058
  test   %r9d,%r9d
  jne    L124
  jmp    L74
  nopl   0x0(%rax,%rax,1)
L303:
  test   $0x10,%al
  je     L142
L148:
  mov    %edx,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x20007c
  test   $0x20,%al
  jne    L25
  jmp    L244
  nopl   0x0(%rax)
L112:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  jmp    L124
```

assistant: ```c
void GPIO_event_config(uint8_t pin, uint8_t type) {
  ;
  int8_t ev1 = pin - 32;
  if (type & 1) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x0020004C))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x00200050))) = (1 << ev1);
  }
  if (type & 2) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x00200058))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x0020005C))) = (1 << ev1);
  }
  if (type & 4) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x00200064))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x00200068))) = (1 << ev1);
  }
  if (type & 8) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x00200070))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x00200074))) = (1 << ev1);
  }
  if (type & 16) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x0020007C))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x00200080))) = (1 << ev1);
  }
  if (type & 32) {
    if (ev1 < 0)
      (*((volatile uint32_t *)(0x00200088))) = (1 << pin);
    else
      (*((volatile uint32_t *)(0x0020008C))) = (1 << ev1);
  }
}
```