#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 */

/* Variables and functions */
int /*<<< orphan*/ addbyte(int);
int /*<<< orphan*/ addword(int);
void AND_HOST_REG_B(int dst_reg, int src_reg) {
  if (dst_reg & src_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0x66);
      addbyte(0x44);
      addbyte(0x89);
      addbyte(0xc0 | ((src_reg & 7) << 3));
      if (!(src_reg & 0x10)) {
        addbyte(0x66);
        addbyte(0xc1);
        addbyte(0xe0);
        addbyte(8);
      }
      addbyte(0x66);
      addbyte(0x0d);
      addword(0xff);
      addbyte(0x66);
      addbyte(0x41);
      addbyte(0x21);
      addbyte(0xc0 | (dst_reg & 7));
    } else if (src_reg & 0x10) {
      addbyte(0x66);
      addbyte(0x44);
      addbyte(0x89);
      addbyte(0xc0 | ((src_reg & 7) << 3));
      addbyte(0x66);
      addbyte(0xc1);
      addbyte(0xe8);
      addbyte(8);
      addbyte(0x41);
      addbyte(0x20);
      addbyte(0xc0 | (dst_reg & 7));
    } else {
      addbyte(0x45);
      addbyte(0x20);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else if (dst_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0x66);
      addbyte(0xc1);
      addbyte(0xe0 | src_reg);
      addbyte(0x08);
      addbyte(0x66);
      addbyte(0x81);
      addbyte(0xc8 | src_reg);
      addword(0xff);
      addbyte(0x66);
      addbyte(0x41);
      addbyte(0x21);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    } else {
      addbyte(0x41);
      addbyte(0x20);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else if (src_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0xc1);
      addbyte(0xe8 | (dst_reg & 7));
      addbyte(8);
    }
    if (src_reg & 0x10) {
      addbyte(0x41);
      addbyte(0x0f);
      addbyte(0xb7);
      addbyte(0xd8 | (src_reg & 7));
      addbyte(0xc1);
      addbyte(0xeb);
      addbyte(8);
      addbyte(0x20);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x44);
      addbyte(0x20);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else {
    if (dst_reg & 0x10) {
      addbyte(0xc1);
      addbyte(0xe8 | (dst_reg & 7));
      addbyte(8);
    }
    if (src_reg & 0x10) {
      addbyte(0x0f);
      addbyte(0xb7);
      addbyte(0xd8 | (src_reg & 7));
      addbyte(0xc1);
      addbyte(0xeb);
      addbyte(8);
      addbyte(0x20);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x20);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  }
}


