int t2ev_load_byte_hints(unsigned opcode, unsigned address,
                         struct arm_instruction *instruction, char *cp) {
  int rn = (opcode >> 16) & 0xf;
  int rt = (opcode >> 12) & 0xf;
  int op2 = (opcode >> 6) & 0x3f;
  unsigned immed;
  char *p1 = "", *p2 = "]";
  char *mnemonic;
  switch ((opcode >> 23) & 0x3) {
  case 0:
    if ((rn & rt) == 0xf) {
    pld_literal:
      immed = opcode & 0xfff;
      address = thumb_alignpc4(address);
      if (opcode & (1 << 23))
        address += immed;
      else
        address -= immed;
      sprintf(cp, "PLD\tr%d, %#8.8x", rt, address);
      return 0;
    }
    if (rn == 0x0f && rt != 0x0f) {
    ldrb_literal:
      immed = opcode & 0xfff;
      address = thumb_alignpc4(address);
      if (opcode & (1 << 23))
        address += immed;
      else
        address -= immed;
      sprintf(cp, "LDRB\tr%d, %#8.8x", rt, address);
      return 0;
    }
    if (rn == 0x0f)
      break;
    if ((op2 & 0x3c) == 0x38) {
      immed = opcode & 0xff;
      sprintf(cp, "LDRBT\tr%d, [r%d, #%d]\t; %#2.2x", rt, rn, immed, immed);
      return 0;
    }
    if ((op2 & 0x3c) == 0x30) {
      if (rt == 0x0f) {
        immed = opcode & 0xff;
        immed = -immed;
      preload_immediate:
        p1 = (opcode & (1 << 21)) ? "W" : "";
        sprintf(cp, "PLD%s\t[r%d, #%d]\t; %#6.6x", p1, rn, immed, immed);
        return 0;
      }
      mnemonic = "LDRB";
    ldrxb_immediate_t3:
      immed = opcode & 0xff;
      if (!(opcode & 0x200))
        immed = -immed;
      if (opcode & 0x100) {
        if (opcode & 0x400)
          p2 = "]!";
        else {
          p1 = "]";
          p2 = "";
        }
      }
    ldrxb_immediate_t2:
      sprintf(cp, "%s\tr%d, [r%d%s, #%d%s\t; %#8.8x", mnemonic, rt, rn, p1,
              immed, p2, immed);
      return 0;
    }
    if ((op2 & 0x24) == 0x24) {
      mnemonic = "LDRB";
      goto ldrxb_immediate_t3;
    }
    if (op2 == 0) {
      int rm = opcode & 0xf;
      if (rt == 0x0f)
        sprintf(cp, "PLD\t");
      else
        sprintf(cp, "LDRB.W\tr%d, ", rt);
      immed = (opcode >> 4) & 0x3;
      cp = strchr(cp, 0);
      sprintf(cp, "[r%d, r%d, LSL #%d]", rn, rm, immed);
      return 0;
    }
    break;
  case 1:
    if ((rn & rt) == 0xf)
      goto pld_literal;
    if (rt == 0xf) {
      immed = opcode & 0xfff;
      goto preload_immediate;
    }
    if (rn == 0x0f)
      goto ldrb_literal;
    mnemonic = "LDRB.W";
    immed = opcode & 0xfff;
    goto ldrxb_immediate_t2;
  case 2:
    if ((rn & rt) == 0xf) {
      immed = opcode & 0xfff;
      address = thumb_alignpc4(address);
      if (opcode & (1 << 23))
        address += immed;
      else
        address -= immed;
      sprintf(cp, "PLI\t%#8.8x", address);
      return 0;
    }
    if (rn == 0xf && rt != 0xf) {
    ldrsb_literal:
      immed = opcode & 0xfff;
      address = thumb_alignpc4(address);
      if (opcode & (1 << 23))
        address += immed;
      else
        address -= immed;
      sprintf(cp, "LDRSB\t%#8.8x", address);
      return 0;
    }
    if (rn == 0xf)
      break;
    if ((op2 & 0x3c) == 0x38) {
      immed = opcode & 0xff;
      sprintf(cp, "LDRSBT\tr%d, [r%d, #%d]\t; %#2.2x", rt, rn, immed, immed);
      return 0;
    }
    if ((op2 & 0x3c) == 0x30) {
      if (rt == 0xf) {
        immed = opcode & 0xff;
        immed = -immed;
        sprintf(cp, "PLI\t[r%d, #%d]\t; -%#2.2x", rn, immed, -immed);
        return 0;
      }
      mnemonic = "LDRSB";
      goto ldrxb_immediate_t3;
    }
    if ((op2 & 0x24) == 0x24) {
      mnemonic = "LDRSB";
      goto ldrxb_immediate_t3;
    }
    if (op2 == 0) {
      int rm = opcode & 0xf;
      if (rt == 0x0f)
        sprintf(cp, "PLI\t");
      else
        sprintf(cp, "LDRSB.W\tr%d, ", rt);
      immed = (opcode >> 4) & 0x3;
      cp = strchr(cp, 0);
      sprintf(cp, "[r%d, r%d, LSL #%d]", rn, rm, immed);
      return 0;
    }
    break;
  case 3:
    if (rt == 0xf) {
      immed = opcode & 0xfff;
      sprintf(cp, "PLI\t[r%d, #%d]\t; %#3.3x", rn, immed, immed);
      return 0;
    }
    if (rn == 0xf)
      goto ldrsb_literal;
    immed = opcode & 0xfff;
    mnemonic = "LDRSB";
    goto ldrxb_immediate_t2;
  }
  return -1;
}


