char *ppool_strerr(int errno) {
  switch (errno) {
  case 0:
    return "成功!";
  case -1:
    return "无法为线程池开辟空间，创建线程池失败!";
  case -2:
    return "无法为此数量的线程分配足够的内存!";
  case -3:
    return "pthread初始化互斥锁失败，请使用ppool_error查看更多信息!";
  case -4:
    return "pthread初始化条件变量失败，请使用ppool_error查看更多信息!";
  case -5:
    return "无法为任务队列开辟空间!";
  case -6:
    return "错误的优先级!";
  case -7:
    return "无法为队列丙创建一个结点，开辟内存出错!";
  default:
    return "未知错误!";
  }
}


x86 assembly (clang, -O0):
<ppool_strerr>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
add    $0x7,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x7,%eax
ja     11b0 <ppool_strerr+0xb0>
mov    -0x18(%rbp),%rax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xee9(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xee1(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xf09(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xf2b(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xf65(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xfa2(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xfb5(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xfb9(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    11bb <ppool_strerr+0xbb>
lea    0xfe4(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ppool_strerr>:
add    $0x7,%edi
cmp    $0x7,%edi
ja     111a <ppool_strerr+0x1a>
movslq %edi,%rax
lea    0x107a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
ret
lea    0x105a(%rip),%rax
ret

LLVM IR (-O0):
@.str = [8 x i8] c"\E6\88\90\E5\8A\9F!\00"
@.str.1 = [56 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E7\BA\BF\E7\A8\8B\E6\B1\A0\E5\BC\80\E8\BE\9F\E7\A9\BA\E9\97\B4\EF\BC\8C\E5\88\9B\E5\BB\BA\E7\BA\BF\E7\A8\8B\E6\B1\A0\E5\A4\B1\E8\B4\A5!\00"
@.str.2 = [50 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E6\AD\A4\E6\95\B0\E9\87\8F\E7\9A\84\E7\BA\BF\E7\A8\8B\E5\88\86\E9\85\8D\E8\B6\B3\E5\A4\9F\E7\9A\84\E5\86\85\E5\AD\98!\00"
@.str.3 = [74 x i8] c"pthread\E5\88\9D\E5\A7\8B\E5\8C\96\E4\BA\92\E6\96\A5\E9\94\81\E5\A4\B1\E8\B4\A5\EF\BC\8C\E8\AF\B7\E4\BD\BF\E7\94\A8ppool_error\E6\9F\A5\E7\9C\8B\E6\9B\B4\E5\A4\9A\E4\BF\A1\E6\81\AF!\00"
@.str.4 = [77 x i8] c"pthread\E5\88\9D\E5\A7\8B\E5\8C\96\E6\9D\A1\E4\BB\B6\E5\8F\98\E9\87\8F\E5\A4\B1\E8\B4\A5\EF\BC\8C\E8\AF\B7\E4\BD\BF\E7\94\A8ppool_error\E6\9F\A5\E7\9C\8B\E6\9B\B4\E5\A4\9A\E4\BF\A1\E6\81\AF!\00"
@.str.5 = [35 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E4\BB\BB\E5\8A\A1\E9\98\9F\E5\88\97\E5\BC\80\E8\BE\9F\E7\A9\BA\E9\97\B4!\00"
@.str.6 = [20 x i8] c"\E9\94\99\E8\AF\AF\E7\9A\84\E4\BC\98\E5\85\88\E7\BA\A7!\00"
@.str.7 = [59 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E9\98\9F\E5\88\97\E4\B8\99\E5\88\9B\E5\BB\BA\E4\B8\80\E4\B8\AA\E7\BB\93\E7\82\B9\EF\BC\8C\E5\BC\80\E8\BE\9F\E5\86\85\E5\AD\98\E5\87\BA\E9\94\99!\00"
@.str.8 = [14 x i8] c"\E6\9C\AA\E7\9F\A5\E9\94\99\E8\AF\AF!\00"
define i8* @ppool_strerr(i32 %0) {
%2 = alloca i8*
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %13 [
i32 0, label %5
i32 -1, label %6
i32 -2, label %7
i32 -3, label %8
i32 -4, label %9
i32 -5, label %10
i32 -6, label %11
i32 -7, label %12
]
5: ; preds = %1
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8** %2
br label %14
6: ; preds = %1
store i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.1, i64 0, i64 0), i8** %2
br label %14
7: ; preds = %1
store i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.2, i64 0, i64 0), i8** %2
br label %14
8: ; preds = %1
store i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.3, i64 0, i64 0), i8** %2
br label %14
9: ; preds = %1
store i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.4, i64 0, i64 0), i8** %2
br label %14
10: ; preds = %1
store i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.5, i64 0, i64 0), i8** %2
br label %14
11: ; preds = %1
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.6, i64 0, i64 0), i8** %2
br label %14
12: ; preds = %1
store i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.7, i64 0, i64 0), i8** %2
br label %14
13: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.8, i64 0, i64 0), i8** %2
br label %14
14: ; preds = %13, %12, %11, %10, %9, %8, %7, %6, %5
%15 = load i8*, i8** %2
ret i8* %15
}

LLVM IR (-O2):
@.str = [8 x i8] c"\E6\88\90\E5\8A\9F!\00"
@.str.1 = [56 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E7\BA\BF\E7\A8\8B\E6\B1\A0\E5\BC\80\E8\BE\9F\E7\A9\BA\E9\97\B4\EF\BC\8C\E5\88\9B\E5\BB\BA\E7\BA\BF\E7\A8\8B\E6\B1\A0\E5\A4\B1\E8\B4\A5!\00"
@.str.2 = [50 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E6\AD\A4\E6\95\B0\E9\87\8F\E7\9A\84\E7\BA\BF\E7\A8\8B\E5\88\86\E9\85\8D\E8\B6\B3\E5\A4\9F\E7\9A\84\E5\86\85\E5\AD\98!\00"
@.str.3 = [74 x i8] c"pthread\E5\88\9D\E5\A7\8B\E5\8C\96\E4\BA\92\E6\96\A5\E9\94\81\E5\A4\B1\E8\B4\A5\EF\BC\8C\E8\AF\B7\E4\BD\BF\E7\94\A8ppool_error\E6\9F\A5\E7\9C\8B\E6\9B\B4\E5\A4\9A\E4\BF\A1\E6\81\AF!\00"
@.str.4 = [77 x i8] c"pthread\E5\88\9D\E5\A7\8B\E5\8C\96\E6\9D\A1\E4\BB\B6\E5\8F\98\E9\87\8F\E5\A4\B1\E8\B4\A5\EF\BC\8C\E8\AF\B7\E4\BD\BF\E7\94\A8ppool_error\E6\9F\A5\E7\9C\8B\E6\9B\B4\E5\A4\9A\E4\BF\A1\E6\81\AF!\00"
@.str.5 = [35 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E4\BB\BB\E5\8A\A1\E9\98\9F\E5\88\97\E5\BC\80\E8\BE\9F\E7\A9\BA\E9\97\B4!\00"
@.str.6 = [20 x i8] c"\E9\94\99\E8\AF\AF\E7\9A\84\E4\BC\98\E5\85\88\E7\BA\A7!\00"
@.str.7 = [59 x i8] c"\E6\97\A0\E6\B3\95\E4\B8\BA\E9\98\9F\E5\88\97\E4\B8\99\E5\88\9B\E5\BB\BA\E4\B8\80\E4\B8\AA\E7\BB\93\E7\82\B9\EF\BC\8C\E5\BC\80\E8\BE\9F\E5\86\85\E5\AD\98\E5\87\BA\E9\94\99!\00"
@.str.8 = [14 x i8] c"\E6\9C\AA\E7\9F\A5\E9\94\99\E8\AF\AF!\00"
@reltable.ppool_strerr = [8 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([59 x i8]* @.str.7 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([20 x i8]* @.str.6 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([35 x i8]* @.str.5 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([77 x i8]* @.str.4 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([74 x i8]* @.str.3 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([50 x i8]* @.str.2 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([56 x i8]* @.str.1 to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str to i64), i64 ptrtoint ([8 x i32]* @reltable.ppool_strerr to i64)) to i32)]
define i8* @ppool_strerr(i32 %0) {
%2 = add i32 %0, 7
%3 = icmp ult i32 %2, 8
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = shl i64 %5, 2
%7 = call i8* @llvm.load.relative.i64(i8* bitcast ([8 x i32]* @reltable.ppool_strerr to i8*), i64 %6)
br label %8
8: ; preds = %1, %4
%9 = phi i8* [ %7, %4 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.8, i64 0, i64 0), %1 ]
ret i8* %9
}