int mm_support(void) {
  int rval;
  int eax, ebx, ecx, edx;
  long dummy;
  char vendor[13] = "UnknownVndr";
  __asm__ __volatile__("pushf\n\t"
                       "pop %2\n\t"
                       "mov %0, %1\n\t"
                       "xor $0x200000, %0\n\t"
                       "push %2\n\t"
                       "popf\n\t"
                       "pushf\n\t"
                       "pop %2\n\t"
                       : "=a"(eax), "=c"(ecx)
                       : "a"(dummy)
                       : "cc");
  if (eax == ecx)
    return 0;
  __asm __volatile("mov %%rbx, %%rsi\n\t"
                   "cpuid\n\t"
                   "xchg %%rbx, %%rsi"
                   : "=a"(eax), "=S"(ebx), "=c"(ecx), "=d"(edx)
                   : "a"(0));
  ;
  *(int *)vendor = ebx;
  *(int *)&vendor[4] = edx;
  *(int *)&vendor[8] = ecx;
  rval = 0;
  if (eax == 0)
    return rval;
  __asm __volatile("mov %%rbx, %%rsi\n\t"
                   "cpuid\n\t"
                   "xchg %%rbx, %%rsi"
                   : "=a"(eax), "=S"(ebx), "=c"(ecx), "=d"(edx)
                   : "a"(1));
  ;
  if (edx & 0x00800000)
    rval |= 0x0002;
  if (edx & 0x02000000)
    rval |= 0x0004 | 0x0010;
  if (edx & 0x04000000)
    rval |= 0x0020;
  __asm __volatile("mov %%rbx, %%rsi\n\t"
                   "cpuid\n\t"
                   "xchg %%rbx, %%rsi"
                   : "=a"(eax), "=S"(ebx), "=c"(ecx), "=d"(edx)
                   : "a"(0x80000000));
  ;
  if (eax < 0x80000001)
    return rval;
  __asm __volatile("mov %%rbx, %%rsi\n\t"
                   "cpuid\n\t"
                   "xchg %%rbx, %%rsi"
                   : "=a"(eax), "=S"(ebx), "=c"(ecx), "=d"(edx)
                   : "a"(0x80000001));
  ;
  if (strcmp(vendor, "AuthenticAMD") == 0) {
    if (edx & 0x80000000)
      rval |= 0x0008;
    if (edx & 0x40000000)
      rval |= 0x0040;
    if (((rval & 0x0004) == 0) && (edx & 0x00400000))
      rval |= 0x0004;
  } else if (strcmp(vendor, "CyrixInstead") == 0) {
    if (((rval & 0x0002) == 0) && (edx & 0x00800000))
      rval |= 0x0002;
    if (((rval & 0x0004) == 0) && (edx & 0x01000000))
      rval |= 0x0004;
  }
  return rval;
}


