#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 SUB_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);
      } else {
        addbyte(0x66);
        addbyte(0x25);
        addword(0xff00);
      }
      addbyte(0x66);
      addbyte(0x41);
      addbyte(0x29);
      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(0x28);
      addbyte(0xc0 | (dst_reg & 7));
    } else {
      addbyte(0x45);
      addbyte(0x28);
      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(0x41);
      addbyte(0x29);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    } else {
      addbyte(0x41);
      addbyte(0x28);
      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(0x28);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x44);
      addbyte(0x28);
      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(0x28);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x28);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  }
}


x86 assembly (clang, -O0):
<SUB_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     12dc <SUB_HOST_REG_B+0x1bc>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     120f <SUB_HOST_REG_B+0xef>
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    11bd <SUB_HOST_REG_B+0x9d>
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>
jmp    11db <SUB_HOST_REG_B+0xbb>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x25,%edi
call   1040 <addbyte@plt>
mov    $0xff00,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x29,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
jmp    12d7 <SUB_HOST_REG_B+0x1b7>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     12a2 <SUB_HOST_REG_B+0x182>
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    $0x28,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xc0,%edi
call   1040 <addbyte@plt>
jmp    12d2 <SUB_HOST_REG_B+0x1b2>
mov    $0x45,%edi
call   1040 <addbyte@plt>
mov    $0x28,%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    12d7 <SUB_HOST_REG_B+0x1b7>
jmp    1569 <SUB_HOST_REG_B+0x449>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     139a <SUB_HOST_REG_B+0x27a>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1365 <SUB_HOST_REG_B+0x245>
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    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x29,%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    1395 <SUB_HOST_REG_B+0x275>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x28,%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    1564 <SUB_HOST_REG_B+0x444>
mov    -0x8(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     148e <SUB_HOST_REG_B+0x36e>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     13dd <SUB_HOST_REG_B+0x2bd>
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     1459 <SUB_HOST_REG_B+0x339>
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    $0x28,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
jmp    1489 <SUB_HOST_REG_B+0x369>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x28,%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    155f <SUB_HOST_REG_B+0x43f>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     14c2 <SUB_HOST_REG_B+0x3a2>
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     1534 <SUB_HOST_REG_B+0x414>
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    $0x28,%edi
call   1040 <addbyte@plt>
mov    -0x4(%rbp),%edi
and    $0x7,%edi
or     $0xd8,%edi
call   1040 <addbyte@plt>
jmp    155a <SUB_HOST_REG_B+0x43a>
mov    $0x28,%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    155f <SUB_HOST_REG_B+0x43f>
jmp    1564 <SUB_HOST_REG_B+0x444>
jmp    1569 <SUB_HOST_REG_B+0x449>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SUB_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 <SUB_HOST_REG_B+0x2b>
test   $0x10,%r14b
jne    1195 <SUB_HOST_REG_B+0x75>
test   $0x10,%bl
jne    120d <SUB_HOST_REG_B+0xed>
mov    $0x45,%edi
jmp    12e2 <SUB_HOST_REG_B+0x1c2>
test   %eax,%eax
jne    11f9 <SUB_HOST_REG_B+0xd9>
test   $0x8,%bl
jne    12ad <SUB_HOST_REG_B+0x18d>
test   $0x10,%r14b
je     1187 <SUB_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     12e7 <SUB_HOST_REG_B+0x1c7>
jmp    1362 <SUB_HOST_REG_B+0x242>
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>
mov    $0x66,%edi
call   1040 <addbyte@plt>
test   $0x10,%bl
jne    1272 <SUB_HOST_REG_B+0x152>
mov    $0xc1,%edi
call   1040 <addbyte@plt>
mov    $0xe0,%edi
call   1040 <addbyte@plt>
mov    $0x8,%edi
call   1040 <addbyte@plt>
jmp    1286 <SUB_HOST_REG_B+0x166>
test   $0x10,%r14b
jne    12ee <SUB_HOST_REG_B+0x1ce>
mov    $0x41,%edi
jmp    12e2 <SUB_HOST_REG_B+0x1c2>
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    $0x28,%edi
jmp    129f <SUB_HOST_REG_B+0x17f>
mov    $0x25,%edi
call   1040 <addbyte@plt>
mov    $0xff00,%edi
call   1030 <addword@plt>
mov    $0x66,%edi
call   1040 <addbyte@plt>
mov    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x29,%edi
call   1040 <addbyte@plt>
and    $0x7,%r14d
jmp    1342 <SUB_HOST_REG_B+0x222>
test   $0x10,%r14b
je     12d8 <SUB_HOST_REG_B+0x1b8>
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    1358 <SUB_HOST_REG_B+0x238>
mov    $0x44,%edi
call   1040 <addbyte@plt>
mov    $0x28,%edi
jmp    1332 <SUB_HOST_REG_B+0x212>
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    $0x41,%edi
call   1040 <addbyte@plt>
mov    $0x29,%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    $0x28,%edi
call   1040 <addbyte@plt>
and    $0x7,%r14d
or     $0xd8,%r14d
jmp    1349 <SUB_HOST_REG_B+0x229>

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

LLVM IR (-O2):
define void @SUB_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
%19 = tail call i32 @addbyte(i32 102)
br i1 %18, label %20, label %24
20: ; preds = %9
%21 = tail call i32 @addbyte(i32 193)
%22 = tail call i32 @addbyte(i32 224)
%23 = tail call i32 @addbyte(i32 8)
br label %27
24: ; preds = %9
%25 = tail call i32 @addbyte(i32 37)
%26 = tail call i32 @addword(i32 65280)
br label %27
27: ; preds = %24, %20
%28 = tail call i32 @addbyte(i32 102)
%29 = tail call i32 @addbyte(i32 65)
%30 = tail call i32 @addbyte(i32 41)
%31 = and i32 %0, 7
%32 = or i32 %31, 192
br label %152
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 40)
%50 = and i32 %0, 7
%51 = or i32 %50, 192
br label %152
52: ; preds = %33
%53 = tail call i32 @addbyte(i32 69)
%54 = tail call i32 @addbyte(i32 40)
%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 %152
60: ; preds = %2
%61 = icmp eq i32 %3, 0
br i1 %61, label %87, label %62
62: ; preds = %60
%63 = and i32 %0, 16
%64 = icmp eq i32 %63, 0
br i1 %64, label %79, 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 65)
%73 = tail call i32 @addbyte(i32 41)
%74 = and i32 %0, 7
%75 = shl i32 %1, 3
%76 = and i32 %75, 56
%77 = or i32 %74, %76
%78 = or i32 %77, 192
br label %152
79: ; preds = %62
%80 = tail call i32 @addbyte(i32 65)
%81 = tail call i32 @addbyte(i32 40)
%82 = and i32 %0, 7
%83 = shl i32 %1, 3
%84 = and i32 %83, 56
%85 = or i32 %82, %84
%86 = or i32 %85, 192
br label %152
87: ; preds = %60
%88 = and i32 %1, 8
%89 = icmp eq i32 %88, 0
%90 = and i32 %0, 16
%91 = icmp eq i32 %90, 0
br i1 %89, label %123, label %92
92: ; preds = %87
br i1 %91, label %99, label %93
93: ; preds = %92
%94 = tail call i32 @addbyte(i32 193)
%95 = and i32 %0, 7
%96 = or i32 %95, 232
%97 = tail call i32 @addbyte(i32 %96)
%98 = tail call i32 @addbyte(i32 8)
br label %99
99: ; preds = %93, %92
%100 = and i32 %1, 16
%101 = icmp eq i32 %100, 0
br i1 %101, label %115, label %102
102: ; preds = %99
%103 = tail call i32 @addbyte(i32 65)
%104 = tail call i32 @addbyte(i32 15)
%105 = tail call i32 @addbyte(i32 183)
%106 = and i32 %1, 7
%107 = or i32 %106, 216
%108 = tail call i32 @addbyte(i32 %107)
%109 = tail call i32 @addbyte(i32 193)
%110 = tail call i32 @addbyte(i32 235)
%111 = tail call i32 @addbyte(i32 8)
%112 = tail call i32 @addbyte(i32 40)
%113 = and i32 %0, 7
%114 = or i32 %113, 216
br label %152
115: ; preds = %99
%116 = tail call i32 @addbyte(i32 68)
%117 = tail call i32 @addbyte(i32 40)
%118 = and i32 %0, 7
%119 = shl i32 %1, 3
%120 = and i32 %119, 56
%121 = or i32 %118, %120
%122 = or i32 %121, 192
br label %152
123: ; preds = %87
br i1 %91, label %130, label %124
124: ; preds = %123
%125 = tail call i32 @addbyte(i32 193)
%126 = and i32 %0, 7
%127 = or i32 %126, 232
%128 = tail call i32 @addbyte(i32 %127)
%129 = tail call i32 @addbyte(i32 8)
br label %130
130: ; preds = %124, %123
%131 = and i32 %1, 16
%132 = icmp eq i32 %131, 0
br i1 %132, label %145, label %133
133: ; preds = %130
%134 = tail call i32 @addbyte(i32 15)
%135 = tail call i32 @addbyte(i32 183)
%136 = and i32 %1, 7
%137 = or i32 %136, 216
%138 = tail call i32 @addbyte(i32 %137)
%139 = tail call i32 @addbyte(i32 193)
%140 = tail call i32 @addbyte(i32 235)
%141 = tail call i32 @addbyte(i32 8)
%142 = tail call i32 @addbyte(i32 40)
%143 = and i32 %0, 7
%144 = or i32 %143, 216
br label %152
145: ; preds = %130
%146 = tail call i32 @addbyte(i32 40)
%147 = and i32 %0, 7
%148 = shl i32 %1, 3
%149 = and i32 %148, 56
%150 = or i32 %147, %149
%151 = or i32 %150, 192
br label %152
152: ; preds = %79, %65, %133, %145, %102, %115, %27, %52, %36
%153 = phi i32 [ %86, %79 ], [ %78, %65 ], [ %144, %133 ], [ %151, %145 ], [ %114, %102 ], [ %122, %115 ], [ %32, %27 ], [ %59, %52 ], [ %51, %36 ]
%154 = tail call i32 @addbyte(i32 %153)
ret void
}