#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
void print(int addr, int cmd) {
  char *m;
  int arg;
  printf("%04x: %02x %02x\t", addr, cmd >> 8 & 0xff, cmd & 0xff);
  switch (cmd) {
  case 0x000:
    printf("nop");
    goto done;
  case 0x002:
    printf("option");
    goto done;
  case 0x003:
    printf("sleep");
    goto done;
  case 0x004:
    printf("awake");
    goto done;
  case 0x006:
    printf("tris");
    goto done;
  case 0x007:
    printf("dump");
    goto done;
  case 0x008:
    printf("halt");
    goto done;
  case 0x040:
    printf("az");
    goto done;
  case 0x643:
    printf("z?");
    goto done;
  case 0x743:
    printf("nz?");
    goto done;
  case 0x603:
    printf("c?");
    goto done;
  case 0x703:
    printf("nc?");
    goto done;
  }
  switch (cmd >> 8) {
  case 0x8:
    m = "ret";
    goto byteop;
  case 0x9:
    m = "call";
    goto byteop;
  case 0xc:
    m = "cta";
    goto byteop;
  case 0xd:
    m = "a|c";
    goto byteop;
  case 0xe:
    m = "a&c";
    goto byteop;
  case 0xf:
    m = "a^c";
  byteop:
    printf("%s", m);
    arg = cmd & 0xff;
    if (arg > 9)
      printf("\t0x%x", arg);
    else if (arg)
      printf("\t%d", arg);
    goto done;
  case 0x4:
    m = "bz";
    goto bitop;
  case 0x5:
    m = "bs";
    goto bitop;
  case 0x6:
    m = "bs?";
    goto bitop;
  case 0x7:
    m = "bz?";
    goto bitop;
  bitop:
    printf("%s\t", m);
    arg = cmd & 0x1f;
    if (arg > 9)
      printf("0x%x", arg);
    else
      printf("%d", arg);
    printf(", %d", cmd >> 5 & 7);
    goto done;
  }
  switch (cmd >> 4 & 0xfe) {
  case 0x02:
    m = "atx";
    goto shortop;
  case 0x06:
    m = "xz";
    goto shortop;
  case 0x08:
    m = "a-x";
    goto shortop;
  case 0x0a:
    m = "x-a";
    goto shortop;
  case 0x0c:
    m = "x--a";
    goto shortop;
  case 0x0e:
    m = "x--";
    goto shortop;
  case 0x10:
    m = "a|x";
    goto shortop;
  case 0x12:
    m = "x|a";
    goto shortop;
  case 0x14:
    m = "a&x";
    goto shortop;
  case 0x16:
    m = "x&a";
    goto shortop;
  case 0x18:
    m = "a^x";
    goto shortop;
  case 0x1a:
    m = "x^a";
    goto shortop;
  case 0x1c:
    m = "a+x";
    goto shortop;
  case 0x1e:
    m = "x+a";
    goto shortop;
  case 0x20:
    m = "xta";
    goto shortop;
  case 0x22:
    m = "tst";
    goto shortop;
  case 0x24:
    m = "xca";
    goto shortop;
  case 0x26:
    m = "xc";
    goto shortop;
  case 0x28:
    m = "x++a";
    goto shortop;
  case 0x2a:
    m = "x++";
    goto shortop;
  case 0x2c:
    m = "x--a?";
    goto shortop;
  case 0x2e:
    m = "x--?";
    goto shortop;
  case 0x30:
    m = "xc>>a";
    goto shortop;
  case 0x32:
    m = "xc>>x";
    goto shortop;
  case 0x34:
    m = "xc<<a";
    goto shortop;
  case 0x36:
    m = "xc<<x";
    goto shortop;
  case 0x38:
    m = "xwa";
    goto shortop;
  case 0x3a:
    m = "xw";
    goto shortop;
  case 0x3c:
    m = "x++a?";
    goto shortop;
  case 0x3e:
    m = "x++?";
  shortop:
    printf("%s", m);
    arg = cmd & 0x1f;
    if (arg > 9)
      printf("\t0x%x", arg);
    else if (arg)
      printf("\t%d", arg);
    break;
  case 0xa0:
  case 0xa2:
  case 0xa4:
  case 0xa6:
  case 0xa8:
  case 0xaa:
  case 0xac:
  case 0xae:
  case 0xb0:
  case 0xb2:
  case 0xb4:
  case 0xb6:
  case 0xb8:
  case 0xba:
  case 0xbc:
  case 0xbe:
    printf("goto");
    arg = cmd & 0x1ff;
    if (arg > 9)
      printf("\t0x%x", arg);
    else if (arg)
      printf("\t%d", arg);
    break;
  default:
    printf("?");
    if (cmd >= ' ' && cmd <= '~')
      printf("\t\t; `%c'", cmd);
    break;
  }
done:
  printf("\n");
}