x86 assembly (clang, -O0):
<mm_support>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0xee1(%rip),%rax
mov    %rax,-0x2d(%rbp)
mov    0xedf(%rip),%eax
mov    %eax,-0x25(%rbp)
mov    0xeda(%rip),%al
mov    %al,-0x21(%rbp)
mov    -0x20(%rbp),%rax
pushf
pop    %rax
mov    %eax,%ecx
xor    $0x200000,%eax
push   %rax
popf
pushf
pop    %rax
mov    %eax,-0xc(%rbp)
mov    %ecx,-0x14(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1164 <mm_support+0x54>
movl   $0x0,-0x4(%rbp)
jmp    134f <mm_support+0x23f>
xor    %eax,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %eax,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x2d(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x29(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x25(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x0,-0xc(%rbp)
jne    11a8 <mm_support+0x98>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    134f <mm_support+0x23f>
mov    $0x1,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %eax,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    -0x18(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     11db <mm_support+0xcb>
mov    -0x8(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
and    $0x2000000,%eax
cmp    $0x0,%eax
je     11f5 <mm_support+0xe5>
mov    -0x8(%rbp),%eax
or     $0x14,%eax
mov    %eax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
and    $0x4000000,%eax
cmp    $0x0,%eax
je     120f <mm_support+0xff>
mov    -0x8(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x8(%rbp)
mov    $0x80000000,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %eax,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
cmpl   $0x80000001,-0xc(%rbp)
jae    1240 <mm_support+0x130>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    134f <mm_support+0x23f>
mov    $0x80000001,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %eax,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
lea    -0x2d(%rbp),%rdi
lea    0xda9(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%eax
jne    12d4 <mm_support+0x1c4>
mov    -0x18(%rbp),%eax
and    $0x80000000,%eax
cmp    $0x0,%eax
je     128c <mm_support+0x17c>
mov    -0x8(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
and    $0x40000000,%eax
cmp    $0x0,%eax
je     12a6 <mm_support+0x196>
mov    -0x8(%rbp),%eax
or     $0x40,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
jne    12cf <mm_support+0x1bf>
mov    -0x18(%rbp),%eax
and    $0x400000,%eax
cmp    $0x0,%eax
je     12cf <mm_support+0x1bf>
mov    -0x8(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x8(%rbp)
jmp    1349 <mm_support+0x239>
lea    -0x2d(%rbp),%rdi
lea    0xd3b(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%eax
jne    1344 <mm_support+0x234>
mov    -0x8(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1316 <mm_support+0x206>
mov    -0x18(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     1316 <mm_support+0x206>
mov    -0x8(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
jne    133f <mm_support+0x22f>
mov    -0x18(%rbp),%eax
and    $0x1000000,%eax
cmp    $0x0,%eax
je     133f <mm_support+0x22f>
mov    -0x8(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x8(%rbp)
jmp    1344 <mm_support+0x234>
jmp    1349 <mm_support+0x239>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mm_support>:
movabs $0x72646e566e77,%rax
mov    %rax,-0xb(%rsp)
movabs $0x566e776f6e6b6e55,%rax
77 6e 56
mov    %rax,-0x10(%rsp)
pushf
pop    %rax
mov    %eax,%ecx
xor    $0x200000,%eax
push   %rax
popf
pushf
pop    %rax
xor    %edi,%edi
cmp    %ecx,%eax
je     11ec <mm_support+0xec>
xor    %edi,%edi
xor    %eax,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %esi,-0x10(%rsp)
mov    %edx,-0xc(%rsp)
mov    %ecx,-0x8(%rsp)
test   %eax,%eax
je     11ec <mm_support+0xec>
mov    $0x1,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
mov    %edx,%edi
mov    %edx,%r8d
shr    $0x16,%r8d
and    $0x2,%r8d
lea    0x14(%r8),%eax
test   $0x2000000,%edx
cmove  %r8d,%eax
shr    $0x15,%edi
and    $0x20,%edi
or     %eax,%edi
mov    $0x80000000,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
cmp    $0x80000001,%eax
jb     11ec <mm_support+0xec>
mov    $0x80000001,%eax
mov    %rbx,%rsi
cpuid
xchg   %rsi,%rbx
movabs $0x69746e6568747541,%rax
6e 74 69
xor    -0x10(%rsp),%rax
movabs $0x444d416369746e,%rcx
xor    -0xb(%rsp),%rcx
or     %rax,%rcx
je     11ef <mm_support+0xef>
movabs $0x736e497869727943,%rax
49 6e 73
xor    -0x10(%rsp),%rax
movabs $0x64616574736e49,%rcx
xor    -0xb(%rsp),%rcx
or     %rax,%rcx
je     1219 <mm_support+0x119>
mov    %edi,%eax
ret
mov    %edi,%eax
or     $0x8,%eax
test   %edx,%edx
cmovns %edi,%eax
mov    %edx,%ecx
shr    $0x18,%ecx
and    $0x40,%ecx
or     %eax,%ecx
mov    %ecx,%edi
or     $0x4,%edi
test   $0x400000,%edx
cmove  %ecx,%edi
test   $0x4,%al
cmovne %ecx,%edi
mov    %edi,%eax
ret
mov    %edi,%eax
or     $0x2,%eax
test   $0x800000,%edx
cmove  %edi,%eax
test   %r8d,%r8d
cmovne %edi,%eax
mov    %eax,%edi
or     $0x4,%edi
test   $0x1000000,%edx
cmove  %eax,%edi
test   $0x4,%al
cmovne %eax,%edi
mov    %edi,%eax
ret

LLVM IR (-O0):
@__const.mm_support.vendor = [13 x i8] c"UnknownVndr\00\00"
@.str = [13 x i8] c"AuthenticAMD\00"
@.str.1 = [13 x i8] c"CyrixInstead\00"
define i32 @mm_support() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i64
%8 = alloca [13 x i8]
%9 = bitcast [13 x i8]* %8 to i8*
%10 = load i64, i64* %7
%11 = call { i32, i32 } asm sideeffect "pushf\0A\09pop $2\0A\09mov $0, $1\0A\09xor $$0x200000, $0\0A\09push $2\0A\09popf\0A\09pushf\0A\09pop $2\0A\09", "={ax},={cx},{ax},~{cc},~{dirflag},~{fpsr},~{flags}"(i64 %10)
%12 = extractvalue { i32, i32 } %11, 0
%13 = extractvalue { i32, i32 } %11, 1
store i32 %12, i32* %3
store i32 %13, i32* %5
%14 = load i32, i32* %3
%15 = load i32, i32* %5
%16 = icmp eq i32 %14, %15
br i1 %16, label %17, label %18
17: ; preds = %0
store i32 0, i32* %1
br label %138
18: ; preds = %0
%19 = call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 0)
%20 = extractvalue { i32, i32, i32, i32 } %19, 0
%21 = extractvalue { i32, i32, i32, i32 } %19, 1
%22 = extractvalue { i32, i32, i32, i32 } %19, 2
%23 = extractvalue { i32, i32, i32, i32 } %19, 3
store i32 %20, i32* %3
store i32 %21, i32* %4
store i32 %22, i32* %5
store i32 %23, i32* %6
%24 = load i32, i32* %4
%25 = getelementptr inbounds [13 x i8], [13 x i8]* %8, i64 0, i64 0
%26 = bitcast i8* %25 to i32*
store i32 %24, i32* %26
%27 = load i32, i32* %6
%28 = getelementptr inbounds [13 x i8], [13 x i8]* %8, i64 0, i64 4
%29 = bitcast i8* %28 to i32*
store i32 %27, i32* %29
%30 = load i32, i32* %5
%31 = getelementptr inbounds [13 x i8], [13 x i8]* %8, i64 0, i64 8
%32 = bitcast i8* %31 to i32*
store i32 %30, i32* %32
store i32 0, i32* %2
%33 = load i32, i32* %3
%34 = icmp eq i32 %33, 0
br i1 %34, label %35, label %37
35: ; preds = %18
%36 = load i32, i32* %2
store i32 %36, i32* %1
br label %138
37: ; preds = %18
%38 = call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 1)
%39 = extractvalue { i32, i32, i32, i32 } %38, 0
%40 = extractvalue { i32, i32, i32, i32 } %38, 1
%41 = extractvalue { i32, i32, i32, i32 } %38, 2
%42 = extractvalue { i32, i32, i32, i32 } %38, 3
store i32 %39, i32* %3
store i32 %40, i32* %4
store i32 %41, i32* %5
store i32 %42, i32* %6
%43 = load i32, i32* %6
%44 = and i32 %43, 8388608
%45 = icmp ne i32 %44, 0
br i1 %45, label %46, label %49
46: ; preds = %37
%47 = load i32, i32* %2
%48 = or i32 %47, 2
store i32 %48, i32* %2
br label %49
49: ; preds = %46, %37
%50 = load i32, i32* %6
%51 = and i32 %50, 33554432
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %56
53: ; preds = %49
%54 = load i32, i32* %2
%55 = or i32 %54, 20
store i32 %55, i32* %2
br label %56
56: ; preds = %53, %49
%57 = load i32, i32* %6
%58 = and i32 %57, 67108864
%59 = icmp ne i32 %58, 0
br i1 %59, label %60, label %63
60: ; preds = %56
%61 = load i32, i32* %2
%62 = or i32 %61, 32
store i32 %62, i32* %2
br label %63
63: ; preds = %60, %56
%64 = call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 -2147483648)
%65 = extractvalue { i32, i32, i32, i32 } %64, 0
%66 = extractvalue { i32, i32, i32, i32 } %64, 1
%67 = extractvalue { i32, i32, i32, i32 } %64, 2
%68 = extractvalue { i32, i32, i32, i32 } %64, 3
store i32 %65, i32* %3
store i32 %66, i32* %4
store i32 %67, i32* %5
store i32 %68, i32* %6
%69 = load i32, i32* %3
%70 = icmp ult i32 %69, -2147483647
br i1 %70, label %71, label %73
71: ; preds = %63
%72 = load i32, i32* %2
store i32 %72, i32* %1
br label %138
73: ; preds = %63
%74 = call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 -2147483647)
%75 = extractvalue { i32, i32, i32, i32 } %74, 0
%76 = extractvalue { i32, i32, i32, i32 } %74, 1
%77 = extractvalue { i32, i32, i32, i32 } %74, 2
%78 = extractvalue { i32, i32, i32, i32 } %74, 3
store i32 %75, i32* %3
store i32 %76, i32* %4
store i32 %77, i32* %5
store i32 %78, i32* %6
%79 = getelementptr inbounds [13 x i8], [13 x i8]* %8, i64 0, i64 0
%80 = call i32 @strcmp(i8* %79, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0))
%81 = icmp eq i32 %80, 0
br i1 %81, label %82, label %108
82: ; preds = %73
%83 = load i32, i32* %6
%84 = and i32 %83, -2147483648
%85 = icmp ne i32 %84, 0
br i1 %85, label %86, label %89
86: ; preds = %82
%87 = load i32, i32* %2
%88 = or i32 %87, 8
store i32 %88, i32* %2
br label %89
89: ; preds = %86, %82
%90 = load i32, i32* %6
%91 = and i32 %90, 1073741824
%92 = icmp ne i32 %91, 0
br i1 %92, label %93, label %96
93: ; preds = %89
%94 = load i32, i32* %2
%95 = or i32 %94, 64
store i32 %95, i32* %2
br label %96
96: ; preds = %93, %89
%97 = load i32, i32* %2
%98 = and i32 %97, 4
%99 = icmp eq i32 %98, 0
br i1 %99, label %100, label %107
100: ; preds = %96
%101 = load i32, i32* %6
%102 = and i32 %101, 4194304
%103 = icmp ne i32 %102, 0
br i1 %103, label %104, label %107
104: ; preds = %100
%105 = load i32, i32* %2
%106 = or i32 %105, 4
store i32 %106, i32* %2
br label %107
107: ; preds = %104, %100, %96
br label %136
108: ; preds = %73
%109 = getelementptr inbounds [13 x i8], [13 x i8]* %8, i64 0, i64 0
%110 = call i32 @strcmp(i8* %109, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%111 = icmp eq i32 %110, 0
br i1 %111, label %112, label %135
112: ; preds = %108
%113 = load i32, i32* %2
%114 = and i32 %113, 2
%115 = icmp eq i32 %114, 0
br i1 %115, label %116, label %123
116: ; preds = %112
%117 = load i32, i32* %6
%118 = and i32 %117, 8388608
%119 = icmp ne i32 %118, 0
br i1 %119, label %120, label %123
120: ; preds = %116
%121 = load i32, i32* %2
%122 = or i32 %121, 2
store i32 %122, i32* %2
br label %123
123: ; preds = %120, %116, %112
%124 = load i32, i32* %2
%125 = and i32 %124, 4
%126 = icmp eq i32 %125, 0
br i1 %126, label %127, label %134
127: ; preds = %123
%128 = load i32, i32* %6
%129 = and i32 %128, 16777216
%130 = icmp ne i32 %129, 0
br i1 %130, label %131, label %134
131: ; preds = %127
%132 = load i32, i32* %2
%133 = or i32 %132, 4
store i32 %133, i32* %2
br label %134
134: ; preds = %131, %127, %123
br label %135
135: ; preds = %134, %108
br label %136
136: ; preds = %135, %107
%137 = load i32, i32* %2
store i32 %137, i32* %1
br label %138
138: ; preds = %136, %71, %35, %17
%139 = load i32, i32* %1
ret i32 %139
}

LLVM IR (-O2):
@__const.mm_support.vendor = [13 x i8] c"UnknownVndr\00\00"
@.str = [13 x i8] c"AuthenticAMD\00"
@.str.1 = [13 x i8] c"CyrixInstead\00"
define i32 @mm_support() {
%1 = alloca [13 x i8]
%2 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 0
%3 = tail call { i32, i32 } asm sideeffect "pushf\0A\09pop $2\0A\09mov $0, $1\0A\09xor $$0x200000, $0\0A\09push $2\0A\09popf\0A\09pushf\0A\09pop $2\0A\09", "={ax},={cx},{ax},~{cc},~{dirflag},~{fpsr},~{flags}"(i64 undef)
%4 = extractvalue { i32, i32 } %3, 0
%5 = extractvalue { i32, i32 } %3, 1
%6 = icmp eq i32 %4, %5
br i1 %6, label %70, label %7
7: ; preds = %0
%8 = tail call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 0)
%9 = extractvalue { i32, i32, i32, i32 } %8, 0
%10 = extractvalue { i32, i32, i32, i32 } %8, 1
%11 = extractvalue { i32, i32, i32, i32 } %8, 2
%12 = extractvalue { i32, i32, i32, i32 } %8, 3
%13 = bitcast [13 x i8]* %1 to i32*
store i32 %10, i32* %13
%14 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 4
%15 = bitcast i8* %14 to i32*
store i32 %12, i32* %15
%16 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 8
%17 = bitcast i8* %16 to i32*
store i32 %11, i32* %17
%18 = icmp eq i32 %9, 0
br i1 %18, label %70, label %19
19: ; preds = %7
%20 = tail call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 1)
%21 = extractvalue { i32, i32, i32, i32 } %20, 3
%22 = lshr i32 %21, 22
%23 = and i32 %22, 2
%24 = and i32 %21, 33554432
%25 = icmp eq i32 %24, 0
%26 = or i32 %23, 20
%27 = select i1 %25, i32 %23, i32 %26
%28 = lshr i32 %21, 21
%29 = and i32 %28, 32
%30 = or i32 %27, %29
%31 = tail call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 -2147483648)
%32 = extractvalue { i32, i32, i32, i32 } %31, 0
%33 = icmp ult i32 %32, -2147483647
br i1 %33, label %70, label %34
34: ; preds = %19
%35 = tail call { i32, i32, i32, i32 } asm sideeffect "mov %rbx, %rsi\0A\09cpuid\0A\09xchg %rbx, %rsi", "={ax},={si},={cx},={dx},{ax},~{dirflag},~{fpsr},~{flags}"(i32 -2147483647)
%36 = extractvalue { i32, i32, i32, i32 } %35, 3
%37 = call i32 @bcmp(i8* dereferenceable(13) %2, i8* dereferenceable(13) getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i64 13)
%38 = icmp eq i32 %37, 0
br i1 %38, label %39, label %53
39: ; preds = %34
%40 = icmp sgt i32 %36, -1
%41 = or i32 %30, 8
%42 = select i1 %40, i32 %30, i32 %41
%43 = lshr i32 %36, 24
%44 = and i32 %43, 64
%45 = or i32 %44, %42
%46 = and i32 %42, 4
%47 = icmp ne i32 %46, 0
%48 = and i32 %36, 4194304
%49 = icmp eq i32 %48, 0
%50 = select i1 %47, i1 true, i1 %49
%51 = or i32 %45, 4
%52 = select i1 %50, i32 %45, i32 %51
br label %70
53: ; preds = %34
%54 = call i32 @bcmp(i8* dereferenceable(13) %2, i8* dereferenceable(13) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i64 13)
%55 = icmp eq i32 %54, 0
br i1 %55, label %56, label %70
56: ; preds = %53
%57 = icmp ne i32 %23, 0
%58 = and i32 %36, 8388608
%59 = icmp eq i32 %58, 0
%60 = select i1 %57, i1 true, i1 %59
%61 = or i32 %30, 2
%62 = select i1 %60, i32 %30, i32 %61
%63 = and i32 %62, 4
%64 = icmp ne i32 %63, 0
%65 = and i32 %36, 16777216
%66 = icmp eq i32 %65, 0
%67 = select i1 %64, i1 true, i1 %66
%68 = or i32 %62, 4
%69 = select i1 %67, i32 %62, i32 %68
br label %70
70: ; preds = %56, %39, %53, %19, %7, %0
%71 = phi i32 [ 0, %0 ], [ 0, %7 ], [ %30, %19 ], [ %30, %53 ], [ %52, %39 ], [ %69, %56 ]
ret i32 %71
}