#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 */
typedef unsigned int insn;

/* Variables and functions */
int /*<<< orphan*/ get_description_by_cond(unsigned int);
int /*<<< orphan*/ qemu_log(char *, ...);
int simple_arm_insn_disas(unsigned int insn) {
  unsigned int cond, val, op1, i, shift, rm, rs, rd, rn, sh;
  cond = insn >> 28;
  if (cond == 0xf) {
    qemu_log("unused instr, cond = never\n");
  }
  if (cond != 0xe) {
    qemu_log("conditional instr. cond = %s\n", get_description_by_cond(cond));
  }
  if ((insn & 0x0f900000) == 0x03000000) {
    if ((insn & (1 << 21)) == 0) {
      rd = (insn >> 12) & 0xf;
      val = ((insn >> 4) & 0xf000) | (insn & 0xfff);
      if ((insn & (1 << 22)) == 0) {
        qemu_log("[MOVW: rd = %x  val = %x]\n", rd, val);
      } else {
        qemu_log("[MOVT: rd = %x  val = %x]\n", rd, val);
      }
    } else {
      if (((insn >> 12) & 0xf) != 0xf)
        qemu_log("illegal op\n");
      if (((insn >> 16) & 0xf) == 0) {
        qemu_log("nop hint op\n");
      } else {
        val = insn & 0xff;
        shift = ((insn >> 8) & 0xf) * 2;
        if (shift)
          val = (val >> shift) | (val << (32 - shift));
        i = ((insn & (1 << 22)) != 0);
        qemu_log("[cpsr immediate: val = %x  shift = %x]\n", val, shift);
      }
    }
  } else if ((insn & 0x0f9000000) == 0x01000000 &&
             (insn & 0x00000090) != 0x00000090) {
    op1 = (insn >> 21) & 3;
    sh = (insn >> 4) & 0xf;
    rm = insn & 0xf;
    switch (sh) {
    case 0x0:
      if (op1 & 1) {
        qemu_log("[MSR: op1 = %x  sh = %x  rm = %x ]\n", op1, sh, rm);
      } else {
        rd = (insn >> 12) & 0xf;
        qemu_log("[MRS: op1 = %x,  sh = %x  rm = %x  rd = %x]\n", op1, sh, rm,
                 rd);
      }
      break;
    case 0x1:
      if (op1 == 1) {
        qemu_log("[BX: rm = %x]\n", rm);
      } else if (op1 == 3) {
        rd = (insn >> 12) & 0xf;
        qemu_log("[CLZ: rd = %x  rm = %x]\n", rd, rm);
      }
      break;
    case 0x2:
    case 0x3:
      qemu_log("branch insn\n");
      break;
    case 0x5:
      qemu_log("saturating\n");
      break;
    case 0x7:
    case 0x8:
    case 0xa:
    case 0xc:
    case 0xe:
      qemu_log("signed multiply\n");
      break;
    }
  } else if (((insn & 0x0e000000) == 0 && (insn & 0x00000090) != 0x90) ||
             ((insn & 0x0e000000) == (1 << 25))) {
    int set_cc, logic_cc, shiftop;
    op1 = (insn >> 21) & 0xf;
    set_cc = (insn >> 20) & 1;
    if (insn & (1 << 25)) {
      val = insn & 0xff;
      shift = ((insn >> 8) & 0xf) * 2;
      if (shift) {
        val = (val >> shift) | (val << (32 - shift));
      }
      qemu_log("[MOV: val = %x  shift = %x set_cc = %x]\n", val, shift, set_cc);
    } else {
      rm = (insn)&0xf;
      shiftop = (insn >> 5) & 3;
      qemu_log("[MOV(register) rm = %x, shiftop = %x]\n", rm, shiftop);
    }
  } else {
    op1 = (insn >> 24) & 0xf;
    switch (op1) {
    case 0x0:
    case 0x1:
      qemu_log("multiples, extra load/stores\n");
      break;
    case 0x6:
    case 0x7:
      if (insn & (1 << 4)) {
        qemu_log("armv6 media instr\n");
      }
      sh = (0xf << 20) | (0xf << 4);
      rn = (insn >> 16) & 0xf;
      rd = (insn >> 12) & 0xf;
      if (insn & (1 << 20)) {
        qemu_log("[LOAD]: rn = %x, rd = %x\n", rn, rd);
      } else {
        qemu_log("[STORE]: rn = %x, rd = %x\n", rn, rd);
      }
      break;
    case 0x08:
    case 0x09:
      qemu_log("[LDM/STM]\n");
      break;
    case 0xa:
    case 0xb:
      qemu_log("[B/BL]\n");
      break;
    case 0xc:
    case 0xd:
    case 0xe:
      qemu_log("coprocessor instr\n");
      break;
    case 0xf:
      qemu_log("[SWI]\n");
      break;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<simple_arm_insn_disas>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x1c,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0xf,-0x8(%rbp)
jne    114c <simple_arm_insn_disas+0x2c>
lea    0xf37(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
cmpl   $0xe,-0x8(%rbp)
je     116e <simple_arm_insn_disas+0x4e>
mov    -0x8(%rbp),%edi
call   1040 <get_description_by_cond@plt>
mov    %eax,%esi
lea    0xf31(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
mov    -0x4(%rbp),%eax
and    $0xf900000,%eax
cmp    $0x3000000,%eax
jne    12b3 <simple_arm_insn_disas+0x193>
mov    -0x4(%rbp),%eax
and    $0x200000,%eax
cmp    $0x0,%eax
jne    11fa <simple_arm_insn_disas+0xda>
mov    -0x4(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x4,%eax
and    $0xf000,%eax
mov    -0x4(%rbp),%ecx
and    $0xfff,%ecx
or     %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
and    $0x400000,%eax
cmp    $0x0,%eax
jne    11e1 <simple_arm_insn_disas+0xc1>
mov    -0x24(%rbp),%esi
mov    -0xc(%rbp),%edx
lea    0xee1(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    11f5 <simple_arm_insn_disas+0xd5>
mov    -0x24(%rbp),%esi
mov    -0xc(%rbp),%edx
lea    0xee3(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    12ae <simple_arm_insn_disas+0x18e>
mov    -0x4(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
cmp    $0xf,%eax
je     121a <simple_arm_insn_disas+0xfa>
lea    0xed9(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
mov    -0x4(%rbp),%eax
shr    $0x10,%eax
and    $0xf,%eax
cmp    $0x0,%eax
jne    123f <simple_arm_insn_disas+0x11f>
lea    0xec5(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    12a9 <simple_arm_insn_disas+0x189>
mov    -0x4(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x8,%eax
and    $0xf,%eax
shl    $0x1,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     127f <simple_arm_insn_disas+0x15f>
mov    -0xc(%rbp),%eax
mov    -0x18(%rbp),%ecx
shr    %cl,%eax
mov    -0xc(%rbp),%edx
mov    $0x20,%ecx
sub    -0x18(%rbp),%ecx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
and    $0x400000,%eax
cmp    $0x0,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x14(%rbp)
mov    -0xc(%rbp),%esi
mov    -0x18(%rbp),%edx
lea    0xe63(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    12ae <simple_arm_insn_disas+0x18e>
jmp    1604 <simple_arm_insn_disas+0x4e4>
mov    -0x4(%rbp),%eax
and    $0xf9000000,%eax
cmp    $0x1000000,%eax
jne    1403 <simple_arm_insn_disas+0x2e3>
mov    -0x4(%rbp),%eax
and    $0x90,%eax
cmp    $0x90,%eax
je     1403 <simple_arm_insn_disas+0x2e3>
mov    -0x4(%rbp),%eax
shr    $0x15,%eax
and    $0x3,%eax
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x4,%eax
and    $0xf,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %rax,-0x40(%rbp)
sub    $0xe,%rax
ja     13fe <simple_arm_insn_disas+0x2de>
mov    -0x40(%rbp),%rax
lea    0xd2a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     134a <simple_arm_insn_disas+0x22a>
mov    -0x10(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    -0x1c(%rbp),%ecx
lea    0xdef(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    1371 <simple_arm_insn_disas+0x251>
mov    -0x4(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x24(%rbp),%r8d
lea    0xde7(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    13fe <simple_arm_insn_disas+0x2de>
cmpl   $0x1,-0x10(%rbp)
jne    1396 <simple_arm_insn_disas+0x276>
mov    -0x1c(%rbp),%esi
lea    0xdf4(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    13c5 <simple_arm_insn_disas+0x2a5>
cmpl   $0x3,-0x10(%rbp)
jne    13c0 <simple_arm_insn_disas+0x2a0>
mov    -0x4(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%esi
mov    -0x1c(%rbp),%edx
lea    0xdd4(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    13c5 <simple_arm_insn_disas+0x2a5>
jmp    13fe <simple_arm_insn_disas+0x2de>
lea    0xdd5(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    13fe <simple_arm_insn_disas+0x2de>
lea    0xdcf(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    13fe <simple_arm_insn_disas+0x2de>
lea    0xdc8(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15ff <simple_arm_insn_disas+0x4df>
mov    -0x4(%rbp),%eax
and    $0xe000000,%eax
cmp    $0x0,%eax
jne    1427 <simple_arm_insn_disas+0x307>
mov    -0x4(%rbp),%eax
and    $0x90,%eax
cmp    $0x90,%eax
jne    143a <simple_arm_insn_disas+0x31a>
mov    -0x4(%rbp),%eax
and    $0xe000000,%eax
cmp    $0x2000000,%eax
jne    14ed <simple_arm_insn_disas+0x3cd>
mov    -0x4(%rbp),%eax
shr    $0x15,%eax
and    $0xf,%eax
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x14,%eax
and    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x4(%rbp),%eax
and    $0x2000000,%eax
cmp    $0x0,%eax
je     14bf <simple_arm_insn_disas+0x39f>
mov    -0x4(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x8,%eax
and    $0xf,%eax
shl    $0x1,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     14a3 <simple_arm_insn_disas+0x383>
mov    -0xc(%rbp),%eax
mov    -0x18(%rbp),%ecx
shr    %cl,%eax
mov    -0xc(%rbp),%edx
mov    $0x20,%ecx
sub    -0x18(%rbp),%ecx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x30(%rbp),%ecx
lea    0xd1d(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    14e8 <simple_arm_insn_disas+0x3c8>
mov    -0x4(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x5,%eax
and    $0x3,%eax
mov    %eax,-0x38(%rbp)
mov    -0x1c(%rbp),%esi
mov    -0x38(%rbp),%edx
lea    0xd18(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15fa <simple_arm_insn_disas+0x4da>
movzbl -0x1(%rbp),%eax
and    $0xf,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %rax,-0x48(%rbp)
sub    $0xf,%rax
ja     15f5 <simple_arm_insn_disas+0x4d5>
mov    -0x48(%rbp),%rax
lea    0xaed(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xcfd(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15f5 <simple_arm_insn_disas+0x4d5>
mov    -0x4(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     154c <simple_arm_insn_disas+0x42c>
lea    0xcf9(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
movl   $0xf000f0,-0x2c(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x10,%eax
and    $0xf,%eax
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
and    $0x100000,%eax
cmp    $0x0,%eax
je     1595 <simple_arm_insn_disas+0x475>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xcc8(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15a9 <simple_arm_insn_disas+0x489>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xcc9(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15f5 <simple_arm_insn_disas+0x4d5>
lea    0xcd1(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15f5 <simple_arm_insn_disas+0x4d5>
lea    0xcc9(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15f5 <simple_arm_insn_disas+0x4d5>
lea    0xcbe(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15f5 <simple_arm_insn_disas+0x4d5>
lea    0xcbe(%rip),%rdi
mov    $0x0,%al
call   1030 <qemu_log@plt>
jmp    15fa <simple_arm_insn_disas+0x4da>
jmp    15ff <simple_arm_insn_disas+0x4df>
jmp    1604 <simple_arm_insn_disas+0x4e4>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<simple_arm_insn_disas>:
push   %rbp
push   %rbx
push   %rax
mov    %edi,%ebx
mov    %edi,%ebp
shr    $0x1c,%ebp
cmp    $0xe,%ebp
je     1159 <simple_arm_insn_disas+0x39>
cmp    $0xf,%ebp
jne    1142 <simple_arm_insn_disas+0x22>
lea    0xf41(%rip),%rdi
xor    %eax,%eax
call   1030 <qemu_log@plt>
mov    %ebp,%edi
call   1040 <get_description_by_cond@plt>
lea    0xf48(%rip),%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1030 <qemu_log@plt>
mov    %ebx,%eax
and    $0xf900000,%eax
cmp    $0x3000000,%eax
jne    11a7 <simple_arm_insn_disas+0x87>
test   $0x200000,%ebx
jne    11ff <simple_arm_insn_disas+0xdf>
mov    %ebx,%esi
shr    $0xc,%esi
and    $0xf,%esi
mov    %ebx,%eax
shr    $0x4,%eax
and    $0xf000,%eax
mov    %ebx,%edx
and    $0xfff,%edx
or     %eax,%edx
test   $0x400000,%ebx
jne    1286 <simple_arm_insn_disas+0x166>
lea    0xf14(%rip),%rdi
jmp    12ab <simple_arm_insn_disas+0x18b>
mov    %ebx,%ecx
and    $0xf9000000,%ecx
mov    %ebx,%eax
and    $0x90,%eax
cmp    $0x1000000,%ecx
jne    123a <simple_arm_insn_disas+0x11a>
cmp    $0x90,%eax
je     123a <simple_arm_insn_disas+0x11a>
mov    %ebx,%eax
shr    $0x4,%eax
and    $0xf,%eax
cmp    $0xe,%eax
ja     13c0 <simple_arm_insn_disas+0x2a0>
mov    %ebx,%esi
shr    $0x15,%esi
and    $0x3,%esi
mov    %ebx,%ecx
and    $0xf,%ecx
lea    0xe16(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
lea    0xfc5(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
mov    %ebx,%eax
not    %eax
test   $0xf000,%eax
je     1218 <simple_arm_insn_disas+0xf8>
lea    0xedb(%rip),%rdi
xor    %eax,%eax
call   1030 <qemu_log@plt>
test   $0xf0000,%ebx
je     12b7 <simple_arm_insn_disas+0x197>
movzbl %bl,%esi
shr    $0x7,%ebx
and    $0x1e,%ebx
mov    %ebx,%ecx
ror    %cl,%esi
lea    0xecd(%rip),%rdi
jmp    12a9 <simple_arm_insn_disas+0x189>
cmp    $0x90,%eax
sete   %al
mov    %ebx,%edx
and    $0xe000000,%edx
setne  %cl
cmp    $0x2000000,%edx
je     128f <simple_arm_insn_disas+0x16f>
or     %al,%cl
je     128f <simple_arm_insn_disas+0x16f>
mov    %ebx,%eax
shr    $0x18,%eax
and    $0xf,%eax
cmp    $0xf,%eax
ja     13c0 <simple_arm_insn_disas+0x2a0>
lea    0xdcb(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x1018(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
lea    0xe44(%rip),%rdi
jmp    12ab <simple_arm_insn_disas+0x18b>
test   $0x2000000,%ebx
jne    12c3 <simple_arm_insn_disas+0x1a3>
mov    %ebx,%esi
and    $0xf,%esi
shr    $0x5,%ebx
and    $0x3,%ebx
lea    0xf50(%rip),%rdi
mov    %ebx,%edx
xor    %eax,%eax
call   1030 <qemu_log@plt>
jmp    13c0 <simple_arm_insn_disas+0x2a0>
lea    0xe3a(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
mov    %ebx,%eax
shr    $0x14,%eax
and    $0x1,%eax
movzbl %bl,%esi
shr    $0x7,%ebx
and    $0x1e,%ebx
mov    %ebx,%ecx
ror    %cl,%esi
lea    0xef1(%rip),%rdi
mov    %ebx,%edx
mov    %eax,%ecx
xor    %eax,%eax
call   1030 <qemu_log@plt>
jmp    13c0 <simple_arm_insn_disas+0x2a0>
lea    0xeb0(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
test   $0x200000,%ebx
jne    13a4 <simple_arm_insn_disas+0x284>
shr    $0xc,%ebx
and    $0xf,%ebx
lea    0xe3d(%rip),%rdi
xor    %edx,%edx
mov    %ebx,%r8d
xor    %eax,%eax
call   1030 <qemu_log@plt>
jmp    13c0 <simple_arm_insn_disas+0x2a0>
cmp    $0x3,%esi
je     13d5 <simple_arm_insn_disas+0x2b5>
cmp    $0x1,%esi
jne    13c0 <simple_arm_insn_disas+0x2a0>
lea    0xe40(%rip),%rdi
mov    %ecx,%esi
xor    %eax,%eax
call   1030 <qemu_log@plt>
jmp    13c0 <simple_arm_insn_disas+0x2a0>
lea    0xe63(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
lea    0xec7(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
test   $0x10,%bl
je     136e <simple_arm_insn_disas+0x24e>
lea    0xed7(%rip),%rdi
xor    %eax,%eax
call   1030 <qemu_log@plt>
mov    %ebx,%esi
shr    $0x10,%esi
and    $0xf,%esi
mov    %ebx,%edx
shr    $0xc,%edx
and    $0xf,%edx
test   $0x100000,%ebx
jne    13c9 <simple_arm_insn_disas+0x2a9>
lea    0xede(%rip),%rdi
jmp    12ab <simple_arm_insn_disas+0x18b>
lea    0xeed(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
lea    0xeef(%rip),%rdi
jmp    13b9 <simple_arm_insn_disas+0x299>
lea    0xd82(%rip),%rdi
xor    %edx,%edx
jmp    12e3 <simple_arm_insn_disas+0x1c3>
lea    0xef3(%rip),%rdi
xor    %eax,%eax
call   1030 <qemu_log@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret
lea    0xe81(%rip),%rdi
jmp    12ab <simple_arm_insn_disas+0x18b>
shr    $0xc,%ebx
and    $0xf,%ebx
lea    0xdab(%rip),%rdi
mov    %ebx,%esi
mov    %ecx,%edx
jmp    12ab <simple_arm_insn_disas+0x18b>

LLVM IR (-O0):
@.str = [28 x i8] c"unused instr, cond = never\0A\00"
@.str.1 = [30 x i8] c"conditional instr. cond = %s\0A\00"
@.str.2 = [27 x i8] c"[MOVW: rd = %x val = %x]\0A\00"
@.str.3 = [27 x i8] c"[MOVT: rd = %x val = %x]\0A\00"
@.str.4 = [12 x i8] c"illegal op\0A\00"
@.str.5 = [13 x i8] c"nop hint op\0A\00"
@.str.6 = [40 x i8] c"[cpsr immediate: val = %x shift = %x]\0A\00"
@.str.7 = [36 x i8] c"[MSR: op1 = %x sh = %x rm = %x ]\0A\00"
@.str.8 = [45 x i8] c"[MRS: op1 = %x, sh = %x rm = %x rd = %x]\0A\00"
@.str.9 = [15 x i8] c"[BX: rm = %x]\0A\00"
@.str.10 = [25 x i8] c"[CLZ: rd = %x rm = %x]\0A\00"
@.str.11 = [13 x i8] c"branch insn\0A\00"
@.str.12 = [12 x i8] c"saturating\0A\00"
@.str.13 = [17 x i8] c"signed multiply\0A\00"
@.str.14 = [41 x i8] c"[MOV: val = %x shift = %x set_cc = %x]\0A\00"
@.str.15 = [39 x i8] c"[MOV(register) rm = %x, shiftop = %x]\0A\00"
@.str.16 = [30 x i8] c"multiples, extra load/stores\0A\00"
@.str.17 = [19 x i8] c"armv6 media instr\0A\00"
@.str.18 = [26 x i8] c"[LOAD]: rn = %x, rd = %x\0A\00"
@.str.19 = [27 x i8] c"[STORE]: rn = %x, rd = %x\0A\00"
@.str.20 = [11 x i8] c"[LDM/STM]\0A\00"
@.str.21 = [8 x i8] c"[B/BL]\0A\00"
@.str.22 = [19 x i8] c"coprocessor instr\0A\00"
@.str.23 = [7 x i8] c"[SWI]\0A\00"
define i32 @simple_arm_insn_disas(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %2
%16 = load i32, i32* %2
%17 = lshr i32 %16, 28
store i32 %17, i32* %3
%18 = load i32, i32* %3
%19 = icmp eq i32 %18, 15
br i1 %19, label %20, label %22
20: ; preds = %1
%21 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str, i64 0, i64 0))
br label %22
22: ; preds = %20, %1
%23 = load i32, i32* %3
%24 = icmp ne i32 %23, 14
br i1 %24, label %25, label %29
25: ; preds = %22
%26 = load i32, i32* %3
%27 = call i32 @get_description_by_cond(i32 %26)
%28 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.1, i64 0, i64 0), i32 %27)
br label %29
29: ; preds = %25, %22
%30 = load i32, i32* %2
%31 = and i32 %30, 261095424
%32 = icmp eq i32 %31, 50331648
br i1 %32, label %33, label %101
33: ; preds = %29
%34 = load i32, i32* %2
%35 = and i32 %34, 2097152
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %59
37: ; preds = %33
%38 = load i32, i32* %2
%39 = lshr i32 %38, 12
%40 = and i32 %39, 15
store i32 %40, i32* %10
%41 = load i32, i32* %2
%42 = lshr i32 %41, 4
%43 = and i32 %42, 61440
%44 = load i32, i32* %2
%45 = and i32 %44, 4095
%46 = or i32 %43, %45
store i32 %46, i32* %4
%47 = load i32, i32* %2
%48 = and i32 %47, 4194304
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %54
50: ; preds = %37
%51 = load i32, i32* %10
%52 = load i32, i32* %4
%53 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i64 0, i64 0), i32 %51, i32 %52)
br label %58
54: ; preds = %37
%55 = load i32, i32* %10
%56 = load i32, i32* %4
%57 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i32 %55, i32 %56)
br label %58
58: ; preds = %54, %50
br label %100
59: ; preds = %33
%60 = load i32, i32* %2
%61 = lshr i32 %60, 12
%62 = and i32 %61, 15
%63 = icmp ne i32 %62, 15
br i1 %63, label %64, label %66
64: ; preds = %59
%65 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0))
br label %66
66: ; preds = %64, %59
%67 = load i32, i32* %2
%68 = lshr i32 %67, 16
%69 = and i32 %68, 15
%70 = icmp eq i32 %69, 0
br i1 %70, label %71, label %73
71: ; preds = %66
%72 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i64 0, i64 0))
br label %99
73: ; preds = %66
%74 = load i32, i32* %2
%75 = and i32 %74, 255
store i32 %75, i32* %4
%76 = load i32, i32* %2
%77 = lshr i32 %76, 8
%78 = and i32 %77, 15
%79 = mul i32 %78, 2
store i32 %79, i32* %7
%80 = load i32, i32* %7
%81 = icmp ne i32 %80, 0
br i1 %81, label %82, label %91
82: ; preds = %73
%83 = load i32, i32* %4
%84 = load i32, i32* %7
%85 = lshr i32 %83, %84
%86 = load i32, i32* %4
%87 = load i32, i32* %7
%88 = sub i32 32, %87
%89 = shl i32 %86, %88
%90 = or i32 %85, %89
store i32 %90, i32* %4
br label %91
91: ; preds = %82, %73
%92 = load i32, i32* %2
%93 = and i32 %92, 4194304
%94 = icmp ne i32 %93, 0
%95 = zext i1 %94 to i32
store i32 %95, i32* %6
%96 = load i32, i32* %4
%97 = load i32, i32* %7
%98 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.6, i64 0, i64 0), i32 %96, i32 %97)
br label %99
99: ; preds = %91, %71
br label %100
100: ; preds = %99, %58
br label %261
101: ; preds = %29
%102 = load i32, i32* %2
%103 = and i32 %102, -117440512
%104 = icmp eq i32 %103, 16777216
br i1 %104, label %105, label %163
105: ; preds = %101
%106 = load i32, i32* %2
%107 = and i32 %106, 144
%108 = icmp ne i32 %107, 144
br i1 %108, label %109, label %163
109: ; preds = %105
%110 = load i32, i32* %2
%111 = lshr i32 %110, 21
%112 = and i32 %111, 3
store i32 %112, i32* %5
%113 = load i32, i32* %2
%114 = lshr i32 %113, 4
%115 = and i32 %114, 15
store i32 %115, i32* %12
%116 = load i32, i32* %2
%117 = and i32 %116, 15
store i32 %117, i32* %8
%118 = load i32, i32* %12
switch i32 %118, label %162 [
i32 0, label %119
i32 1, label %138
i32 2, label %156
i32 3, label %156
i32 5, label %158
i32 7, label %160
i32 8, label %160
i32 10, label %160
i32 12, label %160
i32 14, label %160
]
119: ; preds = %109
%120 = load i32, i32* %5
%121 = and i32 %120, 1
%122 = icmp ne i32 %121, 0
br i1 %122, label %123, label %128
123: ; preds = %119
%124 = load i32, i32* %5
%125 = load i32, i32* %12
%126 = load i32, i32* %8
%127 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.7, i64 0, i64 0), i32 %124, i32 %125, i32 %126)
br label %137
128: ; preds = %119
%129 = load i32, i32* %2
%130 = lshr i32 %129, 12
%131 = and i32 %130, 15
store i32 %131, i32* %10
%132 = load i32, i32* %5
%133 = load i32, i32* %12
%134 = load i32, i32* %8
%135 = load i32, i32* %10
%136 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.8, i64 0, i64 0), i32 %132, i32 %133, i32 %134, i32 %135)
br label %137
137: ; preds = %128, %123
br label %162
138: ; preds = %109
%139 = load i32, i32* %5
%140 = icmp eq i32 %139, 1
br i1 %140, label %141, label %144
141: ; preds = %138
%142 = load i32, i32* %8
%143 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0), i32 %142)
br label %155
144: ; preds = %138
%145 = load i32, i32* %5
%146 = icmp eq i32 %145, 3
br i1 %146, label %147, label %154
147: ; preds = %144
%148 = load i32, i32* %2
%149 = lshr i32 %148, 12
%150 = and i32 %149, 15
store i32 %150, i32* %10
%151 = load i32, i32* %10
%152 = load i32, i32* %8
%153 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.10, i64 0, i64 0), i32 %151, i32 %152)
br label %154
154: ; preds = %147, %144
br label %155
155: ; preds = %154, %141
br label %162
156: ; preds = %109, %109
%157 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
br label %162
158: ; preds = %109
%159 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0))
br label %162
160: ; preds = %109, %109, %109, %109, %109
%161 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.13, i64 0, i64 0))
br label %162
162: ; preds = %109, %160, %158, %156, %155, %137
br label %260
163: ; preds = %105, %101
%164 = load i32, i32* %2
%165 = and i32 %164, 234881024
%166 = icmp eq i32 %165, 0
br i1 %166, label %167, label %171
167: ; preds = %163
%168 = load i32, i32* %2
%169 = and i32 %168, 144
%170 = icmp ne i32 %169, 144
br i1 %170, label %175, label %171
171: ; preds = %167, %163
%172 = load i32, i32* %2
%173 = and i32 %172, 234881024
%174 = icmp eq i32 %173, 33554432
br i1 %174, label %175, label %218
175: ; preds = %171, %167
%176 = load i32, i32* %2
%177 = lshr i32 %176, 21
%178 = and i32 %177, 15
store i32 %178, i32* %5
%179 = load i32, i32* %2
%180 = lshr i32 %179, 20
%181 = and i32 %180, 1
store i32 %181, i32* %13
%182 = load i32, i32* %2
%183 = and i32 %182, 33554432
%184 = icmp ne i32 %183, 0
br i1 %184, label %185, label %208
185: ; preds = %175
%186 = load i32, i32* %2
%187 = and i32 %186, 255
store i32 %187, i32* %4
%188 = load i32, i32* %2
%189 = lshr i32 %188, 8
%190 = and i32 %189, 15
%191 = mul i32 %190, 2
store i32 %191, i32* %7
%192 = load i32, i32* %7
%193 = icmp ne i32 %192, 0
br i1 %193, label %194, label %203
194: ; preds = %185
%195 = load i32, i32* %4
%196 = load i32, i32* %7
%197 = lshr i32 %195, %196
%198 = load i32, i32* %4
%199 = load i32, i32* %7
%200 = sub i32 32, %199
%201 = shl i32 %198, %200
%202 = or i32 %197, %201
store i32 %202, i32* %4
br label %203
203: ; preds = %194, %185
%204 = load i32, i32* %4
%205 = load i32, i32* %7
%206 = load i32, i32* %13
%207 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0), i32 %204, i32 %205, i32 %206)
br label %217
208: ; preds = %175
%209 = load i32, i32* %2
%210 = and i32 %209, 15
store i32 %210, i32* %8
%211 = load i32, i32* %2
%212 = lshr i32 %211, 5
%213 = and i32 %212, 3
store i32 %213, i32* %15
%214 = load i32, i32* %8
%215 = load i32, i32* %15
%216 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0), i32 %214, i32 %215)
br label %217
217: ; preds = %208, %203
br label %259
218: ; preds = %171
%219 = load i32, i32* %2
%220 = lshr i32 %219, 24
%221 = and i32 %220, 15
store i32 %221, i32* %5
%222 = load i32, i32* %5
switch i32 %222, label %258 [
i32 0, label %223
i32 1, label %223
i32 6, label %225
i32 7, label %225
i32 8, label %250
i32 9, label %250
i32 10, label %252
i32 11, label %252
i32 12, label %254
i32 13, label %254
i32 14, label %254
i32 15, label %256
]
223: ; preds = %218, %218
%224 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.16, i64 0, i64 0))
br label %258
225: ; preds = %218, %218
%226 = load i32, i32* %2
%227 = and i32 %226, 16
%228 = icmp ne i32 %227, 0
br i1 %228, label %229, label %231
229: ; preds = %225
%230 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.17, i64 0, i64 0))
br label %231
231: ; preds = %229, %225
store i32 15728880, i32* %12
%232 = load i32, i32* %2
%233 = lshr i32 %232, 16
%234 = and i32 %233, 15
store i32 %234, i32* %11
%235 = load i32, i32* %2
%236 = lshr i32 %235, 12
%237 = and i32 %236, 15
store i32 %237, i32* %10
%238 = load i32, i32* %2
%239 = and i32 %238, 1048576
%240 = icmp ne i32 %239, 0
br i1 %240, label %241, label %245
241: ; preds = %231
%242 = load i32, i32* %11
%243 = load i32, i32* %10
%244 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.18, i64 0, i64 0), i32 %242, i32 %243)
br label %249
245: ; preds = %231
%246 = load i32, i32* %11
%247 = load i32, i32* %10
%248 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0), i32 %246, i32 %247)
br label %249
249: ; preds = %245, %241
br label %258
250: ; preds = %218, %218
%251 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0))
br label %258
252: ; preds = %218, %218
%253 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0))
br label %258
254: ; preds = %218, %218, %218
%255 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.22, i64 0, i64 0))
br label %258
256: ; preds = %218
%257 = call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.23, i64 0, i64 0))
br label %258
258: ; preds = %218, %256, %254, %252, %250, %249, %223
br label %259
259: ; preds = %258, %217
br label %260
260: ; preds = %259, %162
br label %261
261: ; preds = %260, %100
ret i32 0
}

LLVM IR (-O2):
@.str = [28 x i8] c"unused instr, cond = never\0A\00"
@.str.1 = [30 x i8] c"conditional instr. cond = %s\0A\00"
@.str.2 = [27 x i8] c"[MOVW: rd = %x val = %x]\0A\00"
@.str.3 = [27 x i8] c"[MOVT: rd = %x val = %x]\0A\00"
@.str.4 = [12 x i8] c"illegal op\0A\00"
@.str.5 = [13 x i8] c"nop hint op\0A\00"
@.str.6 = [40 x i8] c"[cpsr immediate: val = %x shift = %x]\0A\00"
@.str.7 = [36 x i8] c"[MSR: op1 = %x sh = %x rm = %x ]\0A\00"
@.str.8 = [45 x i8] c"[MRS: op1 = %x, sh = %x rm = %x rd = %x]\0A\00"
@.str.9 = [15 x i8] c"[BX: rm = %x]\0A\00"
@.str.10 = [25 x i8] c"[CLZ: rd = %x rm = %x]\0A\00"
@.str.11 = [13 x i8] c"branch insn\0A\00"
@.str.12 = [12 x i8] c"saturating\0A\00"
@.str.13 = [17 x i8] c"signed multiply\0A\00"
@.str.14 = [41 x i8] c"[MOV: val = %x shift = %x set_cc = %x]\0A\00"
@.str.15 = [39 x i8] c"[MOV(register) rm = %x, shiftop = %x]\0A\00"
@.str.16 = [30 x i8] c"multiples, extra load/stores\0A\00"
@.str.17 = [19 x i8] c"armv6 media instr\0A\00"
@.str.18 = [26 x i8] c"[LOAD]: rn = %x, rd = %x\0A\00"
@.str.19 = [27 x i8] c"[STORE]: rn = %x, rd = %x\0A\00"
@.str.20 = [11 x i8] c"[LDM/STM]\0A\00"
@.str.21 = [8 x i8] c"[B/BL]\0A\00"
@.str.22 = [19 x i8] c"coprocessor instr\0A\00"
@.str.23 = [7 x i8] c"[SWI]\0A\00"
define i32 @simple_arm_insn_disas(i32 %0) {
%2 = lshr i32 %0, 28
switch i32 %2, label %5 [
i32 15, label %3
i32 14, label %8
]
3: ; preds = %1
%4 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str, i64 0, i64 0))
br label %5
5: ; preds = %3, %1
%6 = tail call i32 @get_description_by_cond(i32 %2)
%7 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.1, i64 0, i64 0), i32 %6)
br label %8
8: ; preds = %1, %5
%9 = and i32 %0, 261095424
%10 = icmp eq i32 %9, 50331648
br i1 %10, label %11, label %43
11: ; preds = %8
%12 = and i32 %0, 2097152
%13 = icmp eq i32 %12, 0
br i1 %13, label %14, label %27
14: ; preds = %11
%15 = lshr i32 %0, 12
%16 = and i32 %15, 15
%17 = lshr i32 %0, 4
%18 = and i32 %17, 61440
%19 = and i32 %0, 4095
%20 = or i32 %18, %19
%21 = and i32 %0, 4194304
%22 = icmp eq i32 %21, 0
br i1 %22, label %23, label %25
23: ; preds = %14
%24 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i64 0, i64 0), i32 %16, i32 %20)
br label %128
25: ; preds = %14
%26 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), i32 %16, i32 %20)
br label %128
27: ; preds = %11
%28 = and i32 %0, 61440
%29 = icmp eq i32 %28, 61440
br i1 %29, label %32, label %30
30: ; preds = %27
%31 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0))
br label %32
32: ; preds = %30, %27
%33 = and i32 %0, 983040
%34 = icmp eq i32 %33, 0
br i1 %34, label %35, label %37
35: ; preds = %32
%36 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i64 0, i64 0))
br label %128
37: ; preds = %32
%38 = and i32 %0, 255
%39 = lshr i32 %0, 7
%40 = and i32 %39, 30
%41 = tail call i32 @llvm.fshr.i32(i32 %38, i32 %38, i32 %40)
%42 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.6, i64 0, i64 0), i32 %41, i32 %40)
br label %128
43: ; preds = %8
%44 = and i32 %0, -117440512
%45 = icmp ne i32 %44, 16777216
%46 = and i32 %0, 144
%47 = icmp eq i32 %46, 144
%48 = or i1 %45, %47
br i1 %48, label %77, label %49
49: ; preds = %43
%50 = lshr i32 %0, 21
%51 = and i32 %50, 3
%52 = lshr i32 %0, 4
%53 = and i32 %52, 15
%54 = and i32 %0, 15
switch i32 %53, label %128 [
i32 0, label %55
i32 1, label %64
i32 2, label %71
i32 3, label %71
i32 5, label %73
i32 7, label %75
i32 8, label %75
i32 10, label %75
i32 12, label %75
i32 14, label %75
]
55: ; preds = %49
%56 = and i32 %0, 2097152
%57 = icmp eq i32 %56, 0
br i1 %57, label %60, label %58
58: ; preds = %55
%59 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.7, i64 0, i64 0), i32 %51, i32 0, i32 %54)
br label %128
60: ; preds = %55
%61 = lshr i32 %0, 12
%62 = and i32 %61, 15
%63 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.8, i64 0, i64 0), i32 %51, i32 0, i32 %54, i32 %62)
br label %128
64: ; preds = %49
switch i32 %51, label %128 [
i32 1, label %65
i32 3, label %67
]
65: ; preds = %64
%66 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0), i32 %54)
br label %128
67: ; preds = %64
%68 = lshr i32 %0, 12
%69 = and i32 %68, 15
%70 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.10, i64 0, i64 0), i32 %69, i32 %54)
br label %128
71: ; preds = %49, %49
%72 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
br label %128
73: ; preds = %49
%74 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0))
br label %128
75: ; preds = %49, %49, %49, %49, %49
%76 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.13, i64 0, i64 0))
br label %128
77: ; preds = %43
%78 = and i32 %0, 234881024
%79 = icmp ne i32 %78, 0
%80 = or i1 %79, %47
%81 = icmp ne i32 %78, 33554432
%82 = and i1 %81, %80
br i1 %82, label %99, label %83
83: ; preds = %77
%84 = and i32 %0, 33554432
%85 = icmp eq i32 %84, 0
br i1 %85, label %94, label %86
86: ; preds = %83
%87 = lshr i32 %0, 20
%88 = and i32 %87, 1
%89 = and i32 %0, 255
%90 = lshr i32 %0, 7
%91 = and i32 %90, 30
%92 = tail call i32 @llvm.fshr.i32(i32 %89, i32 %89, i32 %91)
%93 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0), i32 %92, i32 %91, i32 %88)
br label %128
94: ; preds = %83
%95 = and i32 %0, 15
%96 = lshr i32 %0, 5
%97 = and i32 %96, 3
%98 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0), i32 %95, i32 %97)
br label %128
99: ; preds = %77
%100 = lshr i32 %0, 24
%101 = and i32 %100, 15
switch i32 %101, label %128 [
i32 0, label %102
i32 1, label %102
i32 6, label %104
i32 7, label %104
i32 8, label %120
i32 9, label %120
i32 10, label %122
i32 11, label %122
i32 12, label %124
i32 13, label %124
i32 14, label %124
i32 15, label %126
]
102: ; preds = %99, %99
%103 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.16, i64 0, i64 0))
br label %128
104: ; preds = %99, %99
%105 = and i32 %0, 16
%106 = icmp eq i32 %105, 0
br i1 %106, label %109, label %107
107: ; preds = %104
%108 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.17, i64 0, i64 0))
br label %109
109: ; preds = %107, %104
%110 = lshr i32 %0, 16
%111 = and i32 %110, 15
%112 = lshr i32 %0, 12
%113 = and i32 %112, 15
%114 = and i32 %0, 1048576
%115 = icmp eq i32 %114, 0
br i1 %115, label %118, label %116
116: ; preds = %109
%117 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.18, i64 0, i64 0), i32 %111, i32 %113)
br label %128
118: ; preds = %109
%119 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0), i32 %111, i32 %113)
br label %128
120: ; preds = %99, %99
%121 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0))
br label %128
122: ; preds = %99, %99
%123 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0))
br label %128
124: ; preds = %99, %99, %99
%125 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.22, i64 0, i64 0))
br label %128
126: ; preds = %99
%127 = tail call i32 (i8*, ...) @qemu_log(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.23, i64 0, i64 0))
br label %128
128: ; preds = %86, %94, %64, %65, %67, %58, %60, %49, %75, %73, %71, %102, %120, %122, %124, %126, %99, %118, %116, %25, %23, %37, %35
ret i32 0
}