#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 */
char *litfmt(int);
int /*<<< orphan*/ printf(char *, ...);
void print_opcode(int addr, int cmd) {
  char *m;
  int arg;
  printf("%04x: %02x %02x\t", addr, cmd >> 8 & 0xff, cmd & 0xff);
  switch (cmd) {
  case 0x0000:
    printf("nop");
    goto done;
  case 0x0001:
    printf("reset");
    goto done;
  case 0x0008:
    printf("return");
    goto done;
  case 0x0009:
    printf("retfie");
    goto done;
  case 0x000a:
    printf("callw");
    goto done;
  case 0x000b:
    printf("brw");
    goto done;
  case 0x0010:
    printf("moviw\t++fsr0");
    goto done;
  case 0x0011:
    printf("moviw\t--fsr0");
    goto done;
  case 0x0012:
    printf("moviw\tfsr0++");
    goto done;
  case 0x0013:
    printf("moviw\tfsr0--");
    goto done;
  case 0x0014:
    printf("moviw\t++fsr1");
    goto done;
  case 0x0015:
    printf("moviw\t--fsr1");
    goto done;
  case 0x0016:
    printf("moviw\tfsr1++");
    goto done;
  case 0x0017:
    printf("moviw\tfsr1--");
    goto done;
  case 0x0060:
    printf("reset");
    goto done;
  case 0x0062:
    printf("option");
    goto done;
  case 0x0063:
    printf("sleep");
    goto done;
  case 0x0064:
    printf("clrwdt");
    goto done;
  case 0x0065:
    printf("tris\t5");
    goto done;
  case 0x0066:
    printf("tris\t6");
    goto done;
  case 0x0067:
    printf("tris\t7");
    goto done;
  case 0x0100:
  case 0x0101:
  case 0x0102:
  case 0x0103:
    printf("clrw");
    goto done;
  }
  switch (cmd >> 8) {
  case 0x00:
    if (cmd & 0x80) {
      m = "movwf";
      goto fop;
    }
    if ((cmd & 0xe0) == 0x20) {
      printf("movlb\t%s", litfmt(cmd & 0x1f));
      break;
    }
    goto unknown;
  case 0x01:
    m = "clrf";
    goto fop;
  case 0x02:
    m = "subwf";
    goto fop;
  case 0x03:
    m = "decf";
    goto fop;
  case 0x04:
    m = "iorwf";
    goto fop;
  case 0x05:
    m = "andwf";
    goto fop;
  case 0x06:
    m = "xorwf";
    goto fop;
  case 0x07:
    m = "addwf";
    goto fop;
  case 0x08:
    m = "movf";
    goto fop;
  case 0x09:
    m = "comf";
    goto fop;
  case 0x0a:
    m = "incf";
    goto fop;
  case 0x0b:
    m = "decfsz";
    goto fop;
  case 0x0c:
    m = "rrf";
    goto fop;
  case 0x0d:
    m = "rlf";
    goto fop;
  case 0x0e:
    m = "swapf";
    goto fop;
  case 0x0f:
    m = "incfsz";
    goto fop;
  case 0x35:
    m = "lslf";
    goto fop;
  case 0x36:
    m = "lsrf";
    goto fop;
  case 0x37:
    m = "asrf";
    goto fop;
  case 0x3b:
    m = "subwfb";
    goto fop;
  case 0x3d:
    m = "addwfc";
    goto fop;
  fop:
    printf("%s\t%s", m, litfmt(cmd & 0x7f));
    if (!(cmd & 0x80))
      printf(", w");
    break;
  case 0x10:
  case 0x11:
  case 0x12:
  case 0x13:
    m = "bcf ";
    goto bitop;
  case 0x14:
  case 0x15:
  case 0x16:
  case 0x17:
    m = "bsf ";
    goto bitop;
  case 0x18:
  case 0x19:
  case 0x1a:
  case 0x1b:
    m = "btfsc";
    goto bitop;
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
    m = "btfss";
    goto bitop;
  bitop:
    printf("%s\t%s, %d", m, litfmt(cmd & 0x7f), (cmd >> 7) & 7);
    break;
  case 0x20:
  case 0x21:
  case 0x22:
  case 0x23:
  case 0x24:
  case 0x25:
  case 0x26:
  case 0x27:
    m = "call";
    goto gotoop;
  case 0x28:
  case 0x29:
  case 0x2a:
  case 0x2b:
  case 0x2c:
  case 0x2d:
  case 0x2e:
  case 0x2f:
    m = "goto";
    goto gotoop;
  gotoop:
    printf("%s\t%s", m, litfmt(cmd & 0x7ff));
    break;
  case 0x32:
  case 0x33:
    arg = (short)(cmd << 7) >> 7;
    if (arg >= 0)
      printf("bra\t$+%s", litfmt(arg));
    else
      printf("bra\t$-%s", litfmt(-arg));
    break;
  case 0x30:
    m = "movlw";
    goto kop;
  case 0x34:
    m = "retlw";
    goto kop;
  case 0x38:
    m = "iorlw";
    goto kop;
  case 0x39:
    m = "andlw";
    goto kop;
  case 0x3a:
    m = "xorlw";
    goto kop;
  case 0x3c:
    m = "sublw";
    goto kop;
  case 0x3e:
    m = "addlw";
    goto kop;
  kop:
    printf("%s\t%s", m, litfmt(cmd & 0xff));
    break;
  case 0x31:
    if (cmd & 0x80) {
      printf("movlp\t%s", litfmt(cmd & 0x7f));
    } else {
      printf("addfsr\tfsr%d, %s", (cmd >> 6) & 1, litfmt(cmd & 0x3f));
    }
    break;
  case 0x3f:
    if (cmd & 0x80) {
      printf("movwi\t%s[fsr%d]", litfmt(cmd & 0x3f), (cmd >> 6) & 1);
    } else {
      printf("moviw\t%s[fsr%d]", litfmt(cmd & 0x3f), (cmd >> 6) & 1);
    }
    break;
  default:
  unknown:
    printf("?");
    break;
  }
done:
  printf("\n");
}


