int TclLooksLikeInt(p)
char *p;
{
  while (isspace(((unsigned char)(*p)))) {
    p++;
  }
  if ((*p == '+') || (*p == '-')) {
    p++;
  }
  if (!isdigit(((unsigned char)(*p)))) {
    return 0;
  }
  p++;
  while (isdigit(((unsigned char)(*p)))) {
    p++;
  }
  if ((*p != '.') && (*p != 'e') && (*p != 'E')) {
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<TclLooksLikeInt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%edi
call   1040 <isspace@plt>
cmp    $0x0,%eax
je     1152 <TclLooksLikeInt+0x32>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    112c <TclLooksLikeInt+0xc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     1172 <TclLooksLikeInt+0x52>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    117e <TclLooksLikeInt+0x5e>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
jne    119f <TclLooksLikeInt+0x7f>
movl   $0x0,-0x4(%rbp)
jmp    1214 <TclLooksLikeInt+0xf4>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     11d1 <TclLooksLikeInt+0xb1>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11ab <TclLooksLikeInt+0x8b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     120d <TclLooksLikeInt+0xed>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
je     120d <TclLooksLikeInt+0xed>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
je     120d <TclLooksLikeInt+0xed>
movl   $0x1,-0x4(%rbp)
jmp    1214 <TclLooksLikeInt+0xf4>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<TclLooksLikeInt>:
push   %rbp
push   %rbx
push   %rax
mov    %rdi,%rbx
cs nopw 0x0(%rax,%rax,1)
movzbl (%rbx),%ebp
movzbl %bpl,%edi
call   1030 <isspace@plt>
add    $0x1,%rbx
test   %eax,%eax
jne    1120 <TclLooksLikeInt+0x10>
cmp    $0x2b,%bpl
je     1140 <TclLooksLikeInt+0x30>
cmp    $0x2d,%bpl
jne    1145 <TclLooksLikeInt+0x35>
mov    (%rbx),%bpl
jmp    1149 <TclLooksLikeInt+0x39>
add    $0xffffffffffffffff,%rbx
movzbl %bpl,%ecx
add    $0xffffffd0,%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
ja     1191 <TclLooksLikeInt+0x81>
add    $0x1,%rbx
nopl   0x0(%rax,%rax,1)
movzbl (%rbx),%ecx
lea    -0x30(%rcx),%eax
add    $0x1,%rbx
cmp    $0xa,%eax
jb     1160 <TclLooksLikeInt+0x50>
mov    $0x1,%eax
add    $0xd2,%cl
cmp    $0x37,%cl
ja     1191 <TclLooksLikeInt+0x81>
movzbl %cl,%ecx
movabs $0x80000000800001,%rdx
bt     %rcx,%rdx
jae    1191 <TclLooksLikeInt+0x81>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define i32 @TclLooksLikeInt(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
store i8* %0, i8** %3
br label %4
4: ; preds = %10, %1
%5 = load i8*, i8** %3
%6 = load i8, i8* %5
%7 = zext i8 %6 to i32
%8 = call i32 @isspace(i32 %7)
%9 = icmp ne i32 %8, 0
br i1 %9, label %10, label %13
10: ; preds = %4
%11 = load i8*, i8** %3
%12 = getelementptr inbounds i8, i8* %11, i32 1
store i8* %12, i8** %3
br label %4
13: ; preds = %4
%14 = load i8*, i8** %3
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 43
br i1 %17, label %23, label %18
18: ; preds = %13
%19 = load i8*, i8** %3
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 45
br i1 %22, label %23, label %26
23: ; preds = %18, %13
%24 = load i8*, i8** %3
%25 = getelementptr inbounds i8, i8* %24, i32 1
store i8* %25, i8** %3
br label %26
26: ; preds = %23, %18
%27 = load i8*, i8** %3
%28 = load i8, i8* %27
%29 = zext i8 %28 to i32
%30 = call i32 @isdigit(i32 %29)
%31 = icmp ne i32 %30, 0
br i1 %31, label %33, label %32
32: ; preds = %26
store i32 0, i32* %2
br label %62
33: ; preds = %26
%34 = load i8*, i8** %3
%35 = getelementptr inbounds i8, i8* %34, i32 1
store i8* %35, i8** %3
br label %36
36: ; preds = %42, %33
%37 = load i8*, i8** %3
%38 = load i8, i8* %37
%39 = zext i8 %38 to i32
%40 = call i32 @isdigit(i32 %39)
%41 = icmp ne i32 %40, 0
br i1 %41, label %42, label %45
42: ; preds = %36
%43 = load i8*, i8** %3
%44 = getelementptr inbounds i8, i8* %43, i32 1
store i8* %44, i8** %3
br label %36
45: ; preds = %36
%46 = load i8*, i8** %3
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 46
br i1 %49, label %50, label %61
50: ; preds = %45
%51 = load i8*, i8** %3
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = icmp ne i32 %53, 101
br i1 %54, label %55, label %61
55: ; preds = %50
%56 = load i8*, i8** %3
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = icmp ne i32 %58, 69
br i1 %59, label %60, label %61
60: ; preds = %55
store i32 1, i32* %2
br label %62
61: ; preds = %55, %50, %45
store i32 0, i32* %2
br label %62
62: ; preds = %61, %60, %32
%63 = load i32, i32* %2
ret i32 %63
}

LLVM IR (-O2):
define i32 @TclLooksLikeInt(i8* nocapture %0) {
br label %2
2: ; preds = %2, %1
%3 = phi i8* [ %0, %1 ], [ %8, %2 ]
%4 = load i8, i8* %3
%5 = zext i8 %4 to i32
%6 = tail call i32 @isspace(i32 %5)
%7 = icmp eq i32 %6, 0
%8 = getelementptr inbounds i8, i8* %3, i64 1
br i1 %7, label %9, label %2
9: ; preds = %2
switch i8 %4, label %12 [
i8 43, label %10
i8 45, label %10
]
10: ; preds = %9, %9
%11 = load i8, i8* %8
br label %12
12: ; preds = %9, %10
%13 = phi i8 [ %4, %9 ], [ %11, %10 ]
%14 = phi i8* [ %3, %9 ], [ %8, %10 ]
%15 = zext i8 %13 to i32
%16 = add nsw i32 %15, -48
%17 = icmp ult i32 %16, 10
br i1 %17, label %18, label %27
18: ; preds = %12, %18
%19 = phi i8* [ %20, %18 ], [ %14, %12 ]
%20 = getelementptr inbounds i8, i8* %19, i64 1
%21 = load i8, i8* %20
%22 = zext i8 %21 to i32
%23 = add nsw i32 %22, -48
%24 = icmp ult i32 %23, 10
br i1 %24, label %18, label %25
25: ; preds = %18
switch i8 %21, label %27 [
i8 46, label %26
i8 101, label %26
i8 69, label %26
]
26: ; preds = %25, %25, %25
br label %27
27: ; preds = %25, %12, %26
%28 = phi i32 [ 0, %26 ], [ 0, %12 ], [ 1, %25 ]
ret i32 %28
}