void ELMIntStatusClear(unsigned int baseAddr, unsigned int flag) {
  switch (flag) {
  case (0):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000001u);
    break;
  case (1):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000002u);
    break;
  case (2):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000004u);
    break;
  case (3):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000008u);
    break;
  case (4):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000010u);
    break;
  case (5):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000020u);
    break;
  case (6):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000040u);
    break;
  case (7):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000080u);
    break;
  case (8):
    (*((volatile unsigned int *)(baseAddr + (0x18)))) |= (0x00000100u);
    break;
  }
}


x86 assembly (clang, -O0):
<ELMIntStatusClear>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0x10(%rbp)
sub    $0x8,%rax
ja     11e4 <ELMIntStatusClear+0xe4>
mov    -0x10(%rbp),%rax
lea    0xeda(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x1,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x4,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x8,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x10,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x20,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x40,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x80,%ecx
mov    %ecx,(%rax)
jmp    11e4 <ELMIntStatusClear+0xe4>
mov    -0x4(%rbp),%eax
add    $0x18,%eax
mov    %eax,%eax
mov    (%rax),%ecx
or     $0x100,%ecx
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<ELMIntStatusClear>:
cmp    $0x8,%esi
ja     1117 <ELMIntStatusClear+0x17>
movslq %esi,%rax
lea    0xef1(%rip),%rcx
mov    (%rcx,%rax,4),%eax
add    $0x18,%edi
or     %eax,(%rdi)
ret

LLVM IR (-O0):
define void @ELMIntStatusClear(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = load i32, i32* %4
switch i32 %5, label %69 [
i32 0, label %6
i32 1, label %13
i32 2, label %20
i32 3, label %27
i32 4, label %34
i32 5, label %41
i32 6, label %48
i32 7, label %55
i32 8, label %62
]
6: ; preds = %2
%7 = load i32, i32* %3
%8 = add i32 %7, 24
%9 = zext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = load volatile i32, i32* %10
%12 = or i32 %11, 1
store volatile i32 %12, i32* %10
br label %69
13: ; preds = %2
%14 = load i32, i32* %3
%15 = add i32 %14, 24
%16 = zext i32 %15 to i64
%17 = inttoptr i64 %16 to i32*
%18 = load volatile i32, i32* %17
%19 = or i32 %18, 2
store volatile i32 %19, i32* %17
br label %69
20: ; preds = %2
%21 = load i32, i32* %3
%22 = add i32 %21, 24
%23 = zext i32 %22 to i64
%24 = inttoptr i64 %23 to i32*
%25 = load volatile i32, i32* %24
%26 = or i32 %25, 4
store volatile i32 %26, i32* %24
br label %69
27: ; preds = %2
%28 = load i32, i32* %3
%29 = add i32 %28, 24
%30 = zext i32 %29 to i64
%31 = inttoptr i64 %30 to i32*
%32 = load volatile i32, i32* %31
%33 = or i32 %32, 8
store volatile i32 %33, i32* %31
br label %69
34: ; preds = %2
%35 = load i32, i32* %3
%36 = add i32 %35, 24
%37 = zext i32 %36 to i64
%38 = inttoptr i64 %37 to i32*
%39 = load volatile i32, i32* %38
%40 = or i32 %39, 16
store volatile i32 %40, i32* %38
br label %69
41: ; preds = %2
%42 = load i32, i32* %3
%43 = add i32 %42, 24
%44 = zext i32 %43 to i64
%45 = inttoptr i64 %44 to i32*
%46 = load volatile i32, i32* %45
%47 = or i32 %46, 32
store volatile i32 %47, i32* %45
br label %69
48: ; preds = %2
%49 = load i32, i32* %3
%50 = add i32 %49, 24
%51 = zext i32 %50 to i64
%52 = inttoptr i64 %51 to i32*
%53 = load volatile i32, i32* %52
%54 = or i32 %53, 64
store volatile i32 %54, i32* %52
br label %69
55: ; preds = %2
%56 = load i32, i32* %3
%57 = add i32 %56, 24
%58 = zext i32 %57 to i64
%59 = inttoptr i64 %58 to i32*
%60 = load volatile i32, i32* %59
%61 = or i32 %60, 128
store volatile i32 %61, i32* %59
br label %69
62: ; preds = %2
%63 = load i32, i32* %3
%64 = add i32 %63, 24
%65 = zext i32 %64 to i64
%66 = inttoptr i64 %65 to i32*
%67 = load volatile i32, i32* %66
%68 = or i32 %67, 256
store volatile i32 %68, i32* %66
br label %69
69: ; preds = %2, %62, %55, %48, %41, %34, %27, %20, %13, %6
ret void
}

LLVM IR (-O2):
@switch.table.ELMIntStatusClear = [9 x i32] [i32 1, i32 2, i32 4, i32 8, i32 16, i32 32, i32 64, i32 128, i32 256]
define void @ELMIntStatusClear(i32 %0, i32 %1) {
%3 = icmp ult i32 %1, 9
br i1 %3, label %4, label %13
4: ; preds = %2
%5 = sext i32 %1 to i64
%6 = getelementptr inbounds [9 x i32], [9 x i32]* @switch.table.ELMIntStatusClear, i64 0, i64 %5
%7 = load i32, i32* %6
%8 = add i32 %0, 24
%9 = zext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = load volatile i32, i32* %10
%12 = or i32 %11, %7
store volatile i32 %12, i32* %10
br label %13
13: ; preds = %2, %4
ret void
}