x86 assembly (clang, -O0):
<print_opcode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%eax
mov    %ah,%cl
movzbl %cl,%edx
movzbl %al,%ecx
lea    0xfbd(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
test   %eax,%eax
je     12c7 <print_opcode+0x1a7>
jmp    115d <print_opcode+0x3d>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
je     12da <print_opcode+0x1ba>
jmp    116e <print_opcode+0x4e>
mov    -0x18(%rbp),%eax
sub    $0x8,%eax
je     12ed <print_opcode+0x1cd>
jmp    117f <print_opcode+0x5f>
mov    -0x18(%rbp),%eax
sub    $0x9,%eax
je     1300 <print_opcode+0x1e0>
jmp    1190 <print_opcode+0x70>
mov    -0x18(%rbp),%eax
sub    $0xa,%eax
je     1313 <print_opcode+0x1f3>
jmp    11a1 <print_opcode+0x81>
mov    -0x18(%rbp),%eax
sub    $0xb,%eax
je     1326 <print_opcode+0x206>
jmp    11b2 <print_opcode+0x92>
mov    -0x18(%rbp),%eax
sub    $0x10,%eax
je     1339 <print_opcode+0x219>
jmp    11c3 <print_opcode+0xa3>
mov    -0x18(%rbp),%eax
sub    $0x11,%eax
je     134c <print_opcode+0x22c>
jmp    11d4 <print_opcode+0xb4>
mov    -0x18(%rbp),%eax
sub    $0x12,%eax
je     135f <print_opcode+0x23f>
jmp    11e5 <print_opcode+0xc5>
mov    -0x18(%rbp),%eax
sub    $0x13,%eax
je     1372 <print_opcode+0x252>
jmp    11f6 <print_opcode+0xd6>
mov    -0x18(%rbp),%eax
sub    $0x14,%eax
je     1385 <print_opcode+0x265>
jmp    1207 <print_opcode+0xe7>
mov    -0x18(%rbp),%eax
sub    $0x15,%eax
je     1398 <print_opcode+0x278>
jmp    1218 <print_opcode+0xf8>
mov    -0x18(%rbp),%eax
sub    $0x16,%eax
je     13ab <print_opcode+0x28b>
jmp    1229 <print_opcode+0x109>
mov    -0x18(%rbp),%eax
sub    $0x17,%eax
je     13be <print_opcode+0x29e>
jmp    123a <print_opcode+0x11a>
mov    -0x18(%rbp),%eax
sub    $0x60,%eax
je     13d1 <print_opcode+0x2b1>
jmp    124b <print_opcode+0x12b>
mov    -0x18(%rbp),%eax
sub    $0x62,%eax
je     13e4 <print_opcode+0x2c4>
jmp    125c <print_opcode+0x13c>
mov    -0x18(%rbp),%eax
sub    $0x63,%eax
je     13f7 <print_opcode+0x2d7>
jmp    126d <print_opcode+0x14d>
mov    -0x18(%rbp),%eax
sub    $0x64,%eax
je     140a <print_opcode+0x2ea>
jmp    127e <print_opcode+0x15e>
mov    -0x18(%rbp),%eax
sub    $0x65,%eax
je     141d <print_opcode+0x2fd>
jmp    128f <print_opcode+0x16f>
mov    -0x18(%rbp),%eax
sub    $0x66,%eax
je     1430 <print_opcode+0x310>
jmp    12a0 <print_opcode+0x180>
mov    -0x18(%rbp),%eax
sub    $0x67,%eax
je     1443 <print_opcode+0x323>
jmp    12b1 <print_opcode+0x191>
mov    -0x18(%rbp),%eax
add    $0xffffff00,%eax
sub    $0x4,%eax
jb     1456 <print_opcode+0x336>
jmp    1469 <print_opcode+0x349>
lea    0xe43(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xe34(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xe27(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xe1b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xe0f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xe02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xdf3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xded(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xde7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xde1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xddb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xdd5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xdcf(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xdc9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd3d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xdb0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xda4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd97(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd8b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd7f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd73(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0xd67(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
mov    -0x8(%rbp),%eax
sar    $0x8,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0x3f,%eax
ja     18e4 <print_opcode+0x7c4>
mov    -0x20(%rbp),%rax
lea    0xb77(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     14b3 <print_opcode+0x393>
lea    0xd1f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
mov    -0x8(%rbp),%eax
and    $0xe0,%eax
cmp    $0x20,%eax
jne    14e5 <print_opcode+0x3c5>
mov    -0x8(%rbp),%edi
and    $0x1f,%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
lea    0xcf6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
jmp    18e9 <print_opcode+0x7c9>
lea    0xce7(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xcdc(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xcd2(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xcc7(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xcbd(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xcb3(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xca9(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc9f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc94(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc89(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc7e(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc75(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc69(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc5d(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc53(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc4a(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc3f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc34(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc29(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1625 <print_opcode+0x505>
lea    0xc20(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%edi
and    $0x7f,%edi
call   1030 <litfmt@plt>
mov    -0x28(%rbp),%rsi
mov    %rax,%rdx
lea    0xc02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
jne    166c <print_opcode+0x54c>
lea    0xbe9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
lea    0xbda(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    16ac <print_opcode+0x58c>
lea    0xbcf(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    16ac <print_opcode+0x58c>
lea    0xbc4(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    16ac <print_opcode+0x58c>
lea    0xbba(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%edi
and    $0x7f,%edi
call   1030 <litfmt@plt>
mov    -0x30(%rbp),%rsi
mov    %rax,%rdx
mov    -0x8(%rbp),%ecx
sar    $0x7,%ecx
and    $0x7,%ecx
lea    0xb92(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
lea    0xb89(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    16fd <print_opcode+0x5dd>
lea    0xb7e(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%edi
and    $0x7ff,%edi
call   1030 <litfmt@plt>
mov    -0x38(%rbp),%rsi
mov    %rax,%rdx
lea    0xb27(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
mov    -0x8(%rbp),%eax
shl    $0x7,%eax
cwtl
sar    $0x7,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     1762 <print_opcode+0x642>
mov    -0x14(%rbp),%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
lea    0xb26(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    177d <print_opcode+0x65d>
xor    %edi,%edi
sub    -0x14(%rbp),%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
lea    0xb0f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
lea    0xb05(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xafb(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xaf1(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xae7(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xadd(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xad3(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    17ed <print_opcode+0x6cd>
lea    0xac9(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%edi
and    $0xff,%edi
call   1030 <litfmt@plt>
mov    -0x40(%rbp),%rsi
mov    %rax,%rdx
lea    0xa37(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
mov    -0x8(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     184f <print_opcode+0x72f>
mov    -0x8(%rbp),%edi
and    $0x7f,%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
lea    0xa75(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    187a <print_opcode+0x75a>
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
and    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%edi
and    $0x3f,%edi
call   1030 <litfmt@plt>
mov    -0x44(%rbp),%esi
mov    %rax,%rdx
lea    0xa4e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
mov    -0x8(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     18ba <print_opcode+0x79a>
mov    -0x8(%rbp),%edi
and    $0x3f,%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
mov    -0x8(%rbp),%edx
sar    $0x6,%edx
and    $0x1,%edx
lea    0xa24(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18df <print_opcode+0x7bf>
mov    -0x8(%rbp),%edi
and    $0x3f,%edi
call   1030 <litfmt@plt>
mov    %rax,%rsi
mov    -0x8(%rbp),%edx
sar    $0x6,%edx
and    $0x1,%edx
lea    0xa0a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18f7 <print_opcode+0x7d7>
jmp    18e9 <print_opcode+0x7c9>
lea    0xa02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    18fc <print_opcode+0x7dc>
lea    0x9f1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_opcode>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %esi,%ebx
mov    %edi,%esi
mov    %ebx,%r14d
sar    $0x8,%r14d
movzbl %r14b,%edx
movzbl %bl,%ebp
lea    0x114c(%rip),%rdi
mov    %ebp,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
cmp    $0x67,%ebx
ja     1180 <print_opcode+0x50>
mov    %ebx,%eax
lea    0xe95(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x113a(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    -0x100(%rbx),%eax
cmp    $0x4,%eax
jae    1197 <print_opcode+0x67>
lea    0x11d2(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
cmp    $0x3f,%r14d
ja     1461 <print_opcode+0x331>
lea    0x1286(%rip),%r15
lea    0x1263(%rip),%r13
lea    0x123c(%rip),%r12
lea    0x11bb(%rip),%rdx
mov    %r14d,%eax
lea    0xfd9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x1240(%rip),%r13
and    $0x7ff,%ebx
mov    %ebx,%edi
call   1040 <litfmt@plt>
lea    0x11fd(%rip),%rdi
mov    %r13,%rsi
jmp    14fd <print_opcode+0x3cd>
lea    0x10b7(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b5(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b0(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10ab(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10a5(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10a0(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10a4(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10a8(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10ac(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b0(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b4(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b8(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10bc(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10c0(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10be(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10bb(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b9(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b7(%rip),%rdi
jmp    12a8 <print_opcode+0x178>
lea    0x10b5(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <putchar@plt>
lea    0x1134(%rip),%r12
jmp    12e0 <print_opcode+0x1b0>
lea    0x1120(%rip),%r12
jmp    12e0 <print_opcode+0x1b0>
lea    0x111c(%rip),%r12
mov    %ebx,%edi
and    $0x7f,%edi
call   1040 <litfmt@plt>
shr    $0x7,%ebx
and    $0x7,%ebx
lea    0x1111(%rip),%rdi
mov    %r12,%rsi
mov    %rax,%rdx
mov    %ebx,%ecx
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12af <print_opcode+0x17f>
shl    $0x17,%ebx
mov    %ebx,%edi
sar    $0x17,%edi
cmp    $0xff800001,%ebx
jl     1423 <print_opcode+0x2f3>
call   1040 <litfmt@plt>
lea    0x10f4(%rip),%rdi
jmp    151d <print_opcode+0x3ed>
lea    0x1049(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x1043(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x103c(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x1042(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x1041(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x103f(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x103a(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x1036(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x1030(%rip),%rdx
jmp    1549 <print_opcode+0x419>
test   $0x80,%bl
jne    150c <print_opcode+0x3dc>
mov    %ebx,%ebp
shr    $0x6,%ebp
and    $0x1,%ebp
and    $0x3f,%ebx
mov    %ebx,%edi
call   1040 <litfmt@plt>
lea    0x10a6(%rip),%rdi
mov    %ebp,%esi
mov    %rax,%rdx
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12af <print_opcode+0x17f>
lea    0xff8(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0x105b(%rip),%r15
jmp    14ec <print_opcode+0x3bc>
lea    0x105b(%rip),%r15
jmp    14ec <print_opcode+0x3bc>
lea    0x1055(%rip),%r15
jmp    14ec <print_opcode+0x3bc>
mov    %ebx,%edi
and    $0x3f,%edi
call   1040 <litfmt@plt>
mov    %ebx,%edx
shr    $0x6,%edx
and    $0x1,%edx
test   $0x80,%bl
jne    152c <print_opcode+0x3fc>
lea    0x1064(%rip),%rdi
jmp    1533 <print_opcode+0x403>
neg    %edi
call   1040 <litfmt@plt>
lea    0xff4(%rip),%rdi
jmp    151d <print_opcode+0x3ed>
test   $0x80,%bl
jne    1542 <print_opcode+0x412>
mov    %ebx,%eax
and    $0xe0,%eax
cmp    $0x20,%eax
jne    1461 <print_opcode+0x331>
and    $0x1f,%ebx
mov    %ebx,%edi
call   1040 <litfmt@plt>
lea    0xf13(%rip),%rdi
jmp    151d <print_opcode+0x3ed>
mov    $0x3f,%edi
call   1030 <putchar@plt>
jmp    12af <print_opcode+0x17f>
lea    0xf17(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf11(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf11(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf0f(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf13(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf81(%rip),%r15
jmp    14ec <print_opcode+0x3bc>
lea    0xf14(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf0d(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf6f(%rip),%r15
jmp    14ec <print_opcode+0x3bc>
lea    0xf00(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xefe(%rip),%rdx
jmp    1549 <print_opcode+0x419>
lea    0xf66(%rip),%r15
mov    %ebp,%edi
call   1040 <litfmt@plt>
lea    0xeee(%rip),%rdi
mov    %r15,%rsi
mov    %rax,%rdx
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12af <print_opcode+0x17f>
and    $0x7f,%ebx
mov    %ebx,%edi
call   1040 <litfmt@plt>
lea    0xf3b(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12af <print_opcode+0x17f>
lea    0xf3f(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    12af <print_opcode+0x17f>
lea    0xe20(%rip),%rdx
mov    %ebx,%edi
and    $0x7f,%edi
mov    %rdx,%rbp
call   1040 <litfmt@plt>
lea    0xe8b(%rip),%rdi
mov    %rbp,%rsi
mov    %rax,%rdx
xor    %eax,%eax
call   1050 <printf@plt>
test   $0x80,%bl
jne    12af <print_opcode+0x17f>
lea    0xe74(%rip),%rdi
jmp    12a8 <print_opcode+0x178>

LLVM IR (-O0):
@.str = [17 x i8] c"%04x: %02x %02x\09\00"
@.str.1 = [4 x i8] c"nop\00"
@.str.2 = [6 x i8] c"reset\00"
@.str.3 = [7 x i8] c"return\00"
@.str.4 = [7 x i8] c"retfie\00"
@.str.5 = [6 x i8] c"callw\00"
@.str.6 = [4 x i8] c"brw\00"
@.str.7 = [13 x i8] c"moviw\09++fsr0\00"
@.str.8 = [13 x i8] c"moviw\09--fsr0\00"
@.str.9 = [13 x i8] c"moviw\09fsr0++\00"
@.str.10 = [13 x i8] c"moviw\09fsr0--\00"
@.str.11 = [13 x i8] c"moviw\09++fsr1\00"
@.str.12 = [13 x i8] c"moviw\09--fsr1\00"
@.str.13 = [13 x i8] c"moviw\09fsr1++\00"
@.str.14 = [13 x i8] c"moviw\09fsr1--\00"
@.str.15 = [7 x i8] c"option\00"
@.str.16 = [6 x i8] c"sleep\00"
@.str.17 = [7 x i8] c"clrwdt\00"
@.str.18 = [7 x i8] c"tris\095\00"
@.str.19 = [7 x i8] c"tris\096\00"
@.str.20 = [7 x i8] c"tris\097\00"
@.str.21 = [5 x i8] c"clrw\00"
@.str.22 = [6 x i8] c"movwf\00"
@.str.23 = [9 x i8] c"movlb\09%s\00"
@.str.24 = [5 x i8] c"clrf\00"
@.str.25 = [6 x i8] c"subwf\00"
@.str.26 = [5 x i8] c"decf\00"
@.str.27 = [6 x i8] c"iorwf\00"
@.str.28 = [6 x i8] c"andwf\00"
@.str.29 = [6 x i8] c"xorwf\00"
@.str.30 = [6 x i8] c"addwf\00"
@.str.31 = [5 x i8] c"movf\00"
@.str.32 = [5 x i8] c"comf\00"
@.str.33 = [5 x i8] c"incf\00"
@.str.34 = [7 x i8] c"decfsz\00"
@.str.35 = [4 x i8] c"rrf\00"
@.str.36 = [4 x i8] c"rlf\00"
@.str.37 = [6 x i8] c"swapf\00"
@.str.38 = [7 x i8] c"incfsz\00"
@.str.39 = [5 x i8] c"lslf\00"
@.str.40 = [5 x i8] c"lsrf\00"
@.str.41 = [5 x i8] c"asrf\00"
@.str.42 = [7 x i8] c"subwfb\00"
@.str.43 = [7 x i8] c"addwfc\00"
@.str.44 = [6 x i8] c"%s\09%s\00"
@.str.45 = [4 x i8] c", w\00"
@.str.46 = [5 x i8] c"bcf \00"
@.str.47 = [5 x i8] c"bsf \00"
@.str.48 = [6 x i8] c"btfsc\00"
@.str.49 = [6 x i8] c"btfss\00"
@.str.50 = [10 x i8] c"%s\09%s, %d\00"
@.str.51 = [5 x i8] c"call\00"
@.str.52 = [5 x i8] c"goto\00"
@.str.53 = [9 x i8] c"bra\09$+%s\00"
@.str.54 = [9 x i8] c"bra\09$-%s\00"
@.str.55 = [6 x i8] c"movlw\00"
@.str.56 = [6 x i8] c"retlw\00"
@.str.57 = [6 x i8] c"iorlw\00"
@.str.58 = [6 x i8] c"andlw\00"
@.str.59 = [6 x i8] c"xorlw\00"
@.str.60 = [6 x i8] c"sublw\00"
@.str.61 = [6 x i8] c"addlw\00"
@.str.62 = [9 x i8] c"movlp\09%s\00"
@.str.63 = [17 x i8] c"addfsr\09fsr%d, %s\00"
@.str.64 = [16 x i8] c"movwi\09%s[fsr%d]\00"
@.str.65 = [16 x i8] c"moviw\09%s[fsr%d]\00"
@.str.66 = [2 x i8] c"?\00"
@.str.67 = [2 x i8] c"\0A\00"
define void @print_opcode(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%7 = load i32, i32* %3
%8 = load i32, i32* %4
%9 = ashr i32 %8, 8
%10 = and i32 %9, 255
%11 = load i32, i32* %4
%12 = and i32 %11, 255
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 %7, i32 %10, i32 %12)
%14 = load i32, i32* %4
switch i32 %14, label %59 [
i32 0, label %15
i32 1, label %17
i32 8, label %19
i32 9, label %21
i32 10, label %23
i32 11, label %25
i32 16, label %27
i32 17, label %29
i32 18, label %31
i32 19, label %33
i32 20, label %35
i32 21, label %37
i32 22, label %39
i32 23, label %41
i32 96, label %43
i32 98, label %45
i32 99, label %47
i32 100, label %49
i32 101, label %51
i32 102, label %53
i32 103, label %55
i32 256, label %57
i32 257, label %57
i32 258, label %57
i32 259, label %57
]
15: ; preds = %2
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %204
17: ; preds = %2
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
br label %204
19: ; preds = %2
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0))
br label %204
21: ; preds = %2
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
br label %204
23: ; preds = %2
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
br label %204
25: ; preds = %2
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
br label %204
27: ; preds = %2
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i64 0, i64 0))
br label %204
29: ; preds = %2
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0))
br label %204
31: ; preds = %2
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
br label %204
33: ; preds = %2
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0))
br label %204
35: ; preds = %2
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
br label %204
37: ; preds = %2
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i64 0, i64 0))
br label %204
39: ; preds = %2
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0))
br label %204
41: ; preds = %2
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.14, i64 0, i64 0))
br label %204
43: ; preds = %2
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
br label %204
45: ; preds = %2
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0))
br label %204
47: ; preds = %2
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
br label %204
49: ; preds = %2
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0))
br label %204
51: ; preds = %2
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
br label %204
53: ; preds = %2
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
br label %204
55: ; preds = %2
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0))
br label %204
57: ; preds = %2, %2, %2, %2
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.21, i64 0, i64 0))
br label %204
59: ; preds = %2
%60 = load i32, i32* %4
%61 = ashr i32 %60, 8
switch i32 %61, label %200 [
i32 0, label %62
i32 1, label %77
i32 2, label %78
i32 3, label %79
i32 4, label %80
i32 5, label %81
i32 6, label %82
i32 7, label %83
i32 8, label %84
i32 9, label %85
i32 10, label %86
i32 11, label %87
i32 12, label %88
i32 13, label %89
i32 14, label %90
i32 15, label %91
i32 53, label %92
i32 54, label %93
i32 55, label %94
i32 59, label %95
i32 61, label %96
i32 16, label %109
i32 17, label %109
i32 18, label %109
i32 19, label %109
i32 20, label %110
i32 21, label %110
i32 22, label %110
i32 23, label %110
i32 24, label %111
i32 25, label %111
i32 26, label %111
i32 27, label %111
i32 28, label %112
i32 29, label %112
i32 30, label %112
i32 31, label %112
i32 32, label %122
i32 33, label %122
i32 34, label %122
i32 35, label %122
i32 36, label %122
i32 37, label %122
i32 38, label %122
i32 39, label %122
i32 40, label %123
i32 41, label %123
i32 42, label %123
i32 43, label %123
i32 44, label %123
i32 45, label %123
i32 46, label %123
i32 47, label %123
i32 50, label %130
i32 51, label %130
i32 48, label %148
i32 52, label %149
i32 56, label %150
i32 57, label %151
i32 58, label %152
i32 60, label %153
i32 62, label %154
i32 49, label %161
i32 63, label %179
]
62: ; preds = %59
%63 = load i32, i32* %4
%64 = and i32 %63, 128
%65 = icmp ne i32 %64, 0
br i1 %65, label %66, label %67
66: ; preds = %62
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0), i8** %5
br label %97
67: ; preds = %62
%68 = load i32, i32* %4
%69 = and i32 %68, 224
%70 = icmp eq i32 %69, 32
br i1 %70, label %71, label %76
71: ; preds = %67
%72 = load i32, i32* %4
%73 = and i32 %72, 31
%74 = call i8* @litfmt(i32 %73)
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.23, i64 0, i64 0), i8* %74)
br label %203
76: ; preds = %67
br label %201
77: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.24, i64 0, i64 0), i8** %5
br label %97
78: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.25, i64 0, i64 0), i8** %5
br label %97
79: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %5
br label %97
80: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.27, i64 0, i64 0), i8** %5
br label %97
81: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.28, i64 0, i64 0), i8** %5
br label %97
82: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.29, i64 0, i64 0), i8** %5
br label %97
83: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.30, i64 0, i64 0), i8** %5
br label %97
84: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.31, i64 0, i64 0), i8** %5
br label %97
85: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.32, i64 0, i64 0), i8** %5
br label %97
86: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i8** %5
br label %97
87: ; preds = %59
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.34, i64 0, i64 0), i8** %5
br label %97
88: ; preds = %59
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0), i8** %5
br label %97
89: ; preds = %59
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0), i8** %5
br label %97
90: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.37, i64 0, i64 0), i8** %5
br label %97
91: ; preds = %59
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.38, i64 0, i64 0), i8** %5
br label %97
92: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.39, i64 0, i64 0), i8** %5
br label %97
93: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.40, i64 0, i64 0), i8** %5
br label %97
94: ; preds = %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i8** %5
br label %97
95: ; preds = %59
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.42, i64 0, i64 0), i8** %5
br label %97
96: ; preds = %59
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.43, i64 0, i64 0), i8** %5
br label %97
97: ; preds = %96, %95, %94, %93, %92, %91, %90, %89, %88, %87, %86, %85, %84, %83, %82, %81, %80, %79, %78, %77, %66
%98 = load i8*, i8** %5
%99 = load i32, i32* %4
%100 = and i32 %99, 127
%101 = call i8* @litfmt(i32 %100)
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %98, i8* %101)
%103 = load i32, i32* %4
%104 = and i32 %103, 128
%105 = icmp ne i32 %104, 0
br i1 %105, label %108, label %106
106: ; preds = %97
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0))
br label %108
108: ; preds = %106, %97
br label %203
109: ; preds = %59, %59, %59, %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.46, i64 0, i64 0), i8** %5
br label %113
110: ; preds = %59, %59, %59, %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.47, i64 0, i64 0), i8** %5
br label %113
111: ; preds = %59, %59, %59, %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.48, i64 0, i64 0), i8** %5
br label %113
112: ; preds = %59, %59, %59, %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0), i8** %5
br label %113
113: ; preds = %112, %111, %110, %109
%114 = load i8*, i8** %5
%115 = load i32, i32* %4
%116 = and i32 %115, 127
%117 = call i8* @litfmt(i32 %116)
%118 = load i32, i32* %4
%119 = ashr i32 %118, 7
%120 = and i32 %119, 7
%121 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.50, i64 0, i64 0), i8* %114, i8* %117, i32 %120)
br label %203
122: ; preds = %59, %59, %59, %59, %59, %59, %59, %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), i8** %5
br label %124
123: ; preds = %59, %59, %59, %59, %59, %59, %59, %59
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.52, i64 0, i64 0), i8** %5
br label %124
124: ; preds = %123, %122
%125 = load i8*, i8** %5
%126 = load i32, i32* %4
%127 = and i32 %126, 2047
%128 = call i8* @litfmt(i32 %127)
%129 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %125, i8* %128)
br label %203
130: ; preds = %59, %59
%131 = load i32, i32* %4
%132 = shl i32 %131, 7
%133 = trunc i32 %132 to i16
%134 = sext i16 %133 to i32
%135 = ashr i32 %134, 7
store i32 %135, i32* %6
%136 = load i32, i32* %6
%137 = icmp sge i32 %136, 0
br i1 %137, label %138, label %142
138: ; preds = %130
%139 = load i32, i32* %6
%140 = call i8* @litfmt(i32 %139)
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.53, i64 0, i64 0), i8* %140)
br label %147
142: ; preds = %130
%143 = load i32, i32* %6
%144 = sub nsw i32 0, %143
%145 = call i8* @litfmt(i32 %144)
%146 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.54, i64 0, i64 0), i8* %145)
br label %147
147: ; preds = %142, %138
br label %203
148: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.55, i64 0, i64 0), i8** %5
br label %155
149: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.56, i64 0, i64 0), i8** %5
br label %155
150: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.57, i64 0, i64 0), i8** %5
br label %155
151: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.58, i64 0, i64 0), i8** %5
br label %155
152: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.59, i64 0, i64 0), i8** %5
br label %155
153: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.60, i64 0, i64 0), i8** %5
br label %155
154: ; preds = %59
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.61, i64 0, i64 0), i8** %5
br label %155
155: ; preds = %154, %153, %152, %151, %150, %149, %148
%156 = load i8*, i8** %5
%157 = load i32, i32* %4
%158 = and i32 %157, 255
%159 = call i8* @litfmt(i32 %158)
%160 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %156, i8* %159)
br label %203
161: ; preds = %59
%162 = load i32, i32* %4
%163 = and i32 %162, 128
%164 = icmp ne i32 %163, 0
br i1 %164, label %165, label %170
165: ; preds = %161
%166 = load i32, i32* %4
%167 = and i32 %166, 127
%168 = call i8* @litfmt(i32 %167)
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.62, i64 0, i64 0), i8* %168)
br label %178
170: ; preds = %161
%171 = load i32, i32* %4
%172 = ashr i32 %171, 6
%173 = and i32 %172, 1
%174 = load i32, i32* %4
%175 = and i32 %174, 63
%176 = call i8* @litfmt(i32 %175)
%177 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.63, i64 0, i64 0), i32 %173, i8* %176)
br label %178
178: ; preds = %170, %165
br label %203
179: ; preds = %59
%180 = load i32, i32* %4
%181 = and i32 %180, 128
%182 = icmp ne i32 %181, 0
br i1 %182, label %183, label %191
183: ; preds = %179
%184 = load i32, i32* %4
%185 = and i32 %184, 63
%186 = call i8* @litfmt(i32 %185)
%187 = load i32, i32* %4
%188 = ashr i32 %187, 6
%189 = and i32 %188, 1
%190 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.64, i64 0, i64 0), i8* %186, i32 %189)
br label %199
191: ; preds = %179
%192 = load i32, i32* %4
%193 = and i32 %192, 63
%194 = call i8* @litfmt(i32 %193)
%195 = load i32, i32* %4
%196 = ashr i32 %195, 6
%197 = and i32 %196, 1
%198 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.65, i64 0, i64 0), i8* %194, i32 %197)
br label %199
199: ; preds = %191, %183
br label %203
200: ; preds = %59
br label %201
201: ; preds = %200, %76
%202 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.66, i64 0, i64 0))
br label %203
203: ; preds = %201, %199, %178, %155, %147, %124, %113, %108, %71
br label %204
204: ; preds = %203, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15
%205 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.67, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [17 x i8] c"%04x: %02x %02x\09\00"
@.str.1 = [4 x i8] c"nop\00"
@.str.2 = [6 x i8] c"reset\00"
@.str.3 = [7 x i8] c"return\00"
@.str.4 = [7 x i8] c"retfie\00"
@.str.5 = [6 x i8] c"callw\00"
@.str.6 = [4 x i8] c"brw\00"
@.str.7 = [13 x i8] c"moviw\09++fsr0\00"
@.str.8 = [13 x i8] c"moviw\09--fsr0\00"
@.str.9 = [13 x i8] c"moviw\09fsr0++\00"
@.str.10 = [13 x i8] c"moviw\09fsr0--\00"
@.str.11 = [13 x i8] c"moviw\09++fsr1\00"
@.str.12 = [13 x i8] c"moviw\09--fsr1\00"
@.str.13 = [13 x i8] c"moviw\09fsr1++\00"
@.str.14 = [13 x i8] c"moviw\09fsr1--\00"
@.str.15 = [7 x i8] c"option\00"
@.str.16 = [6 x i8] c"sleep\00"
@.str.17 = [7 x i8] c"clrwdt\00"
@.str.18 = [7 x i8] c"tris\095\00"
@.str.19 = [7 x i8] c"tris\096\00"
@.str.20 = [7 x i8] c"tris\097\00"
@.str.21 = [5 x i8] c"clrw\00"
@.str.22 = [6 x i8] c"movwf\00"
@.str.23 = [9 x i8] c"movlb\09%s\00"
@.str.24 = [5 x i8] c"clrf\00"
@.str.25 = [6 x i8] c"subwf\00"
@.str.26 = [5 x i8] c"decf\00"
@.str.27 = [6 x i8] c"iorwf\00"
@.str.28 = [6 x i8] c"andwf\00"
@.str.29 = [6 x i8] c"xorwf\00"
@.str.30 = [6 x i8] c"addwf\00"
@.str.31 = [5 x i8] c"movf\00"
@.str.32 = [5 x i8] c"comf\00"
@.str.33 = [5 x i8] c"incf\00"
@.str.34 = [7 x i8] c"decfsz\00"
@.str.35 = [4 x i8] c"rrf\00"
@.str.36 = [4 x i8] c"rlf\00"
@.str.37 = [6 x i8] c"swapf\00"
@.str.38 = [7 x i8] c"incfsz\00"
@.str.39 = [5 x i8] c"lslf\00"
@.str.40 = [5 x i8] c"lsrf\00"
@.str.41 = [5 x i8] c"asrf\00"
@.str.42 = [7 x i8] c"subwfb\00"
@.str.43 = [7 x i8] c"addwfc\00"
@.str.44 = [6 x i8] c"%s\09%s\00"
@.str.45 = [4 x i8] c", w\00"
@.str.46 = [5 x i8] c"bcf \00"
@.str.47 = [5 x i8] c"bsf \00"
@.str.48 = [6 x i8] c"btfsc\00"
@.str.49 = [6 x i8] c"btfss\00"
@.str.50 = [10 x i8] c"%s\09%s, %d\00"
@.str.51 = [5 x i8] c"call\00"
@.str.52 = [5 x i8] c"goto\00"
@.str.53 = [9 x i8] c"bra\09$+%s\00"
@.str.54 = [9 x i8] c"bra\09$-%s\00"
@.str.55 = [6 x i8] c"movlw\00"
@.str.56 = [6 x i8] c"retlw\00"
@.str.57 = [6 x i8] c"iorlw\00"
@.str.58 = [6 x i8] c"andlw\00"
@.str.59 = [6 x i8] c"xorlw\00"
@.str.60 = [6 x i8] c"sublw\00"
@.str.61 = [6 x i8] c"addlw\00"
@.str.62 = [9 x i8] c"movlp\09%s\00"
@.str.63 = [17 x i8] c"addfsr\09fsr%d, %s\00"
@.str.64 = [16 x i8] c"movwi\09%s[fsr%d]\00"
@.str.65 = [16 x i8] c"moviw\09%s[fsr%d]\00"
define void @print_opcode(i32 %0, i32 %1) {
%3 = ashr i32 %1, 8
%4 = and i32 %3, 255
%5 = and i32 %1, 255
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 %0, i32 %4, i32 %5)
switch i32 %1, label %51 [
i32 0, label %7
i32 1, label %9
i32 8, label %11
i32 9, label %13
i32 10, label %15
i32 11, label %17
i32 16, label %19
i32 17, label %21
i32 18, label %23
i32 19, label %25
i32 20, label %27
i32 21, label %29
i32 22, label %31
i32 23, label %33
i32 96, label %35
i32 98, label %37
i32 99, label %39
i32 100, label %41
i32 101, label %43
i32 102, label %45
i32 103, label %47
i32 256, label %49
i32 257, label %49
i32 258, label %49
i32 259, label %49
]
7: ; preds = %2
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %153
9: ; preds = %2
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
br label %153
11: ; preds = %2
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0))
br label %153
13: ; preds = %2
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
br label %153
15: ; preds = %2
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
br label %153
17: ; preds = %2
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
br label %153
19: ; preds = %2
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i64 0, i64 0))
br label %153
21: ; preds = %2
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0))
br label %153
23: ; preds = %2
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
br label %153
25: ; preds = %2
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0))
br label %153
27: ; preds = %2
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
br label %153
29: ; preds = %2
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i64 0, i64 0))
br label %153
31: ; preds = %2
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0))
br label %153
33: ; preds = %2
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.14, i64 0, i64 0))
br label %153
35: ; preds = %2
%36 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
br label %153
37: ; preds = %2
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0))
br label %153
39: ; preds = %2
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
br label %153
41: ; preds = %2
%42 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0))
br label %153
43: ; preds = %2
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
br label %153
45: ; preds = %2
%46 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
br label %153
47: ; preds = %2
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0))
br label %153
49: ; preds = %2, %2, %2, %2
%50 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.21, i64 0, i64 0))
br label %153
51: ; preds = %2
switch i32 %3, label %151 [
i32 0, label %52
i32 1, label %81
i32 2, label %62
i32 3, label %63
i32 4, label %64
i32 5, label %65
i32 6, label %66
i32 7, label %67
i32 8, label %68
i32 9, label %69
i32 10, label %70
i32 11, label %71
i32 12, label %72
i32 13, label %73
i32 14, label %74
i32 15, label %75
i32 53, label %76
i32 54, label %77
i32 55, label %78
i32 59, label %79
i32 61, label %80
i32 16, label %93
i32 17, label %93
i32 18, label %93
i32 19, label %93
i32 20, label %90
i32 21, label %90
i32 22, label %90
i32 23, label %90
i32 24, label %91
i32 25, label %91
i32 26, label %91
i32 27, label %91
i32 28, label %92
i32 29, label %92
i32 30, label %92
i32 31, label %92
i32 32, label %101
i32 33, label %101
i32 34, label %101
i32 35, label %101
i32 36, label %101
i32 37, label %101
i32 38, label %101
i32 39, label %101
i32 40, label %100
i32 41, label %100
i32 42, label %100
i32 43, label %100
i32 44, label %100
i32 45, label %100
i32 46, label %100
i32 47, label %100
i32 50, label %106
i32 51, label %106
i32 48, label %123
i32 52, label %117
i32 56, label %118
i32 57, label %119
i32 58, label %120
i32 60, label %121
i32 62, label %122
i32 49, label %127
i32 63, label %140
]
52: ; preds = %51
%53 = and i32 %1, 128
%54 = icmp eq i32 %53, 0
br i1 %54, label %55, label %81
55: ; preds = %52
%56 = and i32 %1, 224
%57 = icmp eq i32 %56, 32
br i1 %57, label %58, label %151
58: ; preds = %55
%59 = and i32 %1, 31
%60 = tail call i8* @litfmt(i32 %59)
%61 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.23, i64 0, i64 0), i8* %60)
br label %153
62: ; preds = %51
br label %81
63: ; preds = %51
br label %81
64: ; preds = %51
br label %81
65: ; preds = %51
br label %81
66: ; preds = %51
br label %81
67: ; preds = %51
br label %81
68: ; preds = %51
br label %81
69: ; preds = %51
br label %81
70: ; preds = %51
br label %81
71: ; preds = %51
br label %81
72: ; preds = %51
br label %81
73: ; preds = %51
br label %81
74: ; preds = %51
br label %81
75: ; preds = %51
br label %81
76: ; preds = %51
br label %81
77: ; preds = %51
br label %81
78: ; preds = %51
br label %81
79: ; preds = %51
br label %81
80: ; preds = %51
br label %81
81: ; preds = %51, %52, %80, %79, %78, %77, %76, %75, %74, %73, %72, %71, %70, %69, %68, %67, %66, %65, %64, %63, %62
%82 = phi i8* [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.43, i64 0, i64 0), %80 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.42, i64 0, i64 0), %79 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), %78 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.40, i64 0, i64 0), %77 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.39, i64 0, i64 0), %76 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.38, i64 0, i64 0), %75 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.37, i64 0, i64 0), %74 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0), %73 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0), %72 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.34, i64 0, i64 0), %71 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), %70 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.32, i64 0, i64 0), %69 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.31, i64 0, i64 0), %68 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.30, i64 0, i64 0), %67 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.29, i64 0, i64 0), %66 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.28, i64 0, i64 0), %65 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.27, i64 0, i64 0), %64 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), %63 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.25, i64 0, i64 0), %62 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0), %52 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.24, i64 0, i64 0), %51 ]
%83 = and i32 %1, 127
%84 = tail call i8* @litfmt(i32 %83)
%85 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %82, i8* %84)
%86 = and i32 %1, 128
%87 = icmp eq i32 %86, 0
br i1 %87, label %88, label %153
88: ; preds = %81
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0))
br label %153
90: ; preds = %51, %51, %51, %51
br label %93
91: ; preds = %51, %51, %51, %51
br label %93
92: ; preds = %51, %51, %51, %51
br label %93
93: ; preds = %51, %51, %51, %51, %92, %91, %90
%94 = phi i8* [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0), %92 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.48, i64 0, i64 0), %91 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.47, i64 0, i64 0), %90 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.46, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.46, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.46, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.46, i64 0, i64 0), %51 ]
%95 = and i32 %1, 127
%96 = tail call i8* @litfmt(i32 %95)
%97 = lshr i32 %1, 7
%98 = and i32 %97, 7
%99 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.50, i64 0, i64 0), i8* %94, i8* %96, i32 %98)
br label %153
100: ; preds = %51, %51, %51, %51, %51, %51, %51, %51
br label %101
101: ; preds = %51, %51, %51, %51, %51, %51, %51, %51, %100
%102 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.52, i64 0, i64 0), %100 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %51 ]
%103 = and i32 %1, 2047
%104 = tail call i8* @litfmt(i32 %103)
%105 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %102, i8* %104)
br label %153
106: ; preds = %51, %51
%107 = shl i32 %1, 23
%108 = ashr exact i32 %107, 23
%109 = icmp sgt i32 %107, -8388608
br i1 %109, label %110, label %113
110: ; preds = %106
%111 = tail call i8* @litfmt(i32 %108)
%112 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.53, i64 0, i64 0), i8* %111)
br label %153
113: ; preds = %106
%114 = sub nsw i32 0, %108
%115 = tail call i8* @litfmt(i32 %114)
%116 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.54, i64 0, i64 0), i8* %115)
br label %153
117: ; preds = %51
br label %123
118: ; preds = %51
br label %123
119: ; preds = %51
br label %123
120: ; preds = %51
br label %123
121: ; preds = %51
br label %123
122: ; preds = %51
br label %123
123: ; preds = %51, %122, %121, %120, %119, %118, %117
%124 = phi i8* [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.61, i64 0, i64 0), %122 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.60, i64 0, i64 0), %121 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.59, i64 0, i64 0), %120 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.58, i64 0, i64 0), %119 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.57, i64 0, i64 0), %118 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.56, i64 0, i64 0), %117 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.55, i64 0, i64 0), %51 ]
%125 = tail call i8* @litfmt(i32 %5)
%126 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.44, i64 0, i64 0), i8* %124, i8* %125)
br label %153
127: ; preds = %51
%128 = and i32 %1, 128
%129 = icmp eq i32 %128, 0
br i1 %129, label %134, label %130
130: ; preds = %127
%131 = and i32 %1, 127
%132 = tail call i8* @litfmt(i32 %131)
%133 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.62, i64 0, i64 0), i8* %132)
br label %153
134: ; preds = %127
%135 = lshr i32 %1, 6
%136 = and i32 %135, 1
%137 = and i32 %1, 63
%138 = tail call i8* @litfmt(i32 %137)
%139 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.63, i64 0, i64 0), i32 %136, i8* %138)
br label %153
140: ; preds = %51
%141 = and i32 %1, 128
%142 = icmp eq i32 %141, 0
%143 = and i32 %1, 63
%144 = tail call i8* @litfmt(i32 %143)
%145 = lshr i32 %1, 6
%146 = and i32 %145, 1
br i1 %142, label %149, label %147
147: ; preds = %140
%148 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.64, i64 0, i64 0), i8* %144, i32 %146)
br label %153
149: ; preds = %140
%150 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.65, i64 0, i64 0), i8* %144, i32 %146)
br label %153
151: ; preds = %51, %55
%152 = tail call i32 @putchar(i32 63)
br label %153
153: ; preds = %58, %93, %101, %123, %151, %88, %81, %113, %110, %134, %130, %149, %147, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7
%154 = tail call i32 @putchar(i32 10)
ret void
}