int spool(char *line, int *i, int offset) {
  for ((*i) += offset; line[*i] == ' ' || line[*i] == '\t'; (*i)++)
    ;
  if (line[*i] == '=')
    (*i)++;
  for (; line[*i] == ' ' || line[*i] == '\t'; (*i)++)
    ;
  if (line[*i] == '\0')
    return (1);
  else
    return (0);
}


x86 assembly (clang, -O0):
<spool>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x1d(%rbp)
je     114f <spool+0x4f>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    115f <spool+0x5f>
jmp    1174 <spool+0x74>
jmp    1164 <spool+0x64>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    111a <spool+0x1a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3d,%eax
jne    1197 <spool+0x97>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    119c <spool+0x9c>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x1e(%rbp)
je     11d1 <spool+0xd1>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    11e1 <spool+0xe1>
jmp    11f6 <spool+0xf6>
jmp    11e6 <spool+0xe6>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    119c <spool+0x9c>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    121a <spool+0x11a>
movl   $0x1,-0x4(%rbp)
jmp    1221 <spool+0x121>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<spool>:
add    (%rsi),%edx
movslq %edx,%rax
add    %rdi,%rax
jmp    1117 <spool+0x17>
nopw   0x0(%rax,%rax,1)
add    $0x1,%edx
add    $0x1,%rax
mov    %edx,(%rsi)
movzbl (%rax),%ecx
cmp    $0x9,%cl
je     1110 <spool+0x10>
cmp    $0x20,%cl
je     1110 <spool+0x10>
cmp    $0x3d,%cl
jne    1130 <spool+0x30>
add    $0x1,%edx
mov    %edx,(%rsi)
movslq %edx,%rax
jmp    1146 <spool+0x46>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rax
mov    %eax,(%rsi)
movzbl (%rdi,%rax,1),%ecx
cmp    $0x9,%cl
je     1140 <spool+0x40>
cmp    $0x20,%cl
je     1140 <spool+0x40>
test   %cl,%cl
jne    115e <spool+0x5e>
mov    $0x1,%eax
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @spool(i8* %0, i32* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32*
%7 = alloca i32
store i8* %0, i8** %5
store i32* %1, i32** %6
store i32 %2, i32* %7
%8 = load i32, i32* %7
%9 = load i32*, i32** %6
%10 = load i32, i32* %9
%11 = add nsw i32 %10, %8
store i32 %11, i32* %9
br label %12
12: ; preds = %33, %3
%13 = load i8*, i8** %5
%14 = load i32*, i32** %6
%15 = load i32, i32* %14
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i8, i8* %13, i64 %16
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp eq i32 %19, 32
br i1 %20, label %30, label %21
21: ; preds = %12
%22 = load i8*, i8** %5
%23 = load i32*, i32** %6
%24 = load i32, i32* %23
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %22, i64 %25
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 9
br label %30
30: ; preds = %21, %12
%31 = phi i1 [ true, %12 ], [ %29, %21 ]
br i1 %31, label %32, label %37
32: ; preds = %30
br label %33
33: ; preds = %32
%34 = load i32*, i32** %6
%35 = load i32, i32* %34
%36 = add nsw i32 %35, 1
store i32 %36, i32* %34
br label %12
37: ; preds = %30
%38 = load i8*, i8** %5
%39 = load i32*, i32** %6
%40 = load i32, i32* %39
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %38, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = icmp eq i32 %44, 61
br i1 %45, label %46, label %50
46: ; preds = %37
%47 = load i32*, i32** %6
%48 = load i32, i32* %47
%49 = add nsw i32 %48, 1
store i32 %49, i32* %47
br label %50
50: ; preds = %46, %37
br label %51
51: ; preds = %72, %50
%52 = load i8*, i8** %5
%53 = load i32*, i32** %6
%54 = load i32, i32* %53
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %52, i64 %55
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = icmp eq i32 %58, 32
br i1 %59, label %69, label %60
60: ; preds = %51
%61 = load i8*, i8** %5
%62 = load i32*, i32** %6
%63 = load i32, i32* %62
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i8, i8* %61, i64 %64
%66 = load i8, i8* %65
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 9
br label %69
69: ; preds = %60, %51
%70 = phi i1 [ true, %51 ], [ %68, %60 ]
br i1 %70, label %71, label %76
71: ; preds = %69
br label %72
72: ; preds = %71
%73 = load i32*, i32** %6
%74 = load i32, i32* %73
%75 = add nsw i32 %74, 1
store i32 %75, i32* %73
br label %51
76: ; preds = %69
%77 = load i8*, i8** %5
%78 = load i32*, i32** %6
%79 = load i32, i32* %78
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds i8, i8* %77, i64 %80
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp eq i32 %83, 0
br i1 %84, label %85, label %86
85: ; preds = %76
store i32 1, i32* %4
br label %87
86: ; preds = %76
store i32 0, i32* %4
br label %87
87: ; preds = %86, %85
%88 = load i32, i32* %4
ret i32 %88
}

LLVM IR (-O2):
define i32 @spool(i8* nocapture %0, i32* nocapture %1, i32 %2) {
%4 = load i32, i32* %1
%5 = add i32 %4, %2
%6 = sext i32 %5 to i64
br label %7
7: ; preds = %12, %3
%8 = phi i64 [ %13, %12 ], [ %6, %3 ]
%9 = trunc i64 %8 to i32
store i32 %9, i32* %1
%10 = getelementptr inbounds i8, i8* %0, i64 %8
%11 = load i8, i8* %10
switch i8 %11, label %17 [
i8 32, label %12
i8 9, label %12
i8 61, label %14
]
12: ; preds = %7, %7
%13 = add i64 %8, 1
br label %7
14: ; preds = %7
%15 = trunc i64 %8 to i32
%16 = add nsw i32 %15, 1
store i32 %16, i32* %1
br label %19
17: ; preds = %7
%18 = trunc i64 %8 to i32
br label %19
19: ; preds = %17, %14
%20 = phi i32 [ %18, %17 ], [ %16, %14 ]
br label %21
21: ; preds = %19, %26
%22 = phi i32 [ %27, %26 ], [ %20, %19 ]
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8, i8* %0, i64 %23
%25 = load i8, i8* %24
switch i8 %25, label %29 [
i8 32, label %26
i8 9, label %26
i8 0, label %28
]
26: ; preds = %21, %21
%27 = add nsw i32 %22, 1
store i32 %27, i32* %1
br label %21
28: ; preds = %21
br label %29
29: ; preds = %21, %28
%30 = phi i32 [ 1, %28 ], [ 0, %21 ]
ret i32 %30
}