long input_long_hex(long *result) {
  long c;
  long is_checking;
  long n;
  long ret;
  n = 0;
  is_checking = 1;
  ret = -1;
  do {
    c = *(long *)0x100000200;
    if (c == (-1))
      goto input_long_hex_exit;
    if (c == (long)'0') {
      c = *(long *)0x100000200;
      if (c == (long)'x') {
        is_checking = 0;
      } else {
        goto input_long_hex_exit;
      }
    }
  } while (is_checking == 1);
  ret = 0;
  is_checking = 1;
  n = 0;
  c = 0;
  do {
    n = n * 16 + c;
    c = *(long *)0x100000200;
    if (c == (-1))
      goto input_long_hex_exit;
    if (c < (long)'0') {
      is_checking = 0;
    } else if (c > (long)'f') {
      is_checking = 0;
    } else if (c > (long)'9') {
      if (c < (long)'a') {
        is_checking = 0;
      }
    }
    if (is_checking == 1) {
      if (c > (long)'9') {
        c = c - ((long)'a') + 10;
      } else {
        c = c - ((long)'0');
      }
    }
  } while (is_checking == 1);
input_long_hex_exit:
  *result = n;
  return ret;
}


x86 assembly (clang, -O0):
<input_long_hex>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x1,-0x18(%rbp)
movq   $0xffffffffffffffff,-0x28(%rbp)
ff
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x10(%rbp)
cmpq   $0xffffffffffffffff,-0x10(%rbp)
jne    1141 <input_long_hex+0x41>
jmp    128e <input_long_hex+0x18e>
cmpq   $0x30,-0x10(%rbp)
jne    117f <input_long_hex+0x7f>
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x10(%rbp)
cmpq   $0x78,-0x10(%rbp)
jne    1175 <input_long_hex+0x75>
movq   $0x0,-0x18(%rbp)
jmp    117a <input_long_hex+0x7a>
jmp    128e <input_long_hex+0x18e>
jmp    117f <input_long_hex+0x7f>
jmp    1184 <input_long_hex+0x84>
cmpq   $0x1,-0x18(%rbp)
je     1120 <input_long_hex+0x20>
movq   $0x0,-0x28(%rbp)
movq   $0x1,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x0,-0x10(%rbp)
mov    -0x20(%rbp),%rax
shl    $0x4,%rax
add    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x10(%rbp)
cmpq   $0xffffffffffffffff,-0x10(%rbp)
jne    11e0 <input_long_hex+0xe0>
jmp    128e <input_long_hex+0x18e>
cmpq   $0x30,-0x10(%rbp)
jge    11f8 <input_long_hex+0xf8>
movq   $0x0,-0x18(%rbp)
jmp    123d <input_long_hex+0x13d>
cmpq   $0x66,-0x10(%rbp)
jle    1210 <input_long_hex+0x110>
movq   $0x0,-0x18(%rbp)
jmp    1238 <input_long_hex+0x138>
cmpq   $0x39,-0x10(%rbp)
jle    1233 <input_long_hex+0x133>
cmpq   $0x61,-0x10(%rbp)
jge    122e <input_long_hex+0x12e>
movq   $0x0,-0x18(%rbp)
jmp    1233 <input_long_hex+0x133>
jmp    1238 <input_long_hex+0x138>
jmp    123d <input_long_hex+0x13d>
cmpq   $0x1,-0x18(%rbp)
jne    1279 <input_long_hex+0x179>
cmpq   $0x39,-0x10(%rbp)
jle    1268 <input_long_hex+0x168>
mov    -0x10(%rbp),%rax
sub    $0x61,%rax
add    $0xa,%rax
mov    %rax,-0x10(%rbp)
jmp    1274 <input_long_hex+0x174>
mov    -0x10(%rbp),%rax
sub    $0x30,%rax
mov    %rax,-0x10(%rbp)
jmp    1279 <input_long_hex+0x179>
jmp    127e <input_long_hex+0x17e>
cmpq   $0x1,-0x18(%rbp)
je     11af <input_long_hex+0xaf>
jmp    128e <input_long_hex+0x18e>
mov    -0x20(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<input_long_hex>:
movabs $0x100000200,%rax
mov    (%rax),%rax
cmp    $0xffffffffffffffff,%rax
je     1119 <input_long_hex+0x19>
cmp    $0x30,%rax
jne    1130 <input_long_hex+0x30>
movq   $0x0,(%rdi)
mov    $0xffffffffffffffff,%rax
ret
nopl   0x0(%rax,%rax,1)
jmp    1130 <input_long_hex+0x30>

LLVM IR (-O0):
define i64 @input_long_hex(i64* %0) {
%2 = alloca i64*
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
%6 = alloca i64
store i64* %0, i64** %2
store i64 0, i64* %5
store i64 1, i64* %4
store i64 -1, i64* %6
br label %7
7: ; preds = %23, %1
%8 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %8, i64* %3
%9 = load i64, i64* %3
%10 = icmp eq i64 %9, -1
br i1 %10, label %11, label %12
11: ; preds = %7
br label %73
12: ; preds = %7
%13 = load i64, i64* %3
%14 = icmp eq i64 %13, 48
br i1 %14, label %15, label %22
15: ; preds = %12
%16 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %16, i64* %3
%17 = load i64, i64* %3
%18 = icmp eq i64 %17, 120
br i1 %18, label %19, label %20
19: ; preds = %15
store i64 0, i64* %4
br label %21
20: ; preds = %15
br label %73
21: ; preds = %19
br label %22
22: ; preds = %21, %12
br label %23
23: ; preds = %22
%24 = load i64, i64* %4
%25 = icmp eq i64 %24, 1
br i1 %25, label %7, label %26
26: ; preds = %23
store i64 0, i64* %6
store i64 1, i64* %4
store i64 0, i64* %5
store i64 0, i64* %3
br label %27
27: ; preds = %69, %26
%28 = load i64, i64* %5
%29 = mul nsw i64 %28, 16
%30 = load i64, i64* %3
%31 = add nsw i64 %29, %30
store i64 %31, i64* %5
%32 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %32, i64* %3
%33 = load i64, i64* %3
%34 = icmp eq i64 %33, -1
br i1 %34, label %35, label %36
35: ; preds = %27
br label %73
36: ; preds = %27
%37 = load i64, i64* %3
%38 = icmp slt i64 %37, 48
br i1 %38, label %39, label %40
39: ; preds = %36
store i64 0, i64* %4
br label %54
40: ; preds = %36
%41 = load i64, i64* %3
%42 = icmp sgt i64 %41, 102
br i1 %42, label %43, label %44
43: ; preds = %40
store i64 0, i64* %4
br label %53
44: ; preds = %40
%45 = load i64, i64* %3
%46 = icmp sgt i64 %45, 57
br i1 %46, label %47, label %52
47: ; preds = %44
%48 = load i64, i64* %3
%49 = icmp slt i64 %48, 97
br i1 %49, label %50, label %51
50: ; preds = %47
store i64 0, i64* %4
br label %51
51: ; preds = %50, %47
br label %52
52: ; preds = %51, %44
br label %53
53: ; preds = %52, %43
br label %54
54: ; preds = %53, %39
%55 = load i64, i64* %4
%56 = icmp eq i64 %55, 1
br i1 %56, label %57, label %68
57: ; preds = %54
%58 = load i64, i64* %3
%59 = icmp sgt i64 %58, 57
br i1 %59, label %60, label %64
60: ; preds = %57
%61 = load i64, i64* %3
%62 = sub nsw i64 %61, 97
%63 = add nsw i64 %62, 10
store i64 %63, i64* %3
br label %67
64: ; preds = %57
%65 = load i64, i64* %3
%66 = sub nsw i64 %65, 48
store i64 %66, i64* %3
br label %67
67: ; preds = %64, %60
br label %68
68: ; preds = %67, %54
br label %69
69: ; preds = %68
%70 = load i64, i64* %4
%71 = icmp eq i64 %70, 1
br i1 %71, label %27, label %72
72: ; preds = %69
br label %73
73: ; preds = %72, %35, %20, %11
%74 = load i64, i64* %5
%75 = load i64*, i64** %2
store i64 %74, i64* %75
%76 = load i64, i64* %6
ret i64 %76
}

LLVM IR (-O2):
define i64 @input_long_hex(i64* nocapture writeonly %0) {
%2 = load i64, i64* inttoptr (i64 4294967808 to i64*)
switch i64 %2, label %3 [
i64 -1, label %4
i64 48, label %4
]
3: ; preds = %1, %3
br label %3
4: ; preds = %1, %1
store i64 0, i64* %0
ret i64 -1
}