user: What is the c source code of the assembly code below?

```asm
<GPIOPadConfigSet>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,%eax
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %al,-0xc(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  je     L73
  mov    -0x8(%rbp),%rax
  add    $0x500,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L151
L73:
  mov    -0x8(%rbp),%rax
  add    $0x500,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L151:
  mov    -0x8(%rbp),%rdx
  add    $0x500,%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  and    $0x2,%eax
  test   %rax,%rax
  je     L18
  mov    -0x8(%rbp),%rax
  add    $0x504,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L44
L18:
  mov    -0x8(%rbp),%rax
  add    $0x504,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L44:
  mov    -0x8(%rbp),%rdx
  add    $0x504,%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  and    $0x4,%eax
  test   %rax,%rax
  je     L85
  mov    -0x8(%rbp),%rax
  add    $0x508,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L31
L85:
  mov    -0x8(%rbp),%rax
  add    $0x508,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L31:
  mov    -0x8(%rbp),%rdx
  add    $0x508,%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  and    $0x8,%eax
  test   %rax,%rax
  je     L81
  mov    -0x8(%rbp),%rax
  add    $0x518,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L99
L81:
  mov    -0x8(%rbp),%rax
  add    $0x518,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L99:
  mov    -0x8(%rbp),%rdx
  add    $0x518,%rdx
  mov    %rax,(%rdx)
  mov    -0x20(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  je     L119
  mov    -0x8(%rbp),%rax
  add    $0x50c,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L13
L119:
  mov    -0x8(%rbp),%rax
  add    $0x50c,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L13:
  mov    -0x8(%rbp),%rdx
  add    $0x50c,%rdx
  mov    %rax,(%rdx)
  mov    -0x20(%rbp),%rax
  and    $0x2,%eax
  test   %rax,%rax
  je     L171
  mov    -0x8(%rbp),%rax
  add    $0x510,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L137
L171:
  mov    -0x8(%rbp),%rax
  add    $0x510,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L137:
  mov    -0x8(%rbp),%rdx
  add    $0x510,%rdx
  mov    %rax,(%rdx)
  mov    -0x20(%rbp),%rax
  and    $0x4,%eax
  test   %rax,%rax
  je     L158
  mov    -0x8(%rbp),%rax
  add    $0x514,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L24
L158:
  mov    -0x8(%rbp),%rax
  add    $0x514,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L24:
  mov    -0x8(%rbp),%rdx
  add    $0x514,%rdx
  mov    %rax,(%rdx)
  mov    -0x20(%rbp),%rax
  and    $0x8,%eax
  test   %rax,%rax
  je     L141
  mov    -0x8(%rbp),%rax
  add    $0x51c,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L177
L141:
  mov    -0x8(%rbp),%rax
  add    $0x51c,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L177:
  mov    -0x8(%rbp),%rdx
  add    $0x51c,%rdx
  mov    %rax,(%rdx)
  cmpq   $0x0,-0x20(%rbp)
  jne    L107
  mov    -0x8(%rbp),%rax
  add    $0x528,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  or     %rdx,%rax
  jmp    L59
L107:
  mov    -0x8(%rbp),%rax
  add    $0x528,%rax
  mov    (%rax),%rdx
  movzbl -0xc(%rbp),%eax
  not    %eax
  cltq
  and    %rdx,%rax
L59:
  mov    -0x8(%rbp),%rdx
  add    $0x528,%rdx
  mov    %rax,(%rdx)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void GPIOPadConfigSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulStrength, unsigned long ulPinType) {
  ;

  ;

  (*((volatile unsigned long *)(ulPort + 0x00000500))) = ((ulStrength & 1) ? ((*((volatile unsigned long *)(ulPort + 0x00000500))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000500))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000504))) = ((ulStrength & 2) ? ((*((volatile unsigned long *)(ulPort + 0x00000504))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000504))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000508))) = ((ulStrength & 4) ? ((*((volatile unsigned long *)(ulPort + 0x00000508))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000508))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000518))) = ((ulStrength & 8) ? ((*((volatile unsigned long *)(ulPort + 0x00000518))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000518))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x0000050C))) = ((ulPinType & 1) ? ((*((volatile unsigned long *)(ulPort + 0x0000050C))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x0000050C))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000510))) = ((ulPinType & 2) ? ((*((volatile unsigned long *)(ulPort + 0x00000510))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000510))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000514))) = ((ulPinType & 4) ? ((*((volatile unsigned long *)(ulPort + 0x00000514))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000514))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x0000051C))) = ((ulPinType & 8) ? ((*((volatile unsigned long *)(ulPort + 0x0000051C))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x0000051C))) & ~(ucPins)));
  (*((volatile unsigned long *)(ulPort + 0x00000528))) = ((ulPinType == 0x00000000) ? ((*((volatile unsigned long *)(ulPort + 0x00000528))) | ucPins) : ((*((volatile unsigned long *)(ulPort + 0x00000528))) & ~(ucPins)));
}
```