user: Translate the below assembly code into C programming language:

```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     L328
  mov    $0x1,%esi
  test   %edi,%edi
  js     L68
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,0x200050
  mov    %esi,%ecx
  test   %r8d,%r8d
  jne    L236
  test   %r9d,%r9d
  jne    L159
  test   $0x8,%al
  jne    L256
  test   $0x10,%al
  jne    L96
  nopl   (%rax)
L133:
  test   $0x20,%al
  jne    L184
  ret
  nopl   0x0(%rax)
L328:
  test   %r8d,%r8d
  je     L71
  mov    $0x1,%esi
  test   %edi,%edi
  js     L82
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
L236:
  mov    %ecx,0x20005c
  test   %r9d,%r9d
  je     L1
L159:
  mov    %ecx,0x200068
  test   $0x8,%al
  jne    L28
L372:
  test   $0x10,%al
  je     L133
  test   %edi,%edi
  js     L136
L96:
  mov    %edi,%ecx
  mov    $0x1,%edx
  shl    %cl,%edx
  mov    %edx,%ecx
  mov    %ecx,0x200080
  test   $0x20,%al
  je     L0
L23:
  mov    %ecx,0x20008c
  ret
  nopl   (%rax)
L71:
  test   %r9d,%r9d
  je     L1
  mov    $0x1,%esi
  test   %edi,%edi
  js     L188
  mov    %edi,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  jmp    L159
  nopw   0x0(%rax,%rax,1)
L68:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,0x20004c
  mov    %esi,%ecx
  test   %r8d,%r8d
  je     L61
  mov    %ecx,0x200058
  test   %r9d,%r9d
  je     L1
L350:
  mov    %ecx,0x200064
  test   $0x8,%al
  je     L372
  mov    %ecx,0x200070
  test   $0x10,%al
  je     L133
L238:
  mov    %ecx,0x20007c
  test   $0x20,%al
  je     L295
L269:
  mov    %ecx,0x200088
  ret
  nopl   0x0(%rax,%rax,1)
L1:
  test   $0x8,%al
  je     L372
  test   %edi,%edi
  js     L226
L256:
  mov    %edi,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
L28:
  mov    %ecx,0x200074
  test   $0x10,%al
  je     L133
  mov    %ecx,0x200080
  test   $0x20,%al
  jne    L23
  jmp    L0
  nopl   0x0(%rax,%rax,1)
L184:
  mov    $0x1,%eax
  test   %edi,%edi
  js     L54
  mov    %edi,%ecx
  shl    %cl,%eax
  mov    %eax,%ecx
  mov    %ecx,0x20008c
  ret
  nopw   0x0(%rax,%rax,1)
L0:
  ret
  nopl   0x0(%rax)
L54:
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,%ecx
  mov    %ecx,0x200088
  ret
  cs nopw 0x0(%rax,%rax,1)
L295:
  ret
  nopl   0x0(%rax)
L61:
  test   %r9d,%r9d
  jne    L350
  test   $0x8,%al
  je     L213
L226:
  mov    %edx,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x200070
  test   $0x10,%al
  jne    L238
  jmp    L133
  nopl   0x0(%rax)
L82:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x200058
  test   %r9d,%r9d
  jne    L350
  jmp    L1
  nopl   0x0(%rax,%rax,1)
L213:
  test   $0x10,%al
  je     L133
L136:
  mov    %edx,%ecx
  mov    $0x1,%esi
  shl    %cl,%esi
  mov    %esi,%ecx
  mov    %ecx,0x20007c
  test   $0x20,%al
  jne    L269
  jmp    L295
  nopl   0x0(%rax)
L188:
  mov    %edx,%ecx
  shl    %cl,%esi
  mov    %esi,%ecx
  jmp    L350
```

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);
  }
}
```