#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 int /*<<< orphan*/ GLenum;

/* Variables and functions */
int /*<<< orphan*/ Ankle1Add();
int /*<<< orphan*/ Ankle1Subtract();
int /*<<< orphan*/ Ankle2Add();
int /*<<< orphan*/ Ankle2Subtract();
int /*<<< orphan*/ FireCannon();
int /*<<< orphan*/ Heel1Add();
int /*<<< orphan*/ Heel1Subtract();
int /*<<< orphan*/ Heel2Add();
int /*<<< orphan*/ Heel2Subtract();
int /*<<< orphan*/ LightBackwards();
int /*<<< orphan*/ LightForwards();
int /*<<< orphan*/ LightTurnLeft();
int /*<<< orphan*/ LightTurnRight();
int /*<<< orphan*/ LowerLeg1Backwards();
int /*<<< orphan*/ LowerLeg1Inwards();
int /*<<< orphan*/ LowerLeg2Backwards();
int /*<<< orphan*/ LowerLeg2Inwards();
int /*<<< orphan*/ MechTiltAdd();
int /*<<< orphan*/ MechTiltSubtract();
int /*<<< orphan*/ RaiseLeg1Forward();
int /*<<< orphan*/ RaiseLeg1Outwards();
int /*<<< orphan*/ RaiseLeg2Forward();
int /*<<< orphan*/ RaiseLeg2Outwards();
int /*<<< orphan*/ RotateAdd();
int /*<<< orphan*/ RotateSubtract();
int /*<<< orphan*/ Toggle();
int /*<<< orphan*/ TurnBackwards();
int /*<<< orphan*/ TurnForwards();
int /*<<< orphan*/ TurnLeft();
int /*<<< orphan*/ TurnRight();
int /*<<< orphan*/ elbow1Add();
int /*<<< orphan*/ elbow1Subtract();
int /*<<< orphan*/ elbow2Add();
int /*<<< orphan*/ elbow2Subtract();
int /*<<< orphan*/ lat1Lower();
int /*<<< orphan*/ lat1Raise();
int /*<<< orphan*/ lat2Lower();
int /*<<< orphan*/ lat2Raise();
int /*<<< orphan*/ shoulder1Add();
int /*<<< orphan*/ shoulder1Subtract();
int /*<<< orphan*/ shoulder2Add();
int /*<<< orphan*/ shoulder2Subtract();
int /*<<< orphan*/ shoulder3Add();
int /*<<< orphan*/ shoulder3Subtract();
int /*<<< orphan*/ shoulder4Add();
int /*<<< orphan*/ shoulder4Subtract();
GLenum key(int key, GLenum mask) {
  int i = 0;
  switch (key) {
  case 'q': {
    shoulder2Subtract();
    i++;
  } break;
  case 'a': {
    shoulder2Add();
    i++;
  } break;
  case 'w': {
    shoulder1Subtract();
    i++;
  } break;
  case 's': {
    shoulder1Add();
    i++;
  } break;
  case '2': {
    shoulder3Add();
    i++;
  } break;
  case '1': {
    shoulder4Add();
    i++;
  } break;
  case '4': {
    shoulder3Subtract();
    i++;
  } break;
  case '3': {
    shoulder4Subtract();
    i++;
  } break;
  case 'z': {
    lat2Raise();
    i++;
  } break;
  case 'Z': {
    lat2Lower();
    i++;
  } break;
  case 'x': {
    lat1Raise();
    i++;
  } break;
  case 'X': {
    lat1Lower();
    i++;
  } break;
  case 'A': {
    elbow2Add();
    i++;
  } break;
  case 'Q': {
    elbow2Subtract();
    i++;
  } break;
  case 'S': {
    elbow1Add();
    i++;
  } break;
  case 'W': {
    elbow1Subtract();
    i++;
  } break;
  case 'd': {
    RotateAdd();
    i++;
  } break;
  case 'g': {
    RotateSubtract();
    i++;
  } break;
  case 'r': {
    MechTiltAdd();
    i++;
  } break;
  case 'f': {
    MechTiltSubtract();
    i++;
  } break;
  case 'h': {
    RaiseLeg2Forward();
    i++;
  } break;
  case 'y': {
    LowerLeg2Backwards();
    i++;
  } break;
  case 'Y': {
    RaiseLeg2Outwards();
    i++;
  } break;
  case 'H': {
    LowerLeg2Inwards();
    i++;
  } break;
  case 'j': {
    RaiseLeg1Forward();
    i++;
  } break;
  case 'u': {
    LowerLeg1Backwards();
    i++;
  } break;
  case 'U': {
    RaiseLeg1Outwards();
    i++;
  } break;
  case 'J': {
    LowerLeg1Inwards();
    i++;
  } break;
  case 'N': {
    Heel2Add();
    i++;
  } break;
  case 'n': {
    Heel2Subtract();
    i++;
  } break;
  case 'M': {
    Heel1Add();
    i++;
  } break;
  case 'm': {
    Heel1Subtract();
    i++;
  } break;
  case 'k': {
    Ankle2Add();
    i++;
  } break;
  case 'K': {
    Ankle2Subtract();
    i++;
  } break;
  case 'l': {
    Ankle1Add();
    i++;
  } break;
  case 'L': {
    Ankle1Subtract();
    i++;
  } break;
  case 'p': {
    LightTurnRight();
    i++;
  } break;
  case 'i': {
    LightTurnLeft();
    i++;
  } break;
  case 'o': {
    LightForwards();
    i++;
  } break;
  case '9': {
    LightBackwards();
    i++;
  } break;
  case 't':
    Toggle();
    break;
  case 0xe002:
    TurnLeft();
    break;
  case 0xe003:
    TurnRight();
    break;
  case 0xe000:
    TurnBackwards();
    break;
  case 0xe001:
    TurnForwards();
    break;
  case ' ':
    FireCannon();
  }
  return 0;
}


