#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*/ DebugPrintf(int, char *, ...);
void PhilipsOutputErrorMessage(unsigned char ErrorNumber) {
  switch (ErrorNumber) {
  case 0:
    DebugPrintf(1, "CMD_SUCCESS");
    break;
  case 1:
    DebugPrintf(1, "INVALID_COMMAND");
    break;
  case 2:
    DebugPrintf(1, "SRC_ADDR_ERROR: Source address is not on word boundary.");
    break;
  case 3:
    DebugPrintf(
        1, "DST_ADDR_ERROR: Destination address is not on a correct boundary.");
    break;
  case 4:
    DebugPrintf(1, "SRC_ADDR_NOT_MAPPED: Source address is not mapped in the "
                   "memory map.\n");
    DebugPrintf(1, "                     Count value is taken into "
                   "consideration where applicable.");
    break;
  case 5:
    DebugPrintf(1, "DST_ADDR_NOT_MAPPED: Destination address is not mapped in "
                   "the memory map.\n");
    DebugPrintf(1, "                     Count value is taken into "
                   "consideration where applicable.");
    break;
  case 6:
    DebugPrintf(1, "COUNT_ERROR: Byte count is not multiple of 4 or is not a "
                   "permitted value.");
    break;
  case 7:
    DebugPrintf(
        1,
        "INVALID_SECTOR: Sector number is invalid or end sector number is\n");
    DebugPrintf(1, "                greater than start sector number.");
    break;
  case 8:
    DebugPrintf(1, "SECTOR_NOT_BLANK");
    break;
  case 9:
    DebugPrintf(1, "SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION:\n");
    DebugPrintf(
        1, "Command to prepare sector for write operation was not executed.");
    break;
  case 10:
    DebugPrintf(1, "COMPARE_ERROR: Source and destination data not equal.");
    break;
  case 11:
    DebugPrintf(1, "BUSY: Flash programming hardware interface is busy.");
    break;
  case 12:
    DebugPrintf(
        1,
        "PARAM_ERROR: Insufficient number of parameters or invalid parameter.");
    break;
  case 13:
    DebugPrintf(1, "ADDR_ERROR: Address is not on word boundary.");
    break;
  case 14:
    DebugPrintf(1,
                "ADDR_NOT_MAPPED: Address is not mapped in the memory map.\n");
    DebugPrintf(1, "                 Count value is taken in to consideration "
                   "where applicable.");
    break;
  case 15:
    DebugPrintf(1, "CMD_LOCKED");
    break;
  case 16:
    DebugPrintf(1, "INVALID_CODE: Unlock code is invalid.");
    break;
  case 17:
    DebugPrintf(1, "INVALID_BAUD_RATE: Invalid baud rate setting.");
    break;
  case 18:
    DebugPrintf(1, "INVALID_STOP_BIT: Invalid stop bit setting.");
    break;
  case 255:
    break;
  default:
    DebugPrintf(1, "unknown error %u", ErrorNumber);
    break;
  }
}