x86 assembly (clang, -O0):
<t2ev_load_byte_hints>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movzwl -0x6(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
mov    %eax,-0x2c(%rbp)
lea    0xf26(%rip),%rax
mov    %rax,-0x38(%rbp)
lea    0xf3b(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%eax
shr    $0x17,%eax
and    $0x3,%eax
mov    %eax,%ecx
mov    %rcx,-0x58(%rbp)
sub    $0x3,%eax
ja     1802 <t2ev_load_byte_hints+0x6d2>
mov    -0x58(%rbp),%rax
lea    0xe5f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x24(%rbp),%eax
and    -0x28(%rbp),%eax
cmp    $0xf,%eax
jne    1224 <t2ev_load_byte_hints+0xf4>
jmp    11be <t2ev_load_byte_hints+0x8e>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <thumb_alignpc4@plt>
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     11f5 <t2ev_load_byte_hints+0xc5>
mov    -0x30(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1200 <t2ev_load_byte_hints+0xd0>
mov    -0x30(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
mov    -0xc(%rbp),%ecx
lea    0xdff(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
cmpl   $0xf,-0x24(%rbp)
jne    12a3 <t2ev_load_byte_hints+0x173>
cmpl   $0xf,-0x28(%rbp)
je     12a3 <t2ev_load_byte_hints+0x173>
jmp    123d <t2ev_load_byte_hints+0x10d>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <thumb_alignpc4@plt>
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     1274 <t2ev_load_byte_hints+0x144>
mov    -0x30(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    127f <t2ev_load_byte_hints+0x14f>
mov    -0x30(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
mov    -0xc(%rbp),%ecx
lea    0xd90(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
cmpl   $0xf,-0x24(%rbp)
jne    12b2 <t2ev_load_byte_hints+0x182>
jmp    1802 <t2ev_load_byte_hints+0x6d2>
mov    -0x2c(%rbp),%eax
and    $0x3c,%eax
cmp    $0x38,%eax
jne    12f8 <t2ev_load_byte_hints+0x1c8>
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x30(%rbp),%r8d
mov    -0x30(%rbp),%r9d
lea    0xd4c(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
mov    -0x2c(%rbp),%eax
and    $0x3c,%eax
cmp    $0x30,%eax
jne    1439 <t2ev_load_byte_hints+0x309>
cmpl   $0xf,-0x28(%rbp)
jne    1373 <t2ev_load_byte_hints+0x243>
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
xor    %eax,%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%edx
and    $0x200000,%edx
lea    0xd61(%rip),%rax
lea    0xd81(%rip),%rcx
cmp    $0x0,%edx
cmovne %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x38(%rbp),%rdx
mov    -0x24(%rbp),%ecx
mov    -0x30(%rbp),%r8d
mov    -0x30(%rbp),%r9d
lea    0xcf0(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
lea    0xcf0(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%eax
and    $0x200,%eax
cmp    $0x0,%eax
jne    13a2 <t2ev_load_byte_hints+0x272>
xor    %eax,%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%eax
and    $0x100,%eax
cmp    $0x0,%eax
je     13ef <t2ev_load_byte_hints+0x2bf>
mov    -0x8(%rbp),%eax
and    $0x400,%eax
cmp    $0x0,%eax
je     13d4 <t2ev_load_byte_hints+0x2a4>
lea    0xca4(%rip),%rax
mov    %rax,-0x40(%rbp)
jmp    13ea <t2ev_load_byte_hints+0x2ba>
lea    0xcda(%rip),%rax
mov    %rax,-0x38(%rbp)
lea    0xcaf(%rip),%rax
mov    %rax,-0x40(%rbp)
jmp    13ef <t2ev_load_byte_hints+0x2bf>
jmp    13f4 <t2ev_load_byte_hints+0x2c4>
mov    -0x20(%rbp),%rdi
mov    -0x48(%rbp),%rdx
mov    -0x28(%rbp),%ecx
mov    -0x24(%rbp),%r8d
mov    -0x38(%rbp),%r9
mov    -0x30(%rbp),%r11d
mov    -0x40(%rbp),%r10
mov    -0x30(%rbp),%eax
lea    0xc59(%rip),%rsi
mov    %r11d,(%rsp)
mov    %r10,0x8(%rsp)
mov    %eax,0x10(%rsp)
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
mov    -0x2c(%rbp),%eax
and    $0x24,%eax
cmp    $0x24,%eax
jne    1458 <t2ev_load_byte_hints+0x328>
lea    0xc1b(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    137e <t2ev_load_byte_hints+0x24e>
cmpl   $0x0,-0x2c(%rbp)
jne    14e4 <t2ev_load_byte_hints+0x3b4>
mov    -0x8(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0xf,-0x28(%rbp)
jne    148c <t2ev_load_byte_hints+0x35c>
mov    -0x20(%rbp),%rdi
lea    0xc11(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
jmp    14a1 <t2ev_load_byte_hints+0x371>
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
lea    0xbfc(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
mov    -0x8(%rbp),%eax
shr    $0x4,%eax
and    $0x3,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
xor    %esi,%esi
call   1030 <strchr@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%edx
mov    -0x4c(%rbp),%ecx
mov    -0x30(%rbp),%r8d
lea    0xbd2(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
jmp    1802 <t2ev_load_byte_hints+0x6d2>
mov    -0x24(%rbp),%eax
and    -0x28(%rbp),%eax
cmp    $0xf,%eax
jne    14fd <t2ev_load_byte_hints+0x3cd>
jmp    11be <t2ev_load_byte_hints+0x8e>
cmpl   $0xf,-0x28(%rbp)
jne    1517 <t2ev_load_byte_hints+0x3e7>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
jmp    1324 <t2ev_load_byte_hints+0x1f4>
cmpl   $0xf,-0x24(%rbp)
jne    1526 <t2ev_load_byte_hints+0x3f6>
jmp    123d <t2ev_load_byte_hints+0x10d>
lea    0xb8a(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
jmp    13f4 <t2ev_load_byte_hints+0x2c4>
mov    -0x24(%rbp),%eax
and    -0x28(%rbp),%eax
cmp    $0xf,%eax
jne    15b3 <t2ev_load_byte_hints+0x483>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <thumb_alignpc4@plt>
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     1587 <t2ev_load_byte_hints+0x457>
mov    -0x30(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1592 <t2ev_load_byte_hints+0x462>
mov    -0x30(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0xc(%rbp),%edx
lea    0xb1e(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
cmpl   $0xf,-0x24(%rbp)
jne    162f <t2ev_load_byte_hints+0x4ff>
cmpl   $0xf,-0x28(%rbp)
je     162f <t2ev_load_byte_hints+0x4ff>
jmp    15cc <t2ev_load_byte_hints+0x49c>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <thumb_alignpc4@plt>
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
and    $0x800000,%eax
cmp    $0x0,%eax
je     1603 <t2ev_load_byte_hints+0x4d3>
mov    -0x30(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    160e <t2ev_load_byte_hints+0x4de>
mov    -0x30(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0xc(%rbp),%edx
lea    0xaad(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
cmpl   $0xf,-0x24(%rbp)
jne    163e <t2ev_load_byte_hints+0x50e>
jmp    1802 <t2ev_load_byte_hints+0x6d2>
mov    -0x2c(%rbp),%eax
and    $0x3c,%eax
cmp    $0x38,%eax
jne    1684 <t2ev_load_byte_hints+0x554>
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x30(%rbp),%r8d
mov    -0x30(%rbp),%r9d
lea    0xa65(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
mov    -0x2c(%rbp),%eax
and    $0x3c,%eax
cmp    $0x30,%eax
jne    16eb <t2ev_load_byte_hints+0x5bb>
cmpl   $0xf,-0x28(%rbp)
jne    16db <t2ev_load_byte_hints+0x5ab>
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
xor    %eax,%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%edx
mov    -0x30(%rbp),%ecx
xor    %r8d,%r8d
sub    -0x30(%rbp),%r8d
lea    0xa2e(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
lea    0xa2d(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    137e <t2ev_load_byte_hints+0x24e>
mov    -0x2c(%rbp),%eax
and    $0x24,%eax
cmp    $0x24,%eax
jne    170a <t2ev_load_byte_hints+0x5da>
lea    0xa0e(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    137e <t2ev_load_byte_hints+0x24e>
cmpl   $0x0,-0x2c(%rbp)
jne    1796 <t2ev_load_byte_hints+0x666>
mov    -0x8(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x50(%rbp)
cmpl   $0xf,-0x28(%rbp)
jne    173e <t2ev_load_byte_hints+0x60e>
mov    -0x20(%rbp),%rdi
lea    0x9e3(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
jmp    1753 <t2ev_load_byte_hints+0x623>
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%edx
lea    0x9ce(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
mov    -0x8(%rbp),%eax
shr    $0x4,%eax
and    $0x3,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
xor    %esi,%esi
call   1030 <strchr@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%edx
mov    -0x50(%rbp),%ecx
mov    -0x30(%rbp),%r8d
lea    0x920(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
jmp    1802 <t2ev_load_byte_hints+0x6d2>
cmpl   $0xf,-0x28(%rbp)
jne    17d8 <t2ev_load_byte_hints+0x6a8>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%edx
mov    -0x30(%rbp),%ecx
mov    -0x30(%rbp),%r8d
lea    0x963(%rip),%rsi
mov    $0x0,%al
call   1050 <sprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1809 <t2ev_load_byte_hints+0x6d9>
cmpl   $0xf,-0x24(%rbp)
jne    17e7 <t2ev_load_byte_hints+0x6b7>
jmp    15cc <t2ev_load_byte_hints+0x49c>
mov    -0x8(%rbp),%eax
and    $0xfff,%eax
mov    %eax,-0x30(%rbp)
lea    0x916(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    13f4 <t2ev_load_byte_hints+0x2c4>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<t2ev_load_byte_hints>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rcx,%r14
mov    %edi,%r13d
mov    %edi,%ecx
shr    $0x10,%ecx
mov    %ecx,%r15d
and    $0xf,%r15d
mov    %edi,%ebx
shr    $0xc,%ebx
and    $0xf,%ebx
mov    %edi,%eax
shr    $0x6,%eax
mov    %edi,%edx
shr    $0x17,%edx
and    $0x3,%edx
lea    0xe97(%rip),%rdi
movslq (%rdi,%rdx,4),%rdx
add    %rdi,%rdx
jmp    *%rdx
and    %ebx,%ecx
cmp    $0xf,%ecx
je     11ca <t2ev_load_byte_hints+0x9a>
cmp    $0xf,%r15d
jne    1188 <t2ev_load_byte_hints+0x58>
cmp    $0xf,%ebx
jne    1352 <t2ev_load_byte_hints+0x222>
mov    $0xffffffff,%r12d
cmp    $0xf,%r15d
je     13e2 <t2ev_load_byte_hints+0x2b2>
mov    %eax,%ecx
and    $0x3c,%ecx
cmp    $0x30,%ecx
je     13f4 <t2ev_load_byte_hints+0x2c4>
cmp    $0x38,%ecx
jne    1405 <t2ev_load_byte_hints+0x2d5>
movzbl %r13b,%r8d
lea    0xe77(%rip),%rsi
jmp    12f1 <t2ev_load_byte_hints+0x1c1>
and    %ebx,%ecx
cmp    $0xf,%ecx
jne    1269 <t2ev_load_byte_hints+0x139>
mov    %r13d,%ebp
and    $0xfff,%ebp
xor    %r12d,%r12d
mov    %esi,%edi
xor    %eax,%eax
call   1040 <thumb_alignpc4@plt>
mov    %ebp,%ecx
neg    %ecx
test   $0x800000,%r13d
cmovne %ebp,%ecx
add    %eax,%ecx
lea    0xe1a(%rip),%rsi
jmp    137e <t2ev_load_byte_hints+0x24e>
and    %ebx,%ecx
cmp    $0xf,%ecx
jne    12b4 <t2ev_load_byte_hints+0x184>
mov    %r13d,%ebx
and    $0xfff,%ebx
xor    %r12d,%r12d
mov    %esi,%edi
xor    %eax,%eax
call   1040 <thumb_alignpc4@plt>
mov    %ebx,%edx
neg    %edx
test   $0x800000,%r13d
cmovne %ebx,%edx
add    %eax,%edx
lea    0xe8c(%rip),%rsi
jmp    133d <t2ev_load_byte_hints+0x20d>
cmp    $0xf,%ebx
jne    130b <t2ev_load_byte_hints+0x1db>
and    $0xfff,%r13d
lea    0xeda(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %r15d,%edx
mov    %r13d,%ecx
mov    %r13d,%r8d
xor    %eax,%eax
call   1050 <sprintf@plt>
jmp    13e2 <t2ev_load_byte_hints+0x2b2>
cmp    $0xf,%ebx
jne    134c <t2ev_load_byte_hints+0x21c>
mov    %r13d,%r8d
and    $0xfff,%r8d
test   $0x200000,%r13d
lea    0xe0b(%rip),%rax
lea    0xe2b(%rip),%rdx
cmove  %rax,%rdx
lea    0xdb4(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %r15d,%ecx
mov    %r8d,%r9d
xor    %eax,%eax
call   1050 <sprintf@plt>
jmp    13e2 <t2ev_load_byte_hints+0x2b2>
cmp    $0xf,%r15d
jne    12bf <t2ev_load_byte_hints+0x18f>
cmp    $0xf,%ebx
jne    1311 <t2ev_load_byte_hints+0x1e1>
mov    $0xffffffff,%r12d
cmp    $0xf,%r15d
je     13e2 <t2ev_load_byte_hints+0x2b2>
mov    %eax,%ecx
and    $0x3c,%ecx
cmp    $0x30,%ecx
je     141f <t2ev_load_byte_hints+0x2ef>
cmp    $0x38,%ecx
jne    1442 <t2ev_load_byte_hints+0x312>
movzbl %r13b,%r8d
lea    0xde5(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %ebx,%edx
mov    %r15d,%ecx
mov    %r8d,%r9d
xor    %eax,%eax
call   1050 <sprintf@plt>
jmp    13e2 <t2ev_load_byte_hints+0x2b2>
cmp    $0xf,%r15d
jne    138c <t2ev_load_byte_hints+0x25c>
mov    %r13d,%ebx
and    $0xfff,%ebx
xor    %r12d,%r12d
mov    %esi,%edi
xor    %eax,%eax
call   1040 <thumb_alignpc4@plt>
mov    %ebx,%edx
neg    %edx
test   $0x800000,%r13d
cmovne %ebx,%edx
add    %eax,%edx
lea    0xd8c(%rip),%rsi
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <sprintf@plt>
jmp    13e2 <t2ev_load_byte_hints+0x2b2>
cmp    $0xf,%r15d
jne    139c <t2ev_load_byte_hints+0x26c>
mov    %r13d,%ebp
and    $0xfff,%ebp
xor    %r12d,%r12d
mov    %esi,%edi
xor    %eax,%eax
call   1040 <thumb_alignpc4@plt>
mov    %ebp,%ecx
neg    %ecx
test   $0x800000,%r13d
cmovne %ebp,%ecx
add    %eax,%ecx
lea    0xca2(%rip),%rsi
mov    %r14,%rdi
mov    %ebx,%edx
xor    %eax,%eax
call   1050 <sprintf@plt>
jmp    13e2 <t2ev_load_byte_hints+0x2b2>
and    $0xfff,%r13d
lea    0xd75(%rip),%rdx
jmp    13aa <t2ev_load_byte_hints+0x27a>
and    $0xfff,%r13d
lea    0xd0d(%rip),%rdx
lea    0xd04(%rip),%r11
lea    0xcdd(%rip),%r9
mov    %r13d,%r10d
sub    $0x8,%rsp
lea    0xcac(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %ebx,%ecx
mov    %r15d,%r8d
xor    %eax,%eax
push   %r10
push   %r11
push   %r10
call   1050 <sprintf@plt>
add    $0x20,%rsp
mov    %r12d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0xf,%ebx
jne    1416 <t2ev_load_byte_hints+0x2e6>
movzbl %r13b,%r8d
neg    %r8d
jmp    127c <t2ev_load_byte_hints+0x14c>
mov    %r13d,%ecx
not    %ecx
test   $0x900,%ecx
jne    14b4 <t2ev_load_byte_hints+0x384>
lea    0xc4d(%rip),%rdx
jmp    145a <t2ev_load_byte_hints+0x32a>
cmp    $0xf,%ebx
jne    1453 <t2ev_load_byte_hints+0x323>
movzbl %r13b,%r8d
mov    %r8d,%ecx
neg    %ecx
lea    0xcc2(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %r15d,%edx
jmp    125d <t2ev_load_byte_hints+0x12d>
mov    %r13d,%ecx
not    %ecx
test   $0x900,%ecx
jne    14d5 <t2ev_load_byte_hints+0x3a5>
lea    0xcb5(%rip),%rdx
movzbl %r13b,%eax
mov    %eax,%r10d
neg    %r10d
test   $0x200,%r13d
cmovne %eax,%r10d
test   $0x100,%r13d
jne    148b <t2ev_load_byte_hints+0x35b>
lea    0xc36(%rip),%r11
lea    0xc0f(%rip),%r9
jmp    13bb <t2ev_load_byte_hints+0x28b>
test   $0x400,%r13d
lea    0xc1c(%rip),%r9
lea    0xbf5(%rip),%rax
cmovne %rax,%r9
lea    0xbc4(%rip),%r11
cmove  %rax,%r11
jmp    13bb <t2ev_load_byte_hints+0x28b>
test   $0x3f,%al
jne    13e2 <t2ev_load_byte_hints+0x2b2>
mov    %r13d,%ebp
and    $0xf,%ebp
cmp    $0xf,%ebx
jne    14f6 <t2ev_load_byte_hints+0x3c6>
movb   $0x0,0x4(%r14)
movl   $0x9444c50,(%r14)
jmp    1512 <t2ev_load_byte_hints+0x3e2>
test   $0x3f,%al
jne    13e2 <t2ev_load_byte_hints+0x2b2>
mov    %r13d,%ebp
and    $0xf,%ebp
cmp    $0xf,%ebx
jne    14ff <t2ev_load_byte_hints+0x3cf>
movb   $0x0,0x4(%r14)
movl   $0x9494c50,(%r14)
jmp    1512 <t2ev_load_byte_hints+0x3e2>
lea    0xb99(%rip),%rsi
jmp    1506 <t2ev_load_byte_hints+0x3d6>
lea    0xc14(%rip),%rsi
mov    %r14,%rdi
mov    %ebx,%edx
xor    %eax,%eax
call   1050 <sprintf@plt>
shr    $0x4,%r13d
and    $0x3,%r13d
mov    %r14,%rdi
call   1030 <strlen@plt>
add    %rax,%r14
lea    0xb77(%rip),%rsi
xor    %r12d,%r12d
mov    %r14,%rdi
mov    %r15d,%edx
mov    %ebp,%ecx
jmp    125a <t2ev_load_byte_hints+0x12a>

LLVM IR (-O0):
%struct.arm_instruction = type opaque
@.str = [1 x i8] zeroinitializer
@.str.1 = [2 x i8] c"]\00"
@.str.2 = [16 x i8] c"PLD\09r%d, %.8x\00"
@.str.3 = [17 x i8] c"LDRB\09r%d, %.8x\00"
@.str.4 = [31 x i8] c"LDRBT\09r%d, [r%d, #%d]\09; %.2x\00"
@.str.5 = [2 x i8] c"W\00"
@.str.6 = [26 x i8] c"PLD%s\09[r%d, #%d]\09; %.6x\00"
@.str.7 = [5 x i8] c"LDRB\00"
@.str.8 = [3 x i8] c"]!\00"
@.str.9 = [31 x i8] c"%s\09r%d, [r%d%s, #%d%s\09; %.8x\00"
@.str.10 = [5 x i8] c"PLD\09\00"
@.str.11 = [13 x i8] c"LDRB.W\09r%d, \00"
@.str.12 = [20 x i8] c"[r%d, r%d, LSL #%d]\00"
@.str.13 = [7 x i8] c"LDRB.W\00"
@.str.14 = [11 x i8] c"PLI\09%.8x\00"
@.str.15 = [13 x i8] c"LDRSB\09%.8x\00"
@.str.16 = [32 x i8] c"LDRSBT\09r%d, [r%d, #%d]\09; %.2x\00"
@.str.17 = [25 x i8] c"PLI\09[r%d, #%d]\09; -%.2x\00"
@.str.18 = [6 x i8] c"LDRSB\00"
@.str.19 = [5 x i8] c"PLI\09\00"
@.str.20 = [14 x i8] c"LDRSB.W\09r%d, \00"
@.str.21 = [24 x i8] c"PLI\09[r%d, #%d]\09; %.3x\00"
define i32 @t2ev_load_byte_hints(i32 %0, i32 %1, %struct.arm_instruction* %2, i8* %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca %struct.arm_instruction*
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i32
%18 = alloca i32
store i32 %0, i32* %6
store i32 %1, i32* %7
store %struct.arm_instruction* %2, %struct.arm_instruction** %8
store i8* %3, i8** %9
%19 = load i32, i32* %6
%20 = lshr i32 %19, 16
%21 = and i32 %20, 15
store i32 %21, i32* %10
%22 = load i32, i32* %6
%23 = lshr i32 %22, 12
%24 = and i32 %23, 15
store i32 %24, i32* %11
%25 = load i32, i32* %6
%26 = lshr i32 %25, 6
%27 = and i32 %26, 63
store i32 %27, i32* %12
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8** %14
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %15
%28 = load i32, i32* %6
%29 = lshr i32 %28, 23
%30 = and i32 %29, 3
switch i32 %30, label %348 [
i32 0, label %31
i32 1, label %191
i32 2, label %210
i32 3, label %330
]
31: ; preds = %4
%32 = load i32, i32* %10
%33 = load i32, i32* %11
%34 = and i32 %32, %33
%35 = icmp eq i32 %34, 15
br i1 %35, label %36, label %58
36: ; preds = %31
br label %37
37: ; preds = %196, %36
%38 = load i32, i32* %6
%39 = and i32 %38, 4095
store i32 %39, i32* %13
%40 = load i32, i32* %7
%41 = call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %40)
store i32 %41, i32* %7
%42 = load i32, i32* %6
%43 = and i32 %42, 8388608
%44 = icmp ne i32 %43, 0
br i1 %44, label %45, label %49
45: ; preds = %37
%46 = load i32, i32* %13
%47 = load i32, i32* %7
%48 = add i32 %47, %46
store i32 %48, i32* %7
br label %53
49: ; preds = %37
%50 = load i32, i32* %13
%51 = load i32, i32* %7
%52 = sub i32 %51, %50
store i32 %52, i32* %7
br label %53
53: ; preds = %49, %45
%54 = load i8*, i8** %9
%55 = load i32, i32* %11
%56 = load i32, i32* %7
%57 = call i32 (i8*, i8*, ...) @sprintf(i8* %54, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.2, i64 0, i64 0), i32 %55, i32 %56)
store i32 0, i32* %5
br label %349
58: ; preds = %31
%59 = load i32, i32* %10
%60 = icmp eq i32 %59, 15
br i1 %60, label %61, label %86
61: ; preds = %58
%62 = load i32, i32* %11
%63 = icmp ne i32 %62, 15
br i1 %63, label %64, label %86
64: ; preds = %61
br label %65
65: ; preds = %206, %64
%66 = load i32, i32* %6
%67 = and i32 %66, 4095
store i32 %67, i32* %13
%68 = load i32, i32* %7
%69 = call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %68)
store i32 %69, i32* %7
%70 = load i32, i32* %6
%71 = and i32 %70, 8388608
%72 = icmp ne i32 %71, 0
br i1 %72, label %73, label %77
73: ; preds = %65
%74 = load i32, i32* %13
%75 = load i32, i32* %7
%76 = add i32 %75, %74
store i32 %76, i32* %7
br label %81
77: ; preds = %65
%78 = load i32, i32* %13
%79 = load i32, i32* %7
%80 = sub i32 %79, %78
store i32 %80, i32* %7
br label %81
81: ; preds = %77, %73
%82 = load i8*, i8** %9
%83 = load i32, i32* %11
%84 = load i32, i32* %7
%85 = call i32 (i8*, i8*, ...) @sprintf(i8* %82, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i64 0, i64 0), i32 %83, i32 %84)
store i32 0, i32* %5
br label %349
86: ; preds = %61, %58
%87 = load i32, i32* %10
%88 = icmp eq i32 %87, 15
br i1 %88, label %89, label %90
89: ; preds = %86
br label %348
90: ; preds = %86
%91 = load i32, i32* %12
%92 = and i32 %91, 60
%93 = icmp eq i32 %92, 56
br i1 %93, label %94, label %103
94: ; preds = %90
%95 = load i32, i32* %6
%96 = and i32 %95, 255
store i32 %96, i32* %13
%97 = load i8*, i8** %9
%98 = load i32, i32* %11
%99 = load i32, i32* %10
%100 = load i32, i32* %13
%101 = load i32, i32* %13
%102 = call i32 (i8*, i8*, ...) @sprintf(i8* %97, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.4, i64 0, i64 0), i32 %98, i32 %99, i32 %100, i32 %101)
store i32 0, i32* %5
br label %349
103: ; preds = %90
%104 = load i32, i32* %12
%105 = and i32 %104, 60
%106 = icmp eq i32 %105, 48
br i1 %106, label %107, label %159
107: ; preds = %103
%108 = load i32, i32* %11
%109 = icmp eq i32 %108, 15
br i1 %109, label %110, label %127
110: ; preds = %107
%111 = load i32, i32* %6
%112 = and i32 %111, 255
store i32 %112, i32* %13
%113 = load i32, i32* %13
%114 = sub i32 0, %113
store i32 %114, i32* %13
br label %115
115: ; preds = %200, %110
%116 = load i32, i32* %6
%117 = and i32 %116, 2097152
%118 = icmp ne i32 %117, 0
%119 = zext i1 %118 to i64
%120 = select i1 %118, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)
store i8* %120, i8** %14
%121 = load i8*, i8** %9
%122 = load i8*, i8** %14
%123 = load i32, i32* %10
%124 = load i32, i32* %13
%125 = load i32, i32* %13
%126 = call i32 (i8*, i8*, ...) @sprintf(i8* %121, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.6, i64 0, i64 0), i8* %122, i32 %123, i32 %124, i32 %125)
store i32 0, i32* %5
br label %349
127: ; preds = %107
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8** %16
br label %128
128: ; preds = %302, %297, %163, %127
%129 = load i32, i32* %6
%130 = and i32 %129, 255
store i32 %130, i32* %13
%131 = load i32, i32* %6
%132 = and i32 %131, 512
%133 = icmp ne i32 %132, 0
br i1 %133, label %137, label %134
134: ; preds = %128
%135 = load i32, i32* %13
%136 = sub i32 0, %135
store i32 %136, i32* %13
br label %137
137: ; preds = %134, %128
%138 = load i32, i32* %6
%139 = and i32 %138, 256
%140 = icmp ne i32 %139, 0
br i1 %140, label %141, label %148
141: ; preds = %137
%142 = load i32, i32* %6
%143 = and i32 %142, 1024
%144 = icmp ne i32 %143, 0
br i1 %144, label %145, label %146
145: ; preds = %141
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i8** %15
br label %147
146: ; preds = %141
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8** %14
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8** %15
br label %147
147: ; preds = %146, %145
br label %148
148: ; preds = %147, %137
br label %149
149: ; preds = %345, %207, %148
%150 = load i8*, i8** %9
%151 = load i8*, i8** %16
%152 = load i32, i32* %11
%153 = load i32, i32* %10
%154 = load i8*, i8** %14
%155 = load i32, i32* %13
%156 = load i8*, i8** %15
%157 = load i32, i32* %13
%158 = call i32 (i8*, i8*, ...) @sprintf(i8* %150, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i8* %151, i32 %152, i32 %153, i8* %154, i32 %155, i8* %156, i32 %157)
store i32 0, i32* %5
br label %349
159: ; preds = %103
%160 = load i32, i32* %12
%161 = and i32 %160, 36
%162 = icmp eq i32 %161, 36
br i1 %162, label %163, label %164
163: ; preds = %159
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8** %16
br label %128
164: ; preds = %159
%165 = load i32, i32* %12
%166 = icmp eq i32 %165, 0
br i1 %166, label %167, label %190
167: ; preds = %164
%168 = load i32, i32* %6
%169 = and i32 %168, 15
store i32 %169, i32* %17
%170 = load i32, i32* %11
%171 = icmp eq i32 %170, 15
br i1 %171, label %172, label %175
172: ; preds = %167
%173 = load i8*, i8** %9
%174 = call i32 (i8*, i8*, ...) @sprintf(i8* %173, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
br label %179
175: ; preds = %167
%176 = load i8*, i8** %9
%177 = load i32, i32* %11
%178 = call i32 (i8*, i8*, ...) @sprintf(i8* %176, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), i32 %177)
br label %179
179: ; preds = %175, %172
%180 = load i32, i32* %6
%181 = lshr i32 %180, 4
%182 = and i32 %181, 3
store i32 %182, i32* %13
%183 = load i8*, i8** %9
%184 = call i8* @strchr(i8* %183, i32 0)
store i8* %184, i8** %9
%185 = load i8*, i8** %9
%186 = load i32, i32* %10
%187 = load i32, i32* %17
%188 = load i32, i32* %13
%189 = call i32 (i8*, i8*, ...) @sprintf(i8* %185, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.12, i64 0, i64 0), i32 %186, i32 %187, i32 %188)
store i32 0, i32* %5
br label %349
190: ; preds = %164
br label %348
191: ; preds = %4
%192 = load i32, i32* %10
%193 = load i32, i32* %11
%194 = and i32 %192, %193
%195 = icmp eq i32 %194, 15
br i1 %195, label %196, label %197
196: ; preds = %191
br label %37
197: ; preds = %191
%198 = load i32, i32* %11
%199 = icmp eq i32 %198, 15
br i1 %199, label %200, label %203
200: ; preds = %197
%201 = load i32, i32* %6
%202 = and i32 %201, 4095
store i32 %202, i32* %13
br label %115
203: ; preds = %197
%204 = load i32, i32* %10
%205 = icmp eq i32 %204, 15
br i1 %205, label %206, label %207
206: ; preds = %203
br label %65
207: ; preds = %203
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.13, i64 0, i64 0), i8** %16
%208 = load i32, i32* %6
%209 = and i32 %208, 4095
store i32 %209, i32* %13
br label %149
210: ; preds = %4
%211 = load i32, i32* %10
%212 = load i32, i32* %11
%213 = and i32 %211, %212
%214 = icmp eq i32 %213, 15
br i1 %214, label %215, label %235
215: ; preds = %210
%216 = load i32, i32* %6
%217 = and i32 %216, 4095
store i32 %217, i32* %13
%218 = load i32, i32* %7
%219 = call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %218)
store i32 %219, i32* %7
%220 = load i32, i32* %6
%221 = and i32 %220, 8388608
%222 = icmp ne i32 %221, 0
br i1 %222, label %223, label %227
223: ; preds = %215
%224 = load i32, i32* %13
%225 = load i32, i32* %7
%226 = add i32 %225, %224
store i32 %226, i32* %7
br label %231
227: ; preds = %215
%228 = load i32, i32* %13
%229 = load i32, i32* %7
%230 = sub i32 %229, %228
store i32 %230, i32* %7
br label %231
231: ; preds = %227, %223
%232 = load i8*, i8** %9
%233 = load i32, i32* %7
%234 = call i32 (i8*, i8*, ...) @sprintf(i8* %232, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), i32 %233)
store i32 0, i32* %5
br label %349
235: ; preds = %210
%236 = load i32, i32* %10
%237 = icmp eq i32 %236, 15
br i1 %237, label %238, label %262
238: ; preds = %235
%239 = load i32, i32* %11
%240 = icmp ne i32 %239, 15
br i1 %240, label %241, label %262
241: ; preds = %238
br label %242
242: ; preds = %344, %241
%243 = load i32, i32* %6
%244 = and i32 %243, 4095
store i32 %244, i32* %13
%245 = load i32, i32* %7
%246 = call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %245)
store i32 %246, i32* %7
%247 = load i32, i32* %6
%248 = and i32 %247, 8388608
%249 = icmp ne i32 %248, 0
br i1 %249, label %250, label %254
250: ; preds = %242
%251 = load i32, i32* %13
%252 = load i32, i32* %7
%253 = add i32 %252, %251
store i32 %253, i32* %7
br label %258
254: ; preds = %242
%255 = load i32, i32* %13
%256 = load i32, i32* %7
%257 = sub i32 %256, %255
store i32 %257, i32* %7
br label %258
258: ; preds = %254, %250
%259 = load i8*, i8** %9
%260 = load i32, i32* %7
%261 = call i32 (i8*, i8*, ...) @sprintf(i8* %259, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i64 0, i64 0), i32 %260)
store i32 0, i32* %5
br label %349
262: ; preds = %238, %235
%263 = load i32, i32* %10
%264 = icmp eq i32 %263, 15
br i1 %264, label %265, label %266
265: ; preds = %262
br label %348
266: ; preds = %262
%267 = load i32, i32* %12
%268 = and i32 %267, 60
%269 = icmp eq i32 %268, 56
br i1 %269, label %270, label %279
270: ; preds = %266
%271 = load i32, i32* %6
%272 = and i32 %271, 255
store i32 %272, i32* %13
%273 = load i8*, i8** %9
%274 = load i32, i32* %11
%275 = load i32, i32* %10
%276 = load i32, i32* %13
%277 = load i32, i32* %13
%278 = call i32 (i8*, i8*, ...) @sprintf(i8* %273, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.16, i64 0, i64 0), i32 %274, i32 %275, i32 %276, i32 %277)
store i32 0, i32* %5
br label %349
279: ; preds = %266
%280 = load i32, i32* %12
%281 = and i32 %280, 60
%282 = icmp eq i32 %281, 48
br i1 %282, label %283, label %298
283: ; preds = %279
%284 = load i32, i32* %11
%285 = icmp eq i32 %284, 15
br i1 %285, label %286, label %297
286: ; preds = %283
%287 = load i32, i32* %6
%288 = and i32 %287, 255
store i32 %288, i32* %13
%289 = load i32, i32* %13
%290 = sub i32 0, %289
store i32 %290, i32* %13
%291 = load i8*, i8** %9
%292 = load i32, i32* %10
%293 = load i32, i32* %13
%294 = load i32, i32* %13
%295 = sub i32 0, %294
%296 = call i32 (i8*, i8*, ...) @sprintf(i8* %291, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.17, i64 0, i64 0), i32 %292, i32 %293, i32 %295)
store i32 0, i32* %5
br label %349
297: ; preds = %283
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), i8** %16
br label %128
298: ; preds = %279
%299 = load i32, i32* %12
%300 = and i32 %299, 36
%301 = icmp eq i32 %300, 36
br i1 %301, label %302, label %303
302: ; preds = %298
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), i8** %16
br label %128
303: ; preds = %298
%304 = load i32, i32* %12
%305 = icmp eq i32 %304, 0
br i1 %305, label %306, label %329
306: ; preds = %303
%307 = load i32, i32* %6
%308 = and i32 %307, 15
store i32 %308, i32* %18
%309 = load i32, i32* %11
%310 = icmp eq i32 %309, 15
br i1 %310, label %311, label %314
311: ; preds = %306
%312 = load i8*, i8** %9
%313 = call i32 (i8*, i8*, ...) @sprintf(i8* %312, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0))
br label %318
314: ; preds = %306
%315 = load i8*, i8** %9
%316 = load i32, i32* %11
%317 = call i32 (i8*, i8*, ...) @sprintf(i8* %315, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.20, i64 0, i64 0), i32 %316)
br label %318
318: ; preds = %314, %311
%319 = load i32, i32* %6
%320 = lshr i32 %319, 4
%321 = and i32 %320, 3
store i32 %321, i32* %13
%322 = load i8*, i8** %9
%323 = call i8* @strchr(i8* %322, i32 0)
store i8* %323, i8** %9
%324 = load i8*, i8** %9
%325 = load i32, i32* %10
%326 = load i32, i32* %18
%327 = load i32, i32* %13
%328 = call i32 (i8*, i8*, ...) @sprintf(i8* %324, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.12, i64 0, i64 0), i32 %325, i32 %326, i32 %327)
store i32 0, i32* %5
br label %349
329: ; preds = %303
br label %348
330: ; preds = %4
%331 = load i32, i32* %11
%332 = icmp eq i32 %331, 15
br i1 %332, label %333, label %341
333: ; preds = %330
%334 = load i32, i32* %6
%335 = and i32 %334, 4095
store i32 %335, i32* %13
%336 = load i8*, i8** %9
%337 = load i32, i32* %10
%338 = load i32, i32* %13
%339 = load i32, i32* %13
%340 = call i32 (i8*, i8*, ...) @sprintf(i8* %336, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.21, i64 0, i64 0), i32 %337, i32 %338, i32 %339)
store i32 0, i32* %5
br label %349
341: ; preds = %330
%342 = load i32, i32* %10
%343 = icmp eq i32 %342, 15
br i1 %343, label %344, label %345
344: ; preds = %341
br label %242
345: ; preds = %341
%346 = load i32, i32* %6
%347 = and i32 %346, 4095
store i32 %347, i32* %13
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), i8** %16
br label %149
348: ; preds = %4, %329, %265, %190, %89
store i32 -1, i32* %5
br label %349
349: ; preds = %348, %333, %318, %286, %270, %258, %231, %179, %149, %115, %94, %81, %53
%350 = load i32, i32* %5
ret i32 %350
}

LLVM IR (-O2):
%struct.arm_instruction = type opaque
@.str = [1 x i8] zeroinitializer
@.str.1 = [2 x i8] c"]\00"
@.str.2 = [16 x i8] c"PLD\09r%d, %.8x\00"
@.str.3 = [17 x i8] c"LDRB\09r%d, %.8x\00"
@.str.4 = [31 x i8] c"LDRBT\09r%d, [r%d, #%d]\09; %.2x\00"
@.str.5 = [2 x i8] c"W\00"
@.str.6 = [26 x i8] c"PLD%s\09[r%d, #%d]\09; %.6x\00"
@.str.7 = [5 x i8] c"LDRB\00"
@.str.8 = [3 x i8] c"]!\00"
@.str.9 = [31 x i8] c"%s\09r%d, [r%d%s, #%d%s\09; %.8x\00"
@.str.10 = [5 x i8] c"PLD\09\00"
@.str.11 = [13 x i8] c"LDRB.W\09r%d, \00"
@.str.12 = [20 x i8] c"[r%d, r%d, LSL #%d]\00"
@.str.13 = [7 x i8] c"LDRB.W\00"
@.str.14 = [11 x i8] c"PLI\09%.8x\00"
@.str.15 = [13 x i8] c"LDRSB\09%.8x\00"
@.str.16 = [32 x i8] c"LDRSBT\09r%d, [r%d, #%d]\09; %.2x\00"
@.str.17 = [25 x i8] c"PLI\09[r%d, #%d]\09; -%.2x\00"
@.str.18 = [6 x i8] c"LDRSB\00"
@.str.19 = [5 x i8] c"PLI\09\00"
@.str.20 = [14 x i8] c"LDRSB.W\09r%d, \00"
@.str.21 = [24 x i8] c"PLI\09[r%d, #%d]\09; %.3x\00"
define i32 @t2ev_load_byte_hints(i32 %0, i32 %1, %struct.arm_instruction* nocapture readnone %2, i8* nocapture %3) {
%5 = lshr i32 %0, 16
%6 = and i32 %5, 15
%7 = lshr i32 %0, 12
%8 = and i32 %7, 15
%9 = lshr i32 %0, 6
%10 = and i32 %9, 63
%11 = lshr i32 %0, 23
%12 = and i32 %11, 3
switch i32 %12, label %166 [
i32 0, label %13
i32 1, label %92
i32 2, label %103
i32 3, label %157
]
13: ; preds = %4
%14 = and i32 %8, %5
%15 = icmp eq i32 %14, 15
br i1 %15, label %16, label %25
16: ; preds = %92, %13
%17 = and i32 %0, 4095
%18 = tail call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %1)
%19 = and i32 %0, 8388608
%20 = icmp eq i32 %19, 0
%21 = sub nsw i32 0, %17
%22 = select i1 %20, i32 %21, i32 %17
%23 = add i32 %18, %22
%24 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.2, i64 0, i64 0), i32 %8, i32 %23)
br label %167
25: ; preds = %13
%26 = icmp eq i32 %6, 15
%27 = icmp ne i32 %8, 15
%28 = and i1 %26, %27
br i1 %28, label %29, label %38
29: ; preds = %99, %25
%30 = and i32 %0, 4095
%31 = tail call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %1)
%32 = and i32 %0, 8388608
%33 = icmp eq i32 %32, 0
%34 = sub nsw i32 0, %30
%35 = select i1 %33, i32 %34, i32 %30
%36 = add i32 %31, %35
%37 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i64 0, i64 0), i32 %8, i32 %36)
br label %167
38: ; preds = %25
br i1 %26, label %167, label %39
39: ; preds = %38
%40 = and i32 %9, 60
switch i32 %40, label %75 [
i32 56, label %41
i32 48, label %44
]
41: ; preds = %39
%42 = and i32 %0, 255
%43 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.4, i64 0, i64 0), i32 %8, i32 %6, i32 %42, i32 %42)
br label %167
44: ; preds = %39
%45 = icmp eq i32 %8, 15
br i1 %45, label %46, label %55
46: ; preds = %44
%47 = and i32 %0, 255
%48 = sub nsw i32 0, %47
br label %49
49: ; preds = %97, %46
%50 = phi i32 [ %98, %97 ], [ %48, %46 ]
%51 = and i32 %0, 2097152
%52 = icmp eq i32 %51, 0
%53 = select i1 %52, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0)
%54 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.6, i64 0, i64 0), i8* %53, i32 %6, i32 %50, i32 %50)
br label %167
55: ; preds = %140, %134, %75, %44
%56 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), %44 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), %75 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), %134 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), %140 ]
%57 = and i32 %0, 255
%58 = and i32 %0, 512
%59 = icmp eq i32 %58, 0
%60 = sub nsw i32 0, %57
%61 = select i1 %59, i32 %60, i32 %57
%62 = and i32 %0, 256
%63 = icmp eq i32 %62, 0
br i1 %63, label %69, label %64
64: ; preds = %55
%65 = and i32 %0, 1024
%66 = icmp eq i32 %65, 0
%67 = select i1 %66, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)
%68 = select i1 %66, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0)
br label %69
69: ; preds = %64, %55, %164, %101
%70 = phi i32 [ %165, %164 ], [ %61, %55 ], [ %102, %101 ], [ %61, %64 ]
%71 = phi i8* [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), %164 ], [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), %55 ], [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), %101 ], [ %67, %64 ]
%72 = phi i8* [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %164 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %55 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %101 ], [ %68, %64 ]
%73 = phi i8* [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), %164 ], [ %56, %55 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.13, i64 0, i64 0), %101 ], [ %56, %64 ]
%74 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i8* %73, i32 %8, i32 %6, i8* %71, i32 %70, i8* %72, i32 %70)
br label %167
75: ; preds = %39
%76 = and i32 %0, 2304
%77 = icmp eq i32 %76, 2304
br i1 %77, label %55, label %78
78: ; preds = %75
%79 = icmp eq i32 %10, 0
br i1 %79, label %80, label %167
80: ; preds = %78
%81 = and i32 %0, 15
%82 = icmp eq i32 %8, 15
br i1 %82, label %83, label %84
83: ; preds = %80
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 dereferenceable(5) %3, i8* align 1 dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i64 5, i1 false)
br label %86
84: ; preds = %80
%85 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), i32 %8)
br label %86
86: ; preds = %84, %83
%87 = lshr i32 %0, 4
%88 = and i32 %87, 3
%89 = tail call i64 @strlen(i8* dereferenceable(1) %3)
%90 = getelementptr i8, i8* %3, i64 %89
%91 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %90, i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.12, i64 0, i64 0), i32 %6, i32 %81, i32 %88)
br label %167
92: ; preds = %4
%93 = and i32 %8, %5
%94 = icmp eq i32 %93, 15
br i1 %94, label %16, label %95
95: ; preds = %92
%96 = icmp eq i32 %8, 15
br i1 %96, label %97, label %99
97: ; preds = %95
%98 = and i32 %0, 4095
br label %49
99: ; preds = %95
%100 = icmp eq i32 %6, 15
br i1 %100, label %29, label %101
101: ; preds = %99
%102 = and i32 %0, 4095
br label %69
103: ; preds = %4
%104 = and i32 %8, %5
%105 = icmp eq i32 %104, 15
br i1 %105, label %106, label %115
106: ; preds = %103
%107 = and i32 %0, 4095
%108 = tail call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %1)
%109 = and i32 %0, 8388608
%110 = icmp eq i32 %109, 0
%111 = sub nsw i32 0, %107
%112 = select i1 %110, i32 %111, i32 %107
%113 = add i32 %108, %112
%114 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), i32 %113)
br label %167
115: ; preds = %103
%116 = icmp eq i32 %6, 15
%117 = icmp ne i32 %8, 15
%118 = and i1 %116, %117
br i1 %118, label %119, label %128
119: ; preds = %162, %115
%120 = and i32 %0, 4095
%121 = tail call i32 (i32, ...) bitcast (i32 (...)* @thumb_alignpc4 to i32 (i32, ...)*)(i32 %1)
%122 = and i32 %0, 8388608
%123 = icmp eq i32 %122, 0
%124 = sub nsw i32 0, %120
%125 = select i1 %123, i32 %124, i32 %120
%126 = add i32 %121, %125
%127 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i64 0, i64 0), i32 %126)
br label %167
128: ; preds = %115
br i1 %116, label %167, label %129
129: ; preds = %128
%130 = and i32 %9, 60
switch i32 %130, label %140 [
i32 56, label %131
i32 48, label %134
]
131: ; preds = %129
%132 = and i32 %0, 255
%133 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.16, i64 0, i64 0), i32 %8, i32 %6, i32 %132, i32 %132)
br label %167
134: ; preds = %129
%135 = icmp eq i32 %8, 15
br i1 %135, label %136, label %55
136: ; preds = %134
%137 = and i32 %0, 255
%138 = sub nsw i32 0, %137
%139 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.17, i64 0, i64 0), i32 %6, i32 %138, i32 %137)
br label %167
140: ; preds = %129
%141 = and i32 %0, 2304
%142 = icmp eq i32 %141, 2304
br i1 %142, label %55, label %143
143: ; preds = %140
%144 = icmp eq i32 %10, 0
br i1 %144, label %145, label %167
145: ; preds = %143
%146 = and i32 %0, 15
%147 = icmp eq i32 %8, 15
br i1 %147, label %148, label %149
148: ; preds = %145
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 dereferenceable(5) %3, i8* align 1 dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0), i64 5, i1 false)
br label %151
149: ; preds = %145
%150 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.20, i64 0, i64 0), i32 %8)
br label %151
151: ; preds = %149, %148
%152 = lshr i32 %0, 4
%153 = and i32 %152, 3
%154 = tail call i64 @strlen(i8* dereferenceable(1) %3)
%155 = getelementptr i8, i8* %3, i64 %154
%156 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %155, i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.12, i64 0, i64 0), i32 %6, i32 %146, i32 %153)
br label %167
157: ; preds = %4
%158 = icmp eq i32 %8, 15
br i1 %158, label %159, label %162
159: ; preds = %157
%160 = and i32 %0, 4095
%161 = tail call i32 (i8*, i8*, ...) @sprintf(i8* dereferenceable(1) %3, i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.21, i64 0, i64 0), i32 %6, i32 %160, i32 %160)
br label %167
162: ; preds = %157
%163 = icmp eq i32 %6, 15
br i1 %163, label %119, label %164
164: ; preds = %162
%165 = and i32 %0, 4095
br label %69
166: ; preds = %4
unreachable
167: ; preds = %38, %78, %128, %143, %159, %151, %136, %131, %119, %106, %86, %69, %49, %41, %29, %16
%168 = phi i32 [ 0, %159 ], [ 0, %119 ], [ 0, %69 ], [ 0, %106 ], [ 0, %131 ], [ 0, %136 ], [ 0, %151 ], [ 0, %16 ], [ 0, %49 ], [ 0, %29 ], [ 0, %41 ], [ 0, %86 ], [ -1, %143 ], [ -1, %128 ], [ -1, %78 ], [ -1, %38 ]
ret i32 %168
}