#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int uint8_t;
typedef int uint32_t;

/* Variables and functions */
void GPIOPadConfigSet(uint32_t ui32Port, uint8_t ui8Pins, uint32_t ui32Strength,
                      uint32_t ui32PinType) {
  uint8_t ui8Bit;
  ;

  ;

  ;
  for (ui8Bit = 0; ui8Bit < 8; ui8Bit++) {
    if (ui8Pins & (1 << ui8Bit)) {
      (*((volatile uint32_t *)(ui32Port + 0x00000FC4))) =
          ((*((volatile uint32_t *)(ui32Port + 0x00000FC4))) &
           ~(0x3 << (2 * ui8Bit)));
      (*((volatile uint32_t *)(ui32Port + 0x00000FC4))) |=
          (((ui32Strength >> 5) & 0x3) << (2 * ui8Bit));
    }
  }
  (*((volatile uint32_t *)(ui32Port + 0x00000500))) =
      ((ui32Strength & 1)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000500))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000500))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000504))) =
      ((ui32Strength & 2)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000504))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000504))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000508))) =
      ((ui32Strength & 4)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000508))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000508))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000518))) =
      ((ui32Strength & 8)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000518))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000518))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x0000053C))) =
      ((ui32Strength & 0x10)
           ? ((*((volatile uint32_t *)(ui32Port + 0x0000053C))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x0000053C))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x0000050C))) =
      ((ui32PinType & 1)
           ? ((*((volatile uint32_t *)(ui32Port + 0x0000050C))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x0000050C))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000510))) =
      ((ui32PinType & 2)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000510))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000510))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000514))) =
      ((ui32PinType & 4)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000514))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000514))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x0000051C))) =
      ((ui32PinType & 8)
           ? ((*((volatile uint32_t *)(ui32Port + 0x0000051C))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x0000051C))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000544))) =
      ((ui32PinType & 0x200)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000544))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000544))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000540))) =
      ((ui32PinType & 0x300)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000540))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000540))) & ~(ui8Pins)));
  (*((volatile uint32_t *)(ui32Port + 0x00000528))) =
      ((ui32PinType == 0x00000000)
           ? ((*((volatile uint32_t *)(ui32Port + 0x00000528))) | ui8Pins)
           : ((*((volatile uint32_t *)(ui32Port + 0x00000528))) & ~(ui8Pins)));
}


