int extract_http_code(char *response, int response_size) {
  int code = 0;
  if (response_size < 13) {
    return code;
  }
  if ((response[0] == 'h' || response[0] == 'H') &&
      (response[1] == 't' || response[1] == 'T') &&
      (response[2] == 't' || response[2] == 'T') &&
      (response[3] == 'p' || response[3] == 'P') && response[4] == '/' &&
      (response[5] >= '0' && response[5] <= '9') && response[6] == '.' &&
      (response[7] >= '0' && response[7] <= '9') && response[8] == ' ' &&
      (response[9] >= '0' && response[9] <= '9') &&
      (response[10] >= '0' && response[10] <= '9') &&
      (response[11] >= '0' && response[11] <= '9') && response[12] == ' ') {
    code += 100 * (response[9] - '0');
    code += 10 * (response[10] - '0');
    code += response[11] - '0';
  }
  return code;
}


x86 assembly (clang, -O0):
<extract_http_code>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0xd,-0x14(%rbp)
jge    1127 <extract_http_code+0x27>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    12da <extract_http_code+0x1da>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
je     1147 <extract_http_code+0x47>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x48,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x74,%eax
je     1169 <extract_http_code+0x69>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x54,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x74,%eax
je     118b <extract_http_code+0x8b>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x54,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x70,%eax
je     11ad <extract_http_code+0xad>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x50,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x2f,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x30,%eax
jl     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x39,%eax
jg     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x2e,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x30,%eax
jl     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x39,%eax
jg     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x20,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x9(%rax),%eax
cmp    $0x30,%eax
jl     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x9(%rax),%eax
cmp    $0x39,%eax
jg     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0xa(%rax),%eax
cmp    $0x30,%eax
jl     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0xa(%rax),%eax
cmp    $0x39,%eax
jg     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0xb(%rax),%eax
cmp    $0x30,%eax
jl     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0xb(%rax),%eax
cmp    $0x39,%eax
jg     12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0xc(%rax),%eax
cmp    $0x20,%eax
jne    12d4 <extract_http_code+0x1d4>
mov    -0x10(%rbp),%rax
movsbl 0x9(%rax),%eax
sub    $0x30,%eax
imul   $0x64,%eax,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0xa(%rax),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0xb(%rax),%eax
sub    $0x30,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<extract_http_code>:
xor    %eax,%eax
cmp    $0xd,%esi
jl     11a1 <extract_http_code+0xa1>
mov    (%rdi),%cl
or     $0x20,%cl
cmp    $0x68,%cl
jne    11a1 <extract_http_code+0xa1>
mov    0x1(%rdi),%cl
or     $0x20,%cl
cmp    $0x74,%cl
jne    11a1 <extract_http_code+0xa1>
mov    0x2(%rdi),%cl
or     $0x20,%cl
cmp    $0x74,%cl
jne    11a1 <extract_http_code+0xa1>
mov    0x3(%rdi),%cl
or     $0x20,%cl
cmp    $0x70,%cl
jne    11a1 <extract_http_code+0xa1>
cmpb   $0x2f,0x4(%rdi)
jne    11a1 <extract_http_code+0xa1>
mov    0x5(%rdi),%cl
add    $0xd0,%cl
cmp    $0x9,%cl
ja     11a1 <extract_http_code+0xa1>
cmpb   $0x2e,0x6(%rdi)
jne    11a1 <extract_http_code+0xa1>
mov    0x7(%rdi),%cl
add    $0xd0,%cl
cmp    $0x9,%cl
ja     11a1 <extract_http_code+0xa1>
cmpb   $0x20,0x8(%rdi)
jne    11a1 <extract_http_code+0xa1>
movsbl 0x9(%rdi),%ecx
lea    -0x30(%rcx),%edx
cmp    $0x9,%dl
ja     11a1 <extract_http_code+0xa1>
movsbl 0xa(%rdi),%edx
lea    -0x30(%rdx),%esi
cmp    $0x9,%sil
ja     11a1 <extract_http_code+0xa1>
movsbl 0xb(%rdi),%r8d
lea    -0x30(%r8),%esi
cmp    $0x9,%sil
ja     11a1 <extract_http_code+0xa1>
cmpb   $0x20,0xc(%rdi)
jne    11a1 <extract_http_code+0xa1>
imul   $0x64,%ecx,%eax
lea    (%rdx,%rdx,4),%ecx
lea    (%rax,%rcx,2),%eax
add    %r8d,%eax
add    $0xffffeb30,%eax
ret

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