x86 assembly (clang, -O0):
<PhilipsOutputErrorMessage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %dil,%al
mov    %al,-0x1(%rbp)
movzbl -0x1(%rbp),%eax
mov    %eax,-0x8(%rbp)
test   %eax,%eax
je     1277 <PhilipsOutputErrorMessage+0x167>
jmp    1132 <PhilipsOutputErrorMessage+0x22>
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
je     128f <PhilipsOutputErrorMessage+0x17f>
jmp    1143 <PhilipsOutputErrorMessage+0x33>
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
je     12a7 <PhilipsOutputErrorMessage+0x197>
jmp    1154 <PhilipsOutputErrorMessage+0x44>
mov    -0x8(%rbp),%eax
sub    $0x3,%eax
je     12bf <PhilipsOutputErrorMessage+0x1af>
jmp    1165 <PhilipsOutputErrorMessage+0x55>
mov    -0x8(%rbp),%eax
sub    $0x4,%eax
je     12d7 <PhilipsOutputErrorMessage+0x1c7>
jmp    1176 <PhilipsOutputErrorMessage+0x66>
mov    -0x8(%rbp),%eax
sub    $0x5,%eax
je     1302 <PhilipsOutputErrorMessage+0x1f2>
jmp    1187 <PhilipsOutputErrorMessage+0x77>
mov    -0x8(%rbp),%eax
sub    $0x6,%eax
je     132d <PhilipsOutputErrorMessage+0x21d>
jmp    1198 <PhilipsOutputErrorMessage+0x88>
mov    -0x8(%rbp),%eax
sub    $0x7,%eax
je     1345 <PhilipsOutputErrorMessage+0x235>
jmp    11a9 <PhilipsOutputErrorMessage+0x99>
mov    -0x8(%rbp),%eax
sub    $0x8,%eax
je     1370 <PhilipsOutputErrorMessage+0x260>
jmp    11ba <PhilipsOutputErrorMessage+0xaa>
mov    -0x8(%rbp),%eax
sub    $0x9,%eax
je     1388 <PhilipsOutputErrorMessage+0x278>
jmp    11cb <PhilipsOutputErrorMessage+0xbb>
mov    -0x8(%rbp),%eax
sub    $0xa,%eax
je     13b3 <PhilipsOutputErrorMessage+0x2a3>
jmp    11dc <PhilipsOutputErrorMessage+0xcc>
mov    -0x8(%rbp),%eax
sub    $0xb,%eax
je     13cb <PhilipsOutputErrorMessage+0x2bb>
jmp    11ed <PhilipsOutputErrorMessage+0xdd>
mov    -0x8(%rbp),%eax
sub    $0xc,%eax
je     13e3 <PhilipsOutputErrorMessage+0x2d3>
jmp    11fe <PhilipsOutputErrorMessage+0xee>
mov    -0x8(%rbp),%eax
sub    $0xd,%eax
je     13fb <PhilipsOutputErrorMessage+0x2eb>
jmp    120f <PhilipsOutputErrorMessage+0xff>
mov    -0x8(%rbp),%eax
sub    $0xe,%eax
je     1413 <PhilipsOutputErrorMessage+0x303>
jmp    1220 <PhilipsOutputErrorMessage+0x110>
mov    -0x8(%rbp),%eax
sub    $0xf,%eax
je     143e <PhilipsOutputErrorMessage+0x32e>
jmp    1231 <PhilipsOutputErrorMessage+0x121>
mov    -0x8(%rbp),%eax
sub    $0x10,%eax
je     1456 <PhilipsOutputErrorMessage+0x346>
jmp    1242 <PhilipsOutputErrorMessage+0x132>
mov    -0x8(%rbp),%eax
sub    $0x11,%eax
je     146e <PhilipsOutputErrorMessage+0x35e>
jmp    1253 <PhilipsOutputErrorMessage+0x143>
mov    -0x8(%rbp),%eax
sub    $0x12,%eax
je     1486 <PhilipsOutputErrorMessage+0x376>
jmp    1264 <PhilipsOutputErrorMessage+0x154>
mov    -0x8(%rbp),%eax
sub    $0xff,%eax
je     149e <PhilipsOutputErrorMessage+0x38e>
jmp    14a3 <PhilipsOutputErrorMessage+0x393>
mov    $0x1,%edi
lea    0xd7d(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xd71(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xd69(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xd89(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xdb3(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
mov    $0x1,%edi
lea    0xde6(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xe1d(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
mov    $0x1,%edi
lea    0xdbb(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xe3d(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xe6f(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
mov    $0x1,%edi
lea    0xe9e(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xeb8(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xeb1(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
mov    $0x1,%edi
lea    0xec8(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xef0(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xf0e(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xf2a(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xf57(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xf6c(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
mov    $0x1,%edi
lea    0xf94(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xfc8(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xfbb(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xfc9(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
mov    $0x1,%edi
lea    0xfdf(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
jmp    14ba <PhilipsOutputErrorMessage+0x3aa>
movzbl -0x1(%rbp),%edx
mov    $0x1,%edi
lea    0xfea(%rip),%rsi
mov    $0x0,%al
call   1030 <DebugPrintf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<PhilipsOutputErrorMessage>:
push   %rax
lea    0x1(%rdi),%eax
cmp    $0x13,%al
ja     112d <PhilipsOutputErrorMessage+0x1d>
movzbl %al,%eax
lea    0xede(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
pop    %rax
ret
movzbl %dil,%edx
lea    0x13b5(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
pop    %rcx
jmp    1030 <DebugPrintf@plt>
lea    0xf04(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0xf04(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0xf08(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0xf34(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0xf6a(%rip),%rsi
jmp    1185 <PhilipsOutputErrorMessage+0x75>
lea    0xff6(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <DebugPrintf@plt>
lea    0xf94(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1022(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1060(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <DebugPrintf@plt>
lea    0x108f(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x10b5(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x10bd(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <DebugPrintf@plt>
lea    0x10d4(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x110b(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1138(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1163(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x119f(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x11c3(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <DebugPrintf@plt>
lea    0x11eb(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x122e(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1230(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x124d(%rip),%rsi
jmp    124f <PhilipsOutputErrorMessage+0x13f>
lea    0x1272(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
pop    %rcx
jmp    1030 <DebugPrintf@plt>

LLVM IR (-O0):
@.str = [12 x i8] c"CMD_SUCCESS\00"
@.str.1 = [16 x i8] c"INVALID_COMMAND\00"
@.str.2 = [56 x i8] c"SRC_ADDR_ERROR: Source address is not on word boundary.\00"
@.str.3 = [66 x i8] c"DST_ADDR_ERROR: Destination address is not on a correct boundary.\00"
@.str.4 = [70 x i8] c"SRC_ADDR_NOT_MAPPED: Source address is not mapped in the memory map.\0A\00"
@.str.5 = [79 x i8] c" Count value is taken into consideration where applicable.\00"
@.str.6 = [75 x i8] c"DST_ADDR_NOT_MAPPED: Destination address is not mapped in the memory map.\0A\00"
@.str.7 = [74 x i8] c"COUNT_ERROR: Byte count is not multiple of 4 or is not a permitted value.\00"
@.str.8 = [66 x i8] c"INVALID_SECTOR: Sector number is invalid or end sector number is\0A\00"
@.str.9 = [50 x i8] c" greater than start sector number.\00"
@.str.10 = [17 x i8] c"SECTOR_NOT_BLANK\00"
@.str.11 = [42 x i8] c"SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION:\0A\00"
@.str.12 = [64 x i8] c"Command to prepare sector for write operation was not executed.\00"
@.str.13 = [54 x i8] c"COMPARE_ERROR: Source and destination data not equal.\00"
@.str.14 = [52 x i8] c"BUSY: Flash programming hardware interface is busy.\00"
@.str.15 = [69 x i8] c"PARAM_ERROR: Insufficient number of parameters or invalid parameter.\00"
@.str.16 = [45 x i8] c"ADDR_ERROR: Address is not on word boundary.\00"
@.str.17 = [59 x i8] c"ADDR_NOT_MAPPED: Address is not mapped in the memory map.\0A\00"
@.str.18 = [76 x i8] c" Count value is taken in to consideration where applicable.\00"
@.str.19 = [11 x i8] c"CMD_LOCKED\00"
@.str.20 = [38 x i8] c"INVALID_CODE: Unlock code is invalid.\00"
@.str.21 = [46 x i8] c"INVALID_BAUD_RATE: Invalid baud rate setting.\00"
@.str.22 = [44 x i8] c"INVALID_STOP_BIT: Invalid stop bit setting.\00"
@.str.23 = [17 x i8] c"unknown error %u\00"
define void @PhilipsOutputErrorMessage(i8 zeroext %0) {
%2 = alloca i8
store i8 %0, i8* %2
%3 = load i8, i8* %2
%4 = zext i8 %3 to i32
switch i32 %4, label %49 [
i32 0, label %5
i32 1, label %7
i32 2, label %9
i32 3, label %11
i32 4, label %13
i32 5, label %16
i32 6, label %19
i32 7, label %21
i32 8, label %24
i32 9, label %26
i32 10, label %29
i32 11, label %31
i32 12, label %33
i32 13, label %35
i32 14, label %37
i32 15, label %40
i32 16, label %42
i32 17, label %44
i32 18, label %46
i32 255, label %48
]
5: ; preds = %1
%6 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
br label %53
7: ; preds = %1
%8 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.1, i64 0, i64 0))
br label %53
9: ; preds = %1
%10 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.2, i64 0, i64 0))
br label %53
11: ; preds = %1
%12 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.3, i64 0, i64 0))
br label %53
13: ; preds = %1
%14 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.4, i64 0, i64 0))
%15 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
br label %53
16: ; preds = %1
%17 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.6, i64 0, i64 0))
%18 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
br label %53
19: ; preds = %1
%20 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.7, i64 0, i64 0))
br label %53
21: ; preds = %1
%22 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.8, i64 0, i64 0))
%23 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
br label %53
24: ; preds = %1
%25 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i64 0, i64 0))
br label %53
26: ; preds = %1
%27 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.11, i64 0, i64 0))
%28 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.12, i64 0, i64 0))
br label %53
29: ; preds = %1
%30 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.13, i64 0, i64 0))
br label %53
31: ; preds = %1
%32 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.14, i64 0, i64 0))
br label %53
33: ; preds = %1
%34 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.15, i64 0, i64 0))
br label %53
35: ; preds = %1
%36 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.16, i64 0, i64 0))
br label %53
37: ; preds = %1
%38 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.17, i64 0, i64 0))
%39 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.18, i64 0, i64 0))
br label %53
40: ; preds = %1
%41 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.19, i64 0, i64 0))
br label %53
42: ; preds = %1
%43 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.20, i64 0, i64 0))
br label %53
44: ; preds = %1
%45 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.21, i64 0, i64 0))
br label %53
46: ; preds = %1
%47 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.22, i64 0, i64 0))
br label %53
48: ; preds = %1
br label %53
49: ; preds = %1
%50 = load i8, i8* %2
%51 = zext i8 %50 to i32
%52 = call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.23, i64 0, i64 0), i32 %51)
br label %53
53: ; preds = %49, %48, %46, %44, %42, %40, %37, %35, %33, %31, %29, %26, %24, %21, %19, %16, %13, %11, %9, %7, %5
ret void
}

LLVM IR (-O2):
@.str = [12 x i8] c"CMD_SUCCESS\00"
@.str.1 = [16 x i8] c"INVALID_COMMAND\00"
@.str.2 = [56 x i8] c"SRC_ADDR_ERROR: Source address is not on word boundary.\00"
@.str.3 = [66 x i8] c"DST_ADDR_ERROR: Destination address is not on a correct boundary.\00"
@.str.4 = [70 x i8] c"SRC_ADDR_NOT_MAPPED: Source address is not mapped in the memory map.\0A\00"
@.str.5 = [79 x i8] c" Count value is taken into consideration where applicable.\00"
@.str.6 = [75 x i8] c"DST_ADDR_NOT_MAPPED: Destination address is not mapped in the memory map.\0A\00"
@.str.7 = [74 x i8] c"COUNT_ERROR: Byte count is not multiple of 4 or is not a permitted value.\00"
@.str.8 = [66 x i8] c"INVALID_SECTOR: Sector number is invalid or end sector number is\0A\00"
@.str.9 = [50 x i8] c" greater than start sector number.\00"
@.str.10 = [17 x i8] c"SECTOR_NOT_BLANK\00"
@.str.11 = [42 x i8] c"SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION:\0A\00"
@.str.12 = [64 x i8] c"Command to prepare sector for write operation was not executed.\00"
@.str.13 = [54 x i8] c"COMPARE_ERROR: Source and destination data not equal.\00"
@.str.14 = [52 x i8] c"BUSY: Flash programming hardware interface is busy.\00"
@.str.15 = [69 x i8] c"PARAM_ERROR: Insufficient number of parameters or invalid parameter.\00"
@.str.16 = [45 x i8] c"ADDR_ERROR: Address is not on word boundary.\00"
@.str.17 = [59 x i8] c"ADDR_NOT_MAPPED: Address is not mapped in the memory map.\0A\00"
@.str.18 = [76 x i8] c" Count value is taken in to consideration where applicable.\00"
@.str.19 = [11 x i8] c"CMD_LOCKED\00"
@.str.20 = [38 x i8] c"INVALID_CODE: Unlock code is invalid.\00"
@.str.21 = [46 x i8] c"INVALID_BAUD_RATE: Invalid baud rate setting.\00"
@.str.22 = [44 x i8] c"INVALID_STOP_BIT: Invalid stop bit setting.\00"
@.str.23 = [17 x i8] c"unknown error %u\00"
define void @PhilipsOutputErrorMessage(i8 zeroext %0) {
switch i8 %0, label %45 [
i8 0, label %2
i8 1, label %4
i8 2, label %6
i8 3, label %8
i8 4, label %10
i8 5, label %13
i8 6, label %16
i8 7, label %18
i8 8, label %21
i8 9, label %23
i8 10, label %26
i8 11, label %28
i8 12, label %30
i8 13, label %32
i8 14, label %34
i8 15, label %37
i8 16, label %39
i8 17, label %41
i8 18, label %43
i8 -1, label %48
]
2: ; preds = %1
%3 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
br label %48
4: ; preds = %1
%5 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.1, i64 0, i64 0))
br label %48
6: ; preds = %1
%7 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.2, i64 0, i64 0))
br label %48
8: ; preds = %1
%9 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.3, i64 0, i64 0))
br label %48
10: ; preds = %1
%11 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.4, i64 0, i64 0))
%12 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
br label %48
13: ; preds = %1
%14 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.6, i64 0, i64 0))
%15 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
br label %48
16: ; preds = %1
%17 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.7, i64 0, i64 0))
br label %48
18: ; preds = %1
%19 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.8, i64 0, i64 0))
%20 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
br label %48
21: ; preds = %1
%22 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i64 0, i64 0))
br label %48
23: ; preds = %1
%24 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.11, i64 0, i64 0))
%25 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.12, i64 0, i64 0))
br label %48
26: ; preds = %1
%27 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.13, i64 0, i64 0))
br label %48
28: ; preds = %1
%29 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.14, i64 0, i64 0))
br label %48
30: ; preds = %1
%31 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.15, i64 0, i64 0))
br label %48
32: ; preds = %1
%33 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.16, i64 0, i64 0))
br label %48
34: ; preds = %1
%35 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.17, i64 0, i64 0))
%36 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.18, i64 0, i64 0))
br label %48
37: ; preds = %1
%38 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.19, i64 0, i64 0))
br label %48
39: ; preds = %1
%40 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.20, i64 0, i64 0))
br label %48
41: ; preds = %1
%42 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.21, i64 0, i64 0))
br label %48
43: ; preds = %1
%44 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.22, i64 0, i64 0))
br label %48
45: ; preds = %1
%46 = zext i8 %0 to i32
%47 = tail call i32 (i32, i8*, ...) @DebugPrintf(i32 1, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.23, i64 0, i64 0), i32 %46)
br label %48
48: ; preds = %45, %1, %43, %41, %39, %37, %34, %32, %30, %28, %26, %23, %21, %18, %16, %13, %10, %8, %6, %4, %2
ret void
}