#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 display_packet(unsigned char *bp, unsigned int len) {
  unsigned char v1 = 1, cmd = 0;
  unsigned char i, j;
  if (!bp || !len)
    return;
  if (len < 8)
    return;
  if (bp[1] & 1) {
    v1 = 0;
    cmd = (bp[1] & 2) != 0;
    printf("fm ? to ");
    i = (bp[2] >> 2) & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    i = ((bp[2] << 4) | ((bp[3] >> 4) & 0xf)) & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    i = ((bp[3] << 2) | ((bp[4] >> 6) & 3)) & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    i = bp[4] & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    i = (bp[5] >> 2) & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    i = ((bp[5] << 4) | ((bp[6] >> 4) & 0xf)) & 0x3f;
    if (i)
      printf("%c", i + 0x20);
    printf("-%u QSO Nr %u", bp[6] & 0xf, (bp[0] << 6) | (bp[1] >> 2));
    bp += 7;
    len -= 7;
  } else {
    if (len < 15)
      return;
    if ((bp[6] & 0x80) != (bp[13] & 0x80)) {
      v1 = 0;
      cmd = (bp[6] & 0x80);
    }
    printf("fm ");
    for (i = 7; i < 13; i++)
      if ((bp[i] & 0xfe) != 0x40)
        printf("%c", bp[i] >> 1);
    printf("-%u to ", (bp[13] >> 1) & 0xf);
    for (i = 0; i < 6; i++)
      if ((bp[i] & 0xfe) != 0x40)
        printf("%c", bp[i] >> 1);
    printf("-%u", (bp[6] >> 1) & 0xf);
    bp += 14;
    len -= 14;
    if ((!(bp[-1] & 1)) && (len >= 7))
      printf(" via ");
    while ((!(bp[-1] & 1)) && (len >= 7)) {
      for (i = 0; i < 6; i++)
        if ((bp[i] & 0xfe) != 0x40)
          printf("%c", bp[i] >> 1);
      printf("-%u", (bp[6] >> 1) & 0xf);
      bp += 7;
      len -= 7;
      if ((!(bp[-1] & 1)) && (len >= 7))
        printf(",");
    }
  }
  if (!len)
    return;
  i = *bp++;
  len--;
  j = v1 ? ((i & 0x10) ? '!' : ' ')
         : ((i & 0x10) ? (cmd ? '+' : '-') : (cmd ? '^' : 'v'));
  if (!(i & 1)) {
    printf(" I%u%u%c", (i >> 5) & 7, (i >> 1) & 7, j);
  } else if (i & 2) {
    switch (i & (~0x10)) {
    case 0x03:
      printf(" UI%c", j);
      break;
    case 0x2f:
      printf(" SABM%c", j);
      break;
    case 0x43:
      printf(" DISC%c", j);
      break;
    case 0x0f:
      printf(" DM%c", j);
      break;
    case 0x63:
      printf(" UA%c", j);
      break;
    case 0x87:
      printf(" FRMR%c", j);
      break;
    default:
      printf(" unknown U (0x%x)%c", i & (~0x10), j);
      break;
    }
  } else {
    switch (i & 0xf) {
    case 0x1:
      printf(" RR%u%c", (i >> 5) & 7, j);
      break;
    case 0x5:
      printf(" RNR%u%c", (i >> 5) & 7, j);
      break;
    case 0x9:
      printf(" REJ%u%c", (i >> 5) & 7, j);
      break;
    default:
      printf(" unknown S (0x%x)%u%c", i & 0xf, (i >> 5) & 7, j);
      break;
    }
  }
  if (!len) {
    printf("\n");
    return;
  }
  printf(" pid=%02X\n", *bp++);
  len--;
  j = 0;
  while (len) {
    i = *bp++;
    if ((i >= 32) && (i < 128))
      printf("%c", i);
    else if (i == 13) {
      if (j)
        printf("\n");
      j = 0;
    } else
      printf(".");
    if (i >= 32)
      j = 1;
    len--;
  }
  if (j)
    printf("\n");
}


