#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 *, char);
char printnumword(char *number, char first) {
  if (*number == '0')
    ;
  else if (*number == '1')
    printf("%cne", (first) ? 'O' : 'o');
  else if (*number == '2')
    printf("%cwo", (first) ? 'T' : 't');
  else if (*number == '3')
    printf("%chree", (first) ? 'T' : 't');
  else if (*number == '4')
    printf("%cour", (first) ? 'F' : 'f');
  else if (*number == '5')
    printf("%cive", (first) ? 'F' : 'f');
  else if (*number == '6')
    printf("%cix", (first) ? 'S' : 's');
  else if (*number == '7')
    printf("%ceven", (first) ? 'S' : 's');
  else if (*number == '8')
    printf("%cight", (first) ? 'E' : 'e');
  else if (*number == '9')
    printf("%cine", (first) ? 'N' : 'n');
  else if (*number == 'X')
    printf("%cen", (first) ? 'T' : 't');
  else if (*number == 'E')
    printf("%clv", (first) ? 'E' : 'e');
  return 0;
}


x86 assembly (clang, -O0):
<printnumword>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %sil,%al
mov    %rdi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    1137 <printnumword+0x27>
jmp    13d1 <printnumword+0x2c1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x31,%eax
jne    116f <printnumword+0x5f>
movsbl -0x9(%rbp),%edx
mov    $0x6f,%eax
mov    $0x4f,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xe9e(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13cc <printnumword+0x2bc>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x32,%eax
jne    11a7 <printnumword+0x97>
movsbl -0x9(%rbp),%edx
mov    $0x74,%eax
mov    $0x54,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xe6b(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13c7 <printnumword+0x2b7>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x33,%eax
jne    11df <printnumword+0xcf>
movsbl -0x9(%rbp),%edx
mov    $0x74,%eax
mov    $0x54,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xe38(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13c2 <printnumword+0x2b2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x34,%eax
jne    1217 <printnumword+0x107>
movsbl -0x9(%rbp),%edx
mov    $0x66,%eax
mov    $0x46,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xe07(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13bd <printnumword+0x2ad>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x35,%eax
jne    124f <printnumword+0x13f>
movsbl -0x9(%rbp),%edx
mov    $0x66,%eax
mov    $0x46,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xdd5(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13b8 <printnumword+0x2a8>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x36,%eax
jne    1287 <printnumword+0x177>
movsbl -0x9(%rbp),%edx
mov    $0x73,%eax
mov    $0x53,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xda3(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13b3 <printnumword+0x2a3>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x37,%eax
jne    12bf <printnumword+0x1af>
movsbl -0x9(%rbp),%edx
mov    $0x73,%eax
mov    $0x53,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xd70(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13ae <printnumword+0x29e>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x38,%eax
jne    12f7 <printnumword+0x1e7>
movsbl -0x9(%rbp),%edx
mov    $0x65,%eax
mov    $0x45,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xd3f(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13a9 <printnumword+0x299>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jne    132f <printnumword+0x21f>
movsbl -0x9(%rbp),%edx
mov    $0x6e,%eax
mov    $0x4e,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xd0e(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    13a4 <printnumword+0x294>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    1367 <printnumword+0x257>
movsbl -0x9(%rbp),%edx
mov    $0x74,%eax
mov    $0x54,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xcdc(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    139f <printnumword+0x28f>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    139a <printnumword+0x28a>
movsbl -0x9(%rbp),%edx
mov    $0x65,%eax
mov    $0x45,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
lea    0xca9(%rip),%rdi
movsbl %al,%esi
call   1030 <printf@plt>
jmp    139f <printnumword+0x28f>
jmp    13a4 <printnumword+0x294>
jmp    13a9 <printnumword+0x299>
jmp    13ae <printnumword+0x29e>
jmp    13b3 <printnumword+0x2a3>
jmp    13b8 <printnumword+0x2a8>
jmp    13bd <printnumword+0x2ad>
jmp    13c2 <printnumword+0x2b2>
jmp    13c7 <printnumword+0x2b7>
jmp    13cc <printnumword+0x2bc>
jmp    13d1 <printnumword+0x2c1>
xor    %eax,%eax
movsbl %al,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<printnumword>:
push   %rax
mov    (%rdi),%al
add    $0xcf,%al
cmp    $0x27,%al
ja     1241 <printnumword+0x131>
movzbl %al,%eax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x4f,%eax
lea    0xf5b(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x54,%eax
lea    0xf46(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x54,%eax
lea    0xf31(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x46,%eax
lea    0xf1e(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x46,%eax
lea    0xf0a(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x53,%eax
lea    0xef6(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x53,%eax
lea    0xee4(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x45,%eax
lea    0xed4(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x4e,%eax
lea    0xec4(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x45,%eax
lea    0xeb8(%rip),%rdi
jmp    123a <printnumword+0x12a>
xor    %eax,%eax
test   %sil,%sil
sete   %al
shl    $0x5,%eax
or     $0x54,%eax
lea    0xe9c(%rip),%rdi
mov    %eax,%esi
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [5 x i8] c"%cne\00"
@.str.1 = [5 x i8] c"%cwo\00"
@.str.2 = [7 x i8] c"%chree\00"
@.str.3 = [6 x i8] c"%cour\00"
@.str.4 = [6 x i8] c"%cive\00"
@.str.5 = [5 x i8] c"%cix\00"
@.str.6 = [7 x i8] c"%ceven\00"
@.str.7 = [7 x i8] c"%cight\00"
@.str.8 = [6 x i8] c"%cine\00"
@.str.9 = [5 x i8] c"%cen\00"
@.str.10 = [5 x i8] c"%clv\00"
define signext i8 @printnumword(i8* %0, i8 signext %1) {
%3 = alloca i8*
%4 = alloca i8
store i8* %0, i8** %3
store i8 %1, i8* %4
%5 = load i8*, i8** %3
%6 = load i8, i8* %5
%7 = sext i8 %6 to i32
%8 = icmp eq i32 %7, 48
br i1 %8, label %9, label %10
9: ; preds = %2
br label %164
10: ; preds = %2
%11 = load i8*, i8** %3
%12 = load i8, i8* %11
%13 = sext i8 %12 to i32
%14 = icmp eq i32 %13, 49
br i1 %14, label %15, label %23
15: ; preds = %10
%16 = load i8, i8* %4
%17 = sext i8 %16 to i32
%18 = icmp ne i32 %17, 0
%19 = zext i1 %18 to i64
%20 = select i1 %18, i32 79, i32 111
%21 = trunc i32 %20 to i8
%22 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8 signext %21)
br label %163
23: ; preds = %10
%24 = load i8*, i8** %3
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, 50
br i1 %27, label %28, label %36
28: ; preds = %23
%29 = load i8, i8* %4
%30 = sext i8 %29 to i32
%31 = icmp ne i32 %30, 0
%32 = zext i1 %31 to i64
%33 = select i1 %31, i32 84, i32 116
%34 = trunc i32 %33 to i8
%35 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8 signext %34)
br label %162
36: ; preds = %23
%37 = load i8*, i8** %3
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = icmp eq i32 %39, 51
br i1 %40, label %41, label %49
41: ; preds = %36
%42 = load i8, i8* %4
%43 = sext i8 %42 to i32
%44 = icmp ne i32 %43, 0
%45 = zext i1 %44 to i64
%46 = select i1 %44, i32 84, i32 116
%47 = trunc i32 %46 to i8
%48 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8 signext %47)
br label %161
49: ; preds = %36
%50 = load i8*, i8** %3
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp eq i32 %52, 52
br i1 %53, label %54, label %62
54: ; preds = %49
%55 = load i8, i8* %4
%56 = sext i8 %55 to i32
%57 = icmp ne i32 %56, 0
%58 = zext i1 %57 to i64
%59 = select i1 %57, i32 70, i32 102
%60 = trunc i32 %59 to i8
%61 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8 signext %60)
br label %160
62: ; preds = %49
%63 = load i8*, i8** %3
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %65, 53
br i1 %66, label %67, label %75
67: ; preds = %62
%68 = load i8, i8* %4
%69 = sext i8 %68 to i32
%70 = icmp ne i32 %69, 0
%71 = zext i1 %70 to i64
%72 = select i1 %70, i32 70, i32 102
%73 = trunc i32 %72 to i8
%74 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i8 signext %73)
br label %159
75: ; preds = %62
%76 = load i8*, i8** %3
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = icmp eq i32 %78, 54
br i1 %79, label %80, label %88
80: ; preds = %75
%81 = load i8, i8* %4
%82 = sext i8 %81 to i32
%83 = icmp ne i32 %82, 0
%84 = zext i1 %83 to i64
%85 = select i1 %83, i32 83, i32 115
%86 = trunc i32 %85 to i8
%87 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8 signext %86)
br label %158
88: ; preds = %75
%89 = load i8*, i8** %3
%90 = load i8, i8* %89
%91 = sext i8 %90 to i32
%92 = icmp eq i32 %91, 55
br i1 %92, label %93, label %101
93: ; preds = %88
%94 = load i8, i8* %4
%95 = sext i8 %94 to i32
%96 = icmp ne i32 %95, 0
%97 = zext i1 %96 to i64
%98 = select i1 %96, i32 83, i32 115
%99 = trunc i32 %98 to i8
%100 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0), i8 signext %99)
br label %157
101: ; preds = %88
%102 = load i8*, i8** %3
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = icmp eq i32 %104, 56
br i1 %105, label %106, label %114
106: ; preds = %101
%107 = load i8, i8* %4
%108 = sext i8 %107 to i32
%109 = icmp ne i32 %108, 0
%110 = zext i1 %109 to i64
%111 = select i1 %109, i32 69, i32 101
%112 = trunc i32 %111 to i8
%113 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0), i8 signext %112)
br label %156
114: ; preds = %101
%115 = load i8*, i8** %3
%116 = load i8, i8* %115
%117 = sext i8 %116 to i32
%118 = icmp eq i32 %117, 57
br i1 %118, label %119, label %127
119: ; preds = %114
%120 = load i8, i8* %4
%121 = sext i8 %120 to i32
%122 = icmp ne i32 %121, 0
%123 = zext i1 %122 to i64
%124 = select i1 %122, i32 78, i32 110
%125 = trunc i32 %124 to i8
%126 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), i8 signext %125)
br label %155
127: ; preds = %114
%128 = load i8*, i8** %3
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 88
br i1 %131, label %132, label %140
132: ; preds = %127
%133 = load i8, i8* %4
%134 = sext i8 %133 to i32
%135 = icmp ne i32 %134, 0
%136 = zext i1 %135 to i64
%137 = select i1 %135, i32 84, i32 116
%138 = trunc i32 %137 to i8
%139 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8 signext %138)
br label %154
140: ; preds = %127
%141 = load i8*, i8** %3
%142 = load i8, i8* %141
%143 = sext i8 %142 to i32
%144 = icmp eq i32 %143, 69
br i1 %144, label %145, label %153
145: ; preds = %140
%146 = load i8, i8* %4
%147 = sext i8 %146 to i32
%148 = icmp ne i32 %147, 0
%149 = zext i1 %148 to i64
%150 = select i1 %148, i32 69, i32 101
%151 = trunc i32 %150 to i8
%152 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i8 signext %151)
br label %153
153: ; preds = %145, %140
br label %154
154: ; preds = %153, %132
br label %155
155: ; preds = %154, %119
br label %156
156: ; preds = %155, %106
br label %157
157: ; preds = %156, %93
br label %158
158: ; preds = %157, %80
br label %159
159: ; preds = %158, %67
br label %160
160: ; preds = %159, %54
br label %161
161: ; preds = %160, %41
br label %162
162: ; preds = %161, %28
br label %163
163: ; preds = %162, %15
br label %164
164: ; preds = %163, %9
ret i8 0
}

LLVM IR (-O2):
@.str = [5 x i8] c"%cne\00"
@.str.1 = [5 x i8] c"%cwo\00"
@.str.2 = [7 x i8] c"%chree\00"
@.str.3 = [6 x i8] c"%cour\00"
@.str.4 = [6 x i8] c"%cive\00"
@.str.5 = [5 x i8] c"%cix\00"
@.str.6 = [7 x i8] c"%ceven\00"
@.str.7 = [7 x i8] c"%cight\00"
@.str.8 = [6 x i8] c"%cine\00"
@.str.9 = [5 x i8] c"%cen\00"
@.str.10 = [5 x i8] c"%clv\00"
define signext i8 @printnumword(i8* nocapture %0, i8 signext %1) {
%3 = load i8, i8* %0
switch i8 %3, label %48 [
i8 69, label %44
i8 49, label %4
i8 50, label %8
i8 51, label %12
i8 52, label %16
i8 53, label %20
i8 54, label %24
i8 55, label %28
i8 56, label %32
i8 57, label %36
i8 88, label %40
]
4: ; preds = %2
%5 = icmp eq i8 %1, 0
%6 = select i1 %5, i8 111, i8 79
%7 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8 signext %6)
br label %48
8: ; preds = %2
%9 = icmp eq i8 %1, 0
%10 = select i1 %9, i8 116, i8 84
%11 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8 signext %10)
br label %48
12: ; preds = %2
%13 = icmp eq i8 %1, 0
%14 = select i1 %13, i8 116, i8 84
%15 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8 signext %14)
br label %48
16: ; preds = %2
%17 = icmp eq i8 %1, 0
%18 = select i1 %17, i8 102, i8 70
%19 = tail call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8 signext %18)
br label %48
20: ; preds = %2
%21 = icmp eq i8 %1, 0
%22 = select i1 %21, i8 102, i8 70
%23 = tail call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i8 signext %22)
br label %48
24: ; preds = %2
%25 = icmp eq i8 %1, 0
%26 = select i1 %25, i8 115, i8 83
%27 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8 signext %26)
br label %48
28: ; preds = %2
%29 = icmp eq i8 %1, 0
%30 = select i1 %29, i8 115, i8 83
%31 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0), i8 signext %30)
br label %48
32: ; preds = %2
%33 = icmp eq i8 %1, 0
%34 = select i1 %33, i8 101, i8 69
%35 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0), i8 signext %34)
br label %48
36: ; preds = %2
%37 = icmp eq i8 %1, 0
%38 = select i1 %37, i8 110, i8 78
%39 = tail call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), i8 signext %38)
br label %48
40: ; preds = %2
%41 = icmp eq i8 %1, 0
%42 = select i1 %41, i8 116, i8 84
%43 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8 signext %42)
br label %48
44: ; preds = %2
%45 = icmp eq i8 %1, 0
%46 = select i1 %45, i8 101, i8 69
%47 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i8 signext %46)
br label %48
48: ; preds = %2, %4, %12, %20, %28, %36, %44, %40, %32, %24, %16, %8
ret i8 0
}