x86 assembly (clang, -O0):
<print>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%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    0x11f1(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
test   %eax,%eax
je     1210 <print+0x100>
jmp    114d <print+0x3d>
mov    -0x18(%rbp),%eax
sub    $0x2,%eax
je     1223 <print+0x113>
jmp    115e <print+0x4e>
mov    -0x18(%rbp),%eax
sub    $0x3,%eax
je     1236 <print+0x126>
jmp    116f <print+0x5f>
mov    -0x18(%rbp),%eax
sub    $0x4,%eax
je     1249 <print+0x139>
jmp    1180 <print+0x70>
mov    -0x18(%rbp),%eax
sub    $0x6,%eax
je     125c <print+0x14c>
jmp    1191 <print+0x81>
mov    -0x18(%rbp),%eax
sub    $0x7,%eax
je     126f <print+0x15f>
jmp    11a2 <print+0x92>
mov    -0x18(%rbp),%eax
sub    $0x8,%eax
je     1282 <print+0x172>
jmp    11b3 <print+0xa3>
mov    -0x18(%rbp),%eax
sub    $0x40,%eax
je     1295 <print+0x185>
jmp    11c4 <print+0xb4>
mov    -0x18(%rbp),%eax
sub    $0x603,%eax
je     12ce <print+0x1be>
jmp    11d7 <print+0xc7>
mov    -0x18(%rbp),%eax
sub    $0x643,%eax
je     12a8 <print+0x198>
jmp    11ea <print+0xda>
mov    -0x18(%rbp),%eax
sub    $0x703,%eax
je     12e1 <print+0x1d1>
jmp    11fd <print+0xed>
mov    -0x18(%rbp),%eax
sub    $0x743,%eax
je     12bb <print+0x1ab>
jmp    12f4 <print+0x1e4>
lea    0x111e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x110f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x1103(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10f6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10e9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10db(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10cd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10bf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x10e8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x109c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x108e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
lea    0x107a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
mov    -0x8(%rbp),%eax
sar    $0x8,%eax
add    $0xfffffffc,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0xb,%eax
ja     1480 <print+0x370>
mov    -0x20(%rbp),%rax
lea    0xce9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x103f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    137b <print+0x26b>
lea    0x1033(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    137b <print+0x26b>
lea    0x1028(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    137b <print+0x26b>
lea    0x101c(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    137b <print+0x26b>
lea    0x1010(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    137b <print+0x26b>
lea    0x1004(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xff9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jle    13b8 <print+0x2a8>
mov    -0x14(%rbp),%esi
lea    0xfd6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13d8 <print+0x2c8>
cmpl   $0x0,-0x14(%rbp)
je     13d3 <print+0x2c3>
mov    -0x14(%rbp),%esi
lea    0xfbc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13d8 <print+0x2c8>
jmp    1789 <print+0x679>
lea    0xfa8(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1418 <print+0x308>
lea    0xf9b(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1418 <print+0x308>
lea    0xf8e(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    1418 <print+0x308>
lea    0xf82(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xf77(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
and    $0x1f,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jle    1453 <print+0x343>
mov    -0x14(%rbp),%esi
lea    0xf3c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1464 <print+0x354>
mov    -0x14(%rbp),%esi
lea    0xf2c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%esi
sar    $0x5,%esi
and    $0x7,%esi
lea    0xf2a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1789 <print+0x679>
mov    -0x8(%rbp),%eax
shr    $0x4,%eax
and    $0xfe,%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xbc,%eax
ja     174c <print+0x63c>
mov    -0x28(%rbp),%rax
lea    0xb86(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xee9(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xedd(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xed0(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xec4(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xeb8(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xead(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xea1(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe95(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe89(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe7d(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe71(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe65(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe59(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe4d(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe41(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe35(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe29(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe1d(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe10(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xe05(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdf9(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdef(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xde4(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdda(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdd0(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdc6(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdbc(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xdb0(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xda3(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    168e <print+0x57e>
lea    0xd99(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xce6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
and    $0x1f,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jle    16c9 <print+0x5b9>
mov    -0x14(%rbp),%esi
lea    0xcc5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16e9 <print+0x5d9>
cmpl   $0x0,-0x14(%rbp)
je     16e4 <print+0x5d4>
mov    -0x14(%rbp),%esi
lea    0xcab(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16e9 <print+0x5d9>
jmp    1784 <print+0x674>
lea    0xd33(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
and    $0x1ff,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jle    1727 <print+0x617>
mov    -0x14(%rbp),%esi
lea    0xc67(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1747 <print+0x637>
cmpl   $0x0,-0x14(%rbp)
je     1742 <print+0x632>
mov    -0x14(%rbp),%esi
lea    0xc4d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1747 <print+0x637>
jmp    1784 <print+0x674>
lea    0xcd3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x20,-0x8(%rbp)
jl     177f <print+0x66f>
cmpl   $0x7e,-0x8(%rbp)
jg     177f <print+0x66f>
mov    -0x8(%rbp),%esi
lea    0xcb5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1784 <print+0x674>
jmp    1789 <print+0x679>
lea    0xca6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%ebp
mov    %edi,%esi
mov    %ebp,%ebx
sar    $0x8,%ebx
movzbl %bl,%edx
movzbl %bpl,%r14d
lea    0x1175(%rip),%rdi
mov    %r14d,%ecx
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x602,%ebp
jg     1174 <print+0x54>
cmp    $0x40,%ebp
ja     1216 <print+0xf6>
mov    %ebp,%eax
lea    0xea1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x1152(%rip),%rdi
jmp    1201 <print+0xe1>
cmp    $0x702,%ebp
jg     1199 <print+0x79>
cmp    $0x603,%ebp
je     11f1 <print+0xd1>
cmp    $0x643,%ebp
jne    1216 <print+0xf6>
lea    0x118c(%rip),%rdi
jmp    1201 <print+0xe1>
cmp    $0x703,%ebp
je     11fa <print+0xda>
cmp    $0x743,%ebp
jne    1216 <print+0xf6>
lea    0x113a(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x110c(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x110a(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x1107(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x1104(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x1100(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x10fc(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x10f8(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x10f7(%rip),%rdi
jmp    1201 <print+0xe1>
lea    0x10ed(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0xa,%edi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1030 <putchar@plt>
add    $0xfffffffc,%ebx
cmp    $0xb,%ebx
ja     12a8 <print+0x188>
lea    0x10ef(%rip),%rax
lea    0x10c2(%rip),%rsi
lea    0xecd(%rip),%rcx
movslq (%rcx,%rbx,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
lea    0x10d4(%rip),%rax
jmp    1259 <print+0x139>
lea    0x10ce(%rip),%rax
jmp    1259 <print+0x139>
lea    0x10c9(%rip),%rax
lea    0x10c6(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %ebp,%esi
and    $0x1f,%esi
cmp    $0xa,%esi
lea    0x1096(%rip),%rax
lea    0x1095(%rip),%rdi
cmovae %rax,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
shr    $0x5,%ebp
and    $0x7,%ebp
lea    0x1092(%rip),%rdi
mov    %ebp,%esi
jmp    1342 <print+0x222>
lea    0x1050(%rip),%rsi
jmp    1312 <print+0x1f2>
mov    %ebp,%eax
shr    $0x4,%eax
and    $0xfe,%eax
add    $0xfffffffe,%eax
shr    %eax
cmp    $0x5e,%eax
ja     134e <print+0x22e>
lea    0x1068(%rip),%rsi
lea    0xe66(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x10d6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
and    $0x1ff,%ebp
jmp    14ae <print+0x38e>
lea    0x1004(%rip),%rsi
jmp    1312 <print+0x1f2>
lea    0xfff(%rip),%rsi
jmp    1312 <print+0x1f2>
lea    0xffa(%rip),%rsi
jmp    1312 <print+0x1f2>
lea    0xff5(%rip),%rsi
lea    0xff2(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0xa,%r14d
jb     132f <print+0x20f>
lea    0xfe1(%rip),%rdi
jmp    133f <print+0x21f>
test   %r14d,%r14d
je     1208 <print+0xe8>
lea    0xfd5(%rip),%rdi
mov    %r14d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1208 <print+0xe8>
mov    $0x3f,%edi
call   1030 <putchar@plt>
lea    -0x20(%rbp),%eax
cmp    $0x5e,%eax
ja     1208 <print+0xe8>
lea    0x104e(%rip),%rdi
jmp    1298 <print+0x178>
lea    0xfbc(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xfb3(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xfab(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xfa3(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf9c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf94(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf8c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf84(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf7c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf74(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf6c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf64(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf5c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf54(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf4c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf47(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf42(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf3c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf38(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf33(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf30(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf2c(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf29(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf26(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf23(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf20(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf1b(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf15(%rip),%rsi
jmp    149d <print+0x37d>
lea    0xf12(%rip),%rsi
lea    0xe67(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
and    $0x1f,%ebp
cmp    $0xa,%ebp
jb     14bf <print+0x39f>
lea    0xe54(%rip),%rdi
jmp    1298 <print+0x178>
test   %ebp,%ebp
je     1208 <print+0xe8>
lea    0xe46(%rip),%rdi
jmp    1298 <print+0x178>

LLVM IR (-O0):
@.str = [17 x i8] c"%04x: %02x %02x\09\00"
@.str.1 = [4 x i8] c"nop\00"
@.str.2 = [7 x i8] c"option\00"
@.str.3 = [6 x i8] c"sleep\00"
@.str.4 = [6 x i8] c"awake\00"
@.str.5 = [5 x i8] c"tris\00"
@.str.6 = [5 x i8] c"dump\00"
@.str.7 = [5 x i8] c"halt\00"
@.str.8 = [3 x i8] c"az\00"
@.str.9 = [3 x i8] c"z?\00"
@.str.10 = [4 x i8] c"nz?\00"
@.str.11 = [3 x i8] c"c?\00"
@.str.12 = [4 x i8] c"nc?\00"
@.str.13 = [4 x i8] c"ret\00"
@.str.14 = [5 x i8] c"call\00"
@.str.15 = [4 x i8] c"cta\00"
@.str.16 = [4 x i8] c"a|c\00"
@.str.17 = [4 x i8] c"a&c\00"
@.str.18 = [4 x i8] c"a^c\00"
@.str.19 = [3 x i8] c"%s\00"
@.str.20 = [6 x i8] c"\090x%x\00"
@.str.21 = [4 x i8] c"\09%d\00"
@.str.22 = [3 x i8] c"bz\00"
@.str.23 = [3 x i8] c"bs\00"
@.str.24 = [4 x i8] c"bs?\00"
@.str.25 = [4 x i8] c"bz?\00"
@.str.26 = [4 x i8] c"%s\09\00"
@.str.27 = [5 x i8] c"0x%x\00"
@.str.28 = [3 x i8] c"%d\00"
@.str.29 = [5 x i8] c", %d\00"
@.str.30 = [4 x i8] c"atx\00"
@.str.31 = [3 x i8] c"xz\00"
@.str.32 = [4 x i8] c"a-x\00"
@.str.33 = [4 x i8] c"x-a\00"
@.str.34 = [5 x i8] c"x--a\00"
@.str.35 = [4 x i8] c"x--\00"
@.str.36 = [4 x i8] c"a|x\00"
@.str.37 = [4 x i8] c"x|a\00"
@.str.38 = [4 x i8] c"a&x\00"
@.str.39 = [4 x i8] c"x&a\00"
@.str.40 = [4 x i8] c"a^x\00"
@.str.41 = [4 x i8] c"x^a\00"
@.str.42 = [4 x i8] c"a+x\00"
@.str.43 = [4 x i8] c"x+a\00"
@.str.44 = [4 x i8] c"xta\00"
@.str.45 = [4 x i8] c"tst\00"
@.str.46 = [4 x i8] c"xca\00"
@.str.47 = [3 x i8] c"xc\00"
@.str.48 = [5 x i8] c"x++a\00"
@.str.49 = [4 x i8] c"x++\00"
@.str.50 = [6 x i8] c"x--a?\00"
@.str.51 = [5 x i8] c"x--?\00"
@.str.52 = [6 x i8] c"xc>>a\00"
@.str.53 = [6 x i8] c"xc>>x\00"
@.str.54 = [6 x i8] c"xc<<a\00"
@.str.55 = [6 x i8] c"xc<<x\00"
@.str.56 = [4 x i8] c"xwa\00"
@.str.57 = [3 x i8] c"xw\00"
@.str.58 = [6 x i8] c"x++a?\00"
@.str.59 = [5 x i8] c"x++?\00"
@.str.60 = [5 x i8] c"goto\00"
@.str.61 = [2 x i8] c"?\00"
@.str.62 = [9 x i8] c"\09\09; `%c'\00"
@.str.63 = [2 x i8] c"\0A\00"
define void @print(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 %39 [
i32 0, label %15
i32 2, label %17
i32 3, label %19
i32 4, label %21
i32 6, label %23
i32 7, label %25
i32 8, label %27
i32 64, label %29
i32 1603, label %31
i32 1859, label %33
i32 1539, label %35
i32 1795, label %37
]
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 %169
17: ; preds = %2
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %169
19: ; preds = %2
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %169
21: ; preds = %2
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
br label %169
23: ; preds = %2
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %169
25: ; preds = %2
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
br label %169
27: ; preds = %2
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
br label %169
29: ; preds = %2
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0))
br label %169
31: ; preds = %2
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0))
br label %169
33: ; preds = %2
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0))
br label %169
35: ; preds = %2
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
br label %169
37: ; preds = %2
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0))
br label %169
39: ; preds = %2
%40 = load i32, i32* %4
%41 = ashr i32 %40, 8
switch i32 %41, label %88 [
i32 8, label %42
i32 9, label %43
i32 12, label %44
i32 13, label %45
i32 14, label %46
i32 15, label %47
i32 4, label %66
i32 5, label %67
i32 6, label %68
i32 7, label %69
]
42: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0), i8** %5
br label %48
43: ; preds = %39
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i8** %5
br label %48
44: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %5
br label %48
45: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i8** %5
br label %48
46: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), i8** %5
br label %48
47: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), i8** %5
br label %48
48: ; preds = %47, %46, %45, %44, %43, %42
%49 = load i8*, i8** %5
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i8* %49)
%51 = load i32, i32* %4
%52 = and i32 %51, 255
store i32 %52, i32* %6
%53 = load i32, i32* %6
%54 = icmp sgt i32 %53, 9
br i1 %54, label %55, label %58
55: ; preds = %48
%56 = load i32, i32* %6
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %56)
br label %65
58: ; preds = %48
%59 = load i32, i32* %6
%60 = icmp ne i32 %59, 0
br i1 %60, label %61, label %64
61: ; preds = %58
%62 = load i32, i32* %6
%63 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %62)
br label %64
64: ; preds = %61, %58
br label %65
65: ; preds = %64, %55
br label %169
66: ; preds = %39
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.22, i64 0, i64 0), i8** %5
br label %70
67: ; preds = %39
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.23, i64 0, i64 0), i8** %5
br label %70
68: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0), i8** %5
br label %70
69: ; preds = %39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i64 0, i64 0), i8** %5
br label %70
70: ; preds = %69, %68, %67, %66
%71 = load i8*, i8** %5
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i64 0, i64 0), i8* %71)
%73 = load i32, i32* %4
%74 = and i32 %73, 31
store i32 %74, i32* %6
%75 = load i32, i32* %6
%76 = icmp sgt i32 %75, 9
br i1 %76, label %77, label %80
77: ; preds = %70
%78 = load i32, i32* %6
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i32 %78)
br label %83
80: ; preds = %70
%81 = load i32, i32* %6
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i64 0, i64 0), i32 %81)
br label %83
83: ; preds = %80, %77
%84 = load i32, i32* %4
%85 = ashr i32 %84, 5
%86 = and i32 %85, 7
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.29, i64 0, i64 0), i32 %86)
br label %169
88: ; preds = %39
%89 = load i32, i32* %4
%90 = ashr i32 %89, 4
%91 = and i32 %90, 254
switch i32 %91, label %157 [
i32 2, label %92
i32 6, label %93
i32 8, label %94
i32 10, label %95
i32 12, label %96
i32 14, label %97
i32 16, label %98
i32 18, label %99
i32 20, label %100
i32 22, label %101
i32 24, label %102
i32 26, label %103
i32 28, label %104
i32 30, label %105
i32 32, label %106
i32 34, label %107
i32 36, label %108
i32 38, label %109
i32 40, label %110
i32 42, label %111
i32 44, label %112
i32 46, label %113
i32 48, label %114
i32 50, label %115
i32 52, label %116
i32 54, label %117
i32 56, label %118
i32 58, label %119
i32 60, label %120
i32 62, label %121
i32 160, label %140
i32 162, label %140
i32 164, label %140
i32 166, label %140
i32 168, label %140
i32 170, label %140
i32 172, label %140
i32 174, label %140
i32 176, label %140
i32 178, label %140
i32 180, label %140
i32 182, label %140
i32 184, label %140
i32 186, label %140
i32 188, label %140
i32 190, label %140
]
92: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i64 0, i64 0), i8** %5
br label %122
93: ; preds = %88
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.31, i64 0, i64 0), i8** %5
br label %122
94: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0), i8** %5
br label %122
95: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i64 0, i64 0), i8** %5
br label %122
96: ; preds = %88
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.34, i64 0, i64 0), i8** %5
br label %122
97: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0), i8** %5
br label %122
98: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0), i8** %5
br label %122
99: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.37, i64 0, i64 0), i8** %5
br label %122
100: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.38, i64 0, i64 0), i8** %5
br label %122
101: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.39, i64 0, i64 0), i8** %5
br label %122
102: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i64 0, i64 0), i8** %5
br label %122
103: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.41, i64 0, i64 0), i8** %5
br label %122
104: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.42, i64 0, i64 0), i8** %5
br label %122
105: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8** %5
br label %122
106: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i64 0, i64 0), i8** %5
br label %122
107: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0), i8** %5
br label %122
108: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.46, i64 0, i64 0), i8** %5
br label %122
109: ; preds = %88
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.47, i64 0, i64 0), i8** %5
br label %122
110: ; preds = %88
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.48, i64 0, i64 0), i8** %5
br label %122
111: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.49, i64 0, i64 0), i8** %5
br label %122
112: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.50, i64 0, i64 0), i8** %5
br label %122
113: ; preds = %88
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), i8** %5
br label %122
114: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.52, i64 0, i64 0), i8** %5
br label %122
115: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.53, i64 0, i64 0), i8** %5
br label %122
116: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.54, i64 0, i64 0), i8** %5
br label %122
117: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.55, i64 0, i64 0), i8** %5
br label %122
118: ; preds = %88
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.56, i64 0, i64 0), i8** %5
br label %122
119: ; preds = %88
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.57, i64 0, i64 0), i8** %5
br label %122
120: ; preds = %88
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.58, i64 0, i64 0), i8** %5
br label %122
121: ; preds = %88
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.59, i64 0, i64 0), i8** %5
br label %122
122: ; preds = %121, %120, %119, %118, %117, %116, %115, %114, %113, %112, %111, %110, %109, %108, %107, %106, %105, %104, %103, %102, %101, %100, %99, %98, %97, %96, %95, %94, %93, %92
%123 = load i8*, i8** %5
%124 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i8* %123)
%125 = load i32, i32* %4
%126 = and i32 %125, 31
store i32 %126, i32* %6
%127 = load i32, i32* %6
%128 = icmp sgt i32 %127, 9
br i1 %128, label %129, label %132
129: ; preds = %122
%130 = load i32, i32* %6
%131 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %130)
br label %139
132: ; preds = %122
%133 = load i32, i32* %6
%134 = icmp ne i32 %133, 0
br i1 %134, label %135, label %138
135: ; preds = %132
%136 = load i32, i32* %6
%137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %136)
br label %138
138: ; preds = %135, %132
br label %139
139: ; preds = %138, %129
br label %168
140: ; preds = %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88, %88
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.60, i64 0, i64 0))
%142 = load i32, i32* %4
%143 = and i32 %142, 511
store i32 %143, i32* %6
%144 = load i32, i32* %6
%145 = icmp sgt i32 %144, 9
br i1 %145, label %146, label %149
146: ; preds = %140
%147 = load i32, i32* %6
%148 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %147)
br label %156
149: ; preds = %140
%150 = load i32, i32* %6
%151 = icmp ne i32 %150, 0
br i1 %151, label %152, label %155
152: ; preds = %149
%153 = load i32, i32* %6
%154 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %153)
br label %155
155: ; preds = %152, %149
br label %156
156: ; preds = %155, %146
br label %168
157: ; preds = %88
%158 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.61, i64 0, i64 0))
%159 = load i32, i32* %4
%160 = icmp sge i32 %159, 32
br i1 %160, label %161, label %167
161: ; preds = %157
%162 = load i32, i32* %4
%163 = icmp sle i32 %162, 126
br i1 %163, label %164, label %167
164: ; preds = %161
%165 = load i32, i32* %4
%166 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.62, i64 0, i64 0), i32 %165)
br label %167
167: ; preds = %164, %161, %157
br label %168
168: ; preds = %167, %156, %139
br label %169
169: ; preds = %168, %83, %65, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15
%170 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.63, 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 = [7 x i8] c"option\00"
@.str.3 = [6 x i8] c"sleep\00"
@.str.4 = [6 x i8] c"awake\00"
@.str.5 = [5 x i8] c"tris\00"
@.str.6 = [5 x i8] c"dump\00"
@.str.7 = [5 x i8] c"halt\00"
@.str.8 = [3 x i8] c"az\00"
@.str.9 = [3 x i8] c"z?\00"
@.str.10 = [4 x i8] c"nz?\00"
@.str.11 = [3 x i8] c"c?\00"
@.str.12 = [4 x i8] c"nc?\00"
@.str.13 = [4 x i8] c"ret\00"
@.str.14 = [5 x i8] c"call\00"
@.str.15 = [4 x i8] c"cta\00"
@.str.16 = [4 x i8] c"a|c\00"
@.str.17 = [4 x i8] c"a&c\00"
@.str.18 = [4 x i8] c"a^c\00"
@.str.19 = [3 x i8] c"%s\00"
@.str.20 = [6 x i8] c"\090x%x\00"
@.str.21 = [4 x i8] c"\09%d\00"
@.str.22 = [3 x i8] c"bz\00"
@.str.23 = [3 x i8] c"bs\00"
@.str.24 = [4 x i8] c"bs?\00"
@.str.25 = [4 x i8] c"bz?\00"
@.str.26 = [4 x i8] c"%s\09\00"
@.str.27 = [5 x i8] c"0x%x\00"
@.str.28 = [3 x i8] c"%d\00"
@.str.29 = [5 x i8] c", %d\00"
@.str.30 = [4 x i8] c"atx\00"
@.str.31 = [3 x i8] c"xz\00"
@.str.32 = [4 x i8] c"a-x\00"
@.str.33 = [4 x i8] c"x-a\00"
@.str.34 = [5 x i8] c"x--a\00"
@.str.35 = [4 x i8] c"x--\00"
@.str.36 = [4 x i8] c"a|x\00"
@.str.37 = [4 x i8] c"x|a\00"
@.str.38 = [4 x i8] c"a&x\00"
@.str.39 = [4 x i8] c"x&a\00"
@.str.40 = [4 x i8] c"a^x\00"
@.str.41 = [4 x i8] c"x^a\00"
@.str.42 = [4 x i8] c"a+x\00"
@.str.43 = [4 x i8] c"x+a\00"
@.str.44 = [4 x i8] c"xta\00"
@.str.45 = [4 x i8] c"tst\00"
@.str.46 = [4 x i8] c"xca\00"
@.str.47 = [3 x i8] c"xc\00"
@.str.48 = [5 x i8] c"x++a\00"
@.str.49 = [4 x i8] c"x++\00"
@.str.50 = [6 x i8] c"x--a?\00"
@.str.51 = [5 x i8] c"x--?\00"
@.str.52 = [6 x i8] c"xc>>a\00"
@.str.53 = [6 x i8] c"xc>>x\00"
@.str.54 = [6 x i8] c"xc<<a\00"
@.str.55 = [6 x i8] c"xc<<x\00"
@.str.56 = [4 x i8] c"xwa\00"
@.str.57 = [3 x i8] c"xw\00"
@.str.58 = [6 x i8] c"x++a?\00"
@.str.59 = [5 x i8] c"x++?\00"
@.str.60 = [5 x i8] c"goto\00"
@.str.62 = [9 x i8] c"\09\09; `%c'\00"
define void @print(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 %31 [
i32 0, label %7
i32 2, label %9
i32 3, label %11
i32 4, label %13
i32 6, label %15
i32 7, label %17
i32 8, label %19
i32 64, label %21
i32 1603, label %23
i32 1859, label %25
i32 1539, label %27
i32 1795, label %29
]
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 %121
9: ; preds = %2
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %121
11: ; preds = %2
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %121
13: ; preds = %2
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
br label %121
15: ; preds = %2
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %121
17: ; preds = %2
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
br label %121
19: ; preds = %2
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
br label %121
21: ; preds = %2
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0))
br label %121
23: ; preds = %2
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0))
br label %121
25: ; preds = %2
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0))
br label %121
27: ; preds = %2
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
br label %121
29: ; preds = %2
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0))
br label %121
31: ; preds = %2
switch i32 %3, label %60 [
i32 8, label %37
i32 9, label %32
i32 12, label %33
i32 13, label %34
i32 14, label %35
i32 15, label %36
i32 4, label %50
i32 5, label %47
i32 6, label %48
i32 7, label %49
]
32: ; preds = %31
br label %37
33: ; preds = %31
br label %37
34: ; preds = %31
br label %37
35: ; preds = %31
br label %37
36: ; preds = %31
br label %37
37: ; preds = %31, %36, %35, %34, %33, %32
%38 = phi i8* [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), %36 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), %35 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), %34 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), %33 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), %32 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0), %31 ]
%39 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i8* %38)
%40 = icmp ugt i32 %5, 9
br i1 %40, label %41, label %43
41: ; preds = %37
%42 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %5)
br label %121
43: ; preds = %37
%44 = icmp eq i32 %5, 0
br i1 %44, label %121, label %45
45: ; preds = %43
%46 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %5)
br label %121
47: ; preds = %31
br label %50
48: ; preds = %31
br label %50
49: ; preds = %31
br label %50
50: ; preds = %31, %49, %48, %47
%51 = phi i8* [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i64 0, i64 0), %49 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i64 0, i64 0), %48 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.23, i64 0, i64 0), %47 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.22, i64 0, i64 0), %31 ]
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i64 0, i64 0), i8* %51)
%53 = and i32 %1, 31
%54 = icmp ugt i32 %53, 9
%55 = select i1 %54, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i64 0, i64 0)
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %55, i32 %53)
%57 = lshr i32 %1, 5
%58 = and i32 %57, 7
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.29, i64 0, i64 0), i32 %58)
br label %121
60: ; preds = %31
%61 = lshr i32 %1, 4
%62 = and i32 %61, 254
%63 = add nsw i32 %62, -2
%64 = lshr exact i32 %63, 1
switch i32 %64, label %115 [
i32 0, label %94
i32 2, label %65
i32 3, label %66
i32 4, label %67
i32 5, label %68
i32 6, label %69
i32 7, label %70
i32 8, label %71
i32 9, label %72
i32 10, label %73
i32 11, label %74
i32 12, label %75
i32 13, label %76
i32 14, label %77
i32 15, label %78
i32 16, label %79
i32 17, label %80
i32 18, label %81
i32 19, label %82
i32 20, label %83
i32 21, label %84
i32 22, label %85
i32 23, label %86
i32 24, label %87
i32 25, label %88
i32 26, label %89
i32 27, label %90
i32 28, label %91
i32 29, label %92
i32 30, label %93
i32 79, label %105
i32 80, label %105
i32 81, label %105
i32 82, label %105
i32 83, label %105
i32 84, label %105
i32 85, label %105
i32 86, label %105
i32 87, label %105
i32 88, label %105
i32 89, label %105
i32 90, label %105
i32 91, label %105
i32 92, label %105
i32 93, label %105
i32 94, label %105
]
65: ; preds = %60
br label %94
66: ; preds = %60
br label %94
67: ; preds = %60
br label %94
68: ; preds = %60
br label %94
69: ; preds = %60
br label %94
70: ; preds = %60
br label %94
71: ; preds = %60
br label %94
72: ; preds = %60
br label %94
73: ; preds = %60
br label %94
74: ; preds = %60
br label %94
75: ; preds = %60
br label %94
76: ; preds = %60
br label %94
77: ; preds = %60
br label %94
78: ; preds = %60
br label %94
79: ; preds = %60
br label %94
80: ; preds = %60
br label %94
81: ; preds = %60
br label %94
82: ; preds = %60
br label %94
83: ; preds = %60
br label %94
84: ; preds = %60
br label %94
85: ; preds = %60
br label %94
86: ; preds = %60
br label %94
87: ; preds = %60
br label %94
88: ; preds = %60
br label %94
89: ; preds = %60
br label %94
90: ; preds = %60
br label %94
91: ; preds = %60
br label %94
92: ; preds = %60
br label %94
93: ; preds = %60
br label %94
94: ; preds = %60, %93, %92, %91, %90, %89, %88, %87, %86, %85, %84, %83, %82, %81, %80, %79, %78, %77, %76, %75, %74, %73, %72, %71, %70, %69, %68, %67, %66, %65
%95 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.59, i64 0, i64 0), %93 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.58, i64 0, i64 0), %92 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.57, i64 0, i64 0), %91 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.56, i64 0, i64 0), %90 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.55, i64 0, i64 0), %89 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.54, i64 0, i64 0), %88 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.53, i64 0, i64 0), %87 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.52, i64 0, i64 0), %86 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.51, i64 0, i64 0), %85 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.50, i64 0, i64 0), %84 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.49, i64 0, i64 0), %83 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.48, i64 0, i64 0), %82 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.47, i64 0, i64 0), %81 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.46, i64 0, i64 0), %80 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0), %79 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i64 0, i64 0), %78 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), %77 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.42, i64 0, i64 0), %76 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.41, i64 0, i64 0), %75 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i64 0, i64 0), %74 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.39, i64 0, i64 0), %73 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.38, i64 0, i64 0), %72 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.37, i64 0, i64 0), %71 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i64 0, i64 0), %70 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i64 0, i64 0), %69 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.34, i64 0, i64 0), %68 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i64 0, i64 0), %67 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i64 0, i64 0), %66 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.31, i64 0, i64 0), %65 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i64 0, i64 0), %60 ]
%96 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i8* %95)
%97 = and i32 %1, 31
%98 = icmp ugt i32 %97, 9
br i1 %98, label %99, label %101
99: ; preds = %94
%100 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %97)
br label %121
101: ; preds = %94
%102 = icmp eq i32 %97, 0
br i1 %102, label %121, label %103
103: ; preds = %101
%104 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %97)
br label %121
105: ; preds = %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60, %60
%106 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.60, i64 0, i64 0))
%107 = and i32 %1, 511
%108 = icmp ugt i32 %107, 9
br i1 %108, label %109, label %111
109: ; preds = %105
%110 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i32 %107)
br label %121
111: ; preds = %105
%112 = icmp eq i32 %107, 0
br i1 %112, label %121, label %113
113: ; preds = %111
%114 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 %107)
br label %121
115: ; preds = %60
%116 = tail call i32 @putchar(i32 63)
%117 = add i32 %1, -32
%118 = icmp ult i32 %117, 95
br i1 %118, label %119, label %121
119: ; preds = %115
%120 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.62, i64 0, i64 0), i32 %1)
br label %121
121: ; preds = %101, %103, %99, %111, %113, %109, %119, %115, %41, %45, %43, %50, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7
%122 = tail call i32 @putchar(i32 10)
ret void
}