LLVM IR (-O2):
define i32 @extract_http_code(i8* nocapture %0, i32 %1) {
%3 = icmp slt i32 %1, 13
br i1 %3, label %65, label %4
4: ; preds = %2
%5 = load i8, i8* %0
switch i8 %5, label %65 [
i8 104, label %6
i8 72, label %6
]
6: ; preds = %4, %4
%7 = getelementptr inbounds i8, i8* %0, i64 1
%8 = load i8, i8* %7
switch i8 %8, label %65 [
i8 116, label %9
i8 84, label %9
]
9: ; preds = %6, %6
%10 = getelementptr inbounds i8, i8* %0, i64 2
%11 = load i8, i8* %10
switch i8 %11, label %65 [
i8 116, label %12
i8 84, label %12
]
12: ; preds = %9, %9
%13 = getelementptr inbounds i8, i8* %0, i64 3
%14 = load i8, i8* %13
switch i8 %14, label %65 [
i8 112, label %15
i8 80, label %15
]
15: ; preds = %12, %12
%16 = getelementptr inbounds i8, i8* %0, i64 4
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 47
br i1 %18, label %19, label %65
19: ; preds = %15
%20 = getelementptr inbounds i8, i8* %0, i64 5
%21 = load i8, i8* %20
%22 = add i8 %21, -48
%23 = icmp ult i8 %22, 10
br i1 %23, label %24, label %65
24: ; preds = %19
%25 = getelementptr inbounds i8, i8* %0, i64 6
%26 = load i8, i8* %25
%27 = icmp eq i8 %26, 46
br i1 %27, label %28, label %65
28: ; preds = %24
%29 = getelementptr inbounds i8, i8* %0, i64 7
%30 = load i8, i8* %29
%31 = add i8 %30, -48
%32 = icmp ult i8 %31, 10
br i1 %32, label %33, label %65
33: ; preds = %28
%34 = getelementptr inbounds i8, i8* %0, i64 8
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, 32
br i1 %36, label %37, label %65
37: ; preds = %33
%38 = getelementptr inbounds i8, i8* %0, i64 9
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = add i8 %39, -48
%42 = icmp ult i8 %41, 10
br i1 %42, label %43, label %65
43: ; preds = %37
%44 = getelementptr inbounds i8, i8* %0, i64 10
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = add i8 %45, -48
%48 = icmp ult i8 %47, 10
br i1 %48, label %49, label %65
49: ; preds = %43
%50 = getelementptr inbounds i8, i8* %0, i64 11
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = add i8 %51, -48
%54 = icmp ult i8 %53, 10
br i1 %54, label %55, label %65
55: ; preds = %49
%56 = getelementptr inbounds i8, i8* %0, i64 12
%57 = load i8, i8* %56
%58 = icmp eq i8 %57, 32
br i1 %58, label %59, label %65
59: ; preds = %55
%60 = mul nsw i32 %40, 100
%61 = mul nsw i32 %46, 10
%62 = add nsw i32 %60, -5328
%63 = add nsw i32 %62, %61
%64 = add nsw i32 %63, %52
br label %65
65: ; preds = %15, %19, %24, %28, %33, %37, %43, %49, %55, %59, %4, %6, %9, %12, %2
%66 = phi i32 [ 0, %2 ], [ %64, %59 ], [ 0, %55 ], [ 0, %49 ], [ 0, %43 ], [ 0, %37 ], [ 0, %33 ], [ 0, %28 ], [ 0, %24 ], [ 0, %19 ], [ 0, %15 ], [ 0, %4 ], [ 0, %6 ], [ 0, %9 ], [ 0, %12 ]
ret i32 %66
}