x86 assembly (clang, -O0):
<GPIOPadConfigSet>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jge    119f <GPIOPadConfigSet+0x9f>
mov    -0x8(%rbp),%eax
mov    -0x14(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     118c <GPIOPadConfigSet+0x8c>
mov    -0x4(%rbp),%eax
add    $0xfc4,%eax
cltq
mov    (%rax),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
mov    $0x3,%eax
shl    %cl,%eax
mov    -0x18(%rbp),%ecx
xor    $0xffffffff,%eax
and    %eax,%ecx
mov    -0x4(%rbp),%eax
add    $0xfc4,%eax
cltq
mov    %ecx,(%rax)
mov    -0xc(%rbp),%edx
sar    $0x5,%edx
and    $0x3,%edx
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
shl    %cl,%edx
mov    -0x4(%rbp),%eax
add    $0xfc4,%eax
cltq
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    1191 <GPIOPadConfigSet+0x91>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1117 <GPIOPadConfigSet+0x17>
mov    -0xc(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     11c5 <GPIOPadConfigSet+0xc5>
mov    -0x4(%rbp),%eax
add    $0x500,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    11dc <GPIOPadConfigSet+0xdc>
mov    -0x4(%rbp),%eax
add    $0x500,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x500,%eax
cltq
mov    %ecx,(%rax)
mov    -0xc(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1211 <GPIOPadConfigSet+0x111>
mov    -0x4(%rbp),%eax
add    $0x504,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1228 <GPIOPadConfigSet+0x128>
mov    -0x4(%rbp),%eax
add    $0x504,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x504,%eax
cltq
mov    %ecx,(%rax)
mov    -0xc(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     125d <GPIOPadConfigSet+0x15d>
mov    -0x4(%rbp),%eax
add    $0x508,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    1274 <GPIOPadConfigSet+0x174>
mov    -0x4(%rbp),%eax
add    $0x508,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x508,%eax
cltq
mov    %ecx,(%rax)
mov    -0xc(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     12a9 <GPIOPadConfigSet+0x1a9>
mov    -0x4(%rbp),%eax
add    $0x518,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    12c0 <GPIOPadConfigSet+0x1c0>
mov    -0x4(%rbp),%eax
add    $0x518,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x518,%eax
cltq
mov    %ecx,(%rax)
mov    -0xc(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     12f5 <GPIOPadConfigSet+0x1f5>
mov    -0x4(%rbp),%eax
add    $0x53c,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    130c <GPIOPadConfigSet+0x20c>
mov    -0x4(%rbp),%eax
add    $0x53c,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x53c,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1341 <GPIOPadConfigSet+0x241>
mov    -0x4(%rbp),%eax
add    $0x50c,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1358 <GPIOPadConfigSet+0x258>
mov    -0x4(%rbp),%eax
add    $0x50c,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x50c,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     138d <GPIOPadConfigSet+0x28d>
mov    -0x4(%rbp),%eax
add    $0x510,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    13a4 <GPIOPadConfigSet+0x2a4>
mov    -0x4(%rbp),%eax
add    $0x510,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x510,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13d9 <GPIOPadConfigSet+0x2d9>
mov    -0x4(%rbp),%eax
add    $0x514,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    13f0 <GPIOPadConfigSet+0x2f0>
mov    -0x4(%rbp),%eax
add    $0x514,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x514,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1425 <GPIOPadConfigSet+0x325>
mov    -0x4(%rbp),%eax
add    $0x51c,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    143c <GPIOPadConfigSet+0x33c>
mov    -0x4(%rbp),%eax
add    $0x51c,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x51c,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x200,%eax
cmp    $0x0,%eax
je     1473 <GPIOPadConfigSet+0x373>
mov    -0x4(%rbp),%eax
add    $0x544,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    148a <GPIOPadConfigSet+0x38a>
mov    -0x4(%rbp),%eax
add    $0x544,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x544,%eax
cltq
mov    %ecx,(%rax)
mov    -0x10(%rbp),%eax
and    $0x300,%eax
cmp    $0x0,%eax
je     14c1 <GPIOPadConfigSet+0x3c1>
mov    -0x4(%rbp),%eax
add    $0x540,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    14d8 <GPIOPadConfigSet+0x3d8>
mov    -0x4(%rbp),%eax
add    $0x540,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x540,%eax
cltq
mov    %ecx,(%rax)
cmpl   $0x0,-0x10(%rbp)
jne    1508 <GPIOPadConfigSet+0x408>
mov    -0x4(%rbp),%eax
add    $0x528,%eax
cltq
mov    (%rax),%eax
or     -0x8(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    151f <GPIOPadConfigSet+0x41f>
mov    -0x4(%rbp),%eax
add    $0x528,%eax
cltq
mov    (%rax),%eax
mov    -0x8(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x528,%eax
cltq
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPIOPadConfigSet>:
movslq %edi,%rax
mov    %edx,%r8d
shr    $0x5,%r8d
and    $0x3,%r8d
test   $0x1,%sil
jne    129b <GPIOPadConfigSet+0x19b>
test   $0x2,%sil
jne    12b3 <GPIOPadConfigSet+0x1b3>
test   $0x4,%sil
jne    12d2 <GPIOPadConfigSet+0x1d2>
test   $0x8,%sil
jne    12ef <GPIOPadConfigSet+0x1ef>
test   $0x10,%sil
jne    130f <GPIOPadConfigSet+0x20f>
test   $0x20,%sil
jne    132f <GPIOPadConfigSet+0x22f>
test   $0x40,%sil
jne    134f <GPIOPadConfigSet+0x24f>
test   $0x80,%sil
je     116f <GPIOPadConfigSet+0x6f>
andl   $0xffff3fff,0xfc4(%rax)
3f ff ff
shl    $0xe,%r8d
or     %r8d,0xfc4(%rax)
mov    0x500(%rax),%edi
mov    %esi,%r8d
not    %r8d
mov    %edi,%r9d
and    %r8d,%r9d
or     %esi,%edi
test   $0x1,%dl
cmove  %r9d,%edi
mov    %edi,0x500(%rax)
mov    0x504(%rax),%edi
mov    %edi,%r9d
and    %r8d,%r9d
or     %esi,%edi
test   $0x2,%dl
cmove  %r9d,%edi
mov    %edi,0x504(%rax)
mov    0x508(%rax),%edi
mov    %edi,%r9d
and    %r8d,%r9d
or     %esi,%edi
test   $0x4,%dl
cmove  %r9d,%edi
mov    %edi,0x508(%rax)
mov    0x518(%rax),%edi
mov    %edi,%r9d
and    %r8d,%r9d
or     %esi,%edi
test   $0x8,%dl
cmove  %r9d,%edi
mov    %edi,0x518(%rax)
mov    0x53c(%rax),%edi
mov    %edi,%r9d
and    %r8d,%r9d
or     %esi,%edi
test   $0x10,%dl
cmove  %r9d,%edi
mov    %edi,0x53c(%rax)
mov    0x50c(%rax),%edx
mov    %edx,%edi
and    %r8d,%edi
or     %esi,%edx
test   $0x1,%cl
cmove  %edi,%edx
mov    %edx,0x50c(%rax)
mov    0x510(%rax),%edx
mov    %edx,%edi
and    %r8d,%edi
or     %esi,%edx
test   $0x2,%cl
cmove  %edi,%edx
mov    %edx,0x510(%rax)
mov    0x514(%rax),%edx
mov    %edx,%edi
and    %r8d,%edi
or     %esi,%edx
test   $0x4,%cl
cmove  %edi,%edx
mov    %edx,0x514(%rax)
mov    0x51c(%rax),%edx
mov    %edx,%edi
and    %r8d,%edi
or     %esi,%edx
test   $0x8,%cl
cmove  %edi,%edx
mov    %edx,0x51c(%rax)
mov    0x544(%rax),%edx
mov    %edx,%edi
and    %r8d,%edi
or     %esi,%edx
test   $0x200,%ecx
cmove  %edi,%edx
mov    %edx,0x544(%rax)
mov    0x540(%rax),%edx
test   $0x300,%ecx
je     1374 <GPIOPadConfigSet+0x274>
or     %esi,%edx
mov    %edx,0x540(%rax)
jmp    1387 <GPIOPadConfigSet+0x287>
andl   $0xfffffffc,0xfc4(%rax)
or     %r8d,0xfc4(%rax)
test   $0x2,%sil
je     1122 <GPIOPadConfigSet+0x22>
andl   $0xfffffff3,0xfc4(%rax)
lea    0x0(,%r8,4),%edi
or     %edi,0xfc4(%rax)
test   $0x4,%sil
je     112c <GPIOPadConfigSet+0x2c>
andl   $0xffffffcf,0xfc4(%rax)
mov    %r8d,%edi
shl    $0x4,%edi
or     %edi,0xfc4(%rax)
test   $0x8,%sil
je     1136 <GPIOPadConfigSet+0x36>
andl   $0xffffff3f,0xfc4(%rax)
ff ff ff
mov    %r8d,%edi
shl    $0x6,%edi
or     %edi,0xfc4(%rax)
test   $0x10,%sil
je     1140 <GPIOPadConfigSet+0x40>
andl   $0xfffffcff,0xfc4(%rax)
fc ff ff
mov    %r8d,%edi
shl    $0x8,%edi
or     %edi,0xfc4(%rax)
test   $0x20,%sil
je     114a <GPIOPadConfigSet+0x4a>
andl   $0xfffff3ff,0xfc4(%rax)
f3 ff ff
mov    %r8d,%edi
shl    $0xa,%edi
or     %edi,0xfc4(%rax)
test   $0x40,%sil
je     1154 <GPIOPadConfigSet+0x54>
andl   $0xffffcfff,0xfc4(%rax)
cf ff ff
mov    %r8d,%edi
shl    $0xc,%edi
or     %edi,0xfc4(%rax)
test   $0x80,%sil
jne    115a <GPIOPadConfigSet+0x5a>
jmp    116f <GPIOPadConfigSet+0x6f>
mov    %esi,%r8d
not    %r8d
and    %r8d,%edx
mov    %edx,0x540(%rax)
test   %ecx,%ecx
je     1398 <GPIOPadConfigSet+0x298>
and    0x528(%rax),%r8d
add    $0x528,%rax
mov    %r8d,(%rax)
ret
or     0x528(%rax),%esi
add    $0x528,%rax
mov    %esi,(%rax)
ret

LLVM IR (-O0):
define void @GPIOPadConfigSet(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
store i32 0, i32* %9
br label %10
10: ; preds = %47, %4
%11 = load i32, i32* %9
%12 = icmp slt i32 %11, 8
br i1 %12, label %13, label %50
13: ; preds = %10
%14 = load i32, i32* %6
%15 = load i32, i32* %9
%16 = shl i32 1, %15
%17 = and i32 %14, %16
%18 = icmp ne i32 %17, 0
br i1 %18, label %19, label %46
19: ; preds = %13
%20 = load i32, i32* %5
%21 = add nsw i32 %20, 4036
%22 = sext i32 %21 to i64
%23 = inttoptr i64 %22 to i32*
%24 = load volatile i32, i32* %23
%25 = load i32, i32* %9
%26 = mul nsw i32 2, %25
%27 = shl i32 3, %26
%28 = xor i32 %27, -1
%29 = and i32 %24, %28
%30 = load i32, i32* %5
%31 = add nsw i32 %30, 4036
%32 = sext i32 %31 to i64
%33 = inttoptr i64 %32 to i32*
store volatile i32 %29, i32* %33
%34 = load i32, i32* %7
%35 = ashr i32 %34, 5
%36 = and i32 %35, 3
%37 = load i32, i32* %9
%38 = mul nsw i32 2, %37
%39 = shl i32 %36, %38
%40 = load i32, i32* %5
%41 = add nsw i32 %40, 4036
%42 = sext i32 %41 to i64
%43 = inttoptr i64 %42 to i32*
%44 = load volatile i32, i32* %43
%45 = or i32 %44, %39
store volatile i32 %45, i32* %43
br label %46
46: ; preds = %19, %13
br label %47
47: ; preds = %46
%48 = load i32, i32* %9
%49 = add nsw i32 %48, 1
store i32 %49, i32* %9
br label %10
50: ; preds = %10
%51 = load i32, i32* %7
%52 = and i32 %51, 1
%53 = icmp ne i32 %52, 0
br i1 %53, label %54, label %62
54: ; preds = %50
%55 = load i32, i32* %5
%56 = add nsw i32 %55, 1280
%57 = sext i32 %56 to i64
%58 = inttoptr i64 %57 to i32*
%59 = load volatile i32, i32* %58
%60 = load i32, i32* %6
%61 = or i32 %59, %60
br label %71
62: ; preds = %50
%63 = load i32, i32* %5
%64 = add nsw i32 %63, 1280
%65 = sext i32 %64 to i64
%66 = inttoptr i64 %65 to i32*
%67 = load volatile i32, i32* %66
%68 = load i32, i32* %6
%69 = xor i32 %68, -1
%70 = and i32 %67, %69
br label %71
71: ; preds = %62, %54
%72 = phi i32 [ %61, %54 ], [ %70, %62 ]
%73 = load i32, i32* %5
%74 = add nsw i32 %73, 1280
%75 = sext i32 %74 to i64
%76 = inttoptr i64 %75 to i32*
store volatile i32 %72, i32* %76
%77 = load i32, i32* %7
%78 = and i32 %77, 2
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %88
80: ; preds = %71
%81 = load i32, i32* %5
%82 = add nsw i32 %81, 1284
%83 = sext i32 %82 to i64
%84 = inttoptr i64 %83 to i32*
%85 = load volatile i32, i32* %84
%86 = load i32, i32* %6
%87 = or i32 %85, %86
br label %97
88: ; preds = %71
%89 = load i32, i32* %5
%90 = add nsw i32 %89, 1284
%91 = sext i32 %90 to i64
%92 = inttoptr i64 %91 to i32*
%93 = load volatile i32, i32* %92
%94 = load i32, i32* %6
%95 = xor i32 %94, -1
%96 = and i32 %93, %95
br label %97
97: ; preds = %88, %80
%98 = phi i32 [ %87, %80 ], [ %96, %88 ]
%99 = load i32, i32* %5
%100 = add nsw i32 %99, 1284
%101 = sext i32 %100 to i64
%102 = inttoptr i64 %101 to i32*
store volatile i32 %98, i32* %102
%103 = load i32, i32* %7
%104 = and i32 %103, 4
%105 = icmp ne i32 %104, 0
br i1 %105, label %106, label %114
106: ; preds = %97
%107 = load i32, i32* %5
%108 = add nsw i32 %107, 1288
%109 = sext i32 %108 to i64
%110 = inttoptr i64 %109 to i32*
%111 = load volatile i32, i32* %110
%112 = load i32, i32* %6
%113 = or i32 %111, %112
br label %123
114: ; preds = %97
%115 = load i32, i32* %5
%116 = add nsw i32 %115, 1288
%117 = sext i32 %116 to i64
%118 = inttoptr i64 %117 to i32*
%119 = load volatile i32, i32* %118
%120 = load i32, i32* %6
%121 = xor i32 %120, -1
%122 = and i32 %119, %121
br label %123
123: ; preds = %114, %106
%124 = phi i32 [ %113, %106 ], [ %122, %114 ]
%125 = load i32, i32* %5
%126 = add nsw i32 %125, 1288
%127 = sext i32 %126 to i64
%128 = inttoptr i64 %127 to i32*
store volatile i32 %124, i32* %128
%129 = load i32, i32* %7
%130 = and i32 %129, 8
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %140
132: ; preds = %123
%133 = load i32, i32* %5
%134 = add nsw i32 %133, 1304
%135 = sext i32 %134 to i64
%136 = inttoptr i64 %135 to i32*
%137 = load volatile i32, i32* %136
%138 = load i32, i32* %6
%139 = or i32 %137, %138
br label %149
140: ; preds = %123
%141 = load i32, i32* %5
%142 = add nsw i32 %141, 1304
%143 = sext i32 %142 to i64
%144 = inttoptr i64 %143 to i32*
%145 = load volatile i32, i32* %144
%146 = load i32, i32* %6
%147 = xor i32 %146, -1
%148 = and i32 %145, %147
br label %149
149: ; preds = %140, %132
%150 = phi i32 [ %139, %132 ], [ %148, %140 ]
%151 = load i32, i32* %5
%152 = add nsw i32 %151, 1304
%153 = sext i32 %152 to i64
%154 = inttoptr i64 %153 to i32*
store volatile i32 %150, i32* %154
%155 = load i32, i32* %7
%156 = and i32 %155, 16
%157 = icmp ne i32 %156, 0
br i1 %157, label %158, label %166
158: ; preds = %149
%159 = load i32, i32* %5
%160 = add nsw i32 %159, 1340
%161 = sext i32 %160 to i64
%162 = inttoptr i64 %161 to i32*
%163 = load volatile i32, i32* %162
%164 = load i32, i32* %6
%165 = or i32 %163, %164
br label %175
166: ; preds = %149
%167 = load i32, i32* %5
%168 = add nsw i32 %167, 1340
%169 = sext i32 %168 to i64
%170 = inttoptr i64 %169 to i32*
%171 = load volatile i32, i32* %170
%172 = load i32, i32* %6
%173 = xor i32 %172, -1
%174 = and i32 %171, %173
br label %175
175: ; preds = %166, %158
%176 = phi i32 [ %165, %158 ], [ %174, %166 ]
%177 = load i32, i32* %5
%178 = add nsw i32 %177, 1340
%179 = sext i32 %178 to i64
%180 = inttoptr i64 %179 to i32*
store volatile i32 %176, i32* %180
%181 = load i32, i32* %8
%182 = and i32 %181, 1
%183 = icmp ne i32 %182, 0
br i1 %183, label %184, label %192
184: ; preds = %175
%185 = load i32, i32* %5
%186 = add nsw i32 %185, 1292
%187 = sext i32 %186 to i64
%188 = inttoptr i64 %187 to i32*
%189 = load volatile i32, i32* %188
%190 = load i32, i32* %6
%191 = or i32 %189, %190
br label %201
192: ; preds = %175
%193 = load i32, i32* %5
%194 = add nsw i32 %193, 1292
%195 = sext i32 %194 to i64
%196 = inttoptr i64 %195 to i32*
%197 = load volatile i32, i32* %196
%198 = load i32, i32* %6
%199 = xor i32 %198, -1
%200 = and i32 %197, %199
br label %201
201: ; preds = %192, %184
%202 = phi i32 [ %191, %184 ], [ %200, %192 ]
%203 = load i32, i32* %5
%204 = add nsw i32 %203, 1292
%205 = sext i32 %204 to i64
%206 = inttoptr i64 %205 to i32*
store volatile i32 %202, i32* %206
%207 = load i32, i32* %8
%208 = and i32 %207, 2
%209 = icmp ne i32 %208, 0
br i1 %209, label %210, label %218
210: ; preds = %201
%211 = load i32, i32* %5
%212 = add nsw i32 %211, 1296
%213 = sext i32 %212 to i64
%214 = inttoptr i64 %213 to i32*
%215 = load volatile i32, i32* %214
%216 = load i32, i32* %6
%217 = or i32 %215, %216
br label %227
218: ; preds = %201
%219 = load i32, i32* %5
%220 = add nsw i32 %219, 1296
%221 = sext i32 %220 to i64
%222 = inttoptr i64 %221 to i32*
%223 = load volatile i32, i32* %222
%224 = load i32, i32* %6
%225 = xor i32 %224, -1
%226 = and i32 %223, %225
br label %227
227: ; preds = %218, %210
%228 = phi i32 [ %217, %210 ], [ %226, %218 ]
%229 = load i32, i32* %5
%230 = add nsw i32 %229, 1296
%231 = sext i32 %230 to i64
%232 = inttoptr i64 %231 to i32*
store volatile i32 %228, i32* %232
%233 = load i32, i32* %8
%234 = and i32 %233, 4
%235 = icmp ne i32 %234, 0
br i1 %235, label %236, label %244
236: ; preds = %227
%237 = load i32, i32* %5
%238 = add nsw i32 %237, 1300
%239 = sext i32 %238 to i64
%240 = inttoptr i64 %239 to i32*
%241 = load volatile i32, i32* %240
%242 = load i32, i32* %6
%243 = or i32 %241, %242
br label %253
244: ; preds = %227
%245 = load i32, i32* %5
%246 = add nsw i32 %245, 1300
%247 = sext i32 %246 to i64
%248 = inttoptr i64 %247 to i32*
%249 = load volatile i32, i32* %248
%250 = load i32, i32* %6
%251 = xor i32 %250, -1
%252 = and i32 %249, %251
br label %253
253: ; preds = %244, %236
%254 = phi i32 [ %243, %236 ], [ %252, %244 ]
%255 = load i32, i32* %5
%256 = add nsw i32 %255, 1300
%257 = sext i32 %256 to i64
%258 = inttoptr i64 %257 to i32*
store volatile i32 %254, i32* %258
%259 = load i32, i32* %8
%260 = and i32 %259, 8
%261 = icmp ne i32 %260, 0
br i1 %261, label %262, label %270
262: ; preds = %253
%263 = load i32, i32* %5
%264 = add nsw i32 %263, 1308
%265 = sext i32 %264 to i64
%266 = inttoptr i64 %265 to i32*
%267 = load volatile i32, i32* %266
%268 = load i32, i32* %6
%269 = or i32 %267, %268
br label %279
270: ; preds = %253
%271 = load i32, i32* %5
%272 = add nsw i32 %271, 1308
%273 = sext i32 %272 to i64
%274 = inttoptr i64 %273 to i32*
%275 = load volatile i32, i32* %274
%276 = load i32, i32* %6
%277 = xor i32 %276, -1
%278 = and i32 %275, %277
br label %279
279: ; preds = %270, %262
%280 = phi i32 [ %269, %262 ], [ %278, %270 ]
%281 = load i32, i32* %5
%282 = add nsw i32 %281, 1308
%283 = sext i32 %282 to i64
%284 = inttoptr i64 %283 to i32*
store volatile i32 %280, i32* %284
%285 = load i32, i32* %8
%286 = and i32 %285, 512
%287 = icmp ne i32 %286, 0
br i1 %287, label %288, label %296
288: ; preds = %279
%289 = load i32, i32* %5
%290 = add nsw i32 %289, 1348
%291 = sext i32 %290 to i64
%292 = inttoptr i64 %291 to i32*
%293 = load volatile i32, i32* %292
%294 = load i32, i32* %6
%295 = or i32 %293, %294
br label %305
296: ; preds = %279
%297 = load i32, i32* %5
%298 = add nsw i32 %297, 1348
%299 = sext i32 %298 to i64
%300 = inttoptr i64 %299 to i32*
%301 = load volatile i32, i32* %300
%302 = load i32, i32* %6
%303 = xor i32 %302, -1
%304 = and i32 %301, %303
br label %305
305: ; preds = %296, %288
%306 = phi i32 [ %295, %288 ], [ %304, %296 ]
%307 = load i32, i32* %5
%308 = add nsw i32 %307, 1348
%309 = sext i32 %308 to i64
%310 = inttoptr i64 %309 to i32*
store volatile i32 %306, i32* %310
%311 = load i32, i32* %8
%312 = and i32 %311, 768
%313 = icmp ne i32 %312, 0
br i1 %313, label %314, label %322
314: ; preds = %305
%315 = load i32, i32* %5
%316 = add nsw i32 %315, 1344
%317 = sext i32 %316 to i64
%318 = inttoptr i64 %317 to i32*
%319 = load volatile i32, i32* %318
%320 = load i32, i32* %6
%321 = or i32 %319, %320
br label %331
322: ; preds = %305
%323 = load i32, i32* %5
%324 = add nsw i32 %323, 1344
%325 = sext i32 %324 to i64
%326 = inttoptr i64 %325 to i32*
%327 = load volatile i32, i32* %326
%328 = load i32, i32* %6
%329 = xor i32 %328, -1
%330 = and i32 %327, %329
br label %331
331: ; preds = %322, %314
%332 = phi i32 [ %321, %314 ], [ %330, %322 ]
%333 = load i32, i32* %5
%334 = add nsw i32 %333, 1344
%335 = sext i32 %334 to i64
%336 = inttoptr i64 %335 to i32*
store volatile i32 %332, i32* %336
%337 = load i32, i32* %8
%338 = icmp eq i32 %337, 0
br i1 %338, label %339, label %347
339: ; preds = %331
%340 = load i32, i32* %5
%341 = add nsw i32 %340, 1320
%342 = sext i32 %341 to i64
%343 = inttoptr i64 %342 to i32*
%344 = load volatile i32, i32* %343
%345 = load i32, i32* %6
%346 = or i32 %344, %345
br label %356
347: ; preds = %331
%348 = load i32, i32* %5
%349 = add nsw i32 %348, 1320
%350 = sext i32 %349 to i64
%351 = inttoptr i64 %350 to i32*
%352 = load volatile i32, i32* %351
%353 = load i32, i32* %6
%354 = xor i32 %353, -1
%355 = and i32 %352, %354
br label %356
356: ; preds = %347, %339
%357 = phi i32 [ %346, %339 ], [ %355, %347 ]
%358 = load i32, i32* %5
%359 = add nsw i32 %358, 1320
%360 = sext i32 %359 to i64
%361 = inttoptr i64 %360 to i32*
store volatile i32 %357, i32* %361
ret void
}

LLVM IR (-O2):
define void @GPIOPadConfigSet(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = add nsw i32 %0, 4036
%6 = sext i32 %5 to i64
%7 = inttoptr i64 %6 to i32*
%8 = lshr i32 %2, 5
%9 = and i32 %8, 3
%10 = and i32 %1, 1
%11 = icmp eq i32 %10, 0
br i1 %11, label %17, label %12
12: ; preds = %4
%13 = load volatile i32, i32* %7
%14 = and i32 %13, -4
store volatile i32 %14, i32* %7
%15 = load volatile i32, i32* %7
%16 = or i32 %15, %9
store volatile i32 %16, i32* %7
br label %17
17: ; preds = %4, %12
%18 = and i32 %1, 2
%19 = icmp eq i32 %18, 0
br i1 %19, label %26, label %20
20: ; preds = %17
%21 = load volatile i32, i32* %7
%22 = and i32 %21, -13
store volatile i32 %22, i32* %7
%23 = shl nuw nsw i32 %9, 2
%24 = load volatile i32, i32* %7
%25 = or i32 %24, %23
store volatile i32 %25, i32* %7
br label %26
26: ; preds = %20, %17
%27 = and i32 %1, 4
%28 = icmp eq i32 %27, 0
br i1 %28, label %35, label %29
29: ; preds = %26
%30 = load volatile i32, i32* %7
%31 = and i32 %30, -49
store volatile i32 %31, i32* %7
%32 = shl nuw nsw i32 %9, 4
%33 = load volatile i32, i32* %7
%34 = or i32 %33, %32
store volatile i32 %34, i32* %7
br label %35
35: ; preds = %29, %26
%36 = and i32 %1, 8
%37 = icmp eq i32 %36, 0
br i1 %37, label %44, label %38
38: ; preds = %35
%39 = load volatile i32, i32* %7
%40 = and i32 %39, -193
store volatile i32 %40, i32* %7
%41 = shl nuw nsw i32 %9, 6
%42 = load volatile i32, i32* %7
%43 = or i32 %42, %41
store volatile i32 %43, i32* %7
br label %44
44: ; preds = %38, %35
%45 = and i32 %1, 16
%46 = icmp eq i32 %45, 0
br i1 %46, label %53, label %47
47: ; preds = %44
%48 = load volatile i32, i32* %7
%49 = and i32 %48, -769
store volatile i32 %49, i32* %7
%50 = shl nuw nsw i32 %9, 8
%51 = load volatile i32, i32* %7
%52 = or i32 %51, %50
store volatile i32 %52, i32* %7
br label %53
53: ; preds = %47, %44
%54 = and i32 %1, 32
%55 = icmp eq i32 %54, 0
br i1 %55, label %62, label %56
56: ; preds = %53
%57 = load volatile i32, i32* %7
%58 = and i32 %57, -3073
store volatile i32 %58, i32* %7
%59 = shl nuw nsw i32 %9, 10
%60 = load volatile i32, i32* %7
%61 = or i32 %60, %59
store volatile i32 %61, i32* %7
br label %62
62: ; preds = %56, %53
%63 = and i32 %1, 64
%64 = icmp eq i32 %63, 0
br i1 %64, label %71, label %65
65: ; preds = %62
%66 = load volatile i32, i32* %7
%67 = and i32 %66, -12289
store volatile i32 %67, i32* %7
%68 = shl nuw nsw i32 %9, 12
%69 = load volatile i32, i32* %7
%70 = or i32 %69, %68
store volatile i32 %70, i32* %7
br label %71
71: ; preds = %65, %62
%72 = and i32 %1, 128
%73 = icmp eq i32 %72, 0
br i1 %73, label %80, label %74
74: ; preds = %71
%75 = load volatile i32, i32* %7
%76 = and i32 %75, -49153
store volatile i32 %76, i32* %7
%77 = shl nuw nsw i32 %9, 14
%78 = load volatile i32, i32* %7
%79 = or i32 %78, %77
store volatile i32 %79, i32* %7
br label %80
80: ; preds = %74, %71
%81 = and i32 %2, 1
%82 = icmp eq i32 %81, 0
%83 = add nsw i32 %0, 1280
%84 = sext i32 %83 to i64
%85 = inttoptr i64 %84 to i32*
%86 = load volatile i32, i32* %85
%87 = xor i32 %1, -1
%88 = and i32 %86, %87
%89 = or i32 %86, %1
%90 = select i1 %82, i32 %88, i32 %89
store volatile i32 %90, i32* %85
%91 = and i32 %2, 2
%92 = icmp eq i32 %91, 0
%93 = add nsw i32 %0, 1284
%94 = sext i32 %93 to i64
%95 = inttoptr i64 %94 to i32*
%96 = load volatile i32, i32* %95
%97 = xor i32 %1, -1
%98 = and i32 %96, %97
%99 = or i32 %96, %1
%100 = select i1 %92, i32 %98, i32 %99
store volatile i32 %100, i32* %95
%101 = and i32 %2, 4
%102 = icmp eq i32 %101, 0
%103 = add nsw i32 %0, 1288
%104 = sext i32 %103 to i64
%105 = inttoptr i64 %104 to i32*
%106 = load volatile i32, i32* %105
%107 = xor i32 %1, -1
%108 = and i32 %106, %107
%109 = or i32 %106, %1
%110 = select i1 %102, i32 %108, i32 %109
store volatile i32 %110, i32* %105
%111 = and i32 %2, 8
%112 = icmp eq i32 %111, 0
%113 = add nsw i32 %0, 1304
%114 = sext i32 %113 to i64
%115 = inttoptr i64 %114 to i32*
%116 = load volatile i32, i32* %115
%117 = xor i32 %1, -1
%118 = and i32 %116, %117
%119 = or i32 %116, %1
%120 = select i1 %112, i32 %118, i32 %119
store volatile i32 %120, i32* %115
%121 = and i32 %2, 16
%122 = icmp eq i32 %121, 0
%123 = add nsw i32 %0, 1340
%124 = sext i32 %123 to i64
%125 = inttoptr i64 %124 to i32*
%126 = load volatile i32, i32* %125
%127 = xor i32 %1, -1
%128 = and i32 %126, %127
%129 = or i32 %126, %1
%130 = select i1 %122, i32 %128, i32 %129
store volatile i32 %130, i32* %125
%131 = and i32 %3, 1
%132 = icmp eq i32 %131, 0
%133 = add nsw i32 %0, 1292
%134 = sext i32 %133 to i64
%135 = inttoptr i64 %134 to i32*
%136 = load volatile i32, i32* %135
%137 = xor i32 %1, -1
%138 = and i32 %136, %137
%139 = or i32 %136, %1
%140 = select i1 %132, i32 %138, i32 %139
store volatile i32 %140, i32* %135
%141 = and i32 %3, 2
%142 = icmp eq i32 %141, 0
%143 = add nsw i32 %0, 1296
%144 = sext i32 %143 to i64
%145 = inttoptr i64 %144 to i32*
%146 = load volatile i32, i32* %145
%147 = xor i32 %1, -1
%148 = and i32 %146, %147
%149 = or i32 %146, %1
%150 = select i1 %142, i32 %148, i32 %149
store volatile i32 %150, i32* %145
%151 = and i32 %3, 4
%152 = icmp eq i32 %151, 0
%153 = add nsw i32 %0, 1300
%154 = sext i32 %153 to i64
%155 = inttoptr i64 %154 to i32*
%156 = load volatile i32, i32* %155
%157 = xor i32 %1, -1
%158 = and i32 %156, %157
%159 = or i32 %156, %1
%160 = select i1 %152, i32 %158, i32 %159
store volatile i32 %160, i32* %155
%161 = and i32 %3, 8
%162 = icmp eq i32 %161, 0
%163 = add nsw i32 %0, 1308
%164 = sext i32 %163 to i64
%165 = inttoptr i64 %164 to i32*
%166 = load volatile i32, i32* %165
%167 = xor i32 %1, -1
%168 = and i32 %166, %167
%169 = or i32 %166, %1
%170 = select i1 %162, i32 %168, i32 %169
store volatile i32 %170, i32* %165
%171 = and i32 %3, 512
%172 = icmp eq i32 %171, 0
%173 = add nsw i32 %0, 1348
%174 = sext i32 %173 to i64
%175 = inttoptr i64 %174 to i32*
%176 = load volatile i32, i32* %175
%177 = xor i32 %1, -1
%178 = and i32 %176, %177
%179 = or i32 %176, %1
%180 = select i1 %172, i32 %178, i32 %179
store volatile i32 %180, i32* %175
%181 = and i32 %3, 768
%182 = icmp eq i32 %181, 0
%183 = add nsw i32 %0, 1344
%184 = sext i32 %183 to i64
%185 = inttoptr i64 %184 to i32*
%186 = load volatile i32, i32* %185
br i1 %182, label %190, label %187
187: ; preds = %80
%188 = or i32 %186, %1
store volatile i32 %188, i32* %185
%189 = xor i32 %1, -1
br label %200
190: ; preds = %80
%191 = xor i32 %1, -1
%192 = and i32 %186, %191
store volatile i32 %192, i32* %185
%193 = icmp eq i32 %3, 0
br i1 %193, label %194, label %200
194: ; preds = %190
%195 = add nsw i32 %0, 1320
%196 = sext i32 %195 to i64
%197 = inttoptr i64 %196 to i32*
%198 = load volatile i32, i32* %197
%199 = or i32 %198, %1
br label %207
200: ; preds = %187, %190
%201 = phi i32 [ %189, %187 ], [ %191, %190 ]
%202 = add nsw i32 %0, 1320
%203 = sext i32 %202 to i64
%204 = inttoptr i64 %203 to i32*
%205 = load volatile i32, i32* %204
%206 = and i32 %205, %201
br label %207
207: ; preds = %200, %194
%208 = phi i32* [ %204, %200 ], [ %197, %194 ]
%209 = phi i32 [ %206, %200 ], [ %199, %194 ]
store volatile i32 %209, i32* %208
ret void
}