x86 assembly (clang, -O0):
<display_packet>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movb   $0x1,-0xd(%rbp)
movb   $0x0,-0xe(%rbp)
cmpq   $0x0,-0x8(%rbp)
je     113c <display_packet+0x2c>
cmpl   $0x0,-0xc(%rbp)
jne    1141 <display_packet+0x31>
jmp    1986 <display_packet+0x876>
cmpl   $0x8,-0xc(%rbp)
jae    1150 <display_packet+0x40>
jmp    1986 <display_packet+0x876>
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1326 <display_packet+0x216>
movb   $0x0,-0xd(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0x2,%eax
cmp    $0x0,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %al,-0xe(%rbp)
lea    0xe78(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
sar    $0x2,%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     11bf <display_packet+0xaf>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xebb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
shl    $0x4,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
sar    $0x4,%ecx
and    $0xf,%ecx
or     %ecx,%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     11ff <display_packet+0xef>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xe7b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
shl    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
sar    $0x6,%ecx
and    $0x3,%ecx
or     %ecx,%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     123f <display_packet+0x12f>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xe3b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     126c <display_packet+0x15c>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xe0e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x5(%rax),%eax
sar    $0x2,%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     129c <display_packet+0x18c>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xdde(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x5(%rax),%eax
shl    $0x4,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
sar    $0x4,%ecx
and    $0xf,%ecx
or     %ecx,%eax
and    $0x3f,%eax
mov    %al,-0xf(%rbp)
cmpb   $0x0,-0xf(%rbp)
je     12dc <display_packet+0x1cc>
movzbl -0xf(%rbp),%esi
add    $0x20,%esi
lea    0xd9e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%esi
and    $0xf,%esi
mov    -0x8(%rbp),%rax
movzbl (%rax),%edx
shl    $0x6,%edx
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
sar    $0x2,%eax
or     %eax,%edx
lea    0xd04(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
add    $0x7,%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x7,%eax
mov    %eax,-0xc(%rbp)
jmp    15a0 <display_packet+0x490>
cmpl   $0xf,-0xc(%rbp)
jae    1335 <display_packet+0x225>
jmp    1986 <display_packet+0x876>
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%eax
and    $0x80,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
and    $0x80,%ecx
cmp    %ecx,%eax
je     136c <display_packet+0x25c>
movb   $0x0,-0xd(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%eax
and    $0x80,%eax
mov    %al,-0xe(%rbp)
lea    0xca4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x7,-0xf(%rbp)
movzbl -0xf(%rbp),%eax
cmp    $0xd,%eax
jge    13d4 <display_packet+0x2c4>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
and    $0xfe,%eax
cmp    $0x40,%eax
je     13c2 <display_packet+0x2b2>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%esi
sar    $0x1,%esi
lea    0xcb8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13c7 <display_packet+0x2b7>
mov    -0xf(%rbp),%al
add    $0x1,%al
mov    %al,-0xf(%rbp)
jmp    137e <display_packet+0x26e>
mov    -0x8(%rbp),%rax
movzbl 0xd(%rax),%esi
sar    $0x1,%esi
and    $0xf,%esi
lea    0xc32(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x0,-0xf(%rbp)
movzbl -0xf(%rbp),%eax
cmp    $0x6,%eax
jge    144a <display_packet+0x33a>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
and    $0xfe,%eax
cmp    $0x40,%eax
je     1438 <display_packet+0x328>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%esi
sar    $0x1,%esi
lea    0xc42(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    143d <display_packet+0x32d>
mov    -0xf(%rbp),%al
add    $0x1,%al
mov    %al,-0xf(%rbp)
jmp    13f4 <display_packet+0x2e4>
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%esi
sar    $0x1,%esi
and    $0xf,%esi
lea    0xbc4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
add    $0xe,%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
sub    $0xe,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movzbl -0x1(%rax),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    14a7 <display_packet+0x397>
cmpl   $0x7,-0xc(%rbp)
jb     14a7 <display_packet+0x397>
lea    0xb87(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    14ac <display_packet+0x39c>
mov    -0x8(%rbp),%rax
movzbl -0x1(%rax),%ecx
and    $0x1,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x11(%rbp)
jne    14cf <display_packet+0x3bf>
cmpl   $0x7,-0xc(%rbp)
setae  %al
mov    %al,-0x11(%rbp)
mov    -0x11(%rbp),%al
test   $0x1,%al
jne    14df <display_packet+0x3cf>
jmp    159b <display_packet+0x48b>
movb   $0x0,-0xf(%rbp)
movzbl -0xf(%rbp),%eax
cmp    $0x6,%eax
jge    1539 <display_packet+0x429>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
and    $0xfe,%eax
cmp    $0x40,%eax
je     1527 <display_packet+0x417>
mov    -0x8(%rbp),%rax
movzbl -0xf(%rbp),%ecx
movzbl (%rax,%rcx,1),%esi
sar    $0x1,%esi
lea    0xb53(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    152c <display_packet+0x41c>
mov    -0xf(%rbp),%al
add    $0x1,%al
mov    %al,-0xf(%rbp)
jmp    14e3 <display_packet+0x3d3>
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%esi
sar    $0x1,%esi
and    $0xf,%esi
lea    0xad5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
add    $0x7,%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x7,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movzbl -0x1(%rax),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1596 <display_packet+0x486>
cmpl   $0x7,-0xc(%rbp)
jb     1596 <display_packet+0x486>
lea    0xa9e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    14ac <display_packet+0x39c>
jmp    15a0 <display_packet+0x490>
cmpl   $0x0,-0xc(%rbp)
jne    15af <display_packet+0x49f>
jmp    1986 <display_packet+0x876>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%al
mov    %al,-0xf(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
movzbl -0xd(%rbp),%eax
cmp    $0x0,%eax
je     15f8 <display_packet+0x4e8>
movzbl -0xf(%rbp),%edx
and    $0x10,%edx
mov    $0x20,%eax
mov    $0x21,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x18(%rbp)
jmp    1641 <display_packet+0x531>
movzbl -0xf(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1624 <display_packet+0x514>
movzbl -0xe(%rbp),%edx
mov    $0x2d,%eax
mov    $0x2b,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x1c(%rbp)
jmp    163b <display_packet+0x52b>
movzbl -0xe(%rbp),%edx
mov    $0x76,%eax
mov    $0x5e,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %al,-0x10(%rbp)
movzbl -0xf(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1682 <display_packet+0x572>
movzbl -0xf(%rbp),%esi
sar    $0x5,%esi
and    $0x7,%esi
movzbl -0xf(%rbp),%edx
sar    $0x1,%edx
and    $0x7,%edx
movzbl -0x10(%rbp),%ecx
lea    0x9b9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1873 <display_packet+0x763>
movzbl -0xf(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     17a9 <display_packet+0x699>
movzbl -0xf(%rbp),%eax
and    $0xffffffef,%eax
mov    %eax,-0x20(%rbp)
sub    $0x3,%eax
je     1701 <display_packet+0x5f1>
jmp    16aa <display_packet+0x59a>
mov    -0x20(%rbp),%eax
sub    $0xf,%eax
je     1746 <display_packet+0x636>
jmp    16bb <display_packet+0x5ab>
mov    -0x20(%rbp),%eax
sub    $0x2f,%eax
je     1718 <display_packet+0x608>
jmp    16cc <display_packet+0x5bc>
mov    -0x20(%rbp),%eax
sub    $0x43,%eax
je     172f <display_packet+0x61f>
jmp    16dd <display_packet+0x5cd>
mov    -0x20(%rbp),%eax
sub    $0x63,%eax
je     175d <display_packet+0x64d>
jmp    16ee <display_packet+0x5de>
mov    -0x20(%rbp),%eax
sub    $0x87,%eax
je     1774 <display_packet+0x664>
jmp    178b <display_packet+0x67b>
movzbl -0x10(%rbp),%esi
lea    0x92c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0x10(%rbp),%esi
lea    0x91b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0x10(%rbp),%esi
lea    0x90c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0x10(%rbp),%esi
lea    0x8fd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0x10(%rbp),%esi
lea    0x8ec(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0x10(%rbp),%esi
lea    0x8db(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    17a4 <display_packet+0x694>
movzbl -0xf(%rbp),%esi
and    $0xffffffef,%esi
movzbl -0x10(%rbp),%edx
lea    0x8c5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    186e <display_packet+0x75e>
movzbl -0xf(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
sub    $0x1,%eax
je     17e3 <display_packet+0x6d3>
jmp    17c1 <display_packet+0x6b1>
mov    -0x24(%rbp),%eax
sub    $0x5,%eax
je     1804 <display_packet+0x6f4>
jmp    17d2 <display_packet+0x6c2>
mov    -0x24(%rbp),%eax
sub    $0x9,%eax
je     1825 <display_packet+0x715>
jmp    1846 <display_packet+0x736>
movzbl -0xf(%rbp),%esi
sar    $0x5,%esi
and    $0x7,%esi
movzbl -0x10(%rbp),%edx
lea    0x87e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1869 <display_packet+0x759>
movzbl -0xf(%rbp),%esi
sar    $0x5,%esi
and    $0x7,%esi
movzbl -0x10(%rbp),%edx
lea    0x865(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1869 <display_packet+0x759>
movzbl -0xf(%rbp),%esi
sar    $0x5,%esi
and    $0x7,%esi
movzbl -0x10(%rbp),%edx
lea    0x84d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1869 <display_packet+0x759>
movzbl -0xf(%rbp),%esi
and    $0xf,%esi
movzbl -0xf(%rbp),%edx
sar    $0x5,%edx
and    $0x7,%edx
movzbl -0x10(%rbp),%ecx
lea    0x82e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    186e <display_packet+0x75e>
jmp    1873 <display_packet+0x763>
cmpl   $0x0,-0xc(%rbp)
jne    1890 <display_packet+0x780>
lea    0x82b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1986 <display_packet+0x876>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movzbl (%rax),%esi
lea    0x7fd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
movb   $0x0,-0x10(%rbp)
cmpl   $0x0,-0xc(%rbp)
je     196e <display_packet+0x85e>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%al
mov    %al,-0xf(%rbp)
movzbl -0xf(%rbp),%eax
cmp    $0x20,%eax
jl     190e <display_packet+0x7fe>
movzbl -0xf(%rbp),%eax
cmp    $0x80,%eax
jge    190e <display_packet+0x7fe>
movzbl -0xf(%rbp),%esi
lea    0x771(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    194f <display_packet+0x83f>
movzbl -0xf(%rbp),%eax
cmp    $0xd,%eax
jne    193c <display_packet+0x82c>
cmpb   $0x0,-0x10(%rbp)
je     1933 <display_packet+0x823>
lea    0x783(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x0,-0x10(%rbp)
jmp    194a <display_packet+0x83a>
lea    0x76e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    194f <display_packet+0x83f>
movzbl -0xf(%rbp),%eax
cmp    $0x20,%eax
jl     1960 <display_packet+0x850>
movb   $0x1,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    18bd <display_packet+0x7ad>
cmpb   $0x0,-0x10(%rbp)
je     1986 <display_packet+0x876>
lea    0x730(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<display_packet>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
test   %rdi,%rdi
je     16f7 <display_packet+0x5d7>
mov    %esi,%r14d
cmp    $0x8,%esi
jb     16f7 <display_packet+0x5d7>
mov    %rdi,%r15
mov    0x1(%rdi),%bpl
test   $0x1,%bpl
jne    1422 <display_packet+0x302>
cmp    $0xf,%r14d
jb     16f7 <display_packet+0x5d7>
mov    0x6(%r15),%bpl
mov    0xd(%r15),%r13b
lea    0xeaa(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movzbl 0x7(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     118a <display_packet+0x6a>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x8(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     11a0 <display_packet+0x80>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x9(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     11b6 <display_packet+0x96>
shr    %edi
call   1030 <putchar@plt>
movzbl 0xa(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     11cc <display_packet+0xac>
shr    %edi
call   1030 <putchar@plt>
movzbl 0xb(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     11e2 <display_packet+0xc2>
shr    %edi
call   1030 <putchar@plt>
movzbl 0xc(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     11f8 <display_packet+0xd8>
shr    %edi
call   1030 <putchar@plt>
movzbl 0xd(%r15),%esi
shr    %esi
and    $0xf,%esi
lea    0xe12(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movzbl (%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1225 <display_packet+0x105>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x1(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     123b <display_packet+0x11b>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x2(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1251 <display_packet+0x131>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x3(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1267 <display_packet+0x147>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x4(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     127d <display_packet+0x15d>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x5(%r15),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1293 <display_packet+0x173>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x6(%r15),%esi
shr    %esi
and    $0xf,%esi
lea    0xd7f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xe(%r14),%ebx
mov    0xd(%r15),%al
cmp    $0x7,%ebx
jb     12d1 <display_packet+0x1b1>
mov    %eax,%ecx
and    $0x1,%cl
jne    12d1 <display_packet+0x1b1>
lea    0xd61(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0xd(%r15),%al
add    $0xe,%r15
test   $0x1,%al
jne    13fb <display_packet+0x2db>
cmp    $0x7,%ebx
jb     13fb <display_packet+0x2db>
mov    %r13b,0xf(%rsp)
mov    %rbx,0x10(%rsp)
lea    -0x15(%r14),%r12d
lea    0xd28(%rip),%rbx
xor    %r13d,%r13d
xchg   %ax,%ax
movzbl (%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1316 <display_packet+0x1f6>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x1(%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     132d <display_packet+0x20d>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x2(%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1344 <display_packet+0x224>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x3(%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     135b <display_packet+0x23b>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x4(%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1372 <display_packet+0x252>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x5(%r15,%r13,1),%edi
mov    %edi,%eax
and    $0xfffffffe,%eax
cmp    $0x40,%eax
je     1389 <display_packet+0x269>
shr    %edi
call   1030 <putchar@plt>
movzbl 0x6(%r15,%r13,1),%esi
shr    %esi
and    $0xf,%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movzbl 0x6(%r15,%r13,1),%eax
and    $0x1,%al
jne    13c0 <display_packet+0x2a0>
cmp    $0x7,%r12d
jb     13c0 <display_packet+0x2a0>
mov    $0x2c,%edi
call   1030 <putchar@plt>
movzbl 0x6(%r15,%r13,1),%eax
and    $0x1,%al
add    $0x7,%r13
test   %al,%al
jne    13da <display_packet+0x2ba>
lea    -0x7(%r12),%eax
cmp    $0x6,%r12d
mov    %eax,%r12d
ja     1300 <display_packet+0x1e0>
mov    %r13d,%eax
sub    %r14d,%eax
cmp    $0xfffffff2,%eax
mov    0x10(%rsp),%rbx
je     16f7 <display_packet+0x5d7>
mov    %ebx,%ebx
sub    %r13,%rbx
add    %r13,%r15
mov    0xf(%rsp),%r13b
and    $0x80,%bpl
and    $0x80,%r13b
lea    0x1(%r15),%r12
mov    (%r15),%cl
cmp    %r13b,%bpl
jne    151c <display_packet+0x3fc>
mov    %ecx,%eax
and    $0x10,%al
cmp    $0x1,%al
mov    $0x21,%al
sbb    $0x0,%al
jmp    153d <display_packet+0x41d>
lea    0xbd7(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movzbl 0x2(%r15),%edi
cmp    $0x4,%edi
jb     1449 <display_packet+0x329>
shr    $0x2,%edi
add    $0x20,%edi
call   1030 <putchar@plt>
mov    0x2(%r15),%dil
mov    0x3(%r15),%cl
shl    $0x4,%dil
mov    %ecx,%eax
shr    $0x4,%al
or     %dil,%al
and    $0x3f,%al
je     146b <display_packet+0x34b>
add    $0x20,%al
movzbl %al,%edi
call   1030 <putchar@plt>
mov    0x3(%r15),%cl
mov    0x4(%r15),%al
shl    $0x2,%cl
mov    %eax,%edx
shr    $0x6,%dl
or     %cl,%dl
and    $0x3f,%dl
je     148d <display_packet+0x36d>
add    $0x20,%dl
movzbl %dl,%edi
call   1030 <putchar@plt>
mov    0x4(%r15),%al
and    $0x3f,%al
je     149b <display_packet+0x37b>
add    $0x20,%al
movzbl %al,%edi
call   1030 <putchar@plt>
movzbl 0x5(%r15),%edi
cmp    $0x4,%edi
jb     14b4 <display_packet+0x394>
shr    $0x2,%edi
add    $0x20,%edi
call   1030 <putchar@plt>
mov    0x5(%r15),%dil
shr    %bpl
mov    0x6(%r15),%al
shl    $0x4,%dil
mov    %eax,%ecx
shr    $0x4,%cl
or     %dil,%cl
and    $0x3f,%cl
je     14db <display_packet+0x3bb>
add    $0x20,%cl
movzbl %cl,%edi
call   1030 <putchar@plt>
mov    0x6(%r15),%al
and    $0x1,%bpl
and    $0xf,%al
movzbl %al,%esi
movzbl (%r15),%eax
shl    $0x6,%eax
movzbl 0x1(%r15),%edx
shr    $0x2,%edx
or     %eax,%edx
lea    0xb0d(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x7(%r15),%rax
add    $0xfffffff9,%r14d
mov    0x7(%r15),%cl
add    $0x8,%r15
mov    %r15,%r12
mov    %rax,%r15
mov    %r14d,%ebx
test   $0x10,%cl
jne    1533 <display_packet+0x413>
test   %bpl,%bpl
mov    $0x76,%edx
mov    $0x5e,%eax
cmove  %edx,%eax
jmp    153d <display_packet+0x41d>
test   %bpl,%bpl
sete   %al
add    %al,%al
add    $0x2b,%al
movzbl %cl,%edx
test   $0x1,%dl
jne    156e <display_packet+0x44e>
mov    %edx,%esi
shr    $0x5,%esi
shr    %edx
and    $0x7,%edx
movzbl %al,%ecx
lea    0xad4(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x1,%ebx
jne    165f <display_packet+0x53f>
jmp    16df <display_packet+0x5bf>
test   $0x2,%cl
jne    1599 <display_packet+0x479>
mov    %edx,%esi
and    $0xf,%esi
shr    $0x5,%edx
cmp    $0x9,%esi
je     15db <display_packet+0x4bb>
cmp    $0x5,%esi
je     15e7 <display_packet+0x4c7>
cmp    $0x1,%esi
jne    15f3 <display_packet+0x4d3>
movzbl %al,%eax
lea    0xae0(%rip),%rdi
jmp    164b <display_packet+0x52b>
and    $0xffffffef,%edx
cmp    $0x2e,%dl
jg     15c0 <display_packet+0x4a0>
cmp    $0x87,%dl
je     1602 <display_packet+0x4e2>
cmp    $0x3,%dl
je     160e <display_packet+0x4ee>
cmp    $0xf,%dl
jne    1641 <display_packet+0x521>
movzbl %al,%esi
lea    0xa8e(%rip),%rdi
jmp    1630 <display_packet+0x510>
cmp    $0x2f,%dl
je     161a <display_packet+0x4fa>
cmp    $0x43,%dl
je     1626 <display_packet+0x506>
cmp    $0x63,%dl
jne    1641 <display_packet+0x521>
movzbl %al,%esi
lea    0xa79(%rip),%rdi
jmp    1630 <display_packet+0x510>
movzbl %al,%eax
lea    0xaa0(%rip),%rdi
jmp    164b <display_packet+0x52b>
movzbl %al,%eax
lea    0xa8b(%rip),%rdi
jmp    164b <display_packet+0x52b>
movzbl %al,%ecx
lea    0xa91(%rip),%rdi
jmp    1559 <display_packet+0x439>
movzbl %al,%esi
lea    0xa4c(%rip),%rdi
jmp    1630 <display_packet+0x510>
movzbl %al,%esi
lea    0xa1e(%rip),%rdi
jmp    1630 <display_packet+0x510>
movzbl %al,%esi
lea    0xa18(%rip),%rdi
jmp    1630 <display_packet+0x510>
movzbl %al,%esi
lea    0xa14(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x1,%ebx
jne    165f <display_packet+0x53f>
jmp    16df <display_packet+0x5bf>
movzbl %al,%eax
lea    0xa15(%rip),%rdi
mov    %edx,%esi
mov    %eax,%edx
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x1,%ebx
je     16df <display_packet+0x5bf>
movzbl (%r12),%esi
lea    0xa39(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x2,%ebx
je     16f7 <display_packet+0x5d7>
mov    %ebx,%r14d
mov    $0x2,%ebx
xor    %ebp,%ebp
mov    $0x1,%r12d
nopl   0x0(%rax,%rax,1)
movzbl (%r15,%rbx,1),%r13d
cmp    $0x20,%r13b
jl     16a0 <display_packet+0x580>
mov    %r13d,%edi
jmp    16c0 <display_packet+0x5a0>
mov    $0x2e,%edi
cmp    $0xd,%r13b
jne    16c0 <display_packet+0x5a0>
mov    $0xa,%edi
test   %bpl,%bpl
mov    $0x0,%ebp
je     16c5 <display_packet+0x5a5>
nopw   0x0(%rax,%rax,1)
call   1030 <putchar@plt>
cmp    $0x20,%r13b
movzbl %bpl,%ebp
cmovae %r12d,%ebp
add    $0x1,%rbx
cmp    %ebx,%r14d
jne    1690 <display_packet+0x570>
test   %bpl,%bpl
je     16f7 <display_packet+0x5d7>
mov    $0xa,%edi
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <putchar@plt>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [9 x i8] c"fm ? to \00"
@.str.1 = [3 x i8] c"%c\00"
@.str.2 = [14 x i8] c"-%u QSO Nr %u\00"
@.str.3 = [4 x i8] c"fm \00"
@.str.4 = [8 x i8] c"-%u to \00"
@.str.5 = [4 x i8] c"-%u\00"
@.str.6 = [6 x i8] c" via \00"
@.str.7 = [2 x i8] c",\00"
@.str.8 = [9 x i8] c" I%u%u%c\00"
@.str.9 = [6 x i8] c" UI%c\00"
@.str.10 = [8 x i8] c" SABM%c\00"
@.str.11 = [8 x i8] c" DISC%c\00"
@.str.12 = [6 x i8] c" DM%c\00"
@.str.13 = [6 x i8] c" UA%c\00"
@.str.14 = [8 x i8] c" FRMR%c\00"
@.str.15 = [20 x i8] c" unknown U (0x%x)%c\00"
@.str.16 = [8 x i8] c" RR%u%c\00"
@.str.17 = [9 x i8] c" RNR%u%c\00"
@.str.18 = [9 x i8] c" REJ%u%c\00"
@.str.19 = [22 x i8] c" unknown S (0x%x)%u%c\00"
@.str.20 = [2 x i8] c"\0A\00"
@.str.21 = [11 x i8] c" pid=%02X\0A\00"
@.str.22 = [2 x i8] c".\00"
define void @display_packet(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
store i8* %0, i8** %3
store i32 %1, i32* %4
store i8 1, i8* %5
store i8 0, i8* %6
%9 = load i8*, i8** %3
%10 = icmp ne i8* %9, null
br i1 %10, label %11, label %14
11: ; preds = %2
%12 = load i32, i32* %4
%13 = icmp ne i32 %12, 0
br i1 %13, label %15, label %14
14: ; preds = %11, %2
br label %537
15: ; preds = %11
%16 = load i32, i32* %4
%17 = icmp ult i32 %16, 8
br i1 %17, label %18, label %19
18: ; preds = %15
br label %537
19: ; preds = %15
%20 = load i8*, i8** %3
%21 = getelementptr inbounds i8, i8* %20, i64 1
%22 = load i8, i8* %21
%23 = zext i8 %22 to i32
%24 = and i32 %23, 1
%25 = icmp ne i32 %24, 0
br i1 %25, label %26, label %167
26: ; preds = %19
store i8 0, i8* %5
%27 = load i8*, i8** %3
%28 = getelementptr inbounds i8, i8* %27, i64 1
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = and i32 %30, 2
%32 = icmp ne i32 %31, 0
%33 = zext i1 %32 to i32
%34 = trunc i32 %33 to i8
store i8 %34, i8* %6
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%36 = load i8*, i8** %3
%37 = getelementptr inbounds i8, i8* %36, i64 2
%38 = load i8, i8* %37
%39 = zext i8 %38 to i32
%40 = ashr i32 %39, 2
%41 = and i32 %40, 63
%42 = trunc i32 %41 to i8
store i8 %42, i8* %7
%43 = load i8, i8* %7
%44 = icmp ne i8 %43, 0
br i1 %44, label %45, label %50
45: ; preds = %26
%46 = load i8, i8* %7
%47 = zext i8 %46 to i32
%48 = add nsw i32 %47, 32
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %48)
br label %50
50: ; preds = %45, %26
%51 = load i8*, i8** %3
%52 = getelementptr inbounds i8, i8* %51, i64 2
%53 = load i8, i8* %52
%54 = zext i8 %53 to i32
%55 = shl i32 %54, 4
%56 = load i8*, i8** %3
%57 = getelementptr inbounds i8, i8* %56, i64 3
%58 = load i8, i8* %57
%59 = zext i8 %58 to i32
%60 = ashr i32 %59, 4
%61 = and i32 %60, 15
%62 = or i32 %55, %61
%63 = and i32 %62, 63
%64 = trunc i32 %63 to i8
store i8 %64, i8* %7
%65 = load i8, i8* %7
%66 = icmp ne i8 %65, 0
br i1 %66, label %67, label %72
67: ; preds = %50
%68 = load i8, i8* %7
%69 = zext i8 %68 to i32
%70 = add nsw i32 %69, 32
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %70)
br label %72
72: ; preds = %67, %50
%73 = load i8*, i8** %3
%74 = getelementptr inbounds i8, i8* %73, i64 3
%75 = load i8, i8* %74
%76 = zext i8 %75 to i32
%77 = shl i32 %76, 2
%78 = load i8*, i8** %3
%79 = getelementptr inbounds i8, i8* %78, i64 4
%80 = load i8, i8* %79
%81 = zext i8 %80 to i32
%82 = ashr i32 %81, 6
%83 = and i32 %82, 3
%84 = or i32 %77, %83
%85 = and i32 %84, 63
%86 = trunc i32 %85 to i8
store i8 %86, i8* %7
%87 = load i8, i8* %7
%88 = icmp ne i8 %87, 0
br i1 %88, label %89, label %94
89: ; preds = %72
%90 = load i8, i8* %7
%91 = zext i8 %90 to i32
%92 = add nsw i32 %91, 32
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %92)
br label %94
94: ; preds = %89, %72
%95 = load i8*, i8** %3
%96 = getelementptr inbounds i8, i8* %95, i64 4
%97 = load i8, i8* %96
%98 = zext i8 %97 to i32
%99 = and i32 %98, 63
%100 = trunc i32 %99 to i8
store i8 %100, i8* %7
%101 = load i8, i8* %7
%102 = icmp ne i8 %101, 0
br i1 %102, label %103, label %108
103: ; preds = %94
%104 = load i8, i8* %7
%105 = zext i8 %104 to i32
%106 = add nsw i32 %105, 32
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %106)
br label %108
108: ; preds = %103, %94
%109 = load i8*, i8** %3
%110 = getelementptr inbounds i8, i8* %109, i64 5
%111 = load i8, i8* %110
%112 = zext i8 %111 to i32
%113 = ashr i32 %112, 2
%114 = and i32 %113, 63
%115 = trunc i32 %114 to i8
store i8 %115, i8* %7
%116 = load i8, i8* %7
%117 = icmp ne i8 %116, 0
br i1 %117, label %118, label %123
118: ; preds = %108
%119 = load i8, i8* %7
%120 = zext i8 %119 to i32
%121 = add nsw i32 %120, 32
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %121)
br label %123
123: ; preds = %118, %108
%124 = load i8*, i8** %3
%125 = getelementptr inbounds i8, i8* %124, i64 5
%126 = load i8, i8* %125
%127 = zext i8 %126 to i32
%128 = shl i32 %127, 4
%129 = load i8*, i8** %3
%130 = getelementptr inbounds i8, i8* %129, i64 6
%131 = load i8, i8* %130
%132 = zext i8 %131 to i32
%133 = ashr i32 %132, 4
%134 = and i32 %133, 15
%135 = or i32 %128, %134
%136 = and i32 %135, 63
%137 = trunc i32 %136 to i8
store i8 %137, i8* %7
%138 = load i8, i8* %7
%139 = icmp ne i8 %138, 0
br i1 %139, label %140, label %145
140: ; preds = %123
%141 = load i8, i8* %7
%142 = zext i8 %141 to i32
%143 = add nsw i32 %142, 32
%144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %143)
br label %145
145: ; preds = %140, %123
%146 = load i8*, i8** %3
%147 = getelementptr inbounds i8, i8* %146, i64 6
%148 = load i8, i8* %147
%149 = zext i8 %148 to i32
%150 = and i32 %149, 15
%151 = load i8*, i8** %3
%152 = getelementptr inbounds i8, i8* %151, i64 0
%153 = load i8, i8* %152
%154 = zext i8 %153 to i32
%155 = shl i32 %154, 6
%156 = load i8*, i8** %3
%157 = getelementptr inbounds i8, i8* %156, i64 1
%158 = load i8, i8* %157
%159 = zext i8 %158 to i32
%160 = ashr i32 %159, 2
%161 = or i32 %155, %160
%162 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0), i32 %150, i32 %161)
%163 = load i8*, i8** %3
%164 = getelementptr inbounds i8, i8* %163, i64 7
store i8* %164, i8** %3
%165 = load i32, i32* %4
%166 = sub i32 %165, 7
store i32 %166, i32* %4
br label %340
167: ; preds = %19
%168 = load i32, i32* %4
%169 = icmp ult i32 %168, 15
br i1 %169, label %170, label %171
170: ; preds = %167
br label %537
171: ; preds = %167
%172 = load i8*, i8** %3
%173 = getelementptr inbounds i8, i8* %172, i64 6
%174 = load i8, i8* %173
%175 = zext i8 %174 to i32
%176 = and i32 %175, 128
%177 = load i8*, i8** %3
%178 = getelementptr inbounds i8, i8* %177, i64 13
%179 = load i8, i8* %178
%180 = zext i8 %179 to i32
%181 = and i32 %180, 128
%182 = icmp ne i32 %176, %181
br i1 %182, label %183, label %190
183: ; preds = %171
store i8 0, i8* %5
%184 = load i8*, i8** %3
%185 = getelementptr inbounds i8, i8* %184, i64 6
%186 = load i8, i8* %185
%187 = zext i8 %186 to i32
%188 = and i32 %187, 128
%189 = trunc i32 %188 to i8
store i8 %189, i8* %6
br label %190
190: ; preds = %183, %171
%191 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
store i8 7, i8* %7
br label %192
192: ; preds = %215, %190
%193 = load i8, i8* %7
%194 = zext i8 %193 to i32
%195 = icmp slt i32 %194, 13
br i1 %195, label %196, label %218
196: ; preds = %192
%197 = load i8*, i8** %3
%198 = load i8, i8* %7
%199 = zext i8 %198 to i64
%200 = getelementptr inbounds i8, i8* %197, i64 %199
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = and i32 %202, 254
%204 = icmp ne i32 %203, 64
br i1 %204, label %205, label %214
205: ; preds = %196
%206 = load i8*, i8** %3
%207 = load i8, i8* %7
%208 = zext i8 %207 to i64
%209 = getelementptr inbounds i8, i8* %206, i64 %208
%210 = load i8, i8* %209
%211 = zext i8 %210 to i32
%212 = ashr i32 %211, 1
%213 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %212)
br label %214
214: ; preds = %205, %196
br label %215
215: ; preds = %214
%216 = load i8, i8* %7
%217 = add i8 %216, 1
store i8 %217, i8* %7
br label %192
218: ; preds = %192
%219 = load i8*, i8** %3
%220 = getelementptr inbounds i8, i8* %219, i64 13
%221 = load i8, i8* %220
%222 = zext i8 %221 to i32
%223 = ashr i32 %222, 1
%224 = and i32 %223, 15
%225 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 %224)
store i8 0, i8* %7
br label %226
226: ; preds = %249, %218
%227 = load i8, i8* %7
%228 = zext i8 %227 to i32
%229 = icmp slt i32 %228, 6
br i1 %229, label %230, label %252
230: ; preds = %226
%231 = load i8*, i8** %3
%232 = load i8, i8* %7
%233 = zext i8 %232 to i64
%234 = getelementptr inbounds i8, i8* %231, i64 %233
%235 = load i8, i8* %234
%236 = zext i8 %235 to i32
%237 = and i32 %236, 254
%238 = icmp ne i32 %237, 64
br i1 %238, label %239, label %248
239: ; preds = %230
%240 = load i8*, i8** %3
%241 = load i8, i8* %7
%242 = zext i8 %241 to i64
%243 = getelementptr inbounds i8, i8* %240, i64 %242
%244 = load i8, i8* %243
%245 = zext i8 %244 to i32
%246 = ashr i32 %245, 1
%247 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %246)
br label %248
248: ; preds = %239, %230
br label %249
249: ; preds = %248
%250 = load i8, i8* %7
%251 = add i8 %250, 1
store i8 %251, i8* %7
br label %226
252: ; preds = %226
%253 = load i8*, i8** %3
%254 = getelementptr inbounds i8, i8* %253, i64 6
%255 = load i8, i8* %254
%256 = zext i8 %255 to i32
%257 = ashr i32 %256, 1
%258 = and i32 %257, 15
%259 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %258)
%260 = load i8*, i8** %3
%261 = getelementptr inbounds i8, i8* %260, i64 14
store i8* %261, i8** %3
%262 = load i32, i32* %4
%263 = sub i32 %262, 14
store i32 %263, i32* %4
%264 = load i8*, i8** %3
%265 = getelementptr inbounds i8, i8* %264, i64 -1
%266 = load i8, i8* %265
%267 = zext i8 %266 to i32
%268 = and i32 %267, 1
%269 = icmp ne i32 %268, 0
br i1 %269, label %275, label %270
270: ; preds = %252
%271 = load i32, i32* %4
%272 = icmp uge i32 %271, 7
br i1 %272, label %273, label %275
273: ; preds = %270
%274 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
br label %275
275: ; preds = %273, %270, %252
br label %276
276: ; preds = %338, %275
%277 = load i8*, i8** %3
%278 = getelementptr inbounds i8, i8* %277, i64 -1
%279 = load i8, i8* %278
%280 = zext i8 %279 to i32
%281 = and i32 %280, 1
%282 = icmp ne i32 %281, 0
br i1 %282, label %286, label %283
283: ; preds = %276
%284 = load i32, i32* %4
%285 = icmp uge i32 %284, 7
br label %286
286: ; preds = %283, %276
%287 = phi i1 [ false, %276 ], [ %285, %283 ]
br i1 %287, label %288, label %339
288: ; preds = %286
store i8 0, i8* %7
br label %289
289: ; preds = %312, %288
%290 = load i8, i8* %7
%291 = zext i8 %290 to i32
%292 = icmp slt i32 %291, 6
br i1 %292, label %293, label %315
293: ; preds = %289
%294 = load i8*, i8** %3
%295 = load i8, i8* %7
%296 = zext i8 %295 to i64
%297 = getelementptr inbounds i8, i8* %294, i64 %296
%298 = load i8, i8* %297
%299 = zext i8 %298 to i32
%300 = and i32 %299, 254
%301 = icmp ne i32 %300, 64
br i1 %301, label %302, label %311
302: ; preds = %293
%303 = load i8*, i8** %3
%304 = load i8, i8* %7
%305 = zext i8 %304 to i64
%306 = getelementptr inbounds i8, i8* %303, i64 %305
%307 = load i8, i8* %306
%308 = zext i8 %307 to i32
%309 = ashr i32 %308, 1
%310 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %309)
br label %311
311: ; preds = %302, %293
br label %312
312: ; preds = %311
%313 = load i8, i8* %7
%314 = add i8 %313, 1
store i8 %314, i8* %7
br label %289
315: ; preds = %289
%316 = load i8*, i8** %3
%317 = getelementptr inbounds i8, i8* %316, i64 6
%318 = load i8, i8* %317
%319 = zext i8 %318 to i32
%320 = ashr i32 %319, 1
%321 = and i32 %320, 15
%322 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %321)
%323 = load i8*, i8** %3
%324 = getelementptr inbounds i8, i8* %323, i64 7
store i8* %324, i8** %3
%325 = load i32, i32* %4
%326 = sub i32 %325, 7
store i32 %326, i32* %4
%327 = load i8*, i8** %3
%328 = getelementptr inbounds i8, i8* %327, i64 -1
%329 = load i8, i8* %328
%330 = zext i8 %329 to i32
%331 = and i32 %330, 1
%332 = icmp ne i32 %331, 0
br i1 %332, label %338, label %333
333: ; preds = %315
%334 = load i32, i32* %4
%335 = icmp uge i32 %334, 7
br i1 %335, label %336, label %338
336: ; preds = %333
%337 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
br label %338
338: ; preds = %336, %333, %315
br label %276
339: ; preds = %286
br label %340
340: ; preds = %339, %145
%341 = load i32, i32* %4
%342 = icmp ne i32 %341, 0
br i1 %342, label %344, label %343
343: ; preds = %340
br label %537
344: ; preds = %340
%345 = load i8*, i8** %3
%346 = getelementptr inbounds i8, i8* %345, i32 1
store i8* %346, i8** %3
%347 = load i8, i8* %345
store i8 %347, i8* %7
%348 = load i32, i32* %4
%349 = add i32 %348, -1
store i32 %349, i32* %4
%350 = load i8, i8* %5
%351 = zext i8 %350 to i32
%352 = icmp ne i32 %351, 0
br i1 %352, label %353, label %360
353: ; preds = %344
%354 = load i8, i8* %7
%355 = zext i8 %354 to i32
%356 = and i32 %355, 16
%357 = icmp ne i32 %356, 0
%358 = zext i1 %357 to i64
%359 = select i1 %357, i32 33, i32 32
br label %379
360: ; preds = %344
%361 = load i8, i8* %7
%362 = zext i8 %361 to i32
%363 = and i32 %362, 16
%364 = icmp ne i32 %363, 0
br i1 %364, label %365, label %371
365: ; preds = %360
%366 = load i8, i8* %6
%367 = zext i8 %366 to i32
%368 = icmp ne i32 %367, 0
%369 = zext i1 %368 to i64
%370 = select i1 %368, i32 43, i32 45
br label %377
371: ; preds = %360
%372 = load i8, i8* %6
%373 = zext i8 %372 to i32
%374 = icmp ne i32 %373, 0
%375 = zext i1 %374 to i64
%376 = select i1 %374, i32 94, i32 118
br label %377
377: ; preds = %371, %365
%378 = phi i32 [ %370, %365 ], [ %376, %371 ]
br label %379
379: ; preds = %377, %353
%380 = phi i32 [ %359, %353 ], [ %378, %377 ]
%381 = trunc i32 %380 to i8
store i8 %381, i8* %8
%382 = load i8, i8* %7
%383 = zext i8 %382 to i32
%384 = and i32 %383, 1
%385 = icmp ne i32 %384, 0
br i1 %385, label %398, label %386
386: ; preds = %379
%387 = load i8, i8* %7
%388 = zext i8 %387 to i32
%389 = ashr i32 %388, 5
%390 = and i32 %389, 7
%391 = load i8, i8* %7
%392 = zext i8 %391 to i32
%393 = ashr i32 %392, 1
%394 = and i32 %393, 7
%395 = load i8, i8* %8
%396 = zext i8 %395 to i32
%397 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i32 %390, i32 %394, i32 %396)
br label %480
398: ; preds = %379
%399 = load i8, i8* %7
%400 = zext i8 %399 to i32
%401 = and i32 %400, 2
%402 = icmp ne i32 %401, 0
br i1 %402, label %403, label %439
403: ; preds = %398
%404 = load i8, i8* %7
%405 = zext i8 %404 to i32
%406 = and i32 %405, -17
switch i32 %406, label %431 [
i32 3, label %407
i32 47, label %411
i32 67, label %415
i32 15, label %419
i32 99, label %423
i32 135, label %427
]
407: ; preds = %403
%408 = load i8, i8* %8
%409 = zext i8 %408 to i32
%410 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0), i32 %409)
br label %438
411: ; preds = %403
%412 = load i8, i8* %8
%413 = zext i8 %412 to i32
%414 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0), i32 %413)
br label %438
415: ; preds = %403
%416 = load i8, i8* %8
%417 = zext i8 %416 to i32
%418 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 %417)
br label %438
419: ; preds = %403
%420 = load i8, i8* %8
%421 = zext i8 %420 to i32
%422 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i32 %421)
br label %438
423: ; preds = %403
%424 = load i8, i8* %8
%425 = zext i8 %424 to i32
%426 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %425)
br label %438
427: ; preds = %403
%428 = load i8, i8* %8
%429 = zext i8 %428 to i32
%430 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0), i32 %429)
br label %438
431: ; preds = %403
%432 = load i8, i8* %7
%433 = zext i8 %432 to i32
%434 = and i32 %433, -17
%435 = load i8, i8* %8
%436 = zext i8 %435 to i32
%437 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.15, i64 0, i64 0), i32 %434, i32 %436)
br label %438
438: ; preds = %431, %427, %423, %419, %415, %411, %407
br label %479
439: ; preds = %398
%440 = load i8, i8* %7
%441 = zext i8 %440 to i32
%442 = and i32 %441, 15
switch i32 %442, label %467 [
i32 1, label %443
i32 5, label %451
i32 9, label %459
]
443: ; preds = %439
%444 = load i8, i8* %7
%445 = zext i8 %444 to i32
%446 = ashr i32 %445, 5
%447 = and i32 %446, 7
%448 = load i8, i8* %8
%449 = zext i8 %448 to i32
%450 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0), i32 %447, i32 %449)
br label %478
451: ; preds = %439
%452 = load i8, i8* %7
%453 = zext i8 %452 to i32
%454 = ashr i32 %453, 5
%455 = and i32 %454, 7
%456 = load i8, i8* %8
%457 = zext i8 %456 to i32
%458 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.17, i64 0, i64 0), i32 %455, i32 %457)
br label %478
459: ; preds = %439
%460 = load i8, i8* %7
%461 = zext i8 %460 to i32
%462 = ashr i32 %461, 5
%463 = and i32 %462, 7
%464 = load i8, i8* %8
%465 = zext i8 %464 to i32
%466 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0), i32 %463, i32 %465)
br label %478
467: ; preds = %439
%468 = load i8, i8* %7
%469 = zext i8 %468 to i32
%470 = and i32 %469, 15
%471 = load i8, i8* %7
%472 = zext i8 %471 to i32
%473 = ashr i32 %472, 5
%474 = and i32 %473, 7
%475 = load i8, i8* %8
%476 = zext i8 %475 to i32
%477 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.19, i64 0, i64 0), i32 %470, i32 %474, i32 %476)
br label %478
478: ; preds = %467, %459, %451, %443
br label %479
479: ; preds = %478, %438
br label %480
480: ; preds = %479, %386
%481 = load i32, i32* %4
%482 = icmp ne i32 %481, 0
br i1 %482, label %485, label %483
483: ; preds = %480
%484 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %537
485: ; preds = %480
%486 = load i8*, i8** %3
%487 = getelementptr inbounds i8, i8* %486, i32 1
store i8* %487, i8** %3
%488 = load i8, i8* %486
%489 = zext i8 %488 to i32
%490 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0), i32 %489)
%491 = load i32, i32* %4
%492 = add i32 %491, -1
store i32 %492, i32* %4
store i8 0, i8* %8
br label %493
493: ; preds = %529, %485
%494 = load i32, i32* %4
%495 = icmp ne i32 %494, 0
br i1 %495, label %496, label %532
496: ; preds = %493
%497 = load i8*, i8** %3
%498 = getelementptr inbounds i8, i8* %497, i32 1
store i8* %498, i8** %3
%499 = load i8, i8* %497
store i8 %499, i8* %7
%500 = load i8, i8* %7
%501 = zext i8 %500 to i32
%502 = icmp sge i32 %501, 32
br i1 %502, label %503, label %511
503: ; preds = %496
%504 = load i8, i8* %7
%505 = zext i8 %504 to i32
%506 = icmp slt i32 %505, 128
br i1 %506, label %507, label %511
507: ; preds = %503
%508 = load i8, i8* %7
%509 = zext i8 %508 to i32
%510 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %509)
br label %524
511: ; preds = %503, %496
%512 = load i8, i8* %7
%513 = zext i8 %512 to i32
%514 = icmp eq i32 %513, 13
br i1 %514, label %515, label %521
515: ; preds = %511
%516 = load i8, i8* %8
%517 = icmp ne i8 %516, 0
br i1 %517, label %518, label %520
518: ; preds = %515
%519 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %520
520: ; preds = %518, %515
store i8 0, i8* %8
br label %523
521: ; preds = %511
%522 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.22, i64 0, i64 0))
br label %523
523: ; preds = %521, %520
br label %524
524: ; preds = %523, %507
%525 = load i8, i8* %7
%526 = zext i8 %525 to i32
%527 = icmp sge i32 %526, 32
br i1 %527, label %528, label %529
528: ; preds = %524
store i8 1, i8* %8
br label %529
529: ; preds = %528, %524
%530 = load i32, i32* %4
%531 = add i32 %530, -1
store i32 %531, i32* %4
br label %493
532: ; preds = %493
%533 = load i8, i8* %8
%534 = icmp ne i8 %533, 0
br i1 %534, label %535, label %537
535: ; preds = %532
%536 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %537
537: ; preds = %14, %18, %170, %343, %483, %535, %532
ret void
}

LLVM IR (-O2):
@.str = [9 x i8] c"fm ? to \00"
@.str.2 = [14 x i8] c"-%u QSO Nr %u\00"
@.str.3 = [4 x i8] c"fm \00"
@.str.4 = [8 x i8] c"-%u to \00"
@.str.5 = [4 x i8] c"-%u\00"
@.str.6 = [6 x i8] c" via \00"
@.str.8 = [9 x i8] c" I%u%u%c\00"
@.str.9 = [6 x i8] c" UI%c\00"
@.str.10 = [8 x i8] c" SABM%c\00"
@.str.11 = [8 x i8] c" DISC%c\00"
@.str.12 = [6 x i8] c" DM%c\00"
@.str.13 = [6 x i8] c" UA%c\00"
@.str.14 = [8 x i8] c" FRMR%c\00"
@.str.15 = [20 x i8] c" unknown U (0x%x)%c\00"
@.str.16 = [8 x i8] c" RR%u%c\00"
@.str.17 = [9 x i8] c" RNR%u%c\00"
@.str.18 = [9 x i8] c" REJ%u%c\00"
@.str.19 = [22 x i8] c" unknown S (0x%x)%u%c\00"
@.str.21 = [11 x i8] c" pid=%02X\0A\00"
define void @display_packet(i8* %0, i32 %1) {
%3 = icmp eq i8* %0, null
%4 = icmp ult i32 %1, 8
%5 = or i1 %3, %4
br i1 %5, label %440, label %6
6: ; preds = %2
%7 = getelementptr inbounds i8, i8* %0, i64 1
%8 = load i8, i8* %7
%9 = and i8 %8, 1
%10 = icmp eq i8 %9, 0
br i1 %10, label %100, label %11
11: ; preds = %6
%12 = lshr i8 %8, 1
%13 = and i8 %12, 1
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%15 = getelementptr inbounds i8, i8* %0, i64 2
%16 = load i8, i8* %15
%17 = icmp ult i8 %16, 4
br i1 %17, label %24, label %18
18: ; preds = %11
%19 = lshr i8 %16, 2
%20 = add nuw nsw i8 %19, 32
%21 = zext i8 %20 to i32
%22 = tail call i32 @putchar(i32 %21)
%23 = load i8, i8* %15
br label %24
24: ; preds = %18, %11
%25 = phi i8 [ %23, %18 ], [ %16, %11 ]
%26 = shl i8 %25, 4
%27 = getelementptr inbounds i8, i8* %0, i64 3
%28 = load i8, i8* %27
%29 = lshr i8 %28, 4
%30 = and i8 %26, 48
%31 = or i8 %30, %29
%32 = icmp eq i8 %31, 0
br i1 %32, label %38, label %33
33: ; preds = %24
%34 = add nuw nsw i8 %31, 32
%35 = zext i8 %34 to i32
%36 = tail call i32 @putchar(i32 %35)
%37 = load i8, i8* %27
br label %38
38: ; preds = %33, %24
%39 = phi i8 [ %37, %33 ], [ %28, %24 ]
%40 = shl i8 %39, 2
%41 = getelementptr inbounds i8, i8* %0, i64 4
%42 = load i8, i8* %41
%43 = lshr i8 %42, 6
%44 = and i8 %40, 60
%45 = or i8 %44, %43
%46 = icmp eq i8 %45, 0
br i1 %46, label %52, label %47
47: ; preds = %38
%48 = add nuw nsw i8 %45, 32
%49 = zext i8 %48 to i32
%50 = tail call i32 @putchar(i32 %49)
%51 = load i8, i8* %41
br label %52
52: ; preds = %47, %38
%53 = phi i8 [ %51, %47 ], [ %42, %38 ]
%54 = and i8 %53, 63
%55 = icmp eq i8 %54, 0
br i1 %55, label %60, label %56
56: ; preds = %52
%57 = add nuw nsw i8 %54, 32
%58 = zext i8 %57 to i32
%59 = tail call i32 @putchar(i32 %58)
br label %60
60: ; preds = %56, %52
%61 = getelementptr inbounds i8, i8* %0, i64 5
%62 = load i8, i8* %61
%63 = icmp ult i8 %62, 4
br i1 %63, label %70, label %64
64: ; preds = %60
%65 = lshr i8 %62, 2
%66 = add nuw nsw i8 %65, 32
%67 = zext i8 %66 to i32
%68 = tail call i32 @putchar(i32 %67)
%69 = load i8, i8* %61
br label %70
70: ; preds = %64, %60
%71 = phi i8 [ %69, %64 ], [ %62, %60 ]
%72 = shl i8 %71, 4
%73 = getelementptr inbounds i8, i8* %0, i64 6
%74 = load i8, i8* %73
%75 = lshr i8 %74, 4
%76 = and i8 %72, 48
%77 = or i8 %76, %75
%78 = icmp eq i8 %77, 0
br i1 %78, label %84, label %79
79: ; preds = %70
%80 = add nuw nsw i8 %77, 32
%81 = zext i8 %80 to i32
%82 = tail call i32 @putchar(i32 %81)
%83 = load i8, i8* %73
br label %84
84: ; preds = %79, %70
%85 = phi i8 [ %83, %79 ], [ %74, %70 ]
%86 = and i8 %85, 15
%87 = zext i8 %86 to i32
%88 = load i8, i8* %0
%89 = zext i8 %88 to i32
%90 = shl nuw nsw i32 %89, 6
%91 = load i8, i8* %7
%92 = lshr i8 %91, 2
%93 = zext i8 %92 to i32
%94 = or i32 %90, %93
%95 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0), i32 %87, i32 %94)
%96 = getelementptr inbounds i8, i8* %0, i64 7
%97 = add i32 %1, -7
%98 = getelementptr inbounds i8, i8* %0, i64 8
%99 = load i8, i8* %96
br label %330
100: ; preds = %6
%101 = icmp ult i32 %1, 15
br i1 %101, label %440, label %102
102: ; preds = %100
%103 = getelementptr inbounds i8, i8* %0, i64 6
%104 = load i8, i8* %103
%105 = and i8 %104, -128
%106 = getelementptr inbounds i8, i8* %0, i64 13
%107 = load i8, i8* %106
%108 = and i8 %107, -128
%109 = icmp eq i8 %105, %108
%110 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
%111 = getelementptr inbounds i8, i8* %0, i64 7
%112 = load i8, i8* %111
%113 = zext i8 %112 to i32
%114 = and i32 %113, 254
%115 = icmp eq i32 %114, 64
br i1 %115, label %119, label %116
116: ; preds = %102
%117 = lshr i32 %113, 1
%118 = tail call i32 @putchar(i32 %117)
br label %119
119: ; preds = %102, %116
%120 = getelementptr inbounds i8, i8* %0, i64 8
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = and i32 %122, 254
%124 = icmp eq i32 %123, 64
br i1 %124, label %128, label %125
125: ; preds = %119
%126 = lshr i32 %122, 1
%127 = tail call i32 @putchar(i32 %126)
br label %128
128: ; preds = %125, %119
%129 = getelementptr inbounds i8, i8* %0, i64 9
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = and i32 %131, 254
%133 = icmp eq i32 %132, 64
br i1 %133, label %137, label %134
134: ; preds = %128
%135 = lshr i32 %131, 1
%136 = tail call i32 @putchar(i32 %135)
br label %137
137: ; preds = %134, %128
%138 = getelementptr inbounds i8, i8* %0, i64 10
%139 = load i8, i8* %138
%140 = zext i8 %139 to i32
%141 = and i32 %140, 254
%142 = icmp eq i32 %141, 64
br i1 %142, label %146, label %143
143: ; preds = %137
%144 = lshr i32 %140, 1
%145 = tail call i32 @putchar(i32 %144)
br label %146
146: ; preds = %143, %137
%147 = getelementptr inbounds i8, i8* %0, i64 11
%148 = load i8, i8* %147
%149 = zext i8 %148 to i32
%150 = and i32 %149, 254
%151 = icmp eq i32 %150, 64
br i1 %151, label %155, label %152
152: ; preds = %146
%153 = lshr i32 %149, 1
%154 = tail call i32 @putchar(i32 %153)
br label %155
155: ; preds = %152, %146
%156 = getelementptr inbounds i8, i8* %0, i64 12
%157 = load i8, i8* %156
%158 = zext i8 %157 to i32
%159 = and i32 %158, 254
%160 = icmp eq i32 %159, 64
br i1 %160, label %164, label %161
161: ; preds = %155
%162 = lshr i32 %158, 1
%163 = tail call i32 @putchar(i32 %162)
br label %164
164: ; preds = %161, %155
%165 = load i8, i8* %106
%166 = lshr i8 %165, 1
%167 = and i8 %166, 15
%168 = zext i8 %167 to i32
%169 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 %168)
%170 = load i8, i8* %0
%171 = zext i8 %170 to i32
%172 = and i32 %171, 254
%173 = icmp eq i32 %172, 64
br i1 %173, label %177, label %174
174: ; preds = %164
%175 = lshr i32 %171, 1
%176 = tail call i32 @putchar(i32 %175)
br label %177
177: ; preds = %164, %174
%178 = load i8, i8* %7
%179 = zext i8 %178 to i32
%180 = and i32 %179, 254
%181 = icmp eq i32 %180, 64
br i1 %181, label %185, label %182
182: ; preds = %177
%183 = lshr i32 %179, 1
%184 = tail call i32 @putchar(i32 %183)
br label %185
185: ; preds = %182, %177
%186 = getelementptr inbounds i8, i8* %0, i64 2
%187 = load i8, i8* %186
%188 = zext i8 %187 to i32
%189 = and i32 %188, 254
%190 = icmp eq i32 %189, 64
br i1 %190, label %194, label %191
191: ; preds = %185
%192 = lshr i32 %188, 1
%193 = tail call i32 @putchar(i32 %192)
br label %194
194: ; preds = %191, %185
%195 = getelementptr inbounds i8, i8* %0, i64 3
%196 = load i8, i8* %195
%197 = zext i8 %196 to i32
%198 = and i32 %197, 254
%199 = icmp eq i32 %198, 64
br i1 %199, label %203, label %200
200: ; preds = %194
%201 = lshr i32 %197, 1
%202 = tail call i32 @putchar(i32 %201)
br label %203
203: ; preds = %200, %194
%204 = getelementptr inbounds i8, i8* %0, i64 4
%205 = load i8, i8* %204
%206 = zext i8 %205 to i32
%207 = and i32 %206, 254
%208 = icmp eq i32 %207, 64
br i1 %208, label %212, label %209
209: ; preds = %203
%210 = lshr i32 %206, 1
%211 = tail call i32 @putchar(i32 %210)
br label %212
212: ; preds = %209, %203
%213 = getelementptr inbounds i8, i8* %0, i64 5
%214 = load i8, i8* %213
%215 = zext i8 %214 to i32
%216 = and i32 %215, 254
%217 = icmp eq i32 %216, 64
br i1 %217, label %221, label %218
218: ; preds = %212
%219 = lshr i32 %215, 1
%220 = tail call i32 @putchar(i32 %219)
br label %221
221: ; preds = %218, %212
%222 = load i8, i8* %103
%223 = lshr i8 %222, 1
%224 = and i8 %223, 15
%225 = zext i8 %224 to i32
%226 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %225)
%227 = getelementptr inbounds i8, i8* %0, i64 14
%228 = add i32 %1, -14
%229 = load i8, i8* %106
%230 = and i8 %229, 1
%231 = icmp eq i8 %230, 0
%232 = icmp ugt i32 %228, 6
%233 = and i1 %232, %231
br i1 %233, label %234, label %237
234: ; preds = %221
%235 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%236 = load i8, i8* %106
br label %237
237: ; preds = %234, %221
%238 = phi i8 [ %236, %234 ], [ %229, %221 ]
%239 = and i8 %238, 1
%240 = icmp eq i8 %239, 0
%241 = and i1 %240, %232
br i1 %241, label %242, label %321
242: ; preds = %237, %315
%243 = phi i32 [ %305, %315 ], [ %228, %237 ]
%244 = phi i8* [ %304, %315 ], [ %227, %237 ]
%245 = load i8, i8* %244
%246 = zext i8 %245 to i32
%247 = and i32 %246, 254
%248 = icmp eq i32 %247, 64
br i1 %248, label %252, label %249
249: ; preds = %242
%250 = lshr i32 %246, 1
%251 = tail call i32 @putchar(i32 %250)
br label %252
252: ; preds = %242, %249
%253 = getelementptr inbounds i8, i8* %244, i64 1
%254 = load i8, i8* %253
%255 = zext i8 %254 to i32
%256 = and i32 %255, 254
%257 = icmp eq i32 %256, 64
br i1 %257, label %261, label %258
258: ; preds = %252
%259 = lshr i32 %255, 1
%260 = tail call i32 @putchar(i32 %259)
br label %261
261: ; preds = %258, %252
%262 = getelementptr inbounds i8, i8* %244, i64 2
%263 = load i8, i8* %262
%264 = zext i8 %263 to i32
%265 = and i32 %264, 254
%266 = icmp eq i32 %265, 64
br i1 %266, label %270, label %267
267: ; preds = %261
%268 = lshr i32 %264, 1
%269 = tail call i32 @putchar(i32 %268)
br label %270
270: ; preds = %267, %261
%271 = getelementptr inbounds i8, i8* %244, i64 3
%272 = load i8, i8* %271
%273 = zext i8 %272 to i32
%274 = and i32 %273, 254
%275 = icmp eq i32 %274, 64
br i1 %275, label %279, label %276
276: ; preds = %270
%277 = lshr i32 %273, 1
%278 = tail call i32 @putchar(i32 %277)
br label %279
279: ; preds = %276, %270
%280 = getelementptr inbounds i8, i8* %244, i64 4
%281 = load i8, i8* %280
%282 = zext i8 %281 to i32
%283 = and i32 %282, 254
%284 = icmp eq i32 %283, 64
br i1 %284, label %288, label %285
285: ; preds = %279
%286 = lshr i32 %282, 1
%287 = tail call i32 @putchar(i32 %286)
br label %288
288: ; preds = %285, %279
%289 = getelementptr inbounds i8, i8* %244, i64 5
%290 = load i8, i8* %289
%291 = zext i8 %290 to i32
%292 = and i32 %291, 254
%293 = icmp eq i32 %292, 64
br i1 %293, label %297, label %294
294: ; preds = %288
%295 = lshr i32 %291, 1
%296 = tail call i32 @putchar(i32 %295)
br label %297
297: ; preds = %294, %288
%298 = getelementptr inbounds i8, i8* %244, i64 6
%299 = load i8, i8* %298
%300 = lshr i8 %299, 1
%301 = and i8 %300, 15
%302 = zext i8 %301 to i32
%303 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %302)
%304 = getelementptr inbounds i8, i8* %244, i64 7
%305 = add i32 %243, -7
%306 = load i8, i8* %298
%307 = and i8 %306, 1
%308 = icmp eq i8 %307, 0
%309 = icmp ugt i32 %305, 6
%310 = select i1 %308, i1 %309, i1 false
br i1 %310, label %311, label %315
311: ; preds = %297
%312 = tail call i32 @putchar(i32 44)
%313 = load i8, i8* %298
%314 = and i8 %313, 1
br label %315
315: ; preds = %311, %297
%316 = phi i8 [ %314, %311 ], [ %307, %297 ]
%317 = icmp eq i8 %316, 0
%318 = select i1 %317, i1 %309, i1 false
br i1 %318, label %242, label %319
319: ; preds = %315
%320 = icmp eq i32 %305, 0
br i1 %320, label %440, label %321
321: ; preds = %237, %319
%322 = phi i32 [ %305, %319 ], [ %228, %237 ]
%323 = phi i8* [ %304, %319 ], [ %227, %237 ]
%324 = getelementptr inbounds i8, i8* %323, i64 1
%325 = load i8, i8* %323
br i1 %109, label %326, label %330
326: ; preds = %321
%327 = and i8 %325, 16
%328 = icmp eq i8 %327, 0
%329 = select i1 %328, i8 32, i8 33
br label %343
330: ; preds = %84, %321
%331 = phi i8 [ %99, %84 ], [ %325, %321 ]
%332 = phi i8* [ %98, %84 ], [ %324, %321 ]
%333 = phi i8* [ %96, %84 ], [ %323, %321 ]
%334 = phi i32 [ %97, %84 ], [ %322, %321 ]
%335 = phi i8 [ %13, %84 ], [ %105, %321 ]
%336 = and i8 %331, 16
%337 = icmp eq i8 %336, 0
%338 = icmp eq i8 %335, 0
br i1 %337, label %341, label %339
339: ; preds = %330
%340 = select i1 %338, i8 45, i8 43
br label %343
341: ; preds = %330
%342 = select i1 %338, i8 118, i8 94
br label %343
343: ; preds = %339, %341, %326
%344 = phi i8 [ %325, %326 ], [ %331, %339 ], [ %331, %341 ]
%345 = phi i8* [ %324, %326 ], [ %332, %339 ], [ %332, %341 ]
%346 = phi i8* [ %323, %326 ], [ %333, %339 ], [ %333, %341 ]
%347 = phi i32 [ %322, %326 ], [ %334, %339 ], [ %334, %341 ]
%348 = phi i8 [ %329, %326 ], [ %340, %339 ], [ %342, %341 ]
%349 = zext i8 %344 to i32
%350 = and i32 %349, 1
%351 = icmp eq i32 %350, 0
br i1 %351, label %352, label %358
352: ; preds = %343
%353 = lshr i32 %349, 5
%354 = lshr i32 %349, 1
%355 = and i32 %354, 7
%356 = zext i8 %348 to i32
%357 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0), i32 %353, i32 %355, i32 %356)
br label %403
358: ; preds = %343
%359 = and i32 %349, 2
%360 = icmp eq i32 %359, 0
br i1 %360, label %385, label %361
361: ; preds = %358
%362 = and i32 %349, 239
%363 = trunc i32 %362 to i8
switch i8 %363, label %382 [
i8 3, label %364
i8 47, label %367
i8 67, label %370
i8 15, label %373
i8 99, label %376
i8 -121, label %379
]
364: ; preds = %361
%365 = zext i8 %348 to i32
%366 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0), i32 %365)
br label %403
367: ; preds = %361
%368 = zext i8 %348 to i32
%369 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0), i32 %368)
br label %403
370: ; preds = %361
%371 = zext i8 %348 to i32
%372 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 %371)
br label %403
373: ; preds = %361
%374 = zext i8 %348 to i32
%375 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i32 %374)
br label %403
376: ; preds = %361
%377 = zext i8 %348 to i32
%378 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %377)
br label %403
379: ; preds = %361
%380 = zext i8 %348 to i32
%381 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i64 0, i64 0), i32 %380)
br label %403
382: ; preds = %361
%383 = zext i8 %348 to i32
%384 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.15, i64 0, i64 0), i32 %362, i32 %383)
br label %403
385: ; preds = %358
%386 = and i32 %349, 15
switch i32 %386, label %399 [
i32 1, label %387
i32 5, label %391
i32 9, label %395
]
387: ; preds = %385
%388 = lshr i32 %349, 5
%389 = zext i8 %348 to i32
%390 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.16, i64 0, i64 0), i32 %388, i32 %389)
br label %403
391: ; preds = %385
%392 = lshr i32 %349, 5
%393 = zext i8 %348 to i32
%394 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.17, i64 0, i64 0), i32 %392, i32 %393)
br label %403
395: ; preds = %385
%396 = lshr i32 %349, 5
%397 = zext i8 %348 to i32
%398 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0), i32 %396, i32 %397)
br label %403
399: ; preds = %385
%400 = lshr i32 %349, 5
%401 = zext i8 %348 to i32
%402 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.19, i64 0, i64 0), i32 %386, i32 %400, i32 %401)
br label %403
403: ; preds = %382, %379, %376, %373, %370, %367, %364, %399, %395, %391, %387, %352
%404 = icmp eq i32 %347, 1
br i1 %404, label %438, label %405
405: ; preds = %403
%406 = load i8, i8* %345
%407 = zext i8 %406 to i32
%408 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0), i32 %407)
%409 = add i32 %347, -2
%410 = icmp eq i32 %409, 0
br i1 %410, label %440, label %411
411: ; preds = %405
%412 = getelementptr inbounds i8, i8* %346, i64 2
br label %413
413: ; preds = %411, %431
%414 = phi i8 [ %433, %431 ], [ 0, %411 ]
%415 = phi i32 [ %434, %431 ], [ %409, %411 ]
%416 = phi i8* [ %417, %431 ], [ %412, %411 ]
%417 = getelementptr inbounds i8, i8* %416, i64 1
%418 = load i8, i8* %416
%419 = icmp ugt i8 %418, 31
%420 = icmp sgt i8 %418, 31
br i1 %420, label %421, label %423
421: ; preds = %413
%422 = zext i8 %418 to i32
br label %427
423: ; preds = %413
%424 = icmp eq i8 %418, 13
br i1 %424, label %425, label %427
425: ; preds = %423
%426 = icmp eq i8 %414, 0
br i1 %426, label %431, label %427
427: ; preds = %423, %425, %421
%428 = phi i32 [ %422, %421 ], [ 10, %425 ], [ 46, %423 ]
%429 = phi i8 [ %414, %421 ], [ 0, %425 ], [ %414, %423 ]
%430 = tail call i32 @putchar(i32 %428)
br label %431
431: ; preds = %427, %425
%432 = phi i8 [ 0, %425 ], [ %429, %427 ]
%433 = select i1 %419, i8 1, i8 %432
%434 = add i32 %415, -1
%435 = icmp eq i32 %434, 0
br i1 %435, label %436, label %413
436: ; preds = %431
%437 = icmp eq i8 %433, 0
br i1 %437, label %440, label %438
438: ; preds = %436, %403
%439 = tail call i32 @putchar(i32 10)
br label %440
440: ; preds = %438, %405, %436, %319, %100, %2
ret void
}