user: What would the C source look like for the assembly code provided here:

```asm
<xGPIODirModeSet>:
  endbr64
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rsi,%rbx
  and    $0x1,%esi
  jne    L10
  test   $0x2,%bl
  jne    L7
L163:
  test   $0x4,%bl
  jne    L108
L303:
  test   $0x8,%bl
  jne    L19
L244:
  test   $0x10,%bl
  jne    L83
L122:
  test   $0x20,%bl
  jne    L290
L0:
  test   $0x40,%bl
  jne    L298
L241:
  test   $0x80,%bl
  jne    L117
L301:
  test   $0x1,%bh
  jne    L238
L93:
  test   $0x2,%bh
  jne    L306
L156:
  test   $0x4,%bh
  jne    L180
L245:
  test   $0x8,%bh
  jne    L208
L74:
  test   $0x10,%bh
  jne    L296
L131:
  test   $0x20,%bh
  jne    L212
L120:
  test   $0x40,%bh
  jne    L41
L304:
  and    $0x80,%bh
  jne    L276
L242:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L10:
  mov    %rdx,%rcx
  xor    %esi,%esi
  and    $0xc,%edx
  and    $0x3,%ecx
  call   <GPIODirModeSet@plt>
  test   $0x2,%bl
  je     L163
L7:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x1,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x4,%bl
  je     L303
L108:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x2,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x8,%bl
  je     L244
L19:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x3,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x10,%bl
  je     L122
L83:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x4,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x20,%bl
  je     L0
L290:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x5,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x40,%bl
  je     L241
L298:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x6,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x80,%bl
  je     L301
L117:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x7,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x1,%bh
  je     L93
L238:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x8,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x2,%bh
  je     L156
L306:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0x9,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x4,%bh
  je     L245
L180:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0xa,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x8,%bh
  je     L74
L208:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0xb,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x10,%bh
  je     L131
L296:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0xc,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x20,%bh
  je     L120
L212:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0xd,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  test   $0x40,%bh
  je     L304
L41:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  mov    $0xe,%esi
  mov    %r12,%rdi
  and    $0x3,%ecx
  and    $0xc,%edx
  call   <GPIODirModeSet@plt>
  and    $0x80,%bh
  je     L242
L276:
  mov    %rbp,%rcx
  mov    %rbp,%rdx
  pop    %rbx
  mov    %r12,%rdi
  pop    %rbp
  and    $0x3,%ecx
  and    $0xc,%edx
  mov    $0xf,%esi
  pop    %r12
  jmp    1050 <GPIODirModeSet@plt>
```

assistant: ```c
void xGPIODirModeSet(unsigned long ulPort, unsigned long ulPins, unsigned long ulPinIO) {
  unsigned long ulBit;
  ;

  ;
  for (ulBit = 0; ulBit < 16; ulBit++) {
    if (ulPins & (1 << ulBit)) {
      GPIODirModeSet(ulPort, ulBit, ulPinIO & 0xC, ulPinIO & 0x3);
    }
  }
}
```