void I2CFIFOThresholdConfig(unsigned int baseAdd, unsigned int threshlodVal,
                            unsigned int flag) {
  if (1 == flag) {
    (*((volatile unsigned int *)(baseAdd + (0x94)))) &= ~(0x0000003Fu);
    (*((volatile unsigned int *)(baseAdd + (0x94)))) |= threshlodVal;
  } else {
    (*((volatile unsigned int *)(baseAdd + (0x94)))) &= ~(0x00003F00u);
    (*((volatile unsigned int *)(baseAdd + (0x94)))) |= threshlodVal
                                                        << (0x00000008u);
  }
}


x86 assembly (clang, -O0):
<I2CFIFOThresholdConfig>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    $0x1,%eax
cmp    -0xc(%rbp),%eax
jne    1144 <I2CFIFOThresholdConfig+0x44>
mov    -0x4(%rbp),%eax
add    $0x94,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    $0xffffffc0,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
add    $0x94,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
jmp    116e <I2CFIFOThresholdConfig+0x6e>
mov    -0x4(%rbp),%eax
add    $0x94,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    $0xffffc0ff,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%edx
shl    $0x8,%edx
mov    -0x4(%rbp),%eax
add    $0x94,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<I2CFIFOThresholdConfig>:
add    $0x94,%edi
mov    (%rdi),%eax
cmp    $0x1,%edx
jne    1115 <I2CFIFOThresholdConfig+0x15>
and    $0xffffffc0,%eax
mov    %eax,(%rdi)
or     %esi,(%rdi)
ret
and    $0xffffc0ff,%eax
mov    %eax,(%rdi)
shl    $0x8,%esi
or     %esi,(%rdi)
ret

LLVM IR (-O0):
define void @I2CFIFOThresholdConfig(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%7 = load i32, i32* %6
%8 = icmp eq i32 1, %7
br i1 %8, label %9, label %23
9: ; preds = %3
%10 = load i32, i32* %4
%11 = add i32 %10, 148
%12 = zext i32 %11 to i64
%13 = inttoptr i64 %12 to i32*
%14 = load volatile i32, i32* %13
%15 = and i32 %14, -64
store volatile i32 %15, i32* %13
%16 = load i32, i32* %5
%17 = load i32, i32* %4
%18 = add i32 %17, 148
%19 = zext i32 %18 to i64
%20 = inttoptr i64 %19 to i32*
%21 = load volatile i32, i32* %20
%22 = or i32 %21, %16
store volatile i32 %22, i32* %20
br label %38
23: ; preds = %3
%24 = load i32, i32* %4
%25 = add i32 %24, 148
%26 = zext i32 %25 to i64
%27 = inttoptr i64 %26 to i32*
%28 = load volatile i32, i32* %27
%29 = and i32 %28, -16129
store volatile i32 %29, i32* %27
%30 = load i32, i32* %5
%31 = shl i32 %30, 8
%32 = load i32, i32* %4
%33 = add i32 %32, 148
%34 = zext i32 %33 to i64
%35 = inttoptr i64 %34 to i32*
%36 = load volatile i32, i32* %35
%37 = or i32 %36, %31
store volatile i32 %37, i32* %35
br label %38
38: ; preds = %23, %9
ret void
}

LLVM IR (-O2):
define void @I2CFIFOThresholdConfig(i32 %0, i32 %1, i32 %2) {
%4 = icmp eq i32 %2, 1
%5 = add i32 %0, 148
%6 = zext i32 %5 to i64
%7 = inttoptr i64 %6 to i32*
%8 = load volatile i32, i32* %7
br i1 %4, label %9, label %11
9: ; preds = %3
%10 = and i32 %8, -64
store volatile i32 %10, i32* %7
br label %14
11: ; preds = %3
%12 = and i32 %8, -16129
store volatile i32 %12, i32* %7
%13 = shl i32 %1, 8
br label %14
14: ; preds = %11, %9
%15 = phi i32 [ %13, %11 ], [ %1, %9 ]
%16 = load volatile i32, i32* %7
%17 = or i32 %16, %15
store volatile i32 %17, i32* %7
ret void
}