x86 assembly (clang, -O0):
<key>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x10(%rbp)
sub    $0x20,%eax
je     1a92 <key+0x6b2>
jmp    1409 <key+0x29>
mov    -0x10(%rbp),%eax
sub    $0x31,%eax
je     1777 <key+0x397>
jmp    141a <key+0x3a>
mov    -0x10(%rbp),%eax
sub    $0x32,%eax
je     1762 <key+0x382>
jmp    142b <key+0x4b>
mov    -0x10(%rbp),%eax
sub    $0x33,%eax
je     17a1 <key+0x3c1>
jmp    143c <key+0x5c>
mov    -0x10(%rbp),%eax
sub    $0x34,%eax
je     178c <key+0x3ac>
jmp    144d <key+0x6d>
mov    -0x10(%rbp),%eax
sub    $0x39,%eax
je     1a41 <key+0x661>
jmp    145e <key+0x7e>
mov    -0x10(%rbp),%eax
sub    $0x41,%eax
je     180a <key+0x42a>
jmp    146f <key+0x8f>
mov    -0x10(%rbp),%eax
sub    $0x48,%eax
je     18f1 <key+0x511>
jmp    1480 <key+0xa0>
mov    -0x10(%rbp),%eax
sub    $0x4a,%eax
je     1945 <key+0x565>
jmp    1491 <key+0xb1>
mov    -0x10(%rbp),%eax
sub    $0x4b,%eax
je     19c3 <key+0x5e3>
jmp    14a2 <key+0xc2>
mov    -0x10(%rbp),%eax
sub    $0x4c,%eax
je     19ed <key+0x60d>
jmp    14b3 <key+0xd3>
mov    -0x10(%rbp),%eax
sub    $0x4d,%eax
je     1984 <key+0x5a4>
jmp    14c4 <key+0xe4>
mov    -0x10(%rbp),%eax
sub    $0x4e,%eax
je     195a <key+0x57a>
jmp    14d5 <key+0xf5>
mov    -0x10(%rbp),%eax
sub    $0x51,%eax
je     181f <key+0x43f>
jmp    14e6 <key+0x106>
mov    -0x10(%rbp),%eax
sub    $0x53,%eax
je     1834 <key+0x454>
jmp    14f7 <key+0x117>
mov    -0x10(%rbp),%eax
sub    $0x55,%eax
je     1930 <key+0x550>
jmp    1508 <key+0x128>
mov    -0x10(%rbp),%eax
sub    $0x57,%eax
je     1849 <key+0x469>
jmp    1519 <key+0x139>
mov    -0x10(%rbp),%eax
sub    $0x58,%eax
je     17f5 <key+0x415>
jmp    152a <key+0x14a>
mov    -0x10(%rbp),%eax
sub    $0x59,%eax
je     18dc <key+0x4fc>
jmp    153b <key+0x15b>
mov    -0x10(%rbp),%eax
sub    $0x5a,%eax
je     17cb <key+0x3eb>
jmp    154c <key+0x16c>
mov    -0x10(%rbp),%eax
sub    $0x61,%eax
je     1723 <key+0x343>
jmp    155d <key+0x17d>
mov    -0x10(%rbp),%eax
sub    $0x64,%eax
je     185e <key+0x47e>
jmp    156e <key+0x18e>
mov    -0x10(%rbp),%eax
sub    $0x66,%eax
je     189d <key+0x4bd>
jmp    157f <key+0x19f>
mov    -0x10(%rbp),%eax
sub    $0x67,%eax
je     1873 <key+0x493>
jmp    1590 <key+0x1b0>
mov    -0x10(%rbp),%eax
sub    $0x68,%eax
je     18b2 <key+0x4d2>
jmp    15a1 <key+0x1c1>
mov    -0x10(%rbp),%eax
sub    $0x69,%eax
je     1a17 <key+0x637>
jmp    15b2 <key+0x1d2>
mov    -0x10(%rbp),%eax
sub    $0x6a,%eax
je     1906 <key+0x526>
jmp    15c3 <key+0x1e3>
mov    -0x10(%rbp),%eax
sub    $0x6b,%eax
je     19ae <key+0x5ce>
jmp    15d4 <key+0x1f4>
mov    -0x10(%rbp),%eax
sub    $0x6c,%eax
je     19d8 <key+0x5f8>
jmp    15e5 <key+0x205>
mov    -0x10(%rbp),%eax
sub    $0x6d,%eax
je     1999 <key+0x5b9>
jmp    15f6 <key+0x216>
mov    -0x10(%rbp),%eax
sub    $0x6e,%eax
je     196f <key+0x58f>
jmp    1607 <key+0x227>
mov    -0x10(%rbp),%eax
sub    $0x6f,%eax
je     1a2c <key+0x64c>
jmp    1618 <key+0x238>
mov    -0x10(%rbp),%eax
sub    $0x70,%eax
je     1a02 <key+0x622>
jmp    1629 <key+0x249>
mov    -0x10(%rbp),%eax
sub    $0x71,%eax
je     170e <key+0x32e>
jmp    163a <key+0x25a>
mov    -0x10(%rbp),%eax
sub    $0x72,%eax
je     1888 <key+0x4a8>
jmp    164b <key+0x26b>
mov    -0x10(%rbp),%eax
sub    $0x73,%eax
je     174d <key+0x36d>
jmp    165c <key+0x27c>
mov    -0x10(%rbp),%eax
sub    $0x74,%eax
je     1a56 <key+0x676>
jmp    166d <key+0x28d>
mov    -0x10(%rbp),%eax
sub    $0x75,%eax
je     191b <key+0x53b>
jmp    167e <key+0x29e>
mov    -0x10(%rbp),%eax
sub    $0x77,%eax
je     1738 <key+0x358>
jmp    168f <key+0x2af>
mov    -0x10(%rbp),%eax
sub    $0x78,%eax
je     17e0 <key+0x400>
jmp    16a0 <key+0x2c0>
mov    -0x10(%rbp),%eax
sub    $0x79,%eax
je     18c7 <key+0x4e7>
jmp    16b1 <key+0x2d1>
mov    -0x10(%rbp),%eax
sub    $0x7a,%eax
je     17b6 <key+0x3d6>
jmp    16c2 <key+0x2e2>
mov    -0x10(%rbp),%eax
sub    $0xe000,%eax
je     1a7a <key+0x69a>
jmp    16d5 <key+0x2f5>
mov    -0x10(%rbp),%eax
sub    $0xe001,%eax
je     1a86 <key+0x6a6>
jmp    16e8 <key+0x308>
mov    -0x10(%rbp),%eax
sub    $0xe002,%eax
je     1a62 <key+0x682>
jmp    16fb <key+0x31b>
mov    -0x10(%rbp),%eax
sub    $0xe003,%eax
je     1a6e <key+0x68e>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1300 <shoulder2Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1260 <shoulder2Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1070 <shoulder1Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1220 <shoulder1Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1200 <shoulder3Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1210 <shoulder4Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1090 <shoulder3Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11a0 <shoulder4Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1100 <lat2Raise@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10a0 <lat2Lower@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1040 <lat1Raise@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1180 <lat1Lower@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1160 <elbow2Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1050 <elbow2Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1240 <elbow1Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1080 <elbow1Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1170 <RotateAdd@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1110 <RotateSubtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10c0 <MechTiltAdd@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12e0 <MechTiltSubtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1190 <RaiseLeg2Forward@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1030 <LowerLeg2Backwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10d0 <RaiseLeg2Outwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10b0 <LowerLeg2Inwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1140 <RaiseLeg1Forward@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1290 <LowerLeg1Backwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10f0 <RaiseLeg1Outwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12c0 <LowerLeg1Inwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   10e0 <Heel2Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1120 <Heel2Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11e0 <Heel1Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1250 <Heel1Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12d0 <Ankle2Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12b0 <Ankle2Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1230 <Ankle1Add@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1130 <Ankle1Subtract@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11d0 <LightTurnRight@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1060 <LightTurnLeft@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12f0 <LightForwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11f0 <LightBackwards@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1150 <Toggle@plt>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11c0 <TurnLeft@plt>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   11b0 <TurnRight@plt>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1280 <TurnBackwards@plt>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   1270 <TurnForwards@plt>
jmp    1a99 <key+0x6b9>
mov    $0x0,%al
call   12a0 <FireCannon@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<key>:
push   %rax
lea    -0x20(%rdi),%eax
cmp    $0x5a,%eax
ja     1405 <key+0x25>
lea    0xc10(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
xor    %eax,%eax
call   12a0 <FireCannon@plt>
jmp    1611 <key+0x231>
add    $0xffff2000,%edi
cmp    $0x3,%edi
ja     1611 <key+0x231>
lea    0xd51(%rip),%rax
movslq (%rax,%rdi,4),%rcx
add    %rax,%rcx
jmp    *%rcx
xor    %eax,%eax
call   1280 <TurnBackwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1210 <shoulder4Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1200 <shoulder3Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11a0 <shoulder4Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1090 <shoulder3Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11f0 <LightBackwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1160 <elbow2Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10b0 <LowerLeg2Inwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   12c0 <LowerLeg1Inwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   12b0 <Ankle2Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1130 <Ankle1Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11e0 <Heel1Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10e0 <Heel2Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1050 <elbow2Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1240 <elbow1Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10f0 <RaiseLeg1Outwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1080 <elbow1Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1180 <lat1Lower@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10d0 <RaiseLeg2Outwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10a0 <lat2Lower@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1260 <shoulder2Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1170 <RotateAdd@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   12e0 <MechTiltSubtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1110 <RotateSubtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1190 <RaiseLeg2Forward@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1060 <LightTurnLeft@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1140 <RaiseLeg1Forward@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   12d0 <Ankle2Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1230 <Ankle1Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1250 <Heel1Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1120 <Heel2Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   12f0 <LightForwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11d0 <LightTurnRight@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1300 <shoulder2Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   10c0 <MechTiltAdd@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1220 <shoulder1Add@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1150 <Toggle@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1290 <LowerLeg1Backwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1070 <shoulder1Subtract@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1040 <lat1Raise@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1030 <LowerLeg2Backwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1100 <lat2Raise@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   1270 <TurnForwards@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11c0 <TurnLeft@plt>
jmp    1611 <key+0x231>
xor    %eax,%eax
call   11b0 <TurnRight@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @key(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
store i32 0, i32* %5
%6 = load i32, i32* %3
switch i32 %6, label %179 [
i32 113, label %7
i32 97, label %11
i32 119, label %15
i32 115, label %19
i32 50, label %23
i32 49, label %27
i32 52, label %31
i32 51, label %35
i32 122, label %39
i32 90, label %43
i32 120, label %47
i32 88, label %51
i32 65, label %55
i32 81, label %59
i32 83, label %63
i32 87, label %67
i32 100, label %71
i32 103, label %75
i32 114, label %79
i32 102, label %83
i32 104, label %87
i32 121, label %91
i32 89, label %95
i32 72, label %99
i32 106, label %103
i32 117, label %107
i32 85, label %111
i32 74, label %115
i32 78, label %119
i32 110, label %123
i32 77, label %127
i32 109, label %131
i32 107, label %135
i32 75, label %139
i32 108, label %143
i32 76, label %147
i32 112, label %151
i32 105, label %155
i32 111, label %159
i32 57, label %163
i32 116, label %167
i32 57346, label %169
i32 57347, label %171
i32 57344, label %173
i32 57345, label %175
i32 32, label %177
]
7: ; preds = %2
%8 = call i32 (...) @shoulder2Subtract()
%9 = load i32, i32* %5
%10 = add nsw i32 %9, 1
store i32 %10, i32* %5
br label %179
11: ; preds = %2
%12 = call i32 (...) @shoulder2Add()
%13 = load i32, i32* %5
%14 = add nsw i32 %13, 1
store i32 %14, i32* %5
br label %179
15: ; preds = %2
%16 = call i32 (...) @shoulder1Subtract()
%17 = load i32, i32* %5
%18 = add nsw i32 %17, 1
store i32 %18, i32* %5
br label %179
19: ; preds = %2
%20 = call i32 (...) @shoulder1Add()
%21 = load i32, i32* %5
%22 = add nsw i32 %21, 1
store i32 %22, i32* %5
br label %179
23: ; preds = %2
%24 = call i32 (...) @shoulder3Add()
%25 = load i32, i32* %5
%26 = add nsw i32 %25, 1
store i32 %26, i32* %5
br label %179
27: ; preds = %2
%28 = call i32 (...) @shoulder4Add()
%29 = load i32, i32* %5
%30 = add nsw i32 %29, 1
store i32 %30, i32* %5
br label %179
31: ; preds = %2
%32 = call i32 (...) @shoulder3Subtract()
%33 = load i32, i32* %5
%34 = add nsw i32 %33, 1
store i32 %34, i32* %5
br label %179
35: ; preds = %2
%36 = call i32 (...) @shoulder4Subtract()
%37 = load i32, i32* %5
%38 = add nsw i32 %37, 1
store i32 %38, i32* %5
br label %179
39: ; preds = %2
%40 = call i32 (...) @lat2Raise()
%41 = load i32, i32* %5
%42 = add nsw i32 %41, 1
store i32 %42, i32* %5
br label %179
43: ; preds = %2
%44 = call i32 (...) @lat2Lower()
%45 = load i32, i32* %5
%46 = add nsw i32 %45, 1
store i32 %46, i32* %5
br label %179
47: ; preds = %2
%48 = call i32 (...) @lat1Raise()
%49 = load i32, i32* %5
%50 = add nsw i32 %49, 1
store i32 %50, i32* %5
br label %179
51: ; preds = %2
%52 = call i32 (...) @lat1Lower()
%53 = load i32, i32* %5
%54 = add nsw i32 %53, 1
store i32 %54, i32* %5
br label %179
55: ; preds = %2
%56 = call i32 (...) @elbow2Add()
%57 = load i32, i32* %5
%58 = add nsw i32 %57, 1
store i32 %58, i32* %5
br label %179
59: ; preds = %2
%60 = call i32 (...) @elbow2Subtract()
%61 = load i32, i32* %5
%62 = add nsw i32 %61, 1
store i32 %62, i32* %5
br label %179
63: ; preds = %2
%64 = call i32 (...) @elbow1Add()
%65 = load i32, i32* %5
%66 = add nsw i32 %65, 1
store i32 %66, i32* %5
br label %179
67: ; preds = %2
%68 = call i32 (...) @elbow1Subtract()
%69 = load i32, i32* %5
%70 = add nsw i32 %69, 1
store i32 %70, i32* %5
br label %179
71: ; preds = %2
%72 = call i32 (...) @RotateAdd()
%73 = load i32, i32* %5
%74 = add nsw i32 %73, 1
store i32 %74, i32* %5
br label %179
75: ; preds = %2
%76 = call i32 (...) @RotateSubtract()
%77 = load i32, i32* %5
%78 = add nsw i32 %77, 1
store i32 %78, i32* %5
br label %179
79: ; preds = %2
%80 = call i32 (...) @MechTiltAdd()
%81 = load i32, i32* %5
%82 = add nsw i32 %81, 1
store i32 %82, i32* %5
br label %179
83: ; preds = %2
%84 = call i32 (...) @MechTiltSubtract()
%85 = load i32, i32* %5
%86 = add nsw i32 %85, 1
store i32 %86, i32* %5
br label %179
87: ; preds = %2
%88 = call i32 (...) @RaiseLeg2Forward()
%89 = load i32, i32* %5
%90 = add nsw i32 %89, 1
store i32 %90, i32* %5
br label %179
91: ; preds = %2
%92 = call i32 (...) @LowerLeg2Backwards()
%93 = load i32, i32* %5
%94 = add nsw i32 %93, 1
store i32 %94, i32* %5
br label %179
95: ; preds = %2
%96 = call i32 (...) @RaiseLeg2Outwards()
%97 = load i32, i32* %5
%98 = add nsw i32 %97, 1
store i32 %98, i32* %5
br label %179
99: ; preds = %2
%100 = call i32 (...) @LowerLeg2Inwards()
%101 = load i32, i32* %5
%102 = add nsw i32 %101, 1
store i32 %102, i32* %5
br label %179
103: ; preds = %2
%104 = call i32 (...) @RaiseLeg1Forward()
%105 = load i32, i32* %5
%106 = add nsw i32 %105, 1
store i32 %106, i32* %5
br label %179
107: ; preds = %2
%108 = call i32 (...) @LowerLeg1Backwards()
%109 = load i32, i32* %5
%110 = add nsw i32 %109, 1
store i32 %110, i32* %5
br label %179
111: ; preds = %2
%112 = call i32 (...) @RaiseLeg1Outwards()
%113 = load i32, i32* %5
%114 = add nsw i32 %113, 1
store i32 %114, i32* %5
br label %179
115: ; preds = %2
%116 = call i32 (...) @LowerLeg1Inwards()
%117 = load i32, i32* %5
%118 = add nsw i32 %117, 1
store i32 %118, i32* %5
br label %179
119: ; preds = %2
%120 = call i32 (...) @Heel2Add()
%121 = load i32, i32* %5
%122 = add nsw i32 %121, 1
store i32 %122, i32* %5
br label %179
123: ; preds = %2
%124 = call i32 (...) @Heel2Subtract()
%125 = load i32, i32* %5
%126 = add nsw i32 %125, 1
store i32 %126, i32* %5
br label %179
127: ; preds = %2
%128 = call i32 (...) @Heel1Add()
%129 = load i32, i32* %5
%130 = add nsw i32 %129, 1
store i32 %130, i32* %5
br label %179
131: ; preds = %2
%132 = call i32 (...) @Heel1Subtract()
%133 = load i32, i32* %5
%134 = add nsw i32 %133, 1
store i32 %134, i32* %5
br label %179
135: ; preds = %2
%136 = call i32 (...) @Ankle2Add()
%137 = load i32, i32* %5
%138 = add nsw i32 %137, 1
store i32 %138, i32* %5
br label %179
139: ; preds = %2
%140 = call i32 (...) @Ankle2Subtract()
%141 = load i32, i32* %5
%142 = add nsw i32 %141, 1
store i32 %142, i32* %5
br label %179
143: ; preds = %2
%144 = call i32 (...) @Ankle1Add()
%145 = load i32, i32* %5
%146 = add nsw i32 %145, 1
store i32 %146, i32* %5
br label %179
147: ; preds = %2
%148 = call i32 (...) @Ankle1Subtract()
%149 = load i32, i32* %5
%150 = add nsw i32 %149, 1
store i32 %150, i32* %5
br label %179
151: ; preds = %2
%152 = call i32 (...) @LightTurnRight()
%153 = load i32, i32* %5
%154 = add nsw i32 %153, 1
store i32 %154, i32* %5
br label %179
155: ; preds = %2
%156 = call i32 (...) @LightTurnLeft()
%157 = load i32, i32* %5
%158 = add nsw i32 %157, 1
store i32 %158, i32* %5
br label %179
159: ; preds = %2
%160 = call i32 (...) @LightForwards()
%161 = load i32, i32* %5
%162 = add nsw i32 %161, 1
store i32 %162, i32* %5
br label %179
163: ; preds = %2
%164 = call i32 (...) @LightBackwards()
%165 = load i32, i32* %5
%166 = add nsw i32 %165, 1
store i32 %166, i32* %5
br label %179
167: ; preds = %2
%168 = call i32 (...) @Toggle()
br label %179
169: ; preds = %2
%170 = call i32 (...) @TurnLeft()
br label %179
171: ; preds = %2
%172 = call i32 (...) @TurnRight()
br label %179
173: ; preds = %2
%174 = call i32 (...) @TurnBackwards()
br label %179
175: ; preds = %2
%176 = call i32 (...) @TurnForwards()
br label %179
177: ; preds = %2
%178 = call i32 (...) @FireCannon()
br label %179
179: ; preds = %177, %2, %175, %173, %171, %169, %167, %163, %159, %155, %151, %147, %143, %139, %135, %131, %127, %123, %119, %115, %111, %107, %103, %99, %95, %91, %87, %83, %79, %75, %71, %67, %63, %59, %55, %51, %47, %43, %39, %35, %31, %27, %23, %19, %15, %11, %7
ret i32 0
}

LLVM IR (-O2):
define i32 @key(i32 %0, i32 %1) {
switch i32 %0, label %95 [
i32 113, label %3
i32 97, label %5
i32 119, label %7
i32 115, label %9
i32 50, label %11
i32 49, label %13
i32 52, label %15
i32 51, label %17
i32 122, label %19
i32 90, label %21
i32 120, label %23
i32 88, label %25
i32 65, label %27
i32 81, label %29
i32 83, label %31
i32 87, label %33
i32 100, label %35
i32 103, label %37
i32 114, label %39
i32 102, label %41
i32 104, label %43
i32 121, label %45
i32 89, label %47
i32 72, label %49
i32 106, label %51
i32 117, label %53
i32 85, label %55
i32 74, label %57
i32 78, label %59
i32 110, label %61
i32 77, label %63
i32 109, label %65
i32 107, label %67
i32 75, label %69
i32 108, label %71
i32 76, label %73
i32 112, label %75
i32 105, label %77
i32 111, label %79
i32 57, label %81
i32 116, label %83
i32 57346, label %85
i32 57347, label %87
i32 57344, label %89
i32 57345, label %91
i32 32, label %93
]
3: ; preds = %2
%4 = tail call i32 (...) @shoulder2Subtract()
br label %95
5: ; preds = %2
%6 = tail call i32 (...) @shoulder2Add()
br label %95
7: ; preds = %2
%8 = tail call i32 (...) @shoulder1Subtract()
br label %95
9: ; preds = %2
%10 = tail call i32 (...) @shoulder1Add()
br label %95
11: ; preds = %2
%12 = tail call i32 (...) @shoulder3Add()
br label %95
13: ; preds = %2
%14 = tail call i32 (...) @shoulder4Add()
br label %95
15: ; preds = %2
%16 = tail call i32 (...) @shoulder3Subtract()
br label %95
17: ; preds = %2
%18 = tail call i32 (...) @shoulder4Subtract()
br label %95
19: ; preds = %2
%20 = tail call i32 (...) @lat2Raise()
br label %95
21: ; preds = %2
%22 = tail call i32 (...) @lat2Lower()
br label %95
23: ; preds = %2
%24 = tail call i32 (...) @lat1Raise()
br label %95
25: ; preds = %2
%26 = tail call i32 (...) @lat1Lower()
br label %95
27: ; preds = %2
%28 = tail call i32 (...) @elbow2Add()
br label %95
29: ; preds = %2
%30 = tail call i32 (...) @elbow2Subtract()
br label %95
31: ; preds = %2
%32 = tail call i32 (...) @elbow1Add()
br label %95
33: ; preds = %2
%34 = tail call i32 (...) @elbow1Subtract()
br label %95
35: ; preds = %2
%36 = tail call i32 (...) @RotateAdd()
br label %95
37: ; preds = %2
%38 = tail call i32 (...) @RotateSubtract()
br label %95
39: ; preds = %2
%40 = tail call i32 (...) @MechTiltAdd()
br label %95
41: ; preds = %2
%42 = tail call i32 (...) @MechTiltSubtract()
br label %95
43: ; preds = %2
%44 = tail call i32 (...) @RaiseLeg2Forward()
br label %95
45: ; preds = %2
%46 = tail call i32 (...) @LowerLeg2Backwards()
br label %95
47: ; preds = %2
%48 = tail call i32 (...) @RaiseLeg2Outwards()
br label %95
49: ; preds = %2
%50 = tail call i32 (...) @LowerLeg2Inwards()
br label %95
51: ; preds = %2
%52 = tail call i32 (...) @RaiseLeg1Forward()
br label %95
53: ; preds = %2
%54 = tail call i32 (...) @LowerLeg1Backwards()
br label %95
55: ; preds = %2
%56 = tail call i32 (...) @RaiseLeg1Outwards()
br label %95
57: ; preds = %2
%58 = tail call i32 (...) @LowerLeg1Inwards()
br label %95
59: ; preds = %2
%60 = tail call i32 (...) @Heel2Add()
br label %95
61: ; preds = %2
%62 = tail call i32 (...) @Heel2Subtract()
br label %95
63: ; preds = %2
%64 = tail call i32 (...) @Heel1Add()
br label %95
65: ; preds = %2
%66 = tail call i32 (...) @Heel1Subtract()
br label %95
67: ; preds = %2
%68 = tail call i32 (...) @Ankle2Add()
br label %95
69: ; preds = %2
%70 = tail call i32 (...) @Ankle2Subtract()
br label %95
71: ; preds = %2
%72 = tail call i32 (...) @Ankle1Add()
br label %95
73: ; preds = %2
%74 = tail call i32 (...) @Ankle1Subtract()
br label %95
75: ; preds = %2
%76 = tail call i32 (...) @LightTurnRight()
br label %95
77: ; preds = %2
%78 = tail call i32 (...) @LightTurnLeft()
br label %95
79: ; preds = %2
%80 = tail call i32 (...) @LightForwards()
br label %95
81: ; preds = %2
%82 = tail call i32 (...) @LightBackwards()
br label %95
83: ; preds = %2
%84 = tail call i32 (...) @Toggle()
br label %95
85: ; preds = %2
%86 = tail call i32 (...) @TurnLeft()
br label %95
87: ; preds = %2
%88 = tail call i32 (...) @TurnRight()
br label %95
89: ; preds = %2
%90 = tail call i32 (...) @TurnBackwards()
br label %95
91: ; preds = %2
%92 = tail call i32 (...) @TurnForwards()
br label %95
93: ; preds = %2
%94 = tail call i32 (...) @FireCannon()
br label %95
95: ; preds = %93, %2, %91, %89, %87, %85, %83, %81, %79, %77, %75, %73, %71, %69, %67, %65, %63, %61, %59, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7, %5, %3
ret i32 0
}