x86 assembly (clang, -O0):
<AND_HOST_REG_B>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    -0x4(%rbp),%eax
and    -0x8(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     12d7 <AND_HOST_REG_B+0x1b7>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     120a <AND_HOST_REG_B+0xea>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x89,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
and    $0x7,%edi
shl    $0x3,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    11b8 <AND_HOST_REG_B+0x98>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xe0,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xd,%edi
call   1040 <addbyte@plt>
mov    $0xff,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x21,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
jmp    12d2 <AND_HOST_REG_B+0x1b2>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     129d <AND_HOST_REG_B+0x17d>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x89,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
and    $0x7,%edi
shl    $0x3,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
jmp    12cd <AND_HOST_REG_B+0x1ad>
mov    $0x45,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
mov    -0x8(%rbp),%eax
and    $0x7,%eax
shl    $0x3,%eax
or     %eax,%edi
call   1040 <addbyte@plt>
jmp    12d2 <AND_HOST_REG_B+0x1b2>
jmp    1590 <AND_HOST_REG_B+0x470>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     13c1 <AND_HOST_REG_B+0x2a1>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     138c <AND_HOST_REG_B+0x26c>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
or     $0xe0,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x81,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
or     $0xc8,%edi
call   1040 <addbyte@plt>
mov    $0xff,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x21,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
mov    -0x8(%rbp),%eax
and    $0x7,%eax
shl    $0x3,%eax
or     %eax,%edi
call   1040 <addbyte@plt>
jmp    13bc <AND_HOST_REG_B+0x29c>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
mov    -0x8(%rbp),%eax
and    $0x7,%eax
shl    $0x3,%eax
or     %eax,%edi
call   1040 <addbyte@plt>
jmp    158b <AND_HOST_REG_B+0x46b>
mov    -0x8(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     14b5 <AND_HOST_REG_B+0x395>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1404 <AND_HOST_REG_B+0x2e4>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1480 <AND_HOST_REG_B+0x360>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0xf,%edi
call   1040 <addbyte@plt>
mov    $0xb7,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xeb,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
jmp    14b0 <AND_HOST_REG_B+0x390>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
mov    -0x8(%rbp),%eax
and    $0x7,%eax
shl    $0x3,%eax
or     %eax,%edi
call   1040 <addbyte@plt>
jmp    1586 <AND_HOST_REG_B+0x466>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     14e9 <AND_HOST_REG_B+0x3c9>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     155b <AND_HOST_REG_B+0x43b>
mov    $0xf,%edi
call   1040 <addbyte@plt>
mov    $0xb7,%edi
call   1040 <addbyte@plt>
mov    -0x8(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xeb,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
jmp    1581 <AND_HOST_REG_B+0x461>
mov    $0x20,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
mov    -0x8(%rbp),%eax
and    $0x7,%eax
shl    $0x3,%eax
or     %eax,%edi
call   1040 <addbyte@plt>
jmp    1586 <AND_HOST_REG_B+0x466>
jmp    158b <AND_HOST_REG_B+0x46b>
jmp    1590 <AND_HOST_REG_B+0x470>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<AND_HOST_REG_B>:
push   %r14
push   %rbx
push   %rax
mov    %esi,%ebx
mov    %edi,%r14d
mov    %edi,%eax
and    $0x8,%eax
test   %esi,%eax
je     114b <AND_HOST_REG_B+0x2b>
test   $0x10,%r14b
jne    1195 <AND_HOST_REG_B+0x75>
test   $0x10,%bl
jne    123d <AND_HOST_REG_B+0x11d>
mov    $0x45,%edi
jmp    12e7 <AND_HOST_REG_B+0x1c7>
test   %eax,%eax
jne    1229 <AND_HOST_REG_B+0x109>
test   $0x8,%bl
jne    12ae <AND_HOST_REG_B+0x18e>
test   $0x10,%r14b
je     1187 <AND_HOST_REG_B+0x67>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    %r14d,%edi
and    $0x7,%edi
or     $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
test   $0x10,%bl
je     12ec <AND_HOST_REG_B+0x1cc>
jmp    1392 <AND_HOST_REG_B+0x272>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x89,%edi
call   1040 <addbyte@plt>
mov    %ebx,%eax
or     $0x18,%eax
shl    $0x3,%eax
movzbl %al,%edi
call   1040 <addbyte@plt>
test   $0x10,%bl
jne    11f0 <AND_HOST_REG_B+0xd0>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xe0,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xd,%edi
call   1040 <addbyte@plt>
mov    $0xff,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x21,%edi
jmp    12a0 <AND_HOST_REG_B+0x180>
test   $0x10,%r14b
jne    12f3 <AND_HOST_REG_B+0x1d3>
mov    $0x41,%edi
jmp    12e7 <AND_HOST_REG_B+0x1c7>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x89,%edi
call   1040 <addbyte@plt>
or     $0x18,%ebx
shl    $0x3,%ebx
movzbl %bl,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
and    $0x7,%r14d
jmp    1372 <AND_HOST_REG_B+0x252>
test   $0x10,%r14b
je     12d9 <AND_HOST_REG_B+0x1b9>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    %r14d,%edi
and    $0x7,%edi
or     $0xe8,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
test   $0x10,%bl
jne    1388 <AND_HOST_REG_B+0x268>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
jmp    1362 <AND_HOST_REG_B+0x242>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    %ebx,%edi
or     $0xe0,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x81,%edi
call   1040 <addbyte@plt>
mov    %ebx,%edi
or     $0xc8,%edi
call   1040 <addbyte@plt>
mov    $0xff,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x21,%edi
call   1040 <addbyte@plt>
and    $0x7,%r14d
and    $0x1f,%ebx
lea    (%r14,%rbx,8),%r14d
or     $0xc0,%r14d
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0xf,%edi
call   1040 <addbyte@plt>
mov    $0xb7,%edi
call   1040 <addbyte@plt>
and    $0x7,%ebx
or     $0xd8,%ebx
mov    %ebx,%edi
call   1040 <addbyte@plt>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xeb,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
mov    $0x20,%edi
call   1040 <addbyte@plt>
and    $0x7,%r14d
or     $0xd8,%r14d
jmp    1379 <AND_HOST_REG_B+0x259>

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

LLVM IR (-O2):
define void @AND_HOST_REG_B(i32 %0, i32 %1) {
%3 = and i32 %0, 8
%4 = and i32 %3, %1
%5 = icmp eq i32 %4, 0
br i1 %5, label %60, label %6
6: ; preds = %2
%7 = and i32 %0, 16
%8 = icmp eq i32 %7, 0
br i1 %8, label %33, label %9
9: ; preds = %6
%10 = tail call i32 @addbyte(i32 102)
%11 = tail call i32 @addbyte(i32 68)
%12 = tail call i32 @addbyte(i32 137)
%13 = shl i32 %1, 3
%14 = and i32 %13, 56
%15 = or i32 %14, 192
%16 = tail call i32 @addbyte(i32 %15)
%17 = and i32 %1, 16
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %24
19: ; preds = %9
%20 = tail call i32 @addbyte(i32 102)
%21 = tail call i32 @addbyte(i32 193)
%22 = tail call i32 @addbyte(i32 224)
%23 = tail call i32 @addbyte(i32 8)
br label %24
24: ; preds = %19, %9
%25 = tail call i32 @addbyte(i32 102)
%26 = tail call i32 @addbyte(i32 13)
%27 = tail call i32 @addword(i32 255)
%28 = tail call i32 @addbyte(i32 102)
%29 = tail call i32 @addbyte(i32 65)
%30 = tail call i32 @addbyte(i32 33)
%31 = and i32 %0, 7
%32 = or i32 %31, 192
br label %157
33: ; preds = %6
%34 = and i32 %1, 16
%35 = icmp eq i32 %34, 0
br i1 %35, label %52, label %36
36: ; preds = %33
%37 = tail call i32 @addbyte(i32 102)
%38 = tail call i32 @addbyte(i32 68)
%39 = tail call i32 @addbyte(i32 137)
%40 = shl i32 %1, 3
%41 = and i32 %40, 56
%42 = or i32 %41, 192
%43 = tail call i32 @addbyte(i32 %42)
%44 = tail call i32 @addbyte(i32 102)
%45 = tail call i32 @addbyte(i32 193)
%46 = tail call i32 @addbyte(i32 232)
%47 = tail call i32 @addbyte(i32 8)
%48 = tail call i32 @addbyte(i32 65)
%49 = tail call i32 @addbyte(i32 32)
%50 = and i32 %0, 7
%51 = or i32 %50, 192
br label %157
52: ; preds = %33
%53 = tail call i32 @addbyte(i32 69)
%54 = tail call i32 @addbyte(i32 32)
%55 = and i32 %0, 7
%56 = shl i32 %1, 3
%57 = and i32 %56, 56
%58 = or i32 %55, %57
%59 = or i32 %58, 192
br label %157
60: ; preds = %2
%61 = icmp eq i32 %3, 0
br i1 %61, label %92, label %62
62: ; preds = %60
%63 = and i32 %0, 16
%64 = icmp eq i32 %63, 0
br i1 %64, label %84, label %65
65: ; preds = %62
%66 = tail call i32 @addbyte(i32 102)
%67 = tail call i32 @addbyte(i32 193)
%68 = or i32 %1, 224
%69 = tail call i32 @addbyte(i32 %68)
%70 = tail call i32 @addbyte(i32 8)
%71 = tail call i32 @addbyte(i32 102)
%72 = tail call i32 @addbyte(i32 129)
%73 = or i32 %1, 200
%74 = tail call i32 @addbyte(i32 %73)
%75 = tail call i32 @addword(i32 255)
%76 = tail call i32 @addbyte(i32 102)
%77 = tail call i32 @addbyte(i32 65)
%78 = tail call i32 @addbyte(i32 33)
%79 = and i32 %0, 7
%80 = shl i32 %1, 3
%81 = and i32 %80, 56
%82 = or i32 %79, %81
%83 = or i32 %82, 192
br label %157
84: ; preds = %62
%85 = tail call i32 @addbyte(i32 65)
%86 = tail call i32 @addbyte(i32 32)
%87 = and i32 %0, 7
%88 = shl i32 %1, 3
%89 = and i32 %88, 56
%90 = or i32 %87, %89
%91 = or i32 %90, 192
br label %157
92: ; preds = %60
%93 = and i32 %1, 8
%94 = icmp eq i32 %93, 0
%95 = and i32 %0, 16
%96 = icmp eq i32 %95, 0
br i1 %94, label %128, label %97
97: ; preds = %92
br i1 %96, label %104, label %98
98: ; preds = %97
%99 = tail call i32 @addbyte(i32 193)
%100 = and i32 %0, 7
%101 = or i32 %100, 232
%102 = tail call i32 @addbyte(i32 %101)
%103 = tail call i32 @addbyte(i32 8)
br label %104
104: ; preds = %98, %97
%105 = and i32 %1, 16
%106 = icmp eq i32 %105, 0
br i1 %106, label %120, label %107
107: ; preds = %104
%108 = tail call i32 @addbyte(i32 65)
%109 = tail call i32 @addbyte(i32 15)
%110 = tail call i32 @addbyte(i32 183)
%111 = and i32 %1, 7
%112 = or i32 %111, 216
%113 = tail call i32 @addbyte(i32 %112)
%114 = tail call i32 @addbyte(i32 193)
%115 = tail call i32 @addbyte(i32 235)
%116 = tail call i32 @addbyte(i32 8)
%117 = tail call i32 @addbyte(i32 32)
%118 = and i32 %0, 7
%119 = or i32 %118, 216
br label %157
120: ; preds = %104
%121 = tail call i32 @addbyte(i32 68)
%122 = tail call i32 @addbyte(i32 32)
%123 = and i32 %0, 7
%124 = shl i32 %1, 3
%125 = and i32 %124, 56
%126 = or i32 %123, %125
%127 = or i32 %126, 192
br label %157
128: ; preds = %92
br i1 %96, label %135, label %129
129: ; preds = %128
%130 = tail call i32 @addbyte(i32 193)
%131 = and i32 %0, 7
%132 = or i32 %131, 232
%133 = tail call i32 @addbyte(i32 %132)
%134 = tail call i32 @addbyte(i32 8)
br label %135
135: ; preds = %129, %128
%136 = and i32 %1, 16
%137 = icmp eq i32 %136, 0
br i1 %137, label %150, label %138
138: ; preds = %135
%139 = tail call i32 @addbyte(i32 15)
%140 = tail call i32 @addbyte(i32 183)
%141 = and i32 %1, 7
%142 = or i32 %141, 216
%143 = tail call i32 @addbyte(i32 %142)
%144 = tail call i32 @addbyte(i32 193)
%145 = tail call i32 @addbyte(i32 235)
%146 = tail call i32 @addbyte(i32 8)
%147 = tail call i32 @addbyte(i32 32)
%148 = and i32 %0, 7
%149 = or i32 %148, 216
br label %157
150: ; preds = %135
%151 = tail call i32 @addbyte(i32 32)
%152 = and i32 %0, 7
%153 = shl i32 %1, 3
%154 = and i32 %153, 56
%155 = or i32 %152, %154
%156 = or i32 %155, 192
br label %157
157: ; preds = %84, %65, %138, %150, %107, %120, %24, %52, %36
%158 = phi i32 [ %91, %84 ], [ %83, %65 ], [ %149, %138 ], [ %156, %150 ], [ %119, %107 ], [ %127, %120 ], [ %32, %24 ], [ %59, %52 ], [ %51, %36 ]
%159 = tail call i32 @addbyte(i32 %158)
ret void
}