void McASPRxClkCfg(unsigned int baseAddr, unsigned int clkSrc,
                   unsigned int mixClkDiv, unsigned int auxClkDiv) {
  (*((volatile unsigned int *)(baseAddr + (0x70)))) &=
      ~((0x00000020u) | (0x0000001Fu));
  (*((volatile unsigned int *)(baseAddr + (0x74)))) &=
      ~((0x00008000u) | (0x00000FFFu));
  (*((volatile unsigned int *)(baseAddr + (0x70)))) |=
      ((clkSrc & (0x00000020u)) | mixClkDiv);
  (*((volatile unsigned int *)(baseAddr + (0x74)))) |=
      ((clkSrc & (0x00008000u)) | auxClkDiv);
}


x86 assembly (clang, -O0):
<McASPRxClkCfg>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    $0xffffffc0,%ecx
mov    %ecx,(%rax)
mov    -0x4(%rbp),%eax
add    $0x74,%eax
mov    %eax,%eax
mov    (%rax),%ecx
and    $0xffff7000,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%edx
and    $0x20,%edx
or     -0xc(%rbp),%edx
mov    -0x4(%rbp),%eax
add    $0x70,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%edx
and    $0x8000,%edx
or     -0x10(%rbp),%edx
mov    -0x4(%rbp),%eax
add    $0x74,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     %edx,%ecx
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<McASPRxClkCfg>:
lea    0x70(%rdi),%r8d
andl   $0xffffffc0,(%r8)
add    $0x74,%edi
andl   $0xffff7000,(%rdi)
mov    %esi,%eax
and    $0x20,%eax
or     %edx,%eax
or     %eax,(%r8)
and    $0x8000,%esi
or     %ecx,%esi
or     %esi,(%rdi)
ret

LLVM IR (-O0):
define void @McASPRxClkCfg(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%9 = load i32, i32* %5
%10 = add i32 %9, 112
%11 = zext i32 %10 to i64
%12 = inttoptr i64 %11 to i32*
%13 = load volatile i32, i32* %12
%14 = and i32 %13, -64
store volatile i32 %14, i32* %12
%15 = load i32, i32* %5
%16 = add i32 %15, 116
%17 = zext i32 %16 to i64
%18 = inttoptr i64 %17 to i32*
%19 = load volatile i32, i32* %18
%20 = and i32 %19, -36864
store volatile i32 %20, i32* %18
%21 = load i32, i32* %6
%22 = and i32 %21, 32
%23 = load i32, i32* %7
%24 = or i32 %22, %23
%25 = load i32, i32* %5
%26 = add i32 %25, 112
%27 = zext i32 %26 to i64
%28 = inttoptr i64 %27 to i32*
%29 = load volatile i32, i32* %28
%30 = or i32 %29, %24
store volatile i32 %30, i32* %28
%31 = load i32, i32* %6
%32 = and i32 %31, 32768
%33 = load i32, i32* %8
%34 = or i32 %32, %33
%35 = load i32, i32* %5
%36 = add i32 %35, 116
%37 = zext i32 %36 to i64
%38 = inttoptr i64 %37 to i32*
%39 = load volatile i32, i32* %38
%40 = or i32 %39, %34
store volatile i32 %40, i32* %38
ret void
}

LLVM IR (-O2):
define void @McASPRxClkCfg(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = add i32 %0, 112
%6 = zext i32 %5 to i64
%7 = inttoptr i64 %6 to i32*
%8 = load volatile i32, i32* %7
%9 = and i32 %8, -64
store volatile i32 %9, i32* %7
%10 = add i32 %0, 116
%11 = zext i32 %10 to i64
%12 = inttoptr i64 %11 to i32*
%13 = load volatile i32, i32* %12
%14 = and i32 %13, -36864
store volatile i32 %14, i32* %12
%15 = and i32 %1, 32
%16 = or i32 %15, %2
%17 = load volatile i32, i32* %7
%18 = or i32 %16, %17
store volatile i32 %18, i32* %7
%19 = and i32 %1, 32768
%20 = or i32 %19, %3
%21 = load volatile i32, i32* %12
%22 = or i32 %20, %21
store volatile i32 %22, i32* %